// File: sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_executable_fn(input_t*)
pair<int, pl0_ast_executable *> pl0_executable_fn(input_t *text) {
    auto res = pl0_function_header(text);
    pair<int, pl0_ast_executable *> ans;
    if (std::get<0>(res) != -1) {
        auto res1 = pl0_function_stmt(text);
        ans = make_pair(std::get<0>(res1), new pl0_ast_executable(text->locate(), std::get<1>(res1)));
    }
    else {
        auto res2 = pl0_procedure_stmt(text);
        ans = make_pair(std::get<0>(res2), new pl0_ast_executable(text->locate(), std::get<1>(res2)));
    }
    if (verbose) {
        cout << "parsing: Executable (Function and Procedure)" << endl;
    }
    return ans;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movq %rdi, -0x18(%rbp)
movq -0x18(%rbp), %rdx
leaq 0x14f26e(%rip), %rsi    # 0x15ff38
leaq -0x48(%rbp), %rdi
callq 0x22c80
leaq -0x10(%rbp), %rdi
callq 0x22d60
jmp 0x10cde
leaq -0x48(%rbp), %rdi
callq 0x22d80
cmpl $-0x1, (%rax)
je 0x10e2b
movq -0x18(%rbp), %rdx
leaq 0x14f1ad(%rip), %rsi    # 0x15fea8
leaq -0x88(%rbp), %rdi
callq 0x22da0
jmp 0x10d09
leaq -0x88(%rbp), %rdi
callq 0x22eb0
movq %rax, -0x108(%rbp)
movl $0x40, %edi
callq 0x5340
movq %rax, -0x100(%rbp)
jmp 0x10d2f
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x110(%rbp)
jmp 0x10d41
movq -0x110(%rbp), %rax
movq %rax, -0xa8(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x22ed0
movq -0x100(%rbp), %rdi
movq (%rax), %rdx
movq -0xa8(%rbp), %rsi
callq 0x22ef0
jmp 0x10d73
movq -0x108(%rbp), %rdi
movq -0x100(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x22e80
movq %rdx, -0x120(%rbp)
movl %eax, -0x114(%rbp)
jmp 0x10da3
movq -0x120(%rbp), %rax
movl -0x114(%rbp), %ecx
movl %ecx, -0x98(%rbp)
movq %rax, -0x90(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x22f90
leaq -0x88(%rbp), %rdi
callq 0x22fc0
jmp 0x10f4f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10fa4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10e1a
movq -0x100(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl $0x40, %esi
callq 0x5350
leaq -0x88(%rbp), %rdi
callq 0x22fc0
jmp 0x10fa4
movq -0x18(%rbp), %rdx
leaq 0x14f02a(%rip), %rsi    # 0x15fe60
leaq -0xd8(%rbp), %rdi
callq 0x22fe0
jmp 0x10e44
leaq -0xd8(%rbp), %rdi
callq 0x230c0
movq %rax, -0x130(%rbp)
movl $0x40, %edi
callq 0x5340
movq %rax, -0x128(%rbp)
jmp 0x10e6a
movq -0x18(%rbp), %rdi
callq 0x1a350
movq %rax, -0x138(%rbp)
jmp 0x10e7c
movq -0x138(%rbp), %rax
movq %rax, -0xf8(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x230e0
movq -0x128(%rbp), %rdi
movq (%rax), %rdx
movq -0xf8(%rbp), %rsi
callq 0x23100
jmp 0x10eae
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0xf0(%rbp), %rsi
callq 0x22e80
movq %rdx, -0x148(%rbp)
movl %eax, -0x13c(%rbp)
jmp 0x10ede
movq -0x148(%rbp), %rax
movl -0x13c(%rbp), %ecx
movl %ecx, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x22f90
leaq -0xd8(%rbp), %rdi
callq 0x231a0
jmp 0x10f4f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x10f41
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
movl $0x40, %esi
callq 0x5350
leaq -0xd8(%rbp), %rdi
callq 0x231a0
jmp 0x10fa4
testb $0x1, 0x14e8e2(%rip)    # 0x15f838
je 0x10f8b
movq 0x14e079(%rip), %rdi    # 0x15efd8
leaq 0xde470(%rip), %rsi     # 0xef3d6
callq 0x5330
movq %rax, -0x150(%rbp)
jmp 0x10f74
movq -0x150(%rbp), %rdi
movq 0x14e03e(%rip), %rsi    # 0x15efc0
callq 0x53a0
jmp 0x10f89
jmp 0x10f8b
leaq -0x48(%rbp), %rdi
callq 0x231c0
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rdx
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
leaq -0x48(%rbp), %rdi
callq 0x231c0
movq -0x50(%rbp), %rdi
callq 0x55b0
nopw %cs:(%rax,%rax)