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

	_RULE_NODE(FE_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 == FE_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 0x43935
jmp 0x43954
leaq 0x38c18(%rip), %rdi     # 0x7c554
leaq 0x384e9(%rip), %rsi     # 0x7be2c
movl $0x2c3, %edx            # imm = 0x2C3
leaq 0x3990a(%rip), %rcx     # 0x7d259
callq 0x30a0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x43960
jmp 0x4397f
leaq 0x38c20(%rip), %rdi     # 0x7c587
leaq 0x384be(%rip), %rsi     # 0x7be2c
movl $0x2c3, %edx            # imm = 0x2C3
leaq 0x398df(%rip), %rcx     # 0x7d259
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 0x439c8
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x4c(%rbp)
jmp 0x439d1
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl $0x3000, %eax           # imm = 0x3000
je 0x439e0
jmp 0x43c34
movq -0x10(%rbp), %rdi
movl $0xa00, %esi            # imm = 0xA00
leaq 0x32771(%rip), %rdx     # 0x76161
xorl %eax, %eax
movl %eax, %ecx
callq 0x42060
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 0x47d60
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x43a50
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 0x43a55
jmp 0x43c34
movq -0x10(%rbp), %rdi
callq 0x49280
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x43a8c
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 0x43a91
jmp 0x43c34
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 0x43aca
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x50(%rbp)
jmp 0x43ad3
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %eax
cmpl $0x4003, %eax           # imm = 0x4003
jne 0x43b33
movq -0x10(%rbp), %rdi
callq 0x441f0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x43b20
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 0x43b31
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
jmp 0x43c34
jmp 0x43b3f
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 0x43b78
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x54(%rbp)
jmp 0x43b81
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl $0x3013, %eax           # imm = 0x3013
jne 0x43bd7
movq -0x10(%rbp), %rdi
movl $0x900, %esi            # imm = 0x900
leaq 0x3c7d3(%rip), %rdx     # 0x8036e
xorl %eax, %eax
movl %eax, %ecx
callq 0x42060
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 0x43c1e
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
movq -0x10(%rbp), %rdi
callq 0x49fd0
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x43c1a
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 0x43c1c
jmp 0x43c34
jmp 0x43c1e
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4de0
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x43c48
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)