// File: /workspace/github_cpp_makefile_star2_O3/sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_type_fn(input_t*)
pair<int, pl0_ast_type *> pl0_type_fn(input_t *text) {
    function<pair<pl0_ast_constv *, pl0_ast_primitive_type *> (pl0_ast_primitive_type *)> fn = [&, text](pl0_ast_primitive_type *t) { return make_pair(new pl0_ast_constv(text->locate(), -1, pl0_ast_constv::INT), t); };
    auto parser = (pl0_primitive_type / fn) // not array
        | ((pl0_string_literal("array") >> spaces >> (pl0_character('[') >> pl0_unsigned << pl0_character(']')) << spaces << pl0_string_literal("of")) + pl0_primitive_type); // array
    auto res = (spaces >> parser << spaces)(text);
    if (verbose) {
        cout << "parsing: Type" << endl;
    }
    return make_pair(std::get<0>(res), new pl0_ast_type(text->locate(), std::get<1>(res).second, std::get<1>(res).first ? std::get<1>(res).first->val : -1));
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1178, %rsp           # imm = 0x1178
movq %rdi, %rbx
leaq 0x50(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %rdi, (%rdx)
leaq 0x98e1(%rip), %rax      # 0x160f2
movq %rax, 0x18(%rdx)
leaq 0x9906(%rip), %rax      # 0x16122
movq %rax, 0x10(%rdx)
leaq 0xae481(%rip), %rsi     # 0xbaca8
leaq 0x70(%rsp), %rdi
callq 0x28918
leaq 0x40(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x86231(%rip), %rsi     # 0x92a72
leaq 0x8622f(%rip), %rdx     # 0x92a77
leaq 0x30(%rsp), %rdi
callq 0x253d0
leaq 0x1b0(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xa299
leaq 0xade45(%rip), %rdx     # 0xba6b0
leaq 0x288(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x28ce8
leaq 0xf(%rsp), %rsi
movb $0x5b, (%rsi)
leaq 0x168(%rsp), %rdi
callq 0x9d54
leaq 0xae2a4(%rip), %rdx     # 0xbab40
leaq 0x1f8(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x28e70
leaq 0xe(%rsp), %rsi
movb $0x5d, (%rsi)
leaq 0x120(%rsp), %rdi
callq 0x9d54
leaq 0x338(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
leaq 0x120(%rsp), %rdx
callq 0x28dd6
leaq 0x410(%rsp), %rdi
leaq 0x288(%rsp), %rsi
leaq 0x338(%rsp), %rdx
callq 0x28c20
leaq 0xadda9(%rip), %rdx     # 0xba6b0
leaq 0x598(%rsp), %rdi
leaq 0x410(%rsp), %rsi
callq 0x28b6c
leaq 0x20(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x84729(%rip), %rsi     # 0x91055
leaq 0x84724(%rip), %rdx     # 0x91057
leaq 0x10(%rsp), %rdi
callq 0x253d0
leaq 0xd8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xa299
leaq 0x788(%rsp), %rdi
leaq 0x598(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x28a3e
leaq 0xae335(%rip), %rdx     # 0xbaca8
leaq 0xdc0(%rsp), %rdi
leaq 0x788(%rsp), %r14
movq %r14, %rsi
callq 0x289a2
leaq 0xad8(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0xdc0(%rsp), %r15
movq %r15, %rdx
callq 0x28344
leaq 0xff8(%rsp), %rdi
callq 0x284ce
movl $0x1f0, %r12d           # imm = 0x1F0
leaq (%r15,%r12), %rdi
callq 0x18eaa
movq %r15, %rdi
callq 0x1950c
addq %r14, %r12
movq %r12, %rdi
callq 0x18eaa
movq %r14, %rdi
callq 0x1950c
leaq 0xd8(%rsp), %rdi
callq 0x18eaa
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0xca03
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x598(%rsp), %rdi
callq 0x1950c
leaq 0x4c0(%rsp), %r14
leaq 0x550(%rsp), %rdi
callq 0x161f6
leaq 0x508(%rsp), %r15
movq %r15, %rdi
callq 0x279de
movq %r14, %rdi
callq 0x161f6
movq -0x58(%r15), %rax
testq %rax, %rax
je 0xca58
leaq 0x4a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x458(%rsp), %rdi
callq 0x161f6
leaq 0x410(%rsp), %rdi
callq 0x18eaa
leaq 0x3c8(%rsp), %rdi
callq 0x161f6
leaq 0x380(%rsp), %rdi
callq 0x279de
leaq 0x338(%rsp), %rdi
callq 0x161f6
leaq 0x120(%rsp), %rdi
callq 0x161f6
leaq 0x240(%rsp), %rdi
callq 0x279de
leaq 0x1f8(%rsp), %rdi
callq 0x161f6
leaq 0x168(%rsp), %rdi
callq 0x161f6
movq 0x328(%rsp), %rax
testq %rax, %rax
je 0xcaec
leaq 0x318(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x2d0(%rsp), %rdi
callq 0x161f6
leaq 0x288(%rsp), %rdi
callq 0x18eaa
leaq 0x1b0(%rsp), %rdi
callq 0x18eaa
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
je 0xcb2a
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xc8(%rsp), %rax
testq %rax, %rax
je 0xcb49
leaq 0xb8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x70(%rsp), %rdi
callq 0x284ce
leaq 0xadb56(%rip), %rsi     # 0xba6b0
leaq 0x788(%rsp), %rdi
leaq 0xad8(%rsp), %rdx
callq 0x29196
leaq 0xadb3a(%rip), %rdx     # 0xba6b0
leaq 0xdc0(%rsp), %rdi
leaq 0x788(%rsp), %rsi
callq 0x28f3e
leaq 0x598(%rsp), %rdi
leaq 0xdc0(%rsp), %rsi
movq %rbx, %rdx
callq 0x19698
leaq 0xdc0(%rsp), %rdi
callq 0x199f2
leaq 0x858(%rsp), %r14
leaq 0xa90(%rsp), %rdi
callq 0x284ce
leaq 0xa48(%rsp), %rdi
callq 0x18eaa
movq %r14, %rdi
callq 0x1950c
movq -0x10(%r14), %rax
testq %rax, %rax
je 0xcbf5
leaq 0x838(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x7f0(%rsp), %r14
movq %r14, %rdi
callq 0x284ce
movq -0x10(%r14), %rax
testq %rax, %rax
je 0xcc20
leaq 0x7d0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x788(%rsp), %rdi
callq 0x161f6
movl $0x18, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x5b8(%rsp), %rdx
movq 0x5c0(%rsp), %rcx
testq %rdx, %rdx
je 0xcc58
movl 0x8(%rdx), %edx
jmp 0xcc5d
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movq %rax, (%r14)
movq %rcx, 0x8(%r14)
movl %edx, 0x10(%r14)
leaq 0x5a8(%rsp), %rax
movl 0x20(%rax), %ebx
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcc8c
movq 0x5a8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb40(%rsp), %r15
leaq 0xd78(%rsp), %rdi
callq 0x284ce
leaq 0xd30(%rsp), %rdi
callq 0x18eaa
movq %r15, %rdi
callq 0x1950c
movq -0x10(%r15), %rax
testq %rax, %rax
je 0xccd1
leaq 0xb20(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0xad8(%rsp), %rdi
callq 0x284ce
movq 0x60(%rsp), %rax
testq %rax, %rax
je 0xccf7
leaq 0x50(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movl %ebx, %eax
movq %r14, %rdx
addq $0x1178, %rsp           # imm = 0x1178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xcef0
jmp 0xcef0
jmp 0xcef0
jmp 0xcef0
jmp 0xcef0
jmp 0xcef0
jmp 0xcef0
movq %rax, %rbx
leaq 0x5a8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcd7e
movq 0x5a8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0xcd7e
movq %rax, %rbx
leaq 0xdc0(%rsp), %rdi
callq 0x199f2
jmp 0xcd6c
movq %rax, %rbx
leaq 0x788(%rsp), %rdi
callq 0x19aa2
jmp 0xcd7e
movq %rax, %rbx
leaq 0xad8(%rsp), %rdi
callq 0x19b26
jmp 0xce88
movq %rax, %rbx
leaq 0xdc0(%rsp), %rdi
callq 0x194e6
jmp 0xcda5
movq %rax, %rbx
leaq 0x978(%rsp), %rdi
callq 0x18eaa
leaq 0x788(%rsp), %rdi
callq 0x1950c
jmp 0xcdc4
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x18eaa
jmp 0xcdd6
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0xcdf2
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0xcdf2
movq %rax, %rbx
leaq 0x598(%rsp), %rdi
callq 0x1950c
leaq 0x410(%rsp), %rdi
callq 0x195a2
leaq 0x338(%rsp), %rdi
callq 0x1960e
leaq 0x120(%rsp), %rdi
callq 0x161f6
leaq 0x240(%rsp), %rdi
callq 0x279de
leaq 0x1f8(%rsp), %rdi
callq 0x161f6
leaq 0x168(%rsp), %rdi
callq 0x161f6
leaq 0x288(%rsp), %rdi
callq 0x19630
leaq 0x1b0(%rsp), %rdi
callq 0x18eaa
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
je 0xce7e
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x70(%rsp), %rdi
callq 0x1966c
movq 0x60(%rsp), %rax
testq %rax, %rax
je 0xcea1
leaq 0x50(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %rbx, %rdi
callq 0x53d0
movq %rax, %rbx
jmp 0xcdff
movq %rax, %rbx
jmp 0xce0c
movq %rax, %rbx
jmp 0xce19
movq %rax, %rbx
jmp 0xce26
movq %rax, %rbx
jmp 0xce40
movq %rax, %rbx
jmp 0xce4d
movq %rax, %rbx
jmp 0xce5a
movq %rax, %rbx
jmp 0xce67
movq %rax, %rbx
jmp 0xce7e
movq %rax, %rbx
jmp 0xce88
movq %rax, %rdi
callq 0x253c4