// File: /workspace/github_c_makefile_star2_O2/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 0x202c0
testq %rdx, %rdx
je 0x202d9
movl %esi, %eax
andl $0xff00, %eax           # imm = 0xFF00
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x20210
leaq -0x30(%rbp), %r9
movb $0x0, (%r9)
andq $0x0, 0x8(%r9)
andl $0x0, 0xf(%r9)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r9)
pushq $0x30
popq %r8
callq 0x60f4
addq $0x30, %rsp
popq %rbp
retq
cmpl $0xa00, %esi            # imm = 0xA00
je 0x202aa
cmpl $0xa02, %esi            # imm = 0xA02
je 0x20259
cmpl $0xd00, %esi            # imm = 0xD00
je 0x2027f
cmpl $0xc01, %esi            # imm = 0xC01
je 0x2026c
cmpl $0xc00, %esi            # imm = 0xC00
jne 0x2029a
leaq -0x30(%rbp), %r9
movb $0x0, (%r9)
andq $0x0, 0x8(%r9)
andl $0x0, 0x10(%r9)
pushq $0x18
popq %r8
movl $0xc00, %esi            # imm = 0xC00
jmp 0x20205
leaq -0x30(%rbp), %r9
andq $0x0, (%r9)
pushq $0x8
popq %r8
movl $0xa02, %esi            # imm = 0xA02
jmp 0x20205
leaq -0x30(%rbp), %r9
andq $0x0, (%r9)
pushq $0x8
popq %r8
movl $0xc01, %esi            # imm = 0xC01
jmp 0x20205
leaq -0x30(%rbp), %r9
andq $0x0, (%r9)
movb $0x0, 0x8(%r9)
pushq $0x10
popq %r8
movl $0xd00, %esi            # imm = 0xD00
jmp 0x20205
xorl %r8d, %r8d
xorl %r9d, %r9d
addq $0x30, %rsp
popq %rbp
jmp 0x60f4
leaq -0x30(%rbp), %r9
andq $0x0, (%r9)
pushq $0x8
popq %r8
movl $0xa00, %esi            # imm = 0xA00
jmp 0x20205
leaq 0x1cb0d(%rip), %rdi     # 0x3cdd4
leaq 0x25f8a(%rip), %rsi     # 0x46258
leaq 0x265df(%rip), %rcx     # 0x468b4
pushq $0x18
jmp 0x202f0
leaq 0x2661d(%rip), %rdi     # 0x468fd
leaq 0x25f71(%rip), %rsi     # 0x46258
leaq 0x265c6(%rip), %rcx     # 0x468b4
pushq $0x19
popq %rdx
callq 0x30a0