// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_factor_fn(input_t*)
pair<int, pl0_ast_factor *> pl0_factor_fn(input_t *text) {
    auto res1 = (pl0_identify + (pl0_character('[') >> pl0_expression << pl0_character(']') << spaces))(text);
    pair<int, pl0_ast_factor *> ans;
    if (std::get<0>(res1) != -1) {
        ans = make_pair(std::get<0>(res1), new pl0_ast_factor(text->locate(), std::get<1>(res1)));
    }
    else {
        auto res2 = (spaces >> pl0_character('(') >> (spaces >> pl0_expression << spaces) << pl0_character(')') << spaces)(text);
        if (std::get<0>(res2) != -1) {
            ans = make_pair(std::get<0>(res2), new pl0_ast_factor(text->locate(), pl0_ast_factor::type_t::EXPR, std::get<1>(res2)));
        }
        else {
            auto res3 = (spaces >> pl0_unsigned << spaces)(text);
            if (std::get<0>(res3) != -1) {
                ans = make_pair(std::get<0>(res3), new pl0_ast_factor(text->locate(), pl0_ast_factor::type_t::UNSIGNED, std::get<1>(res3)));
            }
            else {
                auto res4 = (spaces >> pl0_call_func << spaces)(text);
                if (std::get<0>(res4) != -1) {
                    ans = make_pair(std::get<0>(res4), new pl0_ast_factor(text->locate(), pl0_ast_factor::type_t::CALL_FUNC, std::get<1>(res4)));
                }
                else {
                    auto res5 = (spaces >> pl0_identify << spaces)(text);
                    ans = make_pair(std::get<0>(res5), new pl0_ast_factor(text->locate(), pl0_ast_factor::type_t::ID, std::get<1>(res5)));
                }
            }
        }
    }
    if (verbose) {
        cout << "parsing: Factor" << endl;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x9d0, %rsp            # imm = 0x9D0
movq %rdi, %rbx
leaq 0x288(%rsp), %rsi
movb $0x5b, (%rsi)
leaq 0x78(%rsp), %r14
movq %r14, %rdi
callq 0x9c3d
leaq 0xb04e9(%rip), %rdx     # 0xc1008
leaq 0x128(%rsp), %rdi
movq %r14, %rsi
callq 0x2e894
leaq 0x240(%rsp), %rsi
movb $0x5d, (%rsi)
leaq 0x548(%rsp), %rdi
callq 0x9c3d
leaq 0x808(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x548(%rsp), %rdx
callq 0x2e7fa
leaq 0xafb45(%rip), %rdx     # 0xc06b0
leaq 0x5f8(%rsp), %rdi
leaq 0x808(%rsp), %r14
movq %r14, %rsi
callq 0x2fea2
leaq 0xafffe(%rip), %rsi     # 0xc0b88
leaq 0x2d0(%rsp), %rdi
leaq 0x5f8(%rsp), %r15
movq %r15, %rdx
callq 0x2fcdc
leaq 0x40(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
movq %rbx, %rdx
callq 0x201f0
movq 0x448(%rsp), %rax
testq %rax, %rax
je 0x10bd6
leaq 0x438(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x318(%rsp), %r12
leaq 0x3f0(%rsp), %rdi
callq 0x161e0
leaq 0x3a8(%rsp), %rdi
callq 0x161e0
leaq 0x360(%rsp), %rdi
callq 0x26654
movq %r12, %rdi
callq 0x161e0
leaq 0x2d0(%rsp), %rdi
callq 0x2ab4e
movq 0x728(%rsp), %rax
testq %rax, %rax
je 0x10c39
leaq 0x718(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x6d0(%rsp), %rdi
callq 0x161e0
movl $0x90, %r12d
leaq (%r15,%r12), %rdi
callq 0x161e0
leaq 0x640(%rsp), %rdi
callq 0x26654
movq %r15, %rdi
callq 0x161e0
addq %r14, %r12
movq %r12, %rdi
callq 0x161e0
leaq 0x850(%rsp), %rdi
callq 0x26654
movq %r14, %rdi
callq 0x161e0
leaq 0x548(%rsp), %rdi
callq 0x161e0
leaq 0x170(%rsp), %rdi
callq 0x26654
leaq 0x128(%rsp), %rdi
callq 0x161e0
leaq 0x78(%rsp), %rdi
callq 0x161e0
movl 0x70(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x10cef
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq %rax, (%r14)
movl $0x5, 0x8(%r14)
movups 0x60(%rsp), %xmm0
movups %xmm0, 0x18(%r14)
jmp 0x112cb
leaq 0xf(%rsp), %rsi
movb $0x28, (%rsi)
leaq 0x288(%rsp), %rdi
callq 0x9c3d
leaq 0xaf9a5(%rip), %rsi     # 0xc06b0
leaq 0x78(%rsp), %rdi
leaq 0x288(%rsp), %rdx
callq 0x30538
leaq 0xaf98c(%rip), %rsi     # 0xc06b0
leaq 0xb02dd(%rip), %rdx     # 0xc1008
leaq 0x548(%rsp), %rdi
callq 0x306da
leaq 0xaf971(%rip), %rdx     # 0xc06b0
leaq 0x128(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x30626
leaq 0x808(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0x128(%rsp), %rdx
callq 0x30454
leaq 0xe(%rsp), %rsi
movb $0x29, (%rsi)
leaq 0x240(%rsp), %rdi
callq 0x9c3d
leaq 0x5f8(%rsp), %rdi
leaq 0x808(%rsp), %rsi
leaq 0x240(%rsp), %rdx
callq 0x303c4
leaq 0xaf909(%rip), %rdx     # 0xc06b0
leaq 0x2d0(%rsp), %rdi
leaq 0x5f8(%rsp), %r14
movq %r14, %rsi
callq 0x2ffda
leaq 0x10(%rsp), %rdi
leaq 0x2d0(%rsp), %r15
movq %r15, %rsi
movq %rbx, %rdx
callq 0x207c2
movq 0x538(%rsp), %rax
testq %rax, %rax
je 0x10df6
leaq 0x528(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x4e0(%rsp), %rdi
callq 0x161e0
movl $0x1c8, %r12d           # imm = 0x1C8
leaq (%r15,%r12), %rdi
callq 0x161e0
movq %r15, %rdi
callq 0x20c38
addq %r14, %r12
movq %r12, %rdi
callq 0x161e0
movq %r14, %rdi
callq 0x20c38
leaq 0x240(%rsp), %rdi
callq 0x161e0
leaq 0x808(%rsp), %rdi
callq 0x20c38
movq 0x230(%rsp), %rax
testq %rax, %rax
je 0x10e66
leaq 0x220(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x1d8(%rsp), %rdi
callq 0x161e0
leaq 0x190(%rsp), %r14
movq %r14, %rdi
callq 0x26654
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x10e9e
leaq 0x170(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x128(%rsp), %rdi
callq 0x161e0
leaq 0x5b0(%rsp), %r14
movq %r14, %rdi
callq 0x26654
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x10ed6
leaq 0x590(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x548(%rsp), %rdi
callq 0x161e0
leaq 0xe0(%rsp), %r14
movq %r14, %rdi
callq 0x161e0
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x10f0e
leaq 0xc0(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x78(%rsp), %rdi
callq 0x161e0
leaq 0x288(%rsp), %rdi
callq 0x161e0
movl 0x38(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x10f60
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x30(%rsp), %rcx
movq %rax, (%r14)
movl $0x3, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rcx, 0x10(%r14)
jmp 0x112b0
leaq 0xaf749(%rip), %rsi     # 0xc06b0
leaq 0xafbd2(%rip), %rdx     # 0xc0b40
leaq 0x5f8(%rsp), %rdi
callq 0x30966
leaq 0xaf72e(%rip), %rdx     # 0xc06b0
leaq 0x2d0(%rsp), %rdi
leaq 0x5f8(%rsp), %rsi
callq 0x307c8
leaq 0x808(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
movq %rbx, %rdx
callq 0x20d9c
movq 0x3d8(%rsp), %rax
testq %rax, %rax
je 0x10fce
leaq 0x3c8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x380(%rsp), %rdi
callq 0x161e0
leaq 0x338(%rsp), %r14
movq %r14, %rdi
callq 0x28d5a
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x11006
leaq 0x318(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x2d0(%rsp), %rdi
callq 0x161e0
leaq 0x660(%rsp), %r14
movq %r14, %rdi
callq 0x28d5a
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x1103e
leaq 0x640(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x5f8(%rsp), %rdi
callq 0x161e0
movl 0x830(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x1108c
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x828(%rsp), %rcx
movq %rax, (%r14)
movl $0x2, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rcx, 0x10(%r14)
jmp 0x1128f
leaq 0xaf61d(%rip), %rsi     # 0xc06b0
leaq 0xb0046(%rip), %rdx     # 0xc10e0
leaq 0x5f8(%rsp), %rdi
callq 0x30c58
leaq 0xaf602(%rip), %rdx     # 0xc06b0
leaq 0x2d0(%rsp), %rdi
leaq 0x5f8(%rsp), %rsi
callq 0x30a54
leaq 0x128(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
movq %rbx, %rdx
callq 0x2125e
movq 0x3d8(%rsp), %rax
testq %rax, %rax
je 0x110fa
leaq 0x3c8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x380(%rsp), %rdi
callq 0x161e0
leaq 0x338(%rsp), %r14
movq %r14, %rdi
callq 0x30d46
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x11132
leaq 0x318(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x2d0(%rsp), %rdi
callq 0x161e0
leaq 0x660(%rsp), %r14
movq %r14, %rdi
callq 0x30d46
movq -0x10(%r14), %rax
testq %rax, %rax
je 0x1116a
leaq 0x640(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x5f8(%rsp), %rdi
callq 0x161e0
movl 0x150(%rsp), %ebp
cmpl $-0x1, %ebp
je 0x111b8
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x148(%rsp), %rcx
movq %rax, (%r14)
movl $0x4, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rcx, 0x10(%r14)
jmp 0x1126e
leaq 0xaf4f1(%rip), %rsi     # 0xc06b0
leaq 0xaf9c2(%rip), %rdx     # 0xc0b88
leaq 0x5f8(%rsp), %rdi
callq 0x30f22
leaq 0xaf4d6(%rip), %rdx     # 0xc06b0
leaq 0x2d0(%rsp), %rdi
leaq 0x5f8(%rsp), %rsi
callq 0x30d84
leaq 0x78(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
movq %rbx, %rdx
callq 0x21720
leaq 0x2d0(%rsp), %rdi
callq 0x21b4c
leaq 0x5f8(%rsp), %rdi
callq 0x21bac
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
leaq 0x88(%rsp), %rcx
movq 0x10(%rcx), %rdx
movq %rax, (%r14)
movl $0x1, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rdx, 0x10(%r14)
movl 0x18(%rcx), %ebp
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x1126e
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x138(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1128f
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x818(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x112b0
movq 0x818(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x112cb
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x112e6
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
movl %ebp, %eax
movq %r14, %rdx
addq $0x9d0, %rsp            # imm = 0x9D0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x88(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1134a
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x1134a
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0x21b4c
jmp 0x11336
movq %rax, %rbx
leaq 0x5f8(%rsp), %rdi
callq 0x21bac
jmp 0x1134a
jmp 0x11347
movq %rax, %rbx
leaq 0x138(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x113a5
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x113a5
jmp 0x114ff
jmp 0x114ff
jmp 0x114ff
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0x2168a
jmp 0x11391
movq %rax, %rbx
leaq 0x5f8(%rsp), %rdi
callq 0x216ea
jmp 0x113a5
jmp 0x113a2
movq %rax, %rbx
leaq 0x818(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11400
movq 0x818(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x11400
jmp 0x114ff
jmp 0x114ff
jmp 0x114ff
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0x211c8
jmp 0x113ec
movq %rax, %rbx
leaq 0x5f8(%rsp), %rdi
callq 0x21228
jmp 0x11400
jmp 0x113fd
movq %rax, %rbx
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x114dc
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x114dc
jmp 0x114ff
jmp 0x114ff
jmp 0x114ff
jmp 0x114ff
jmp 0x114ff
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0x20bee
jmp 0x11452
movq %rax, %rbx
leaq 0x7c0(%rsp), %rdi
callq 0x161e0
leaq 0x5f8(%rsp), %rdi
callq 0x20c38
jmp 0x11471
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
callq 0x161e0
jmp 0x11483
movq %rax, %rbx
leaq 0x808(%rsp), %rdi
callq 0x20c38
jmp 0x11495
movq %rax, %rbx
leaq 0x128(%rsp), %rdi
callq 0x20cd0
leaq 0x548(%rsp), %rdi
callq 0x20d30
leaq 0x78(%rsp), %rdi
callq 0x20d66
leaq 0x288(%rsp), %rdi
callq 0x161e0
jmp 0x114dc
movq %rax, %rbx
jmp 0x114a2
movq %rax, %rbx
jmp 0x114af
movq %rax, %rbx
jmp 0x114b9
jmp 0x114d9
movq %rax, %rbx
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11576
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x11576
jmp 0x114ff
movq %rax, %rdi
callq 0x266fe
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0x20702
jmp 0x1151c
movq %rax, %rbx
leaq 0x5f8(%rsp), %rdi
callq 0x2076e
jmp 0x1152e
movq %rax, %rbx
leaq 0x808(%rsp), %rdi
callq 0x1de10
jmp 0x11540
movq %rax, %rbx
leaq 0x548(%rsp), %rdi
callq 0x161e0
jmp 0x11552
movq %rax, %rbx
leaq 0x170(%rsp), %rdi
callq 0x26654
leaq 0x128(%rsp), %rdi
callq 0x161e0
leaq 0x78(%rsp), %rdi
callq 0x161e0
movq %rbx, %rdi
callq 0x53d0
movq %rax, %rbx
jmp 0x1156c