; assembly | /* r2dec pseudo code output */ | /* balcl_commandline.t/none @ 0x46c7a0 */ | #include | ; (fcn) sym.BloombergLP::balcl::_anonymous_namespace_::u::ScalarConstraint_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____bsl::function_bool__bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char____const__std::__1::basic_ostream_char__std::__1::char_traits_char_______6_::parse_BloombergLP::balcl::OptionValue__std::__1::basic_ostream_char__std::__1::char_traits_char_____bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char____const__const () | uint64_t BloombergLP::balcl::_anonymous_namespace_::u::ScalarConstraint_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_bsl::function_bool_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_const_std::_1::basic_ostream_char_std::_1::char_traits_char_6_::parse_BloombergLP::balcl::OptionValue_std::_1::basic_ostream_char_std::_1::char_traits_char_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_const_const (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_7h; | int64_t var_8h; | int64_t var_18h; | int64_t var_20h; | uint32_t var_28h; | int64_t var_30h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::balcl::(anonymous namespace)::u::ScalarConstraint, bsl::allocator >, bsl::function, bsl::allocator > const*, std::__1::basic_ostream >&)>, 6>::parse(BloombergLP::balcl::OptionValue*, std::__1::basic_ostream >&, bsl::basic_string, bsl::allocator > const&) const */ 0x0046c7a0 push rbp | 0x0046c7a1 push r15 | 0x0046c7a3 push r14 | 0x0046c7a5 push r13 | 0x0046c7a7 push r12 | 0x0046c7a9 push rbx | 0x0046c7aa sub rsp, 0x38 | 0x0046c7ae mov r13, rcx | r13 = rcx; 0x0046c7b1 mov r14, rdx | r14 = rdx; 0x0046c7b4 mov rbx, rsi | rbx = rsi; 0x0046c7b7 mov r15, rdi | r15 = rdi; 0x0046c7ba mov rdi, rsi | 0x0046c7bd call 0x465850 | eax = BloombergLP::balcl::OptionValue::type()const (rsi); 0x0046c7c2 mov ebp, eax | 0x0046c7c4 mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x0046c7cd movaps xmm0, xmmword [rip + 0x37c3c] | xmm0 = .comment; 0x0046c7d4 movups xmmword [rsp + 0x20], xmm0 | __asm ("movups xmmword [rsp + 0x20], xmm0"); 0x0046c7d9 mov rax, qword [rip + 0x299448] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0046c7e0 test rax, rax | | if (rax != 0) { 0x0046c7e3 je 0x46c7f1 | 0x0046c7e5 lea rcx, [rsp + 8] | rcx = rsp + 8; 0x0046c7ea mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0046c7ef jmp 0x46c80f | | } else { 0x0046c7f1 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0046c7f6 cmp qword [rsp + 0x28], 0x17 | 0x0046c7fc mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; | if (*((rsp + 0x28)) != 0x17) { 0x0046c801 je 0x46c80a | 0x0046c803 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0046c808 jmp 0x46c80f | | } else { 0x0046c80a lea rcx, [rsp + 8] | rcx = rsp + 8; | } | } 0x0046c80f mov byte [rcx], 0 | *(rcx) = 0; 0x0046c812 cmp qword [r13 + 0x20], 0x17 | 0x0046c817 mov rsi, r13 | rsi = r13; | if (*((r13 + 0x20)) != 0x17) { 0x0046c81a je 0x46c820 | 0x0046c81c mov rsi, qword [r13] | | } 0x0046c820 lea r12, [rsp + 8] | r12 = rsp + 8; 0x0046c825 mov rdi, r12 | 0x0046c828 mov edx, ebp | 0x0046c82a call 0x46ff90 | al = BloombergLP::balcl::(anonymousnamespace)::u::parseValue(void*,char const*,BloombergLP::balcl::OptionType::Enum) (r12, *(r13), ebp, rcx, r8); 0x0046c82f test al, al | | if (al != 0) { 0x0046c831 je 0x46c926 | 0x0046c837 mov rbp, qword [rbx + 0x38] | rbp = *((rbx + 0x38)); 0x0046c83b cmp byte [rbx + 0x30], 0 | | if (*((rbx + 0x30)) != 0) { 0x0046c83f je 0x46c861 | 0x0046c841 mov byte [rbx + 0x30], 0 | *((rbx + 0x30)) = 0; 0x0046c845 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0046c84a je 0x46c859 | 0x0046c84c mov rsi, qword [rbx] | rsi = *(rbx); 0x0046c84f mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x0046c853 mov rax, qword [rdi] | rax = *(rdi); 0x0046c856 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0046c859 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; | } 0x0046c861 test rbp, rbp | | if (rbp == 0) { 0x0046c864 jne 0x46c87a | 0x0046c866 mov rbp, qword [rip + 0x2993bb] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x0046c86d test rbp, rbp | | if (rbp != 0) { 0x0046c870 jne 0x46c87a | goto label_0; | } 0x0046c872 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0046c877 mov rbp, rax | | } | label_0: 0x0046c87a mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0046c87f mov qword [rbx + 0x20], rax | *((rbx + 0x20)) = rax; 0x0046c883 movups xmm0, xmmword [rsp + 8] | __asm ("movups xmm0, xmmword [rsp + 8]"); 0x0046c888 movups xmm1, xmmword [rsp + 0x18] | __asm ("movups xmm1, xmmword [rsp + 0x18]"); 0x0046c88d movups xmmword [rbx + 0x10], xmm1 | __asm ("movups xmmword [rbx + 0x10], xmm1"); 0x0046c891 movups xmmword [rbx], xmm0 | __asm ("movups xmmword [rbx], xmm0"); 0x0046c894 mov qword [rbx + 0x28], rbp | *((rbx + 0x28)) = rbp; 0x0046c898 cmp rax, 0x17 | | if (rax != 0x17) { 0x0046c89c je 0x46c900 | 0x0046c89e mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0046c8a3 cmp rax, 0x17 | 0x0046c8a7 mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x0046c8ac cmova rsi, rax | rsi = rax; | } 0x0046c8b0 mov qword [rbx], 0 | *(rbx) = 0; 0x0046c8b7 mov qword [rbx + 0x18], rax | *((rbx + 0x18)) = rax; 0x0046c8bb mov qword [rbx + 0x20], rsi | *((rbx + 0x20)) = rsi; 0x0046c8bf cmp rax, 0x18 | | if (rax >= 0x18) { 0x0046c8c3 jb 0x46c8dc | 0x0046c8c5 inc rsi | rsi++; 0x0046c8c8 mov rax, qword [rbp] | rax = *(rbp); 0x0046c8cc mov rdi, rbp | rdi = rbp; 0x0046c8cf call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0046c8d2 mov qword [rbx], rax | *(rbx) = rax; 0x0046c8d5 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0046c8da jne 0x46c8df | goto label_1; | } | } 0x0046c8dc mov rax, rbx | rax = rbx; | label_1: 0x0046c8df mov rdx, qword [rbx + 0x18] | rdx = *((rbx + 0x18)); 0x0046c8e3 inc rdx | rdx++; | if (rdx == 0) { 0x0046c8e6 je 0x46c900 | goto label_2; | } 0x0046c8e8 cmp qword [rsp + 0x28], 0x17 | | if (*((rsp + 0x28)) != 0x17) { 0x0046c8ee je 0x46c8f5 | 0x0046c8f0 mov r12, qword [rsp + 8] | r12 = *((rsp + 8)); | } 0x0046c8f5 mov rdi, rax | 0x0046c8f8 mov rsi, r12 | 0x0046c8fb call 0x404c70 | memcpy (rax, r12, rdx); | } | label_2: 0x0046c900 mov byte [rbx + 0x30], 1 | *((rbx + 0x30)) = 1; 0x0046c904 mov rax, qword [r15] | rax = *(r15); 0x0046c907 mov rdi, r15 | rdi = r15; 0x0046c90a mov rsi, rbx | rsi = rbx; 0x0046c90d mov rdx, r14 | rdx = r14; 0x0046c910 call qword [rax + 0x28] | eax = uint64_t (*rax + 0x28)() (); 0x0046c913 mov ebx, eax | ebx = eax; 0x0046c915 cmp qword [rsp + 0x28], 0x17 | | if (*((rsp + 0x28)) == 0x17) { 0x0046c91b jne 0x46c9ac | 0x0046c921 jmp 0x46c9bc | | } else { 0x0046c926 add ebp, 0xfffffffe | ebp += 0xfffffffe; 0x0046c929 mov ebx, 0x4b4147 | ebx = "An unknown type"; 0x0046c92e cmp ebp, 7 | | if (ebp <= 7) { 0x0046c931 ja 0x46c93e | 0x0046c933 movsxd rax, ebp | rax = (int64_t) ebp; 0x0046c936 mov rbx, qword [rax*8 + 0x4b4028] | rbx = *((rax*8 + 0x4b4028)); | } 0x0046c93e mov rdi, rbx | 0x0046c941 call 0x4046c0 | rax = strlen (*((rax*8 + 0x4b4028))); 0x0046c946 mov rdi, r14 | 0x0046c949 mov rsi, rbx | 0x0046c94c mov rdx, rax | 0x0046c94f call 0x455480 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, rbx, rax); 0x0046c954 mov esi, 0x4b40bd | 0x0046c959 mov edx, 0x21 | 0x0046c95e mov rdi, rax | 0x0046c961 call 0x455480 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, " value was expected, instead of \", 0x21); 0x0046c966 mov rdi, rax | 0x0046c969 mov rsi, r13 | 0x0046c96c call 0x44f6f0 | rax = std::_1::basic_ostream>&bsl::operator << ,bsl::allocator>(std::_1::basic_ostream>&,bsl::basic_string,bsl::allocator>const&) (rax, r13); 0x0046c971 mov esi, 0x4b004d | 0x0046c976 mov edx, 1 | 0x0046c97b mov rdi, rax | 0x0046c97e call 0x455480 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x4b004d, 1); 0x0046c983 mov byte [rsp + 7], 0xa | *((rsp + 7)) = 0xa; 0x0046c988 lea rsi, [rsp + 7] | 0x0046c98d mov edx, 1 | 0x0046c992 mov rdi, rax | 0x0046c995 call 0x455480 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, rsp + 7, 1); 0x0046c99a mov rdi, rax | rdi = rax; 0x0046c99d call 0x404980 | std::_1::basic_ostream>::flush() (); 0x0046c9a2 xor ebx, ebx | ebx = 0; 0x0046c9a4 cmp qword [rsp + 0x28], 0x17 | | if (*((rsp + 0x28)) == 0x17) { 0x0046c9aa je 0x46c9bc | goto label_3; | } | } 0x0046c9ac mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0046c9b1 mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0046c9b6 mov rax, qword [rdi] | rax = *(rdi); 0x0046c9b9 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_3: 0x0046c9bc mov eax, ebx | eax = ebx; 0x0046c9be add rsp, 0x38 | 0x0046c9c2 pop rbx | 0x0046c9c3 pop r12 | 0x0046c9c5 pop r13 | 0x0046c9c7 pop r14 | 0x0046c9c9 pop r15 | 0x0046c9cb pop rbp | 0x0046c9cc ret | return rax; | }