// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/parser.c
// Function: fe_parser_add_func_symbol_to_node
ParserSymbol * fe_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);

	FeParserFuncSymbolData 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, FE_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, FE_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,
		FE_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 0x431cd
jmp 0x431ec
leaq 0x39382(%rip), %rdi     # 0x7c556
leaq 0x38c51(%rip), %rsi     # 0x7be2c
movl $0x9bc, %edx            # imm = 0x9BC
leaq 0x39200(%rip), %rcx     # 0x7c3e7
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x431f5
jmp 0x43214
leaq 0x32dd7(%rip), %rdi     # 0x75fd3
leaq 0x38c29(%rip), %rsi     # 0x7be2c
movl $0x9bd, %edx            # imm = 0x9BD
leaq 0x391d8(%rip), %rcx     # 0x7c3e7
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x4321d
jmp 0x4323c
leaq 0x3bf18(%rip), %rdi     # 0x7f13c
leaq 0x38c01(%rip), %rsi     # 0x7be2c
movl $0x9be, %edx            # imm = 0x9BE
leaq 0x391b0(%rip), %rcx     # 0x7c3e7
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x43245
jmp 0x43264
leaq 0x39224(%rip), %rdi     # 0x7c470
leaq 0x38bd9(%rip), %rsi     # 0x7be2c
movl $0x9bf, %edx            # imm = 0x9BF
leaq 0x39188(%rip), %rcx     # 0x7c3e7
callq 0x30a0
movq -0x20(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
movb %al, -0x38(%rbp)
movl $0x0, -0x34(%rbp)
movq -0x8(%rbp), %rdi
movl $0x430, %esi            # imm = 0x430
leaq 0x31f1d(%rip), %rdx     # 0x751b0
xorl %eax, %eax
movl %eax, %ecx
callq 0x42060
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x7e20
cmpq $0x0, -0x28(%rbp)
je 0x432c9
movq -0x8(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x7e20
movq -0x60(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movl $0x440, %esi            # imm = 0x440
leaq 0x31dc4(%rip), %rdx     # 0x750a5
xorl %eax, %eax
movl %eax, %ecx
callq 0x42060
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
callq 0x7e20
movq -0x68(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rcx
movl $0x3, %edx
movl $0x28, %r8d
leaq -0x58(%rbp), %r9
callq 0x83f0
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)