// File: /workspace/github_cpp_makefile_star2_O2/vsklad[P]cgen/commandline.cpp
// Function: CGenCommandLineReader::parse_variable_except(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, CGenVariableInfo, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, CGenVariableInfo>>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void CGenCommandLineReader::parse_variable_except(CGenVariablesMap& variables_map, const std::string& variable_name) {
    if (variable_name.empty()) {
        parse_error(ERROR_EXCEPT_MUST_FOLLOW_DEFINITION);
    };
    if (is_binary_variable_name(variable_name)) {
        parse_error(ERROR_BINARY_VARIABLE_EXCEPT_INCOMPATIBLE);
    };
    
    CGenVariableInfo& variable_value = variables_map.find(variable_name)->second;
    
    if (variable_value.replace_existing) {
        parse_error(ERROR_EXCEPT_REPLACE_INCOMPATIBLE);
    };
    
    skip_token();
    read_symbol(':');
    const uint32_t param1 = read_uint32();
    if (is_symbol('.')) {
        if (param1 == 0) {
            parse_error(ERROR_RANGE_FIRST_ZERO);
        };
        variable_value.except_range_first = param1 - 1; // becomes zero based
        read_symbol('.');
        read_symbol('.');
        const uint32_t param2 = read_uint32(); // index of the last element, 1 based
        if (param2 < variable_value.except_range_first) {
            parse_error(ERROR_RANGE_FIRST_LAST);
        };
        variable_value.except_range_size = param2 - variable_value.except_range_first;
    } else {
        if (param1 == 0) {
            parse_error(ERROR_EXCEPT_ZERO);
        };
        variable_value.except_count = param1;
    };
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
cmpq $0x0, 0x8(%rdx)
jne 0x16b17
movq (%rbx), %rax
movq -0x18(%rax), %r12
leaq 0x20a07(%rip), %rsi     # 0x374e9
leaq -0xf0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %rbx, %r12
leaq -0xf0(%rbp), %rsi
movq %r12, %rdi
callq 0x189ce
leaq -0xf0(%rbp), %rdi
callq 0xc110
cmpq $0x0, 0x8(%r14)
je 0x16b61
movq (%r14), %rax
movsbl (%rax), %eax
addl $-0x30, %eax
cmpl $0x9, %eax
ja 0x16b61
movq (%rbx), %rax
movq -0x18(%rax), %r12
leaq 0x209f5(%rip), %rsi     # 0x37528
leaq -0xd0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %rbx, %r12
leaq -0xd0(%rbp), %rsi
movq %r12, %rdi
callq 0x189ce
leaq -0xd0(%rbp), %rdi
callq 0xc110
movq %r15, %rdi
movq %r14, %rsi
callq 0x19c10
movq %rax, %r14
cmpb $0x1, 0x78(%rax)
jne 0x16bb1
movq (%rbx), %rax
movq -0x18(%rax), %r15
leaq 0x209d8(%rip), %rsi     # 0x3755b
leaq -0xb0(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %rbx, %r15
leaq -0xb0(%rbp), %rsi
movq %r15, %rdi
callq 0x189ce
leaq -0xb0(%rbp), %rdi
callq 0xc110
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movq 0x10(%rbx,%rcx), %rdx
addq %rdx, 0x8(%rbx,%rcx)
andq $0x0, 0x10(%rbx,%rcx)
andl $0x0, 0x40(%rbx,%rcx)
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $0x3a
popq %rsi
callq 0x18ac2
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $-0x1
popq %rdx
xorl %esi, %esi
callq 0x1866c
movl %eax, %r15d
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $0x2e
popq %rsi
callq 0x18a92
testb %al, %al
je 0x16cdd
testl %r15d, %r15d
jne 0x16c4e
movq (%rbx), %rax
movq -0x18(%rax), %r12
leaq 0x20976(%rip), %rsi     # 0x37596
leaq -0x90(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %rbx, %r12
leaq -0x90(%rbp), %rsi
movq %r12, %rdi
callq 0x189ce
leaq -0x90(%rbp), %rdi
callq 0xc110
decl %r15d
movl %r15d, 0x4c(%r14)
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $0x2e
popq %r15
movl %r15d, %esi
callq 0x18ac2
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl %r15d, %esi
callq 0x18ac2
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
pushq $-0x1
popq %rdx
xorl %esi, %esi
callq 0x1866c
movl %eax, %r15d
movl 0x4c(%r14), %eax
cmpl %eax, %r15d
jae 0x16cd4
movq (%rbx), %rax
movq -0x18(%rax), %r12
leaq 0x2092f(%rip), %rsi     # 0x375da
leaq -0x70(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %r12, %rbx
leaq -0x70(%rbp), %rsi
movq %rbx, %rdi
callq 0x189ce
leaq -0x70(%rbp), %rdi
callq 0xc110
movl 0x4c(%r14), %eax
subl %eax, %r15d
pushq $0x50
popq %r12
jmp 0x16d19
pushq $0x48
popq %r12
testl %r15d, %r15d
jne 0x16d19
movq (%rbx), %rax
movq -0x18(%rax), %r13
leaq 0x20935(%rip), %rsi     # 0x37629
leaq -0x50(%rbp), %rdi
leaq -0x29(%rbp), %rdx
callq 0xc0e0
addq %r13, %rbx
leaq -0x50(%rbp), %rsi
movq %rbx, %rdi
callq 0x189ce
leaq -0x50(%rbp), %rdi
callq 0xc110
movl %r15d, (%r14,%r12)
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x50(%rbp), %rdi
jmp 0x16d79
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
jmp 0x16d79
jmp 0x16d80
jmp 0x16d80
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
jmp 0x16d79
jmp 0x16d80
movq %rax, %rbx
leaq -0xf0(%rbp), %rdi
jmp 0x16d79
jmp 0x16d80
movq %rax, %rbx
leaq -0xd0(%rbp), %rdi
jmp 0x16d79
jmp 0x16d80
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0xc110
jmp 0x16d83
movq %rax, %rbx
movq %rbx, %rdi
callq 0xc4c0
nop