// File: sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_for_stmt_fn(input_t*)
pair<int, pl0_ast_for_stmt *> pl0_for_stmt_fn(input_t *text) {
    auto parser = (((spaces >> pl0_string_literal("for") << spaces) >> pl0_identify) + ((spaces >> pl0_string_literal(":=") << spaces) >> pl0_expression))
        + (spaces >> (pl0_string_literal("downto") | pl0_string_literal("to")) << spaces)
        + (pl0_expression + (pl0_string_literal("do") >> pl0_stmt));
    auto res = (spaces >> parser << spaces)(text);
    if (verbose) {
        cout << "parsing: For Loop Statement" << endl;
    }
    return make_pair(std::get<0>(res), new pl0_ast_for_stmt(
        text->locate(),
        std::get<1>(res).first.first.first,
        std::get<1>(res).first.first.second,
        std::get<1>(res).second.first,
        std::get<1>(res).second.second,
        std::get<1>(res).first.second == "downto" ? new pl0_ast_constv(text->locate(), -1, pl0_ast_constv::INT) : new pl0_ast_constv(text->locate(), 1, pl0_ast_constv::INT)
    ));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2560, %rsp           # imm = 0x2560
movq %rdi, -0x18(%rbp)
leaq -0xf81(%rbp), %rdi
movq %rdi, -0x24a8(%rbp)
callq 0x55d0
movq -0x24a8(%rbp), %rdx
leaq 0xd9a93(%rip), %rsi     # 0xef223
leaq -0xf80(%rbp), %rdi
callq 0x19840
jmp 0x1579e
leaq -0xf60(%rbp), %rdi
leaq -0xf80(%rbp), %rsi
callq 0xa6a0
jmp 0x157b3
leaq 0x14a016(%rip), %rsi    # 0x15f7d0
leaq -0xf18(%rbp), %rdi
leaq -0xf60(%rbp), %rdx
callq 0x20710
jmp 0x157cf
leaq 0x149ffa(%rip), %rdx    # 0x15f7d0
leaq -0xe68(%rbp), %rdi
leaq -0xf18(%rbp), %rsi
callq 0x206d0
jmp 0x157eb
leaq 0x14a4be(%rip), %rdx    # 0x15fcb0
leaq -0xd50(%rbp), %rdi
leaq -0xe68(%rbp), %rsi
callq 0x29e40
jmp 0x15807
leaq -0x1329(%rbp), %rdi
movq %rdi, -0x24b0(%rbp)
callq 0x55d0
movq -0x24b0(%rbp), %rdx
leaq 0xd9bf3(%rip), %rsi     # 0xef41b
leaq -0x1328(%rbp), %rdi
callq 0x19840
jmp 0x15836
leaq -0x1308(%rbp), %rdi
leaq -0x1328(%rbp), %rsi
callq 0xa6a0
jmp 0x1584b
leaq 0x149f7e(%rip), %rsi    # 0x15f7d0
leaq -0x12c0(%rbp), %rdi
leaq -0x1308(%rbp), %rdx
callq 0x20710
jmp 0x15867
leaq 0x149f62(%rip), %rdx    # 0x15f7d0
leaq -0x1210(%rbp), %rdi
leaq -0x12c0(%rbp), %rsi
callq 0x206d0
jmp 0x15883
leaq 0x14a8a6(%rip), %rdx    # 0x160130
leaq -0x10f8(%rbp), %rdi
leaq -0x1210(%rbp), %rsi
callq 0x29e80
jmp 0x1589f
leaq -0xbf0(%rbp), %rdi
leaq -0xd50(%rbp), %rsi
leaq -0x10f8(%rbp), %rdx
callq 0x29e00
jmp 0x158bb
leaq -0x1681(%rbp), %rdi
movq %rdi, -0x24b8(%rbp)
callq 0x55d0
movq -0x24b8(%rbp), %rdx
leaq 0xd994b(%rip), %rsi     # 0xef227
leaq -0x1680(%rbp), %rdi
callq 0x19840
jmp 0x158ea
leaq -0x1660(%rbp), %rdi
leaq -0x1680(%rbp), %rsi
callq 0xa6a0
jmp 0x158ff
leaq -0x16f1(%rbp), %rdi
movq %rdi, -0x24c0(%rbp)
callq 0x55d0
movq -0x24c0(%rbp), %rdx
leaq 0xd990b(%rip), %rsi     # 0xef22b
leaq -0x16f0(%rbp), %rdi
callq 0x19840
jmp 0x1592e
leaq -0x16d0(%rbp), %rdi
leaq -0x16f0(%rbp), %rsi
callq 0xa6a0
jmp 0x15943
leaq -0x1618(%rbp), %rdi
leaq -0x1660(%rbp), %rsi
leaq -0x16d0(%rbp), %rdx
callq 0x1d910
jmp 0x1595f
leaq 0x149e6a(%rip), %rsi    # 0x15f7d0
leaq -0x1588(%rbp), %rdi
leaq -0x1618(%rbp), %rdx
callq 0x1d9c0
jmp 0x1597b
leaq 0x149e4e(%rip), %rdx    # 0x15f7d0
leaq -0x1490(%rbp), %rdi
leaq -0x1588(%rbp), %rsi
callq 0x1d980
jmp 0x15997
leaq -0x930(%rbp), %rdi
leaq -0xbf0(%rbp), %rsi
leaq -0x1490(%rbp), %rdx
callq 0x29dc0
jmp 0x159b3
leaq -0x18c9(%rbp), %rdi
movq %rdi, -0x24c8(%rbp)
callq 0x55d0
movq -0x24c8(%rbp), %rdx
leaq 0xd985a(%rip), %rsi     # 0xef22e
leaq -0x18c8(%rbp), %rdi
callq 0x19840
jmp 0x159e2
leaq -0x18a8(%rbp), %rdi
leaq -0x18c8(%rbp), %rsi
callq 0xa6a0
jmp 0x159f7
leaq 0x14a612(%rip), %rdx    # 0x160010
leaq -0x1860(%rbp), %rdi
leaq -0x18a8(%rbp), %rsi
callq 0x29f00
jmp 0x15a13
leaq 0x14a716(%rip), %rsi    # 0x160130
leaq -0x17d0(%rbp), %rdi
leaq -0x1860(%rbp), %rdx
callq 0x29ec0
jmp 0x15a2f
leaq -0x510(%rbp), %rdi
leaq -0x930(%rbp), %rsi
leaq -0x17d0(%rbp), %rdx
callq 0x29d80
jmp 0x15a4b
leaq -0x17d0(%rbp), %rdi
callq 0x29f40
leaq -0x1860(%rbp), %rdi
callq 0x29f70
leaq -0x18a8(%rbp), %rdi
callq 0x1d950
leaq -0x18c8(%rbp), %rdi
callq 0x5200
leaq -0x18c9(%rbp), %rdi
callq 0x53c0
leaq -0x930(%rbp), %rdi
callq 0x29fa0
leaq -0x1490(%rbp), %rdi
callq 0x1dd80
leaq -0x1588(%rbp), %rdi
callq 0x1ddb0
leaq -0x1618(%rbp), %rdi
callq 0x1de50
leaq -0x16d0(%rbp), %rdi
callq 0x1d950
leaq -0x16f0(%rbp), %rdi
callq 0x5200
leaq -0x16f1(%rbp), %rdi
callq 0x53c0
leaq -0x1660(%rbp), %rdi
callq 0x1d950
leaq -0x1680(%rbp), %rdi
callq 0x5200
leaq -0x1681(%rbp), %rdi
callq 0x53c0
leaq -0xbf0(%rbp), %rdi
callq 0x29fd0
leaq -0x10f8(%rbp), %rdi
callq 0x2a000
leaq -0x1210(%rbp), %rdi
callq 0x20ad0
leaq -0x12c0(%rbp), %rdi
callq 0x20b00
leaq -0x1308(%rbp), %rdi
callq 0x1d950
leaq -0x1328(%rbp), %rdi
callq 0x5200
leaq -0x1329(%rbp), %rdi
callq 0x53c0
leaq -0xd50(%rbp), %rdi
callq 0x2a030
leaq -0xe68(%rbp), %rdi
callq 0x20ad0
leaq -0xf18(%rbp), %rdi
callq 0x20b00
leaq -0xf60(%rbp), %rdi
callq 0x1d950
leaq -0xf80(%rbp), %rdi
callq 0x5200
leaq -0xf81(%rbp), %rdi
callq 0x53c0
leaq 0x149c2e(%rip), %rsi    # 0x15f7d0
leaq -0x2460(%rbp), %rdi
leaq -0x510(%rbp), %rdx
callq 0x2a0a0
jmp 0x15bb7
leaq 0x149c12(%rip), %rdx    # 0x15f7d0
leaq -0x1f00(%rbp), %rdi
leaq -0x2460(%rbp), %rsi
callq 0x2a060
jmp 0x15bd3
movq -0x18(%rbp), %rdx
leaq -0x1938(%rbp), %rdi
leaq -0x1f00(%rbp), %rsi
callq 0x2a0e0
jmp 0x15bec
leaq -0x1f00(%rbp), %rdi
callq 0x2a4b0
leaq -0x2460(%rbp), %rdi
callq 0x2a4e0
testb $0x1, 0x149c2d(%rip)    # 0x15f838
je 0x16024
movq 0x1493c0(%rip), %rdi    # 0x15efd8
leaq 0xd9948(%rip), %rsi     # 0xef567
callq 0x5330
movq %rax, -0x24d0(%rbp)
jmp 0x15c2d
movq -0x24d0(%rbp), %rdi
movq 0x149385(%rip), %rsi    # 0x15efc0
callq 0x53a0
jmp 0x15c42
jmp 0x16024
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15fa2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f4e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15f06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15efa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15ee2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15ed6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15eca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15ebe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15eb2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15ea6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15e8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15e82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15e76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15e6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
leaq -0x17d0(%rbp), %rdi
callq 0x29f40
leaq -0x1860(%rbp), %rdi
callq 0x29f70
leaq -0x18a8(%rbp), %rdi
callq 0x1d950
leaq -0x18c8(%rbp), %rdi
callq 0x5200
leaq -0x18c9(%rbp), %rdi
callq 0x53c0
leaq -0x930(%rbp), %rdi
callq 0x29fa0
leaq -0x1490(%rbp), %rdi
callq 0x1dd80
leaq -0x1588(%rbp), %rdi
callq 0x1ddb0
leaq -0x1618(%rbp), %rdi
callq 0x1de50
leaq -0x16d0(%rbp), %rdi
callq 0x1d950
leaq -0x16f0(%rbp), %rdi
callq 0x5200
leaq -0x16f1(%rbp), %rdi
callq 0x53c0
leaq -0x1660(%rbp), %rdi
callq 0x1d950
leaq -0x1680(%rbp), %rdi
callq 0x5200
leaq -0x1681(%rbp), %rdi
callq 0x53c0
leaq -0xbf0(%rbp), %rdi
callq 0x29fd0
leaq -0x10f8(%rbp), %rdi
callq 0x2a000
leaq -0x1210(%rbp), %rdi
callq 0x20ad0
leaq -0x12c0(%rbp), %rdi
callq 0x20b00
leaq -0x1308(%rbp), %rdi
callq 0x1d950
leaq -0x1328(%rbp), %rdi
callq 0x5200
leaq -0x1329(%rbp), %rdi
callq 0x53c0
leaq -0xd50(%rbp), %rdi
callq 0x2a030
leaq -0xe68(%rbp), %rdi
callq 0x20ad0
leaq -0xf18(%rbp), %rdi
callq 0x20b00
leaq -0xf60(%rbp), %rdi
callq 0x1d950
leaq -0xf80(%rbp), %rdi
callq 0x5200
leaq -0xf81(%rbp), %rdi
callq 0x53c0
jmp 0x1633c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x16330
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x15ffc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
leaq -0x1f00(%rbp), %rdi
callq 0x2a4b0
leaq -0x2460(%rbp), %rdi
callq 0x2a4e0
jmp 0x16330
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x16324
leaq -0x1938(%rbp), %rdi
callq 0x2a540
movq %rax, -0x24e0(%rbp)
movl $0x40, %edi
callq 0x5340
movq %rax, -0x24d8(%rbp)
jmp 0x1604a
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x24e8(%rbp)
jmp 0x1605c
movq -0x24e8(%rbp), %rax
movq %rax, -0x2470(%rbp)
leaq -0x1938(%rbp), %rdi
movq %rdi, -0x2500(%rbp)
callq 0x2a560
movq -0x2500(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x2518(%rbp)
callq 0x2a560
movq -0x2500(%rbp), %rdi
movq 0x8(%rax), %rax
movq %rax, -0x2510(%rbp)
callq 0x2a560
movq -0x2500(%rbp), %rdi
movq 0x30(%rax), %rax
movq %rax, -0x2508(%rbp)
callq 0x2a560
movq -0x2500(%rbp), %rdi
movq 0x38(%rax), %rax
movq %rax, -0x24f8(%rbp)
callq 0x2a560
movq %rax, %rdi
addq $0x10, %rdi
movb $0x0, -0x2479(%rbp)
movb $0x0, -0x2491(%rbp)
leaq 0xd9133(%rip), %rsi     # 0xef227
callq 0x2a580
movb %al, -0x24e9(%rbp)
jmp 0x16101
movb -0x24e9(%rbp), %al
testb $0x1, %al
jne 0x1610d
jmp 0x16181
movl $0x10, %edi
callq 0x5340
movq %rax, -0x2520(%rbp)
jmp 0x16120
movq -0x2520(%rbp), %rax
movq %rax, -0x2478(%rbp)
movb $0x1, -0x2479(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x2528(%rbp)
jmp 0x16147
movq -0x2520(%rbp), %rdi
movq -0x2528(%rbp), %rax
movq %rax, -0x2484(%rbp)
movq -0x2484(%rbp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
callq 0x1b9e0
jmp 0x16171
movq -0x2520(%rbp), %rax
movq %rax, -0x2530(%rbp)
jmp 0x161f5
movl $0x10, %edi
callq 0x5340
movq %rax, -0x2538(%rbp)
jmp 0x16194
movq -0x2538(%rbp), %rax
movq %rax, -0x2490(%rbp)
movb $0x1, -0x2491(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x2540(%rbp)
jmp 0x161bb
movq -0x2538(%rbp), %rdi
movq -0x2540(%rbp), %rax
movq %rax, -0x249c(%rbp)
movq -0x249c(%rbp), %rsi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x1b9e0
jmp 0x161e5
movq -0x2538(%rbp), %rax
movq %rax, -0x2530(%rbp)
jmp 0x161f5
movq -0x24f8(%rbp), %r9
movq -0x2508(%rbp), %r8
movq -0x2510(%rbp), %rcx
movq -0x2518(%rbp), %rdx
movq -0x24d8(%rbp), %rdi
movq -0x2530(%rbp), %r10
movq -0x2470(%rbp), %rsi
movq %rsp, %rax
movq %r10, (%rax)
callq 0x2a5b0
jmp 0x16233
movq -0x24e0(%rbp), %rdi
movq -0x24d8(%rbp), %rax
movq %rax, -0x2468(%rbp)
leaq -0x2468(%rbp), %rsi
callq 0x2a510
movq %rdx, -0x2550(%rbp)
movl %eax, -0x2544(%rbp)
jmp 0x16263
movq -0x2550(%rbp), %rax
movl -0x2544(%rbp), %ecx
movl %ecx, -0x10(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x1938(%rbp), %rdi
callq 0x2a640
leaq -0x510(%rbp), %rdi
callq 0x2a660
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rdx
addq $0x2560, %rsp           # imm = 0x2560
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
jmp 0x16313
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
testb $0x1, -0x2479(%rbp)
jne 0x162d0
jmp 0x162e1
movq -0x2478(%rbp), %rdi
movl $0x10, %esi
callq 0x5350
jmp 0x16313
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf90(%rbp)
movl %eax, -0xf94(%rbp)
testb $0x1, -0x2491(%rbp)
jne 0x16300
jmp 0x16311
movq -0x2490(%rbp), %rdi
movl $0x10, %esi
callq 0x5350
jmp 0x16313
movq -0x24d8(%rbp), %rdi
movl $0x40, %esi
callq 0x5350
leaq -0x1938(%rbp), %rdi
callq 0x2a640
leaq -0x510(%rbp), %rdi
callq 0x2a660
movq -0xf90(%rbp), %rdi
callq 0x55b0
nopl (%rax,%rax)