// File: /workspace/github_cpp_makefile_star2_O1/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
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rdx
movaps %xmm0, (%rdx)
movaps %xmm0, 0x10(%rdx)
movq %rdi, (%rdx)
leaq 0x99e1(%rip), %rax      # 0x160da
movq %rax, 0x18(%rdx)
leaq 0x9a08(%rip), %rax      # 0x1610c
movq %rax, 0x10(%rdx)
leaq 0xb4599(%rip), %rsi     # 0xc0ca8
leaq 0x70(%rsp), %rdi
callq 0x29cbc
leaq 0x40(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x8c349(%rip), %rsi     # 0x98a72
leaq 0x8c347(%rip), %rdx     # 0x98a77
leaq 0x30(%rsp), %rdi
callq 0x2670a
leaq 0x1b0(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xa172
leaq 0xb3f5d(%rip), %rdx     # 0xc06b0
leaq 0x288(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x2a08c
leaq 0xf(%rsp), %rsi
movb $0x5b, (%rsi)
leaq 0x168(%rsp), %rdi
callq 0x9c3d
leaq 0xb43bc(%rip), %rdx     # 0xc0b40
leaq 0x1f8(%rsp), %rdi
leaq 0x168(%rsp), %rsi
callq 0x2a214
leaq 0xe(%rsp), %rsi
movb $0x5d, (%rsi)
leaq 0x120(%rsp), %rdi
callq 0x9c3d
leaq 0x338(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
leaq 0x120(%rsp), %rdx
callq 0x2a17a
leaq 0x410(%rsp), %rdi
leaq 0x288(%rsp), %rsi
leaq 0x338(%rsp), %rdx
callq 0x29fc4
leaq 0xb3ec1(%rip), %rdx     # 0xc06b0
leaq 0x598(%rsp), %rdi
leaq 0x410(%rsp), %rsi
callq 0x29f10
leaq 0x20(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x8a841(%rip), %rsi     # 0x97055
leaq 0x8a83c(%rip), %rdx     # 0x97057
leaq 0x10(%rsp), %rdi
callq 0x2670a
leaq 0xd8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0xa172
leaq 0x788(%rsp), %rdi
leaq 0x598(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x29de2
leaq 0xb444d(%rip), %rdx     # 0xc0ca8
leaq 0xdc0(%rsp), %rdi
leaq 0x788(%rsp), %r14
movq %r14, %rsi
callq 0x29d46
leaq 0xad8(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0xdc0(%rsp), %r15
movq %r15, %rdx
callq 0x296d8
leaq 0xff8(%rsp), %rdi
callq 0x2986a
movl $0x1f0, %r12d           # imm = 0x1F0
leaq (%r15,%r12), %rdi
callq 0x191e0
movq %r15, %rdi
callq 0x19842
addq %r14, %r12
movq %r12, %rdi
callq 0x191e0
movq %r14, %rdi
callq 0x19842
leaq 0xd8(%rsp), %rdi
callq 0x191e0
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0xc8eb
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x598(%rsp), %rdi
callq 0x19842
leaq 0x4c0(%rsp), %r14
leaq 0x550(%rsp), %rdi
callq 0x161e0
leaq 0x508(%rsp), %r15
movq %r15, %rdi
callq 0x28d5a
movq %r14, %rdi
callq 0x161e0
movq -0x58(%r15), %rax
testq %rax, %rax
je 0xc940
leaq 0x4a0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x458(%rsp), %rdi
callq 0x161e0
leaq 0x410(%rsp), %rdi
callq 0x191e0
leaq 0x3c8(%rsp), %rdi
callq 0x161e0
leaq 0x380(%rsp), %rdi
callq 0x28d5a
leaq 0x338(%rsp), %rdi
callq 0x161e0
leaq 0x120(%rsp), %rdi
callq 0x161e0
leaq 0x240(%rsp), %rdi
callq 0x28d5a
leaq 0x1f8(%rsp), %rdi
callq 0x161e0
leaq 0x168(%rsp), %rdi
callq 0x161e0
movq 0x328(%rsp), %rax
testq %rax, %rax
je 0xc9d4
leaq 0x318(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x2d0(%rsp), %rdi
callq 0x161e0
leaq 0x288(%rsp), %rdi
callq 0x191e0
leaq 0x1b0(%rsp), %rdi
callq 0x191e0
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
je 0xca12
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xc8(%rsp), %rax
testq %rax, %rax
je 0xca31
leaq 0xb8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x70(%rsp), %rdi
callq 0x2986a
leaq 0xb3c6e(%rip), %rsi     # 0xc06b0
leaq 0x788(%rsp), %rdi
leaq 0xad8(%rsp), %rdx
callq 0x2a53a
leaq 0xb3c52(%rip), %rdx     # 0xc06b0
leaq 0xdc0(%rsp), %rdi
leaq 0x788(%rsp), %rsi
callq 0x2a2e2
leaq 0x598(%rsp), %rdi
leaq 0xdc0(%rsp), %rsi
movq %rbx, %rdx
callq 0x199ce
leaq 0xdc0(%rsp), %rdi
callq 0x19e16
leaq 0x858(%rsp), %r14
leaq 0xa90(%rsp), %rdi
callq 0x2986a
leaq 0xa48(%rsp), %rdi
callq 0x191e0
movq %r14, %rdi
callq 0x19842
movq -0x10(%r14), %rax
testq %rax, %rax
je 0xcadd
leaq 0x838(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x7f0(%rsp), %r14
movq %r14, %rdi
callq 0x2986a
movq -0x10(%r14), %rax
testq %rax, %rax
je 0xcb08
leaq 0x7d0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x788(%rsp), %rdi
callq 0x161e0
movl $0x18, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x5b8(%rsp), %rdx
movq 0x5c0(%rsp), %rcx
testq %rdx, %rdx
je 0xcb40
movl 0x8(%rdx), %edx
jmp 0xcb45
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 0xcb74
movq 0x5a8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb40(%rsp), %r15
leaq 0xd78(%rsp), %rdi
callq 0x2986a
leaq 0xd30(%rsp), %rdi
callq 0x191e0
movq %r15, %rdi
callq 0x19842
movq -0x10(%r15), %rax
testq %rax, %rax
je 0xcbb9
leaq 0xb20(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0xad8(%rsp), %rdi
callq 0x2986a
movq 0x60(%rsp), %rax
testq %rax, %rax
je 0xcbdf
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 0xcdd8
jmp 0xcdd8
jmp 0xcdd8
jmp 0xcdd8
jmp 0xcdd8
jmp 0xcdd8
jmp 0xcdd8
movq %rax, %rbx
leaq 0x5a8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcc66
movq 0x5a8(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0xcc66
movq %rax, %rbx
leaq 0xdc0(%rsp), %rdi
callq 0x19e16
jmp 0xcc54
movq %rax, %rbx
leaq 0x788(%rsp), %rdi
callq 0x19ec6
jmp 0xcc66
movq %rax, %rbx
leaq 0xad8(%rsp), %rdi
callq 0x19f4a
jmp 0xcd70
movq %rax, %rbx
leaq 0xdc0(%rsp), %rdi
callq 0x1981c
jmp 0xcc8d
movq %rax, %rbx
leaq 0x978(%rsp), %rdi
callq 0x191e0
leaq 0x788(%rsp), %rdi
callq 0x19842
jmp 0xccac
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x191e0
jmp 0xccbe
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %rbp, %rdi
je 0xccda
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0xccda
movq %rax, %rbx
leaq 0x598(%rsp), %rdi
callq 0x19842
leaq 0x410(%rsp), %rdi
callq 0x198d8
leaq 0x338(%rsp), %rdi
callq 0x19944
leaq 0x120(%rsp), %rdi
callq 0x161e0
leaq 0x240(%rsp), %rdi
callq 0x28d5a
leaq 0x1f8(%rsp), %rdi
callq 0x161e0
leaq 0x168(%rsp), %rdi
callq 0x161e0
leaq 0x288(%rsp), %rdi
callq 0x19966
leaq 0x1b0(%rsp), %rdi
callq 0x191e0
movq 0x30(%rsp), %rdi
cmpq %r13, %rdi
je 0xcd66
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x70(%rsp), %rdi
callq 0x199a2
movq 0x60(%rsp), %rax
testq %rax, %rax
je 0xcd89
leaq 0x50(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %rbx, %rdi
callq 0x53d0
movq %rax, %rbx
jmp 0xcce7
movq %rax, %rbx
jmp 0xccf4
movq %rax, %rbx
jmp 0xcd01
movq %rax, %rbx
jmp 0xcd0e
movq %rax, %rbx
jmp 0xcd28
movq %rax, %rbx
jmp 0xcd35
movq %rax, %rbx
jmp 0xcd42
movq %rax, %rbx
jmp 0xcd4f
movq %rax, %rbx
jmp 0xcd66
movq %rax, %rbx
jmp 0xcd70
movq %rax, %rdi
callq 0x266fe