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

	_RULE_NODE(FE_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(FE_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 != FE_TOKEN_KEYWORD_ALIGN) {
		_RULE_NOT_MATCHED
	}
	
	LexerToken *tk = _RULE_TOKEN;

	_RULE_NEXT_TOKEN
	if (_RULE_TOKEN_TYPE != FE_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 0x490e5
jmp 0x49104
leaq 0x33468(%rip), %rdi     # 0x7c554
leaq 0x32d39(%rip), %rsi     # 0x7be2c
movl $0x1f3, %edx            # imm = 0x1F3
leaq 0x33fb5(%rip), %rcx     # 0x7d0b4
callq 0x30a0
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x49110
jmp 0x4912f
leaq 0x33470(%rip), %rdi     # 0x7c587
leaq 0x32d0e(%rip), %rsi     # 0x7be2c
movl $0x1f3, %edx            # imm = 0x1F3
leaq 0x33f8a(%rip), %rcx     # 0x7d0b4
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 0x49178
movl $0xffff, %eax           # imm = 0xFFFF
movl %eax, -0x34(%rbp)
jmp 0x49181
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl $0x4022, %eax           # imm = 0x4022
je 0x49190
jmp 0x49254
movq -0x10(%rbp), %rdi
movl $0x440, %esi            # imm = 0x440
leaq 0x2bf05(%rip), %rdx     # 0x750a5
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 0x441f0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x49200
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 0x4923e
movq -0x10(%rbp), %rdi
movl $0x4ff, %esi            # imm = 0x4FF
leaq 0x33ed7(%rip), %rdx     # 0x7d0e7
xorl %eax, %eax
movl %eax, %ecx
callq 0x42060
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 0x49268
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)