// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/parser.c
// Function: parser_new_node
ParserASTNode * parser_new_node(
	ParserContext *ctx,
	int type,
	char *type_name,
	LexerToken *token,
	size_t szdata,
	void *data
) {
	assert(ctx);
	if (szdata > 0) {
		assert(data != NULL);
	} else {
		assert(data == NULL);
	}

	ParserASTNode *node = (ParserASTNode *)malloc(sizeof(ParserASTNode) + szdata);
	if (node == NULL) {
		ctx->alloc_mem_error(ctx);
	}
	memcpy(&(node->data[0]), data, szdata);

	node->type = type;
	node->type_name = type_name;

	node->token = token;

	if (token != NULL) {
		node->file = token->file;
		node->line = token->line;
		node->column = token->column;
	} else {
		LexerToken *current_token = ctx->current_token;
		if (current_token != NULL) {
			node->file = current_token->file;
			node->line = current_token->line;
			node->column = current_token->column;
		} else {
			node->file = NULL;
			node->line = -1;
			node->column = -1;
		}
	}

	node->next = ctx->nodes;
	node->parent = NULL;

	ctx->nodes = node;

	node->symtbl = NULL;

	node->szchilds = 0;
	node->nchilds = 0;
	node->childs = NULL;

	node->releaser = NULL;

	return node;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0xea28
jmp 0xea47
leaq 0x3f132(%rip), %rdi     # 0x4db61
leaq 0x3ec95(%rip), %rsi     # 0x4d6cb
movl $0xd0, %edx
leaq 0x3888a(%rip), %rcx     # 0x472cc
callq 0xa0b0
cmpq $0x0, -0x28(%rbp)
jbe 0xea78
cmpq $0x0, -0x30(%rbp)
je 0xea57
jmp 0xea76
leaq 0x3882a(%rip), %rdi     # 0x47288
leaq 0x3ec66(%rip), %rsi     # 0x4d6cb
movl $0xd2, %edx
leaq 0x3885b(%rip), %rcx     # 0x472cc
callq 0xa0b0
jmp 0xeaa2
cmpq $0x0, -0x30(%rbp)
jne 0xea81
jmp 0xeaa0
leaq 0x3880d(%rip), %rdi     # 0x47295
leaq 0x3ec3c(%rip), %rsi     # 0x4d6cb
movl $0xd4, %edx
leaq 0x38831(%rip), %rcx     # 0x472cc
callq 0xa0b0
jmp 0xeaa2
movq -0x28(%rbp), %rdi
addq $0x60, %rdi
callq 0xa130
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
jne 0xeac8
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x8(%rbp), %rdi
callq *%rax
movq -0x38(%rbp), %rdi
addq $0x60, %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0xa120
movl -0xc(%rbp), %ecx
movq -0x38(%rbp), %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x10(%rax)
cmpq $0x0, -0x20(%rbp)
je 0xeb33
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x38(%rbp), %rax
movl %ecx, 0x20(%rax)
movq -0x20(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x38(%rbp), %rax
movl %ecx, 0x24(%rax)
jmp 0xeb98
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0xeb74
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x40(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x38(%rbp), %rax
movl %ecx, 0x20(%rax)
movq -0x40(%rbp), %rax
movl 0x1c(%rax), %ecx
movq -0x38(%rbp), %rax
movl %ecx, 0x24(%rax)
jmp 0xeb96
movq -0x38(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x38(%rbp), %rax
movl $0xffffffff, 0x20(%rax) # imm = 0xFFFFFFFF
movq -0x38(%rbp), %rax
movl $0xffffffff, 0x24(%rax) # imm = 0xFFFFFFFF
jmp 0xeb98
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movq $0x0, 0x30(%rax)
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x38(%rbp), %rax
movl $0x0, 0x40(%rax)
movq -0x38(%rbp), %rax
movl $0x0, 0x44(%rax)
movq -0x38(%rbp), %rax
movq $0x0, 0x48(%rax)
movq -0x38(%rbp), %rax
movq $0x0, 0x50(%rax)
movq -0x38(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)