// File: 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
movq %rsp, %rbp
subq $0x1630, %rsp           # imm = 0x1630
movq %rdi, -0x18(%rbp)
movb $0x5b, -0x4c9(%rbp)
leaq -0x4c8(%rbp), %rdi
movq %rdi, -0x1558(%rbp)
leaq -0x4c9(%rbp), %rsi
callq 0xa240
movq -0x1558(%rbp), %rsi
leaq 0x14d4a2(%rip), %rdx    # 0x160130
leaq -0x480(%rbp), %rdi
callq 0x23350
jmp 0x12c9c
movb $0x5d, -0x529(%rbp)
leaq -0x528(%rbp), %rdi
leaq -0x529(%rbp), %rsi
callq 0xa240
jmp 0x12cb8
leaq -0x3f0(%rbp), %rdi
leaq -0x480(%rbp), %rsi
leaq -0x528(%rbp), %rdx
callq 0x23310
jmp 0x12cd4
leaq 0x14caf5(%rip), %rdx    # 0x15f7d0
leaq -0x318(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x262a0
jmp 0x12cf0
leaq 0x14cfb9(%rip), %rsi    # 0x15fcb0
leaq -0x1d8(%rbp), %rdi
leaq -0x318(%rbp), %rdx
callq 0x26260
jmp 0x12d0c
movq -0x18(%rbp), %rdx
leaq -0x50(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x262e0
jmp 0x12d22
leaq -0x1d8(%rbp), %rdi
callq 0x266f0
leaq -0x318(%rbp), %rdi
callq 0x26720
leaq -0x3f0(%rbp), %rdi
callq 0x23450
leaq -0x528(%rbp), %rdi
callq 0x19a20
leaq -0x480(%rbp), %rdi
callq 0x23480
leaq -0x4c8(%rbp), %rdi
callq 0x19a20
leaq -0x10(%rbp), %rdi
callq 0x26750
jmp 0x12d75
leaq -0x50(%rbp), %rdi
callq 0x26770
cmpl $-0x1, (%rax)
je 0x12f4f
leaq -0x50(%rbp), %rdi
callq 0x26770
movq %rax, -0x1568(%rbp)
movl $0x28, %edi
callq 0x5340
movq %rax, -0x1560(%rbp)
jmp 0x12daa
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x1570(%rbp)
jmp 0x12dbc
movq -0x1570(%rbp), %rax
movq %rax, -0x550(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x267c0
movq -0x1560(%rbp), %rdi
movq %rax, %rdx
movq -0x550(%rbp), %rsi
callq 0x267e0
jmp 0x12deb
movq -0x1568(%rbp), %rdi
movq -0x1560(%rbp), %rax
movq %rax, -0x548(%rbp)
leaq -0x548(%rbp), %rsi
callq 0x26790
movq %rdx, -0x1580(%rbp)
movl %eax, -0x1574(%rbp)
jmp 0x12e1b
movq -0x1580(%rbp), %rax
movl -0x1574(%rbp), %ecx
movl %ecx, -0x540(%rbp)
movq %rax, -0x538(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x540(%rbp), %rsi
callq 0x26820
jmp 0x1388e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x12eff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x12ef3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x12ee7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x12edb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x12ecf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x266f0
leaq -0x318(%rbp), %rdi
callq 0x26720
leaq -0x3f0(%rbp), %rdi
callq 0x23450
leaq -0x528(%rbp), %rdi
callq 0x19a20
leaq -0x480(%rbp), %rdi
callq 0x23480
leaq -0x4c8(%rbp), %rdi
callq 0x19a20
jmp 0x138ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x138e3
movq -0x1560(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
movl $0x28, %esi
callq 0x5350
jmp 0x138e3
movb $0x28, -0xcc9(%rbp)
leaq -0xcc8(%rbp), %rdi
leaq -0xcc9(%rbp), %rsi
callq 0xa240
jmp 0x12f6b
leaq 0x14c85e(%rip), %rsi    # 0x15f7d0
leaq -0xc80(%rbp), %rdi
leaq -0xcc8(%rbp), %rdx
callq 0x26910
jmp 0x12f87
leaq 0x14c842(%rip), %rsi    # 0x15f7d0
leaq 0x14d19b(%rip), %rdx    # 0x160130
leaq -0xe98(%rbp), %rdi
callq 0x26990
jmp 0x12fa3
leaq 0x14c826(%rip), %rdx    # 0x15f7d0
leaq -0xde8(%rbp), %rdi
leaq -0xe98(%rbp), %rsi
callq 0x26950
jmp 0x12fbf
leaq -0xbd0(%rbp), %rdi
leaq -0xc80(%rbp), %rsi
leaq -0xde8(%rbp), %rdx
callq 0x268d0
jmp 0x12fdb
movb $0x29, -0xee1(%rbp)
leaq -0xee0(%rbp), %rdi
leaq -0xee1(%rbp), %rsi
callq 0xa240
jmp 0x12ff7
leaq -0xa08(%rbp), %rdi
leaq -0xbd0(%rbp), %rsi
leaq -0xee0(%rbp), %rdx
callq 0x26890
jmp 0x13013
leaq 0x14c7b6(%rip), %rdx    # 0x15f7d0
leaq -0x7f8(%rbp), %rdi
leaq -0xa08(%rbp), %rsi
callq 0x26850
jmp 0x1302f
movq -0x18(%rbp), %rdx
leaq -0x580(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x269d0
jmp 0x13048
leaq -0x7f8(%rbp), %rdi
callq 0x26cc0
leaq -0xa08(%rbp), %rdi
callq 0x26cf0
leaq -0xee0(%rbp), %rdi
callq 0x19a20
leaq -0xbd0(%rbp), %rdi
callq 0x26d20
leaq -0xde8(%rbp), %rdi
callq 0x26d50
leaq -0xe98(%rbp), %rdi
callq 0x26d80
leaq -0xc80(%rbp), %rdi
callq 0x26db0
leaq -0xcc8(%rbp), %rdi
callq 0x19a20
leaq -0x580(%rbp), %rdi
callq 0x250e0
cmpl $-0x1, (%rax)
je 0x132d6
leaq -0x580(%rbp), %rdi
callq 0x250e0
movq %rax, -0x1590(%rbp)
movl $0x28, %edi
callq 0x5340
movq %rax, -0x1588(%rbp)
jmp 0x130e3
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x1598(%rbp)
jmp 0x130f5
movq -0x1598(%rbp), %rax
movq %rax, -0xf08(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x25100
movq -0x1588(%rbp), %rdi
movq (%rax), %rcx
movq -0xf08(%rbp), %rsi
movl $0x3, %edx
callq 0x26de0
jmp 0x1312c
movq -0x1590(%rbp), %rdi
movq -0x1588(%rbp), %rax
movq %rax, -0xf00(%rbp)
leaq -0xf00(%rbp), %rsi
callq 0x26790
movq %rdx, -0x15a8(%rbp)
movl %eax, -0x159c(%rbp)
jmp 0x1315c
movq -0x15a8(%rbp), %rax
movl -0x159c(%rbp), %ecx
movl %ecx, -0xef8(%rbp)
movq %rax, -0xef0(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0xef8(%rbp), %rsi
callq 0x26820
jmp 0x13872
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13286
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x1327a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x1326e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13262
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13256
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x1324a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x1323e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
leaq -0x7f8(%rbp), %rdi
callq 0x26cc0
leaq -0xa08(%rbp), %rdi
callq 0x26cf0
leaq -0xee0(%rbp), %rdi
callq 0x19a20
leaq -0xbd0(%rbp), %rdi
callq 0x26d20
leaq -0xde8(%rbp), %rdi
callq 0x26d50
leaq -0xe98(%rbp), %rdi
callq 0x26d80
leaq -0xc80(%rbp), %rdi
callq 0x26db0
leaq -0xcc8(%rbp), %rdi
callq 0x19a20
jmp 0x138e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13880
movq -0x1588(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
movl $0x28, %esi
callq 0x5350
jmp 0x13880
leaq 0x14c4f3(%rip), %rsi    # 0x15f7d0
leaq 0x14c984(%rip), %rdx    # 0x15fc68
leaq -0x1100(%rbp), %rdi
callq 0x26f10
jmp 0x132f2
leaq 0x14c4d7(%rip), %rdx    # 0x15f7d0
leaq -0x1050(%rbp), %rdi
leaq -0x1100(%rbp), %rsi
callq 0x26ed0
jmp 0x1330e
movq -0x18(%rbp), %rdx
leaq -0xf38(%rbp), %rdi
leaq -0x1050(%rbp), %rsi
callq 0x26f50
jmp 0x13327
leaq -0x1050(%rbp), %rdi
callq 0x27240
leaq -0x1100(%rbp), %rdi
callq 0x27270
leaq -0xf38(%rbp), %rdi
callq 0x1ce40
cmpl $-0x1, (%rax)
je 0x134a4
leaq -0xf38(%rbp), %rdi
callq 0x1ce40
movq %rax, -0x15b8(%rbp)
movl $0x28, %edi
callq 0x5340
movq %rax, -0x15b0(%rbp)
jmp 0x1337a
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x15c0(%rbp)
jmp 0x1338c
movq -0x15c0(%rbp), %rax
movq %rax, -0x1120(%rbp)
leaq -0xf38(%rbp), %rdi
callq 0x1ce60
movq -0x15b0(%rbp), %rdi
movq (%rax), %rcx
movq -0x1120(%rbp), %rsi
movl $0x2, %edx
callq 0x26de0
jmp 0x133c3
movq -0x15b8(%rbp), %rdi
movq -0x15b0(%rbp), %rax
movq %rax, -0x1118(%rbp)
leaq -0x1118(%rbp), %rsi
callq 0x26790
movq %rdx, -0x15d0(%rbp)
movl %eax, -0x15c4(%rbp)
jmp 0x133f3
movq -0x15d0(%rbp), %rax
movl -0x15c4(%rbp), %ecx
movl %ecx, -0x1110(%rbp)
movq %rax, -0x1108(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x1110(%rbp), %rsi
callq 0x26820
jmp 0x13856
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13454
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
leaq -0x1050(%rbp), %rdi
callq 0x27240
leaq -0x1100(%rbp), %rdi
callq 0x27270
jmp 0x13880
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13864
movq -0x15b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
movl $0x28, %esi
callq 0x5350
jmp 0x13864
leaq 0x14c325(%rip), %rsi    # 0x15f7d0
leaq 0x14cd56(%rip), %rdx    # 0x160208
leaq -0x1318(%rbp), %rdi
callq 0x272e0
jmp 0x134c0
leaq 0x14c309(%rip), %rdx    # 0x15f7d0
leaq -0x1268(%rbp), %rdi
leaq -0x1318(%rbp), %rsi
callq 0x272a0
jmp 0x134dc
movq -0x18(%rbp), %rdx
leaq -0x1150(%rbp), %rdi
leaq -0x1268(%rbp), %rsi
callq 0x27320
jmp 0x134f5
leaq -0x1268(%rbp), %rdi
callq 0x27680
leaq -0x1318(%rbp), %rdi
callq 0x276b0
leaq -0x1150(%rbp), %rdi
callq 0x276e0
cmpl $-0x1, (%rax)
je 0x13672
leaq -0x1150(%rbp), %rdi
callq 0x276e0
movq %rax, -0x15e0(%rbp)
movl $0x28, %edi
callq 0x5340
movq %rax, -0x15d8(%rbp)
jmp 0x13548
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x15e8(%rbp)
jmp 0x1355a
movq -0x15e8(%rbp), %rax
movq %rax, -0x1338(%rbp)
leaq -0x1150(%rbp), %rdi
callq 0x27700
movq -0x15d8(%rbp), %rdi
movq (%rax), %rcx
movq -0x1338(%rbp), %rsi
movl $0x4, %edx
callq 0x26de0
jmp 0x13591
movq -0x15e0(%rbp), %rdi
movq -0x15d8(%rbp), %rax
movq %rax, -0x1330(%rbp)
leaq -0x1330(%rbp), %rsi
callq 0x26790
movq %rdx, -0x15f8(%rbp)
movl %eax, -0x15ec(%rbp)
jmp 0x135c1
movq -0x15f8(%rbp), %rax
movl -0x15ec(%rbp), %ecx
movl %ecx, -0x1328(%rbp)
movq %rax, -0x1320(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x1328(%rbp), %rsi
callq 0x26820
jmp 0x1383a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13622
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
leaq -0x1268(%rbp), %rdi
callq 0x27680
leaq -0x1318(%rbp), %rdi
callq 0x276b0
jmp 0x13864
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x13848
movq -0x15d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
movl $0x28, %esi
callq 0x5350
jmp 0x13848
leaq 0x14c157(%rip), %rsi    # 0x15f7d0
leaq 0x14c630(%rip), %rdx    # 0x15fcb0
leaq -0x1530(%rbp), %rdi
callq 0x27760
jmp 0x1368e
leaq 0x14c13b(%rip), %rdx    # 0x15f7d0
leaq -0x1480(%rbp), %rdi
leaq -0x1530(%rbp), %rsi
callq 0x27720
jmp 0x136aa
movq -0x18(%rbp), %rdx
leaq -0x1368(%rbp), %rdi
leaq -0x1480(%rbp), %rsi
callq 0x277a0
jmp 0x136c3
leaq -0x1480(%rbp), %rdi
callq 0x27a90
leaq -0x1530(%rbp), %rdi
callq 0x27ac0
leaq -0x1368(%rbp), %rdi
callq 0x219b0
movq %rax, -0x1608(%rbp)
movl $0x28, %edi
callq 0x5340
movq %rax, -0x1600(%rbp)
jmp 0x13701
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x1610(%rbp)
jmp 0x13713
movq -0x1610(%rbp), %rax
movq %rax, -0x1550(%rbp)
leaq -0x1368(%rbp), %rdi
callq 0x219d0
movq -0x1600(%rbp), %rdi
movq (%rax), %rcx
movq -0x1550(%rbp), %rsi
movl $0x1, %edx
callq 0x26de0
jmp 0x1374a
movq -0x1608(%rbp), %rdi
movq -0x1600(%rbp), %rax
movq %rax, -0x1548(%rbp)
leaq -0x1548(%rbp), %rsi
callq 0x26790
movq %rdx, -0x1620(%rbp)
movl %eax, -0x1614(%rbp)
jmp 0x1377a
movq -0x1620(%rbp), %rax
movl -0x1614(%rbp), %ecx
movl %ecx, -0x1540(%rbp)
movq %rax, -0x1538(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x1540(%rbp), %rsi
callq 0x26820
leaq -0x1368(%rbp), %rdi
callq 0x21a20
jmp 0x1383a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x137e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
leaq -0x1480(%rbp), %rdi
callq 0x27a90
leaq -0x1530(%rbp), %rdi
callq 0x27ac0
jmp 0x13848
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
jmp 0x1382c
movq -0x1600(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x4d8(%rbp)
movl %eax, -0x4dc(%rbp)
movl $0x28, %esi
callq 0x5350
leaq -0x1368(%rbp), %rdi
callq 0x21a20
jmp 0x13848
leaq -0x1150(%rbp), %rdi
callq 0x27af0
jmp 0x13856
leaq -0x1150(%rbp), %rdi
callq 0x27af0
jmp 0x13864
leaq -0xf38(%rbp), %rdi
callq 0x1ceb0
jmp 0x13872
leaq -0xf38(%rbp), %rdi
callq 0x1ceb0
jmp 0x13880
leaq -0x580(%rbp), %rdi
callq 0x25150
jmp 0x1388e
leaq -0x580(%rbp), %rdi
callq 0x25150
jmp 0x138e3
testb $0x1, 0x14bfa3(%rip)    # 0x15f838
je 0x138ca
movq 0x14b73a(%rip), %rdi    # 0x15efd8
leaq 0xdbc08(%rip), %rsi     # 0xef4ad
callq 0x5330
movq %rax, -0x1628(%rbp)
jmp 0x138b3
movq -0x1628(%rbp), %rdi
movq 0x14b6ff(%rip), %rsi    # 0x15efc0
callq 0x53a0
jmp 0x138c8
jmp 0x138ca
leaq -0x50(%rbp), %rdi
callq 0x27b10
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rdx
addq $0x1630, %rsp           # imm = 0x1630
popq %rbp
retq
leaq -0x50(%rbp), %rdi
callq 0x27b10
movq -0x4d8(%rbp), %rdi
callq 0x55b0
nopl (%rax,%rax)