// File: /workspace/github_cpp_makefile_star2_O2/ridiculousfish[P]docopt_fish/docopt_fish.cpp
// Function: docopt_fish::docopt_impl::suggest_next_argument(std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>>> const&, unsigned int) const
suggestion_list_t suggest_next_argument(const string_list_t &argv_with_partial, parse_flags_t flags) const {
        // Set internal flags to generate suggestions
        flags |= flag_generate_suggestions;

        // The last argument is partial
        // Remove it and store it separately
        string_list_t argv = argv_with_partial;
        string_t partial_last_arg;
        if (! argv.empty()) {
            partial_last_arg = argv.back();
            argv.pop_back();
        }
        
        // Try completing a value for the last partial argument
        // This includes both --foo=bar... and -DNDEB...
        if (! partial_last_arg.empty()) {
            suggestion_list_t value_suggestions = this->suggest_value_completion(partial_last_arg);
            if (! value_suggestions.empty()) {
                return value_suggestions;
            }
        }
        
        suggestion_t suggestion;
        arg_classification_t aclass = argv_classifier_t::classify_arguments(argv, all_options, names_to_metadata,
                                                                           flags, nullptr /* errors */, &suggestion);

        // If we got a suggestion, it means that the last argument was of the form
        // --foo, where --foo wants a value. That's all we care about.
        if (!suggestion.token.empty()) {
            return {std::move(suggestion)};
        }
        
        // Perform the actual matching
        match_results_t mr = match_usages(this->usages, flags, this->shortcut_options, aclass, argv);
        
        // Turn the mr suggestion tokens into our annotated suggestions
        suggestion_list_t result;
        result.reserve(mr.suggestions.size());
        for (const rstring_t &tok : mr.suggestions) {
            result.push_back(suggestion_for(tok, this->names_to_metadata));
        }
        
        // Handle combined shorts with the partial argument
        if (! partial_last_arg.empty()) {
            combine_short_suggestions(&result, partial_last_arg);
        }
        
        return result;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x218, %rsp            # imm = 0x218
movl %ecx, %ebp
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x10(%rsp), %r15
movq %r15, %rdi
movq %rdx, %rsi
callq 0xb19a
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
andl $0x0, (%rax)
movq 0x8(%r15), %rsi
cmpq %rsi, (%r15)
je 0x96c3
addq $-0x20, %rsi
leaq 0x28(%rsp), %rdi
callq 0x7330
movq 0x18(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x18(%rsp)
callq 0x7050
cmpq $0x0, 0x30(%rsp)
je 0x96c3
leaq 0x28(%rsp), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb1ee
movq (%rbx), %rax
cmpq 0x8(%rbx), %rax
jne 0x980c
movq %rbx, %rdi
callq 0xb3c6
leaq 0x188(%rsp), %r12
movq %r12, %rdi
callq 0xaea2
orl $0x10000, %ebp          # imm = 0x10000
leaq 0x68(%r14), %rdx
leaq 0x80(%r14), %r15
movq %r12, (%rsp)
leaq 0x48(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %r15, %rcx
movl %ebp, %r8d
xorl %r9d, %r9d
callq 0x8658
cmpq $0x0, 0x190(%rsp)
je 0x974b
leaq 0xf8(%rsp), %r14
leaq 0x188(%rsp), %rsi
movq %r14, %rdi
callq 0xb3e8
pushq $0x1
popq %rdx
leaq 0x80(%rsp), %rcx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb41a
leaq 0xf8(%rsp), %rdi
callq 0xabd8
jmp 0x97f5
leaq 0x50(%r14), %rcx
leaq 0x80(%rsp), %rdi
leaq 0x48(%rsp), %r8
leaq 0x10(%rsp), %r9
movq %r14, %rsi
movl %ebp, %edx
callq 0x11d84
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
movq 0xf0(%rsp), %rsi
movq %rbx, %rdi
callq 0xb456
leaq 0xd0(%rsp), %rbp
movq 0x10(%rbp), %r13
leaq 0xf8(%rsp), %r12
cmpq %rbp, %r13
je 0x97d0
leaq 0x20(%r13), %rsi
movq %r12, %rdi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x8b6b
movq %rbx, %rdi
movq %r12, %rsi
callq 0xbad6
movq %r12, %rdi
callq 0xabd8
movq %r13, %rdi
callq 0x72c0
movq %rax, %r13
jmp 0x979a
cmpq $0x0, 0x30(%rsp)
je 0x97e8
leaq 0x28(%rsp), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0xb502
leaq 0x80(%rsp), %rdi
callq 0xaf54
leaq 0x48(%rsp), %rdi
callq 0xaeca
leaq 0x188(%rsp), %rdi
callq 0xabd8
leaq 0x28(%rsp), %rdi
callq 0x7050
leaq 0x10(%rsp), %rdi
callq 0xb092
movq %rbx, %rax
addq $0x218, %rsp            # imm = 0x218
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x9884
jmp 0x985a
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0xabd8
jmp 0x9884
movq %rax, %r14
jmp 0x988e
jmp 0x9855
movq %rax, %r14
jmp 0x989b
movq %rax, %r14
jmp 0x986f
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0xabd8
movq %rbx, %rdi
callq 0xb3c6
leaq 0x80(%rsp), %rdi
callq 0xaf54
leaq 0x48(%rsp), %rdi
callq 0xaeca
leaq 0x188(%rsp), %rdi
callq 0xabd8
leaq 0x28(%rsp), %rdi
callq 0x7050
leaq 0x10(%rsp), %rdi
callq 0xb092
movq %r14, %rdi
callq 0x7390
nop