// File: sighingnow[P]compile-pascal/./libparsec/combinator.hpp
// Function: chainl<parser_t<pl0_ast_factor*>, parser_t<pl0_ast_multop*>, pl0_ast_factor*, pl0_ast_multop*>::operator()[abi:cxx11](input_t*) const
tuple<int, parser_type const, string const> operator () (input_t *text) const {
        auto result = parser_type();
        int length = 0;
        
        auto res1 = p(text);
        if (std::get<0>(res1) == -1) { // parser the first left value.
            return make_tuple(-1, result, name());
        }
        length = std::get<0>(res1);
        text = text->drop(std::get<0>(res1));
        element_type e = element_type();
        e.second = std::get<1>(res1);
        result.emplace_back(e);
        
        // parser the other values.
        while (!text->empty()) {
            auto res = (op + p)(text);
            if (std::get<0>(res) == -1) {
                break;
            }
            length += std::get<0>(res);
            text = text->drop(std::get<0>(res));
            result.emplace_back(std::get<1>(res));
        }

        // finish.
        return make_tuple(length, result, name());
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
movq %rdi, -0x238(%rbp)
movq %rdi, %rax
movq %rax, -0x230(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x228(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x30(%rbp)
movq $0x0, -0x20(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x81f80
movq -0x228(%rbp), %rsi
movl $0x0, -0x34(%rbp)
movq -0x18(%rbp), %rdx
leaq -0x68(%rbp), %rdi
callq 0x81fa0
jmp 0x25e08
leaq -0x68(%rbp), %rdi
callq 0x82080
cmpl $-0x1, (%rax)
jne 0x25ed2
movq -0x228(%rbp), %rsi
movl $0xffffffff, -0xbc(%rbp) # imm = 0xFFFFFFFF
leaq -0xe0(%rbp), %rdi
callq 0x820e0
jmp 0x25e39
leaq -0xb8(%rbp), %rdi
leaq -0xbc(%rbp), %rsi
leaq -0x30(%rbp), %rdx
leaq -0xe0(%rbp), %rcx
callq 0x820a0
jmp 0x25e59
movq -0x238(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x82150
leaq -0xb8(%rbp), %rdi
callq 0x82180
leaq -0xe0(%rbp), %rdi
callq 0x5200
movl $0x1, -0xe4(%rbp)
jmp 0x26122
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2614d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x26144
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x5200
jmp 0x26144
leaq -0x68(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x82080
movq -0x250(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x248(%rbp)
callq 0x82080
movq -0x248(%rbp), %rdi
movq %rax, %rsi
callq 0x1cb50
movq %rax, -0x240(%rbp)
jmp 0x25f16
movq -0x240(%rbp), %rax
movq %rax, -0x18(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x821a0
jmp 0x25f2f
leaq -0x68(%rbp), %rdi
callq 0x821c0
movq (%rax), %rax
movq %rax, -0xf0(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x821e0
jmp 0x25f54
jmp 0x25f56
movq -0x18(%rbp), %rdi
callq 0x19780
xorb $-0x1, %al
testb $0x1, %al
jne 0x25f6a
jmp 0x2609f
movq -0x228(%rbp), %rdx
movq %rdx, %rsi
addq $0x48, %rsi
leaq -0x1c0(%rbp), %rdi
callq 0x82260
jmp 0x25f86
movq -0x18(%rbp), %rdx
leaq -0x130(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x822a0
jmp 0x25f9f
leaq -0x1c0(%rbp), %rdi
callq 0x826f0
leaq -0x130(%rbp), %rdi
callq 0x82720
cmpl $-0x1, (%rax)
jne 0x25fe8
movl $0x3, -0xe4(%rbp)
jmp 0x26063
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x826f0
jmp 0x26144
leaq -0x130(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x82720
movq -0x268(%rbp), %rdi
movl (%rax), %ecx
movl -0x34(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x34(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x260(%rbp)
callq 0x82720
movq -0x260(%rbp), %rdi
movq %rax, %rsi
callq 0x1cb50
movq %rax, -0x258(%rbp)
jmp 0x26034
movq -0x258(%rbp), %rax
movq %rax, -0x18(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x827c0
movq %rax, %rsi
leaq -0x30(%rbp), %rdi
callq 0x82740
jmp 0x26059
movl $0x0, -0xe4(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x827e0
movl -0xe4(%rbp), %eax
testl %eax, %eax
je 0x2607d
jmp 0x2607b
jmp 0x2609f
jmp 0x25f56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x827e0
jmp 0x26144
movq -0x228(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x820e0
jmp 0x260b4
leaq -0x200(%rbp), %rdi
leaq -0x34(%rbp), %rsi
leaq -0x30(%rbp), %rdx
leaq -0x220(%rbp), %rcx
callq 0x82800
jmp 0x260d1
movq -0x238(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x82150
leaq -0x200(%rbp), %rdi
callq 0x82180
leaq -0x220(%rbp), %rdi
callq 0x5200
movl $0x1, -0xe4(%rbp)
jmp 0x26122
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x5200
jmp 0x26144
leaq -0x68(%rbp), %rdi
callq 0x82840
leaq -0x30(%rbp), %rdi
callq 0x3b980
movq -0x230(%rbp), %rax
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
leaq -0x68(%rbp), %rdi
callq 0x82840
leaq -0x30(%rbp), %rdi
callq 0x3b980
movq -0x70(%rbp), %rdi
callq 0x55b0
nop