// File: /workspace/github_cpp_makefile_star2_O1/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 0x1a8f7
movq (%rbx), %rax
leaq -0x98(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2ccbb(%rip), %rsi     # 0x47579
leaq 0x2ccf2(%rip), %rdx     # 0x475b7
leaq -0xa8(%rbp), %r13
movq %r13, %rdi
callq 0x1f29e
movq %r12, %rdi
movq %r13, %rsi
callq 0x1de0a
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x1a8f7
callq 0xc280
cmpq $0x0, 0x8(%r14)
je 0x1a95b
movq (%r14), %rax
movsbl (%rax), %eax
addl $-0x30, %eax
cmpl $0x9, %eax
ja 0x1a95b
movq (%rbx), %rax
leaq -0x78(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2cc93(%rip), %rsi     # 0x475b8
leaq 0x2ccbe(%rip), %rdx     # 0x475ea
leaq -0x88(%rbp), %r13
movq %r13, %rdi
callq 0x1f29e
movq %r12, %rdi
movq %r13, %rsi
callq 0x1de0a
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x1a95b
callq 0xc280
movq %r15, %rdi
movq %r14, %rsi
callq 0x1f570
movq %rax, %r14
cmpb $0x1, 0x78(%rax)
jne 0x1a9bd
movq (%rbx), %rax
leaq -0xd8(%rbp), %r13
movq -0x18(%rax), %r15
addq %rbx, %r15
movq %r13, -0x10(%r13)
leaq 0x2cc60(%rip), %rsi     # 0x475eb
leaq 0x2cc93(%rip), %rdx     # 0x47625
leaq -0xe8(%rbp), %r12
movq %r12, %rdi
callq 0x1f29e
movq %r15, %rdi
movq %r12, %rsi
callq 0x1de0a
movq -0xe8(%rbp), %rdi
cmpq %r13, %rdi
je 0x1a9bd
callq 0xc280
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movq 0x10(%rbx,%rcx), %rdx
addq %rdx, 0x8(%rbx,%rcx)
movq $0x0, 0x10(%rbx,%rcx)
movl $0x0, 0x40(%rbx,%rcx)
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x3a, %esi
callq 0x1df9e
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x1d7d8
movl %eax, %r15d
movq (%rbx), %rax
movq -0x18(%rax), %r13
leaq (%rbx,%r13), %r12
movq %r12, %rdi
callq 0x1eae0
cmpq $0x0, 0x10(%rbx,%r13)
je 0x1ab2f
movq 0x8(%r12), %rax
movq 0x18(%r12), %rcx
cmpb $0x2e, (%rcx,%rax)
jne 0x1ab2f
testl %r15d, %r15d
jne 0x1aa8a
movq (%rbx), %rax
leaq -0x58(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2cbcc(%rip), %rsi     # 0x47626
leaq 0x2cc08(%rip), %rdx     # 0x47669
leaq -0x68(%rbp), %r13
movq %r13, %rdi
callq 0x1f29e
movq %r12, %rdi
movq %r13, %rsi
callq 0x1de0a
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x1aa8a
callq 0xc280
decl %r15d
movl %r15d, 0x4c(%r14)
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x2e, %esi
callq 0x1df9e
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x2e, %esi
callq 0x1df9e
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x1d7d8
movl %eax, %r15d
cmpl 0x4c(%r14), %eax
jae 0x1ab23
movq (%rbx), %rax
leaq -0xb8(%rbp), %r13
addq -0x18(%rax), %rbx
movq %r13, -0x10(%r13)
leaq 0x2cb79(%rip), %rsi     # 0x4766a
leaq 0x2cbc0(%rip), %rdx     # 0x476b8
leaq -0xc8(%rbp), %r12
movq %r12, %rdi
callq 0x1f29e
movq %rbx, %rdi
movq %r12, %rsi
callq 0x1de0a
movq -0xc8(%rbp), %rdi
cmpq %r13, %rdi
je 0x1ab23
callq 0xc280
subl 0x4c(%r14), %r15d
movl $0x50, %r13d
jmp 0x1ab80
movl $0x48, %r13d
testl %r15d, %r15d
jne 0x1ab80
movq (%rbx), %rax
leaq -0x38(%rbp), %rcx
addq -0x18(%rax), %rbx
movq %rcx, -0x10(%rcx)
leaq 0x2cb69(%rip), %rsi     # 0x476b9
leaq 0x2cbb7(%rip), %rdx     # 0x4770e
leaq -0x48(%rbp), %r12
movq %r12, %rdi
callq 0x1f29e
movq %rbx, %rdi
movq %r12, %rsi
callq 0x1de0a
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x1ab80
callq 0xc280
movl %r15d, (%r14,%r13)
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
jmp 0x1abdd
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
jmp 0x1abf9
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
jmp 0x1abdd
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
jmp 0x1abdd
movq %rax, %rbx
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x1abe7
callq 0xc280
movq %rbx, %rdi
callq 0xc4e0
movq %rax, %rbx
movq -0xe8(%rbp), %rdi
cmpq %r13, %rdi
jne 0x1abe2
jmp 0x1abe7