// File: /workspace/github_cpp_makefile_star2_O2/ridiculousfish[P]docopt_fish/docopt_matching.cpp
// Function: docopt_fish::match(docopt_fish::expression_list_t const&, docopt_fish::match_state_t, docopt_fish::match_context_t const&, std::vector<docopt_fish::match_state_t, std::allocator<docopt_fish::match_state_t>>*)
static void match(const expression_list_t &node, match_state_t state, const match_context_t &ctx,
                  match_state_list_t *resulting_states) {
    size_t count = node.expressions.size();
    if (count == 0) {
        // Empty expression list, append the state
        resulting_states->push_back(state.move());
    } else if (count == 1) {
        // Common case of just one expression, trivial
        match(node.expressions.at(0), state.move(), ctx, resulting_states);
    } else {
        // First expression
        match_state_list_t intermed_state_list;
        match(node.expressions.at(0), state.move(), ctx, &intermed_state_list);
        // Middle expressions
        for (size_t i = 1; i + 1 < count; i++) {
            match_state_list_t new_states;
            match_list(node.expressions.at(i), std::move(intermed_state_list), ctx, &new_states);
            intermed_state_list = std::move(new_states);
        }
        // Last expression
        match_list(node.expressions.at(count - 1), std::move(intermed_state_list), ctx, resulting_states);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r13
movq %rdi, %r15
movq 0x8(%rdi), %rax
subq (%rdi), %rax
pushq $0x68
popq %rcx
cqto
idivq %rcx
cmpq $0x1, %rax
je 0x12219
movq %rax, %r12
testq %rax, %rax
jne 0x1225c
movq %rbx, %rdi
movq %r13, %rsi
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x13574
movq %r15, %rdi
xorl %esi, %esi
callq 0x13556
movq %rax, %r15
leaq 0x98(%rsp), %r12
movq %r12, %rdi
movq %r13, %rsi
callq 0x1341a
movq %r15, %rdi
movq %r12, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x12377
leaq 0x98(%rsp), %rdi
callq 0x130ce
jmp 0x12322
movq %rbx, 0x18(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
andq $0x0, 0x10(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0x13556
movq %rax, %rbp
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x1341a
movq %rsp, %rcx
movq %rbp, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x12377
leaq 0x38(%rsp), %rdi
callq 0x130ce
pushq $0x1
popq %rsi
movq %rsp, %r13
leaq 0x20(%rsp), %rbp
leaq 0x1(%rsi), %rbx
cmpq %r12, %rbx
jae 0x122f9
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movq %r15, %rdi
callq 0x13556
movq %rax, %rdi
movq %r13, %rsi
movq %r14, %rdx
movq %rbp, %rcx
callq 0x1287d
movq %r13, %rdi
movq %rbp, %rsi
callq 0x146b2
movq %rbp, %rdi
callq 0x133da
movq %rbx, %rsi
jmp 0x122b1
decq %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x13556
movq %rsp, %rsi
movq %rax, %rdi
movq %r14, %rdx
movq 0x18(%rsp), %rcx
callq 0x1287d
movq %rsp, %rdi
callq 0x133da
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x130ce
jmp 0x12367
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x130ce
jmp 0x1236f
movq %rax, %rbx
jmp 0x12367
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x133da
movq %rsp, %rdi
callq 0x133da
movq %rbx, %rdi
callq 0x7390