// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/backend/parser.c
// Function: rule_func
_RULE_END
_RULE(func)
	_RULE_NEXT_TOKEN
	if (_RULE_TOKEN_TYPE != BE_TOKEN_KEYWORD_FUNC) {
		_RULE_NOT_MATCHED
	}

	_RULE_NODE(BE_NODE_FUNC, NULL)

	ParserASTNode *node_identifier = _RULE_NAME(identifier)(_RULE_PARSER_CTX);
	if (node_identifier != NULL) {
		_RULE_ADD_CHILD(node_identifier)
	} else {
		_RULE_NOT_MATCHED
	}
	
	ParserASTNode *node_func_params = _RULE_NAME(func_params)(_RULE_PARSER_CTX);
	if (node_func_params != NULL) {
		_RULE_ADD_CHILD(node_func_params)
	} else {
		_RULE_NOT_MATCHED
	}

	_RULE_PUSH_LEXCTX
	_RULE_NEXT_TOKEN
	if (_RULE_TOKEN_TYPE == BE_TOKEN_PNCT_COLON) {
		ParserASTNode *node_type = _RULE_NAME(type)(_RULE_PARSER_CTX);
		if (node_type != NULL) {
			_RULE_ADD_CHILD(node_type)
			_RULE_ABANDON_LEXCTX
		} else {
			_RULE_POP_LEXCTX
			_RULE_NOT_MATCHED
		}
	} else {
		_RULE_POP_LEXCTX
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x3f215
jmp 0x3f234
leaq 0x40f43(%rip), %rdi     # 0x8015f
leaq 0x4088d(%rip), %rsi     # 0x7fab0
movl $0x580, %edx            # imm = 0x580
leaq 0x41c8d(%rip), %rcx     # 0x80ebc
callq 0x30a0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x3f240
jmp 0x3f25f
leaq 0x40f4b(%rip), %rdi     # 0x80192
leaq 0x40862(%rip), %rsi     # 0x7fab0
movl $0x580, %edx            # imm = 0x580
leaq 0x41c62(%rip), %rcx     # 0x80ebc
callq 0x30a0
movq $0x0, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4cc0
movq $0x0, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4940
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
cmpq $0x0, -0x20(%rbp)
jne 0x3f2a8
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x4c(%rbp)
jmp 0x3f2b1
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl $0x3000, %eax           # imm = 0x3000
je 0x3f2c0
jmp 0x3f514
movq -0x10(%rbp), %rdi
movl $0xa00, %esi            # imm = 0xA00
leaq 0x36dc1(%rip), %rdx     # 0x76091
xorl %eax, %eax
movl %eax, %ecx
callq 0x3d980
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rdi
callq 0x44090
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x3f330
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x7e20
movq %rax, -0x18(%rbp)
jmp 0x3f335
jmp 0x3f514
movq -0x10(%rbp), %rdi
callq 0x441c0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x3f36c
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x7e20
movq %rax, -0x18(%rbp)
jmp 0x3f371
jmp 0x3f514
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4cc0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4940
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
cmpq $0x0, -0x20(%rbp)
jne 0x3f3aa
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x50(%rbp)
jmp 0x3f3b3
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %eax
cmpl $0x4003, %eax           # imm = 0x4003
jne 0x3f413
movq -0x10(%rbp), %rdi
callq 0x3fad0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x3f400
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0x7e20
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4de0
jmp 0x3f411
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
jmp 0x3f514
jmp 0x3f41f
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4cc0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4940
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
cmpq $0x0, -0x20(%rbp)
jne 0x3f458
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x54(%rbp)
jmp 0x3f461
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl $0x3008, %eax           # imm = 0x3008
jne 0x3f4b7
movq -0x10(%rbp), %rdi
movl $0x900, %esi            # imm = 0x900
leaq 0x45201(%rip), %rdx     # 0x8467c
xorl %eax, %eax
movl %eax, %ecx
callq 0x3d980
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0x7e20
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4de0
jmp 0x3f4fe
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
movq -0x10(%rbp), %rdi
callq 0x44f10
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x3f4fa
movq -0x18(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x7e20
movq %rax, -0x18(%rbp)
jmp 0x3f4fc
jmp 0x3f514
jmp 0x3f4fe
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4de0
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f528
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)