// File: sighingnow[P]compile-pascal/./libparsec/combinator.hpp
// Function: compose<mapfn<many<parser_t<char>, char>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::vector<char, std::allocator<char>>>, 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*>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::pair<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()(input_t*) const
tuple<int, parser_type const, string const> operator () (input_t *text) const {
        auto res1 = pa(text);
        if (std::get<0>(res1) == -1) {
            return make_tuple(-1, parser_type(), name());
        }
        auto res2 = pb(text->drop(std::get<0>(res1)));
        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), std::get<1>(res2), name());
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x300, %rsp            # imm = 0x300
movq %rdi, -0x2c8(%rbp)
movq %rdi, %rax
movq %rax, -0x2c0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x2b8(%rbp)
movq -0x18(%rbp), %rdx
leaq -0x60(%rbp), %rdi
callq 0x44390
leaq -0x60(%rbp), %rdi
callq 0x1c110
cmpl $-0x1, (%rax)
jne 0x47172
movl $0xffffffff, -0xbc(%rbp) # imm = 0xFFFFFFFF
leaq -0xf0(%rbp), %rdi
callq 0x47440
jmp 0x4709a
movq -0x2b8(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x47570
jmp 0x470af
leaq -0xb8(%rbp), %rdi
leaq -0xbc(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
leaq -0x120(%rbp), %rcx
callq 0x47400
jmp 0x470d2
movq -0x2c8(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x474e0
leaq -0xb8(%rbp), %rdi
callq 0x47510
leaq -0x120(%rbp), %rdi
callq 0x5200
leaq -0xf0(%rbp), %rdi
callq 0x2e8b0
movl $0x1, -0x124(%rbp)
jmp 0x473c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x473df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x47161
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x5200
leaq -0xf0(%rbp), %rdi
callq 0x2e8b0
jmp 0x473df
movq -0x2b8(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x2e0(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x2d8(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x1c110
movq -0x2d8(%rbp), %rdi
movq %rax, %rsi
callq 0x1cb50
movq %rax, -0x2d0(%rbp)
jmp 0x471b0
movq -0x2d0(%rbp), %rdx
movq -0x2e0(%rbp), %rsi
leaq -0x180(%rbp), %rdi
callq 0x475e0
jmp 0x471cc
leaq -0x180(%rbp), %rdi
callq 0x1b180
cmpl $-0x1, (%rax)
jne 0x472d1
movl $0xffffffff, -0x1dc(%rbp) # imm = 0xFFFFFFFF
leaq -0x210(%rbp), %rdi
callq 0x47440
jmp 0x471f9
movq -0x2b8(%rbp), %rsi
leaq -0x230(%rbp), %rdi
callq 0x47570
jmp 0x4720e
leaq -0x1d8(%rbp), %rdi
leaq -0x1dc(%rbp), %rsi
leaq -0x210(%rbp), %rdx
leaq -0x230(%rbp), %rcx
callq 0x47400
jmp 0x47231
movq -0x2c8(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x474e0
leaq -0x1d8(%rbp), %rdi
callq 0x47510
leaq -0x230(%rbp), %rdi
callq 0x5200
leaq -0x210(%rbp), %rdi
callq 0x2e8b0
movl $0x1, -0x124(%rbp)
jmp 0x473aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x473b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x472c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x5200
leaq -0x210(%rbp), %rdi
callq 0x2e8b0
jmp 0x473b8
leaq -0x60(%rbp), %rdi
callq 0x1c110
movl (%rax), %eax
movl %eax, -0x2ec(%rbp)
leaq -0x180(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x1b180
movq -0x2f8(%rbp), %rdi
movq %rax, %rcx
movl -0x2ec(%rbp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x28c(%rbp)
callq 0x1b1a0
movq -0x2b8(%rbp), %rsi
movq %rax, -0x2e8(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x47570
jmp 0x47330
movq -0x2e8(%rbp), %rdx
leaq -0x288(%rbp), %rdi
leaq -0x28c(%rbp), %rsi
leaq -0x2b0(%rbp), %rcx
callq 0x47530
jmp 0x47353
movq -0x2c8(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x474e0
leaq -0x288(%rbp), %rdi
callq 0x47510
leaq -0x2b0(%rbp), %rdi
callq 0x5200
movl $0x1, -0x124(%rbp)
jmp 0x473aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x5200
jmp 0x473b8
leaq -0x180(%rbp), %rdi
callq 0x1b220
jmp 0x473c6
leaq -0x180(%rbp), %rdi
callq 0x1b220
jmp 0x473df
leaq -0x60(%rbp), %rdi
callq 0x1c190
movq -0x2c0(%rbp), %rax
addq $0x300, %rsp            # imm = 0x300
popq %rbp
retq
leaq -0x60(%rbp), %rdi
callq 0x1c190
movq -0xf8(%rbp), %rdi
callq 0x55b0
nopw %cs:(%rax,%rax)
nop