// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/backend/parser.c
// Function: be_parser_add_func_symbol_to_node
ParserSymbol * be_parser_add_func_symbol_to_node(
	ParserContext *ctx,
	ParserASTNode *node,
	LexerToken *token,
	ParserASTNode *params_node,
	ParserASTNode *return_type_node,
	bool dummy
) {
	assert(ctx);
	assert(node);
	assert(token);
	assert(params_node);

	BeParserFuncSymbolData data;
	data.params_node = params_node;
	data.return_type_node = return_type_node;
	data.dummy = dummy;
	data.counter = 0;

	ParserASTNode *func_type_node = _NEW_NODE(ctx, BE_NODE_TYPE_FUNC, NULL);
	parser_add_child(ctx, func_type_node, params_node);
	if (return_type_node != NULL) {
		parser_add_child(ctx, func_type_node, return_type_node);
	}

	data.func_type_node = func_type_node;

	ParserASTNode *func_pointer_type_node = _NEW_NODE(ctx, BE_NODE_TYPE_POINTER, NULL);
	parser_add_child(ctx, func_pointer_type_node, func_type_node);

	data.func_pointer_type_node = func_pointer_type_node;

	return parser_add_symbol_to_node(
		ctx,
		node,
		BE_SYM_FUNC,
		token,
		sizeof(data),
		&data
	);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movb %r9b, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
andb $0x1, %al
movb %al, -0x29(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x3eaad
jmp 0x3eacc
leaq 0x416ad(%rip), %rdi     # 0x80161
leaq 0x40ff5(%rip), %rsi     # 0x7fab0
movl $0xa45, %edx            # imm = 0xA45
leaq 0x41519(%rip), %rcx     # 0x7ffe0
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x3ead5
jmp 0x3eaf4
leaq 0x37a80(%rip), %rdi     # 0x7655c
leaq 0x40fcd(%rip), %rsi     # 0x7fab0
movl $0xa46, %edx            # imm = 0xA46
leaq 0x414f1(%rip), %rcx     # 0x7ffe0
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x3eafd
jmp 0x3eb1c
leaq 0x33a32(%rip), %rdi     # 0x72536
leaq 0x40fa5(%rip), %rsi     # 0x7fab0
movl $0xa47, %edx            # imm = 0xA47
leaq 0x414c9(%rip), %rcx     # 0x7ffe0
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x3eb25
jmp 0x3eb44
leaq 0x4153d(%rip), %rdi     # 0x80069
leaq 0x40f7d(%rip), %rsi     # 0x7fab0
movl $0xa48, %edx            # imm = 0xA48
leaq 0x414a1(%rip), %rcx     # 0x7ffe0
callq 0x30a0
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x58(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
movb %al, -0x40(%rbp)
movl $0x0, -0x3c(%rbp)
movq -0x8(%rbp), %rdi
movl $0x430, %esi            # imm = 0x430
leaq 0x41502(%rip), %rdx     # 0x80075
xorl %eax, %eax
movl %eax, %ecx
callq 0x3d980
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x7e20
cmpq $0x0, -0x28(%rbp)
je 0x3eba9
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x7e20
movq -0x68(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rdi
movl $0x440, %esi            # imm = 0x440
leaq 0x3a806(%rip), %rdx     # 0x793c7
xorl %eax, %eax
movl %eax, %ecx
callq 0x3d980
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
callq 0x7e20
movq -0x70(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rcx
movl $0x3, %edx
movl $0x30, %r8d
leaq -0x60(%rbp), %r9
callq 0x83f0
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)