// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/backend/parser.c
// Function: new_node
static ParserASTNode * _new_node(
	ParserContext *ctx,
	int32_t type,
	char *type_name,
	LexerToken *token
) {
	assert(ctx);
	assert(type_name);

	if (BE_IS_EXPR_NODE(type)) {
		BeParserExprASTNodeData data;
		data.type = BE_TYPE_UNKNOWN;
		data.type_node = NULL;

		data.constant = false;
		data.constant_type = BE_TYPE_UNKNOWN;

		data.has_conststr = false;
		data.conststr.str = NULL;
		data.conststr.len = 0;

		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserExprASTNodeData), &data
		);
	} else if (type == BE_NODE_VAR) {
		BeParserVarASTNodeData data;
		data.type = BE_VAR_TYPE_UNKNOWN;
		data.align_node = NULL;
		data.align = 0;
		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserVarASTNodeData), &data
		);
	} else if (type == BE_NODE_VAR_ITEM) {
		BeParserVarItemASTNodeData data;
		data.symbol = NULL;
		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserVarItemASTNodeData), &data
		);
	} else if (type == BE_NODE_FUNC) {
		BeParserFuncASTNodeData data;
		data.symbol = NULL;
		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserFuncASTNodeData), &data
		);
	} else if (type == BE_NODE_FUNC_PARAMS_ITEM) {
		BeParserFuncParamASTNodeData data;
		data.symbol = NULL;
		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserFuncParamASTNodeData), &data
		);
	} else if (type == BE_NODE_STRUCT) {
		BeParserStructASTNodeData data;

		data.packed_node = NULL;
		data.packed = false;

		return parser_new_node(
			ctx, type, type_name, token, sizeof(BeParserStructASTNodeData), &data
		);
	} else {
		return parser_new_node(
			ctx, type, type_name, token, 0, NULL
		);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
testq %rdi, %rdi
je 0x2235b
testq %rdx, %rdx
je 0x2237a
movl %esi, %eax
andl $0xff00, %eax           # imm = 0xFF00
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x22284
leaq -0x30(%rbp), %r9
movb $0x0, (%r9)
movq $0x0, 0x8(%r9)
movl $0x0, 0xf(%r9)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r9)
movl $0x30, %r8d
callq 0x65b1
addq $0x30, %rsp
popq %rbp
retq
cmpl $0xbff, %esi            # imm = 0xBFF
jle 0x222cd
cmpl $0xd00, %esi            # imm = 0xD00
je 0x222f5
cmpl $0xc01, %esi            # imm = 0xC01
je 0x22315
cmpl $0xc00, %esi            # imm = 0xC00
jne 0x2234b
leaq -0x30(%rbp), %r9
movb $0x0, (%r9)
movq $0x0, 0x8(%r9)
movl $0x0, 0x10(%r9)
movl $0x18, %r8d
movl $0xc00, %esi            # imm = 0xC00
jmp 0x22279
cmpl $0xa00, %esi            # imm = 0xA00
je 0x22330
cmpl $0xa02, %esi            # imm = 0xA02
jne 0x2234b
leaq -0x30(%rbp), %r9
movq $0x0, (%r9)
movl $0x8, %r8d
movl $0xa02, %esi            # imm = 0xA02
jmp 0x22279
leaq -0x30(%rbp), %r9
movq $0x0, (%r9)
movb $0x0, 0x8(%r9)
movl $0x10, %r8d
movl $0xd00, %esi            # imm = 0xD00
jmp 0x22279
leaq -0x30(%rbp), %r9
movq $0x0, (%r9)
movl $0x8, %r8d
movl $0xc01, %esi            # imm = 0xC01
jmp 0x22279
leaq -0x30(%rbp), %r9
movq $0x0, (%r9)
movl $0x8, %r8d
movl $0xa00, %esi            # imm = 0xA00
jmp 0x22279
xorl %r8d, %r8d
xorl %r9d, %r9d
addq $0x30, %rsp
popq %rbp
jmp 0x65b1
leaq 0x1da52(%rip), %rdi     # 0x3fdb4
leaq 0x26ebf(%rip), %rsi     # 0x49228
leaq 0x27514(%rip), %rcx     # 0x49884
movl $0x18, %edx
callq 0x30a0
leaq 0x2754c(%rip), %rdi     # 0x498cd
leaq 0x26ea0(%rip), %rsi     # 0x49228
leaq 0x274f5(%rip), %rcx     # 0x49884
movl $0x19, %edx
callq 0x30a0