// File: /workspace/github_cpp_makefile_star2_O3/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 0xaaff4(%rip), %rsi     # 0xbb1b8
leaq 0x130(%rsp), %r14
movq %r14, %rdi
callq 0x2dad6
leaq 0xaae75(%rip), %rdx     # 0xbb050
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x2d94c
leaq 0xb8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %rbx, %rdx
callq 0x1e3fc
leaq 0x68(%rsp), %rdi
callq 0x2db48
leaq 0x20(%rsp), %rdi
callq 0x2db86
leaq 0x130(%rsp), %rdi
callq 0x2db86
movl 0xe8(%rsp), %eax
xorps %xmm0, %xmm0
cmpl $-0x1, %eax
je 0x10252
movaps %xmm0, 0x10(%rsp)
movl %eax, 0xc(%rsp)
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0x102a6
movq %rax, 0x10(%rsp)
movq 0xe0(%rsp), %rcx
jmp 0x102c8
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 0x1e8e8
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x1029c
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
jmp 0x103f3
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 0xaaee4(%rip), %rsi     # 0xbb1b8
leaq 0xaad75(%rip), %rdx     # 0xbb050
leaq 0x130(%rsp), %rdi
callq 0x2dc8c
leaq 0x20(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0x2dbc4
leaq 0xc(%rsp), %rsi
movq %rbx, %rdi
callq 0x183a6
leaq 0xf0(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %rax, %rdx
callq 0x1e866
leaq 0x68(%rsp), %rdi
callq 0x2db48
leaq 0x20(%rsp), %rdi
callq 0x2db86
leaq 0x178(%rsp), %rdi
callq 0x2db48
leaq 0x130(%rsp), %rdi
callq 0x2db86
leaq 0x110(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x1e8e8
leaq 0x20(%rsp), %rdi
movq (%rdi), %rsi
leaq 0x10(%rsp), %rdx
callq 0x4efdc
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 0x1e8e8
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x103b5
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x103d2
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
leaq 0x100(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x103f3
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10414
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 0x104a0
movq %rax, %rbx
movl $0x20, %esi
movq %r14, %rdi
callq 0x5260
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x10501
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
jmp 0x10501
jmp 0x104a0
movq %rax, %rbx
movl $0x20, %esi
movq %r14, %rdi
callq 0x5260
jmp 0x10470
jmp 0x1046d
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x1048c
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x5260
jmp 0x1048c
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x1e960
jmp 0x10501
movq %rax, %rbx
jmp 0x104e7
movq %rax, %rbx
jmp 0x10501
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x2db48
leaq 0x20(%rsp), %rdi
callq 0x2db86
jmp 0x104c1
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
callq 0x2db86
jmp 0x10522
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x2db48
leaq 0x20(%rsp), %rdi
callq 0x2db86
leaq 0x178(%rsp), %rdi
callq 0x2db48
leaq 0x130(%rsp), %rdi
callq 0x2db86
leaq 0xc8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10522
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x5260
movq %rbx, %rdi
callq 0x53d0