// File: sighingnow[P]compile-pascal/./libparsec/combinator.hpp
// Function: joint<joint<optional<parser_t<pl0_ast_const_stmt*>, pl0_ast_const_stmt*>, optional<parser_t<pl0_ast_var_stmt*>, pl0_ast_var_stmt*>, pl0_ast_const_stmt*, pl0_ast_var_stmt*>, joint<many<parser_t<pl0_ast_executable*>, pl0_ast_executable*>, parser_t<pl0_ast_compound_stmt*>, std::vector<pl0_ast_executable*, std::allocator<pl0_ast_executable*>>, pl0_ast_compound_stmt*>, std::pair<pl0_ast_const_stmt*, pl0_ast_var_stmt*>, std::pair<std::vector<pl0_ast_executable*, std::allocator<pl0_ast_executable*>>, pl0_ast_compound_stmt*>>::operator()[abi:cxx11](input_t*) const
tuple<int, parser_type const, string const> operator () (input_t *text) const {
        string expected;
        auto res1 = pa(text);
        expected += std::get<2>(res1) + ", ";
        if (std::get<0>(res1) == -1) {
            return make_tuple(-1, parser_type(), name());
        }
        auto res2 = pb(text->drop(std::get<0>(res1)));
        expected += std::get<2>(res2) + ", ";
        if (std::get<0>(res2) == -1) {
            return make_tuple(-1, parser_type(), name());
        }
        else {
            return make_tuple(std::get<0>(res1) + std::get<0>(res2), make_pair(std::get<1>(res1), std::get<1>(res2)), expected);
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x350, %rsp            # imm = 0x350
movq %rdi, -0x318(%rbp)
movq %rdi, %rax
movq %rax, -0x310(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x308(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x5490
movq -0x308(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x47a80
jmp 0x47632
leaq -0x70(%rbp), %rdi
callq 0x47ed0
movq %rax, %rsi
leaq 0xa9e80(%rip), %rdx     # 0xf14c5
leaq -0xa0(%rbp), %rdi
callq 0x458c0
jmp 0x47653
leaq -0x38(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x5440
jmp 0x47665
leaq -0xa0(%rbp), %rdi
callq 0x5200
leaq -0x70(%rbp), %rdi
callq 0x47ef0
cmpl $-0x1, (%rax)
jne 0x4778f
movl $0xffffffff, -0xfc(%rbp) # imm = 0xFFFFFFFF
leaq -0x130(%rbp), %rdi
callq 0x47440
jmp 0x4769b
movq -0x308(%rbp), %rsi
leaq -0x150(%rbp), %rdi
callq 0x47f10
jmp 0x476b0
leaq -0xf8(%rbp), %rdi
leaq -0xfc(%rbp), %rsi
leaq -0x130(%rbp), %rdx
leaq -0x150(%rbp), %rcx
callq 0x47400
jmp 0x476d3
movq -0x318(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x474e0
leaq -0xf8(%rbp), %rdi
callq 0x47510
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x130(%rbp), %rdi
callq 0x2e8b0
movl $0x1, -0x154(%rbp)
jmp 0x47a3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x47a6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x47a61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x5200
jmp 0x47a61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4777e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x130(%rbp), %rdi
callq 0x2e8b0
jmp 0x47a61
movq -0x308(%rbp), %rax
addq $0x90, %rax
movq %rax, -0x330(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x328(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x47ef0
movq -0x328(%rbp), %rdi
movq %rax, %rsi
callq 0x1cb50
movq %rax, -0x320(%rbp)
jmp 0x477cf
movq -0x320(%rbp), %rdx
movq -0x330(%rbp), %rsi
leaq -0x1a0(%rbp), %rdi
callq 0x47f80
jmp 0x477eb
leaq -0x1a0(%rbp), %rdi
callq 0x48440
movq %rax, %rsi
leaq 0xa9cc4(%rip), %rdx     # 0xf14c5
leaq -0x1c0(%rbp), %rdi
callq 0x458c0
jmp 0x4780f
leaq -0x38(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x5440
jmp 0x47821
leaq -0x1c0(%rbp), %rdi
callq 0x5200
leaq -0x1a0(%rbp), %rdi
callq 0x48460
cmpl $-0x1, (%rax)
jne 0x4793d
movl $0xffffffff, -0x21c(%rbp) # imm = 0xFFFFFFFF
leaq -0x250(%rbp), %rdi
callq 0x47440
jmp 0x4785a
movq -0x308(%rbp), %rsi
leaq -0x270(%rbp), %rdi
callq 0x47f10
jmp 0x4786f
leaq -0x218(%rbp), %rdi
leaq -0x21c(%rbp), %rsi
leaq -0x250(%rbp), %rdx
leaq -0x270(%rbp), %rcx
callq 0x47400
jmp 0x47892
movq -0x318(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x474e0
leaq -0x218(%rbp), %rdi
callq 0x47510
leaq -0x270(%rbp), %rdi
callq 0x5200
leaq -0x250(%rbp), %rdi
callq 0x2e8b0
movl $0x1, -0x154(%rbp)
jmp 0x47a23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x47a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x5200
jmp 0x47a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4792c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x5200
leaq -0x250(%rbp), %rdi
callq 0x2e8b0
jmp 0x47a31
leaq -0x70(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0x47ef0
movl (%rax), %eax
movl %eax, -0x344(%rbp)
leaq -0x1a0(%rbp), %rdi
movq %rdi, -0x340(%rbp)
callq 0x48460
movq -0x350(%rbp), %rdi
movq %rax, %rcx
movl -0x344(%rbp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x2cc(%rbp)
callq 0x48500
movq -0x340(%rbp), %rdi
movq %rax, -0x338(%rbp)
callq 0x48520
movq -0x338(%rbp), %rsi
movq %rax, %rdx
leaq -0x300(%rbp), %rdi
callq 0x484c0
jmp 0x479b2
leaq -0x2c8(%rbp), %rdi
leaq -0x2cc(%rbp), %rsi
leaq -0x300(%rbp), %rdx
leaq -0x38(%rbp), %rcx
callq 0x48480
jmp 0x479d2
movq -0x318(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x474e0
leaq -0x2c8(%rbp), %rdi
callq 0x47510
leaq -0x300(%rbp), %rdi
callq 0x2e8b0
movl $0x1, -0x154(%rbp)
jmp 0x47a23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x2e8b0
jmp 0x47a31
leaq -0x1a0(%rbp), %rdi
callq 0x48540
jmp 0x47a3f
leaq -0x1a0(%rbp), %rdi
callq 0x48540
jmp 0x47a61
leaq -0x70(%rbp), %rdi
callq 0x48560
leaq -0x38(%rbp), %rdi
callq 0x5200
movq -0x310(%rbp), %rax
addq $0x350, %rsp            # imm = 0x350
popq %rbp
retq
leaq -0x70(%rbp), %rdi
callq 0x48560
leaq -0x38(%rbp), %rdi
callq 0x5200
movq -0x78(%rbp), %rdi
callq 0x55b0
nopl (%rax)