// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/backend/parser.c
// Function: rule_type_pointer
_RULE_NOT_MATCHED
	}

	_RULE_NODE(BE_NODE_TYPE_POINTER, NULL)

	ParserASTNode *node_type = _RULE_NAME(type)(_RULE_PARSER_CTX);
	if (node_type != NULL) {
		_RULE_ADD_CHILD(node_type)
	} else {
		// _RULE_NOT_MATCHED
		ParserASTNode *node_void = _RULE_NEW_NODE(BE_NODE_TYPE_VOID, NULL);
		_RULE_ADD_CHILD(node_void)
	}
_RULE_END

_RULE(type)
	if (_RULE_CURRENT_NODE == NULL) {
		_RULE_RETURNED_NODE(_RULE_NAME(type_simple)(_RULE_PARSER_CTX))
	}

	if (_RULE_CURRENT_NODE == NULL) {
		_RULE_RETURNED_NODE(_RULE_NAME(type_struct)(_RULE_PARSER_CTX))
	}

	if (_RULE_CURRENT_NODE == NULL) {
		_RULE_RETURNED_NODE(_RULE_NAME(type_array)(_RULE_PARSER_CTX))
	}

	if (_RULE_CURRENT_NODE == NULL) {
		_RULE_RETURNED_NODE(_RULE_NAME(type_func)(_RULE_PARSER_CTX))
	}

	if (_RULE_CURRENT_NODE == NULL) {
		_RULE_RETURNED_NODE(_RULE_NAME(type_pointer)(_RULE_PARSER_CTX))
	}
_RULE_END

_RULE(attr_align)
	_RULE_NEXT_TOKEN
	if (_RULE_TOKEN_TYPE != BE_TOKEN_KEYWORD_ALIGN) {
		_RULE_NOT_MATCHED
	}
	
	LexerToken *tk = _RULE_TOKEN;

	_RULE_NEXT_TOKEN
	if (_RULE_TOKEN_TYPE != BE_TOKEN_PNCT_PARENTHESES_LEFT) {
		_RULE_NOT_MATCHED
	}

	ParserASTNode *type_or_expr = _RULE_NAME(expr)(_RULE_PARSER_CTX);
	if (type_or_expr == NULL) {
		type_or_expr = _RULE_NAME(type)(_RULE_PARSER_CTX);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x43ef5
jmp 0x43f14
leaq 0x3c263(%rip), %rdi     # 0x8015f
leaq 0x3bbad(%rip), %rsi     # 0x7fab0
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x3ce08(%rip), %rcx     # 0x80d17
callq 0x30a0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x43f20
jmp 0x43f3f
leaq 0x3c26b(%rip), %rdi     # 0x80192
leaq 0x3bb82(%rip), %rsi     # 0x7fab0
movl $0x4b0, %edx            # imm = 0x4B0
leaq 0x3cddd(%rip), %rcx     # 0x80d17
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 0x43f88
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x34(%rbp)
jmp 0x43f91
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl $0x4016, %eax           # imm = 0x4016
je 0x43fa0
jmp 0x44064
movq -0x10(%rbp), %rdi
movl $0x440, %esi            # imm = 0x440
leaq 0x35417(%rip), %rdx     # 0x793c7
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 0x3fad0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x44010
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 0x4404e
movq -0x10(%rbp), %rdi
movl $0x4ff, %esi            # imm = 0x4FF
leaq 0x3cd2a(%rip), %rdx     # 0x80d4a
xorl %eax, %eax
movl %eax, %ecx
callq 0x3d980
movq %rax, -0x30(%rbp)
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)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4de0
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x44078
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4d50
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)