// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_expression_fn(input_t*)
pair<int, pl0_ast_expression *> pl0_expression_fn(input_t *text) {
    auto res1 = ((~pl0_addop) + pl0_term)(text);
    pair<int, pl0_ast_expression *> ans;
    if (std::get<0>(res1) == -1) {
        auto vec = std::vector<std::pair<struct pl0_ast_addop *, struct pl0_ast_term *>>();
        ans = make_pair(-1, new pl0_ast_expression(text->locate(), vec));
    }
    else {
        std::pair<struct pl0_ast_addop *, struct pl0_ast_term *> head;
        int headlen = std::get<0>(res1);
        if (std::get<1>(res1).first == nullptr) {
            head = make_pair(new pl0_ast_addop(text->locate(), '+'), std::get<1>(res1).second); // default: '+'
        }
        else {
            head = std::get<1>(res1);
        }
        auto res2 = (++(pl0_addop + pl0_term))(text->drop(headlen));
        auto vec = std::get<1>(res2);
        vec.emplace(vec.begin(), head);
        ans = make_pair(headlen + std::get<0>(res2), new pl0_ast_expression(text->locate(), vec));
    }
    if (verbose) {
        cout << "parsing: Expression" << endl;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x1c0, %rsp            # imm = 0x1C0
movq %rdi, %rbx
leaq 0xb1053(%rip), %rsi     # 0xc11b8
leaq 0x130(%rsp), %r14
movq %r14, %rdi
callq 0x2eed4
leaq 0xb0ed4(%rip), %rdx     # 0xc1050
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x2ed3a
leaq 0xb8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %rbx, %rdx
callq 0x1ecc4
leaq 0x68(%rsp), %rdi
callq 0x2ef46
leaq 0x20(%rsp), %rdi
callq 0x2ef84
leaq 0x130(%rsp), %rdi
callq 0x2ef84
movl 0xe8(%rsp), %eax
xorps %xmm0, %xmm0
cmpl $-0x1, %eax
je 0x101f3
movaps %xmm0, 0x10(%rsp)
movl %eax, 0xc(%rsp)
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0x10247
movq %rax, 0x10(%rsp)
movq 0xe0(%rsp), %rcx
jmp 0x10269
movaps %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
movl $0x20, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq %rax, (%r14)
movq %r14, %rdi
addq $0x8, %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f258
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x1023d
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
jmp 0x10394
movl $0x10, %edi
callq 0x5250
movq 0x8(%rbx), %rcx
movq %rcx, (%rax)
movb $0x2b, 0xc(%rax)
movq 0xe0(%rsp), %rcx
movq %rax, 0x10(%rsp)
movq %rcx, 0x18(%rsp)
leaq 0xb0f43(%rip), %rsi     # 0xc11b8
leaq 0xb0dd4(%rip), %rdx     # 0xc1050
leaq 0x130(%rsp), %rdi
callq 0x2f08a
leaq 0x20(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x2efc2
leaq 0xc(%rsp), %rsi
movq %rbx, %rdi
callq 0x18636
leaq 0xf0(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %rax, %rdx
callq 0x1f1d6
leaq 0x68(%rsp), %rdi
callq 0x2ef46
leaq 0x20(%rsp), %rdi
callq 0x2ef84
leaq 0x178(%rsp), %rdi
callq 0x2ef46
leaq 0x130(%rsp), %rdi
callq 0x2ef84
leaq 0x110(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x1f258
leaq 0x20(%rsp), %rdi
movq (%rdi), %rsi
leaq 0x10(%rsp), %rdx
callq 0x52a16
movl 0x128(%rsp), %ebp
addl 0xc(%rsp), %ebp
movl $0x20, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq %rax, (%r14)
movq %r14, %rdi
addq $0x8, %rdi
leaq 0x20(%rsp), %rsi
callq 0x1f258
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x10356
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x10373
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
leaq 0x100(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10394
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x103b5
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
movl %ebp, %eax
movq %r14, %rdx
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbx
popq %r14
popq %rbp
retq
jmp 0x10444
movq %rax, %rbx
movl $0x20, %esi
movq %r14, %rdi
callq 0x5260
jmp 0x103dd
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x104a5
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
jmp 0x104a5
movq %rax, %rbx
movl $0x20, %esi
movq %r14, %rdi
callq 0x5260
jmp 0x10414
jmp 0x10411
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x10430
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
jmp 0x10430
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x1f2d0
jmp 0x104a5
movq %rax, %rbx
jmp 0x1048b
movq %rax, %rbx
jmp 0x104a5
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x2ef46
leaq 0x20(%rsp), %rdi
callq 0x2ef84
jmp 0x10465
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
callq 0x2ef84
jmp 0x104c6
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x2ef46
leaq 0x20(%rsp), %rdi
callq 0x2ef84
leaq 0x178(%rsp), %rdi
callq 0x2ef46
leaq 0x130(%rsp), %rdi
callq 0x2ef84
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x104c6
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
movq %rbx, %rdi
callq 0x53d0