// File: /workspace/github_cpp_makefile_star2_O2/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 %r14
pushq %rbx
subq $0x9d0, %rsp            # imm = 0x9D0
movq %rdi, %rbx
leaq 0xc0(%rsp), %rsi
movb $0x5b, (%rsi)
leaq 0x108(%rsp), %r14
movq %r14, %rdi
callq 0x818c
leaq 0x7f8e7(%rip), %rdx     # 0x8c030
leaq 0x1b8(%rsp), %rdi
movq %r14, %rsi
callq 0x1a284
leaq 0x78(%rsp), %rsi
movb $0x5d, (%rsi)
leaq 0x2d0(%rsp), %rdi
callq 0x818c
leaq 0x808(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
leaq 0x2d0(%rsp), %rdx
callq 0x1a24a
leaq 0x7ef46(%rip), %rdx     # 0x8b6d8
leaq 0x380(%rsp), %rdi
leaq 0x808(%rsp), %rsi
callq 0x1ad4a
leaq 0x7f402(%rip), %rsi     # 0x8bbb0
leaq 0x590(%rsp), %rdi
leaq 0x380(%rsp), %rdx
callq 0x1acd6
leaq 0x40(%rsp), %rdi
leaq 0x590(%rsp), %rsi
movq %rbx, %rdx
callq 0x14294
leaq 0x590(%rsp), %rdi
callq 0x1450a
leaq 0x380(%rsp), %rdi
callq 0x14520
leaq 0x808(%rsp), %rdi
callq 0x13126
leaq 0x2d0(%rsp), %rdi
callq 0xfaa6
leaq 0x1b8(%rsp), %rdi
callq 0x13140
leaq 0x108(%rsp), %rdi
callq 0xfaa6
movl 0x70(%rsp), %ebp
cmpl $-0x1, %ebp
je 0xc858
pushq $0x28
popq %rdi
callq 0x5260
movq %rax, %r14
movq 0x8(%rbx), %rax
movq %rax, (%r14)
movl $0x5, 0x8(%r14)
movups 0x60(%rsp), %xmm0
movups %xmm0, 0x18(%r14)
jmp 0xcbef
leaq 0xf(%rsp), %rsi
movb $0x28, (%rsi)
leaq 0xc0(%rsp), %rdi
callq 0x818c
leaq 0x7ee64(%rip), %rsi     # 0x8b6d8
leaq 0x108(%rsp), %rdi
leaq 0xc0(%rsp), %rdx
callq 0x1af60
leaq 0x7ee48(%rip), %rsi     # 0x8b6d8
leaq 0x7f799(%rip), %rdx     # 0x8c030
leaq 0x2d0(%rsp), %rdi
callq 0x1afd0
leaq 0x7ee2d(%rip), %rdx     # 0x8b6d8
leaq 0x1b8(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
callq 0x1af96
leaq 0x808(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1af26
leaq 0xe(%rsp), %rsi
movb $0x29, (%rsi)
leaq 0x78(%rsp), %rdi
callq 0x818c
leaq 0x380(%rsp), %rdi
leaq 0x808(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x1aeec
leaq 0x7edc8(%rip), %rdx     # 0x8b6d8
leaq 0x590(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x1ad84
leaq 0x10(%rsp), %rdi
leaq 0x590(%rsp), %rsi
movq %rbx, %rdx
callq 0x1453a
leaq 0x590(%rsp), %rdi
callq 0x146c8
leaq 0x380(%rsp), %rdi
callq 0x146e2
leaq 0x78(%rsp), %rdi
callq 0xfaa6
leaq 0x808(%rsp), %rdi
callq 0x146fc
leaq 0x1b8(%rsp), %rdi
callq 0x14716
leaq 0x2d0(%rsp), %rdi
callq 0x14730
leaq 0x108(%rsp), %rdi
callq 0x14746
leaq 0xc0(%rsp), %rdi
callq 0xfaa6
movl 0x38(%rsp), %ebp
cmpl $-0x1, %ebp
je 0xc9d8
pushq $0x28
popq %rdi
callq 0x5260
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 0xcbe5
leaq 0x7ecf9(%rip), %rsi     # 0x8b6d8
leaq 0x7f182(%rip), %rdx     # 0x8bb68
leaq 0x380(%rsp), %rdi
callq 0x1b07a
leaq 0x7ecde(%rip), %rdx     # 0x8b6d8
leaq 0x590(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x1b006
leaq 0x808(%rsp), %rdi
leaq 0x590(%rsp), %rsi
movq %rbx, %rdx
callq 0x1475c
leaq 0x590(%rsp), %rdi
callq 0x148ea
leaq 0x380(%rsp), %rdi
callq 0x14904
movl 0x830(%rsp), %ebp
cmpl $-0x1, %ebp
je 0xca80
pushq $0x28
popq %rdi
callq 0x5260
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 0xcbd8
leaq 0x7ec51(%rip), %rsi     # 0x8b6d8
leaq 0x7f67a(%rip), %rdx     # 0x8c108
leaq 0x380(%rsp), %rdi
callq 0x1b1b8
leaq 0x7ec36(%rip), %rdx     # 0x8b6d8
leaq 0x590(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x1b0b0
leaq 0x1b8(%rsp), %rdi
leaq 0x590(%rsp), %rsi
movq %rbx, %rdx
callq 0x1491a
leaq 0x590(%rsp), %rdi
callq 0x14aa8
leaq 0x380(%rsp), %rdi
callq 0x14ac2
movl 0x1e0(%rsp), %ebp
cmpl $-0x1, %ebp
je 0xcb28
pushq $0x28
popq %rdi
callq 0x5260
movq %rax, %r14
movq 0x8(%rbx), %rax
movq 0x1d8(%rsp), %rcx
movq %rax, (%r14)
movl $0x4, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rcx, 0x10(%r14)
jmp 0xcbcb
leaq 0x7eba9(%rip), %rsi     # 0x8b6d8
leaq 0x7f07a(%rip), %rdx     # 0x8bbb0
leaq 0x380(%rsp), %rdi
callq 0x1b27c
leaq 0x7eb8e(%rip), %rdx     # 0x8b6d8
leaq 0x590(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x1b208
leaq 0x108(%rsp), %rdi
leaq 0x590(%rsp), %rsi
movq %rbx, %rdx
callq 0x14ad8
leaq 0x590(%rsp), %rdi
callq 0x14c66
leaq 0x380(%rsp), %rdi
callq 0x14c80
pushq $0x28
popq %rdi
callq 0x5260
movq %rax, %r14
movq 0x8(%rbx), %rax
leaq 0x108(%rsp), %rdi
movq 0x20(%rdi), %rcx
movq %rax, (%r14)
movl $0x1, 0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movq %rcx, 0x10(%r14)
movl 0x28(%rdi), %ebp
callq 0x5120
leaq 0x1b8(%rsp), %rdi
callq 0x5120
leaq 0x808(%rsp), %rdi
callq 0x5120
leaq 0x10(%rsp), %rdi
callq 0x5120
leaq 0x40(%rsp), %rdi
callq 0x5120
movl %ebp, %eax
movq %r14, %rdx
addq $0x9d0, %rsp            # imm = 0x9D0
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
callq 0x5120
jmp 0xcc45
movq %rax, %rbx
leaq 0x590(%rsp), %rdi
callq 0x14c66
jmp 0xcc31
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x14c80
jmp 0xcc45
jmp 0xcc42
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0x5120
jmp 0xcc7d
movq %rax, %rbx
leaq 0x590(%rsp), %rdi
callq 0x14aa8
jmp 0xcc69
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x14ac2
jmp 0xcc7d
jmp 0xcc7a
movq %rax, %rbx
leaq 0x808(%rsp), %rdi
callq 0x5120
jmp 0xccb5
movq %rax, %rbx
leaq 0x590(%rsp), %rdi
callq 0x148ea
jmp 0xcca1
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x14904
jmp 0xccb5
jmp 0xccb2
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x5120
jmp 0xcd56
movq %rax, %rbx
leaq 0x590(%rsp), %rdi
callq 0x146c8
jmp 0xccd9
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x146e2
jmp 0xcceb
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0xfaa6
jmp 0xccfa
movq %rax, %rbx
leaq 0x808(%rsp), %rdi
callq 0x146fc
jmp 0xcd0c
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0x14716
leaq 0x2d0(%rsp), %rdi
callq 0x14730
leaq 0x108(%rsp), %rdi
callq 0x14746
leaq 0xc0(%rsp), %rdi
callq 0xfaa6
jmp 0xcd56
movq %rax, %rbx
jmp 0xcd19
movq %rax, %rbx
jmp 0xcd26
movq %rax, %rbx
jmp 0xcd33
jmp 0xcd53
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x5120
jmp 0xcdc7
movq %rax, %rbx
leaq 0x590(%rsp), %rdi
callq 0x1450a
jmp 0xcd77
movq %rax, %rbx
leaq 0x380(%rsp), %rdi
callq 0x14520
jmp 0xcd89
movq %rax, %rbx
leaq 0x808(%rsp), %rdi
callq 0x13126
jmp 0xcd9b
movq %rax, %rbx
leaq 0x2d0(%rsp), %rdi
callq 0xfaa6
jmp 0xcdad
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0x13140
leaq 0x108(%rsp), %rdi
callq 0xfaa6
movq %rbx, %rdi
callq 0x53f0
movq %rax, %rbx
jmp 0xcdba