; assembly | /* r2dec pseudo code output */ | /* balcl_optionvalue.t/assume @ 0x42d510 */ | #include | ; (fcn) sym._anonymous_namespace_::u::checkPrint_BloombergLP::balcl::OptionValue_const_ () | uint64_t anonymous_namespace_::u::checkPrint_BloombergLP::balcl::OptionValue_const_ (int64_t arg1) { | int64_t var_18h; | uint32_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_80h; | int64_t var_98h; | uint32_t var_a0h; | int64_t var_a8h; | int64_t var_c0h; | int64_t var_148h; | int64_t var_150h; | rdi = arg1; | /* (anonymous namespace)::u::checkPrint(BloombergLP::balcl::OptionValue const&) */ 0x0042d510 push rbp | 0x0042d511 push r15 | 0x0042d513 push r14 | 0x0042d515 push r13 | 0x0042d517 push r12 | 0x0042d519 push rbx | 0x0042d51a sub rsp, 0x158 | 0x0042d521 mov r14, rdi | r14 = rdi; 0x0042d524 call 0x49f630 | eax = BloombergLP::balcl::OptionValue::type()const (rdi); 0x0042d529 mov r13d, eax | r13d = eax; 0x0042d52c mov rax, qword [rip + 0x2f24ed] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0042d533 test rax, rax | | if (rax == 0) { 0x0042d536 jne 0x42d53d | 0x0042d538 call 0x4a5830 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0042d53d mov qword [rsp], rax | *(rsp) = rax; 0x0042d541 mov qword [rsp + 0xc0], 0x71ccb8 | *((rsp + 0xc0)) = 0x71ccb8; 0x0042d54d lea rbx, [rsp + 0x40] | rbx = rsp + 0x40; 0x0042d552 mov rdx, rsp | 0x0042d555 mov rdi, rbx | 0x0042d558 mov esi, 0x10 | 0x0042d55d call 0x49ec60 | bsl::basic_stringbuf,bsl::allocator>::basic_stringbuf(unsignedint,bsl::allocatorconst&) (rbx, 0x10, rsp); 0x0042d562 mov qword [rsp + 0x38], 0x4ddc78 | *((rsp + 0x38)) = sym.imp.std::__1::basic_ostream_char__std::__1::char_traits_char___::basic_ostream__; 0x0042d56b lea rdi, [rsp + 0xc0] | rdi = rsp + 0xc0; 0x0042d573 mov qword [rsp + 0xc0], 0x4ddca0 | *((rsp + 0xc0)) = fcn.00403910; 0x0042d57f mov rsi, rbx | rsi = rbx; 0x0042d582 call 0x403b20 | std::_1::ios_base::init(void*) (); 0x0042d587 mov qword [rsp + 0x148], 0 | *((rsp + 0x148)) = 0; 0x0042d593 mov dword [rsp + 0x150], 0xffffffff | *((rsp + 0x150)) = 0xffffffff; 0x0042d59e mov qword [rsp + 0x38], 0x4ddc08 | *((rsp + 0x38)) = vtable.bsl::basic_ostringstream_char__std::__1::char_traits_char___bsl::allocator_char___.0; 0x0042d5a7 mov qword [rsp + 0xc0], 0x4ddc30 | *((rsp + 0xc0)) = vtable.bsl::basic_ostringstream_char__std::__1::char_traits_char___bsl::allocator_char___.1; 0x0042d5b3 lea rbp, [rsp + 0x38] | rbp = rsp + 0x38; 0x0042d5b8 mov rdi, r14 | 0x0042d5bb mov rsi, rbp | 0x0042d5be xor edx, edx | 0x0042d5c0 mov ecx, 0xffffffff | 0x0042d5c5 call 0x49f640 | rax = BloombergLP::balcl::OptionValue::print(std::_1::basic_ostream>&,int,int)const (r14, rbp, 0, 0xffffffff); 0x0042d5ca xor edi, edi | edi = 0; 0x0042d5cc cmp rax, rbp | 0x0042d5cf setne dil | dil = (rax != rbp) ? 1 : 0; 0x0042d5d3 mov esi, 0x4ddbb8 | esi = "&ossStream == &(ossStream << obj)"; 0x0042d5d8 mov edx, 0x523 | edx = 0x523; 0x0042d5dd call 0x405440 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x0042d5e2 cmp byte [rip + 0x2f08a9], 0 | | if (*(obj.veryVeryVerbose) != 0) { 0x0042d5e9 je 0x42d6f9 | 0x0042d5ef mov edi, 0x71dae8 | 0x0042d5f4 mov esi, 0x4ddbda | 0x0042d5f9 mov edx, 7 | 0x0042d5fe call 0x49e840 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "STREAM:", 7); 0x0042d603 mov rbp, rax | 0x0042d606 mov rax, qword [rax] | rax = *(rax); 0x0042d609 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x0042d60d add rsi, rbp | rsi += rbp; 0x0042d610 mov rdi, rsp | rdi = rsp; 0x0042d613 call 0x403e00 | std::_1::ios_base::getloc()const (); 0x0042d618 mov rdi, rsp | rdi = rsp; 0x0042d61b mov esi, 0x71da30 | esi = std::__1::ctype::id; 0x0042d620 call 0x403eb0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0042d625 mov rcx, qword [rax] | rcx = *(rax); 0x0042d628 mov rdi, rax | rdi = rax; 0x0042d62b mov esi, 0xa | esi = 0xa; 0x0042d630 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0042d633 mov ebx, eax | ebx = eax; 0x0042d635 mov rdi, rsp | rdi = rsp; 0x0042d638 call 0x403f10 | std::_1::locale::~locale() (); 0x0042d63d movsx esi, bl | esi = (int32_t) bl; 0x0042d640 mov rdi, rbp | rdi = rbp; 0x0042d643 call 0x403c20 | std::_1::basic_ostream>::put(char) (); 0x0042d648 mov rdi, rbp | rdi = rbp; 0x0042d64b call 0x403dd0 | std::_1::basic_ostream>::flush() (); 0x0042d650 mov esi, 0x4de226 | 0x0042d655 mov edx, 1 | 0x0042d65a mov rdi, rbp | 0x0042d65d call 0x49e840 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbp, 0x4de226, 1); 0x0042d662 mov rbp, rax | 0x0042d665 lea rsi, [rsp + 0x40] | 0x0042d66a mov rdi, rsp | 0x0042d66d call 0x49ed50 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, rsp + 0x40); 0x0042d672 mov rsi, rsp | 0x0042d675 mov rdi, rbp | 0x0042d678 call 0x49ee60 | rax = std::_1::basic_ostream>&bsl::operator << ,bsl::allocator>(std::_1::basic_ostream>&,bsl::basic_string,bsl::allocator>const&) (rbp, rsp); 0x0042d67d mov esi, 0x4de226 | 0x0042d682 mov edx, 1 | 0x0042d687 mov rdi, rax | 0x0042d68a call 0x49e840 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x4de226, 1); 0x0042d68f mov rbp, rax | 0x0042d692 mov rax, qword [rax] | rax = *(rax); 0x0042d695 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x0042d699 add rsi, rbp | rsi += rbp; 0x0042d69c lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6a1 call 0x403e00 | std::_1::ios_base::getloc()const (); 0x0042d6a6 lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6ab mov esi, 0x71da30 | esi = std::__1::ctype::id; 0x0042d6b0 call 0x403eb0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0042d6b5 mov rcx, qword [rax] | rcx = *(rax); 0x0042d6b8 mov rdi, rax | rdi = rax; 0x0042d6bb mov esi, 0xa | esi = 0xa; 0x0042d6c0 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0042d6c3 mov ebx, eax | ebx = eax; 0x0042d6c5 lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0042d6ca call 0x403f10 | std::_1::locale::~locale() (); 0x0042d6cf movsx esi, bl | esi = (int32_t) bl; 0x0042d6d2 mov rdi, rbp | rdi = rbp; 0x0042d6d5 call 0x403c20 | std::_1::basic_ostream>::put(char) (); 0x0042d6da mov rdi, rbp | rdi = rbp; 0x0042d6dd call 0x403dd0 | std::_1::basic_ostream>::flush() (); 0x0042d6e2 cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) == 0x17) { 0x0042d6e8 je 0x42d6f9 | goto label_0; | } 0x0042d6ea mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d6ee mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d6f3 mov rax, qword [rdi] | rax = *(rdi); 0x0042d6f6 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_0: 0x0042d6f9 lea r12, [rsp + 0x40] | r12 = rsp + 0x40; 0x0042d6fe mov rdi, rsp | 0x0042d701 mov rsi, r12 | 0x0042d704 call 0x49ed50 | bsl::basic_stringbuf,bsl::allocator>::str()const (rsp, r12); 0x0042d709 mov r15, qword [rsp + 0x18] | r15 = *((rsp + 0x18)); 0x0042d70e cmp qword [rsp + 0x20], 0x17 | | if (*((rsp + 0x20)) != 0x17) { 0x0042d714 je 0x42d725 | 0x0042d716 mov rsi, qword [rsp] | rsi = *(rsp); 0x0042d71a mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0042d71f mov rax, qword [rdi] | rax = *(rdi); 0x0042d722 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d725 cmp r13d, 6 | | if (r13d != 6) { 0x0042d729 je 0x42d740 | 0x0042d72b test r13d, r13d | | if (r13d == 0) { 0x0042d72e jne 0x42d7a3 | 0x0042d730 mov ebp, 1 | 0x0042d735 test r15, r15 | | if (r15 != 0) { 0x0042d738 jne 0x42d8bf | goto label_1; | } 0x0042d73e jmp 0x42d7a8 | 0x0042d740 mov eax, dword [r14 + 0x40] | eax = *((r14 + 0x40)); 0x0042d744 dec eax | eax--; | /* switch table (7 cases) at 0x4cf740 */ 0x0042d746 jmp qword [rax*8 + 0x4cf740] | 0x0042d758 lea rax, [r14 + 8] | rax = r14 + 8; 0x0042d75c cmp byte [rax], 0 | | } else { | } else { | if (*(rax) == 0) { 0x0042d75f jne 0x42d782 | 0x0042d761 jmp 0x42d7a3 | goto label_2; 0x0042d763 lea rax, [r14 + 1] | rax = r14 + 1; 0x0042d767 cmp byte [rax], 0 | | if (*(rax) != 0) { 0x0042d76a jne 0x42d782 | goto label_3; | } 0x0042d76c jmp 0x42d7a3 | goto label_2; 0x0042d76e lea rax, [r14 + 4] | rax = r14 + 4; 0x0042d772 cmp byte [rax], 0 | | if (*(rax) != 0) { 0x0042d775 jne 0x42d782 | goto label_3; | } 0x0042d777 jmp 0x42d7a3 | goto label_2; 0x0042d779 lea rax, [r14 + 0x30] | rax = r14 + 0x30; 0x0042d77d cmp byte [rax], 0 | | if (*(rax) == 0) { 0x0042d780 je 0x42d7a3 | goto label_2; | } | } | label_3: 0x0042d782 mov rdi, r14 | rdi = r14; 0x0042d785 mov esi, 0x44 | esi = 0x44; 0x0042d78a call 0x42c9f0 | al = (anonymousnamespace)::u::hasValueDAB(BloombergLP::balcl::OptionValueconst&,char,int) (); 0x0042d78f test al, al | | if (al != 0) { 0x0042d791 je 0x42d7a3 | 0x0042d793 mov ebp, 2 | 0x0042d798 test r15, r15 | | if (r15 != 0) { 0x0042d79b jne 0x42d8bf | goto label_1; | } 0x0042d7a1 jmp 0x42d7a8 | | } | label_2: 0x0042d7a3 test r15, r15 | | } | } | if (r15 == 0) { 0x0042d7a6 je 0x42d7e0 | goto label_4; | } 0x0042d7a8 mov eax, dword [r14 + 0x40] | eax = *((r14 + 0x40)); 0x0042d7ac jmp qword [rax*8 + 0x4cf7c8] | | label_4: 0x0042d7e0 mov ebp, 3 | 0x0042d7e5 jmp 0x42d8bf | | label_1: 0x0042d8bf lea rdi, [rsp + 0x38] | rdi = rsp + 0x38; 0x0042d8c4 mov esi, 0x4ddc48 | esi = 0x4ddc48; 0x0042d8c9 call 0x403f50 | std::_1::basic_ostream>::~basic_ostream() (); 0x0042d8ce mov qword [rsp + 0x40], 0x4ddd98 | *((rsp + 0x40)) = vtable.bsl::basic_stringbuf_char__std::__1::char_traits_char___bsl::allocator_char___.0; 0x0042d8d7 cmp qword [rsp + 0xa0], 0x17 | | if (*((rsp + 0xa0)) != 0x17) { 0x0042d8e0 je 0x42d8f8 | 0x0042d8e2 mov rsi, qword [rsp + 0x80] | rsi = *((rsp + 0x80)); 0x0042d8ea mov rdi, qword [rsp + 0xa8] | rdi = *((rsp + 0xa8)); 0x0042d8f2 mov rax, qword [rdi] | rax = *(rdi); 0x0042d8f5 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0042d8f8 mov qword [rsp + 0x98], 0xffffffffffffffff | *((rsp + 0x98)) = 0xffffffffffffffff; 0x0042d904 lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x0042d909 call 0x403a50 | std::_1::basic_streambuf>::~basic_streambuf() (); 0x0042d90e lea rdi, [rsp + 0xc0] | rdi = rsp + 0xc0; 0x0042d916 call 0x403990 | std::_1::basic_ios>::~basic_ios() (); 0x0042d91b mov eax, ebp | eax = ebp; 0x0042d91d add rsp, 0x158 | 0x0042d924 pop rbx | 0x0042d925 pop r12 | 0x0042d927 pop r13 | 0x0042d929 pop r14 | 0x0042d92b pop r15 | 0x0042d92d pop rbp | 0x0042d92e ret | return rax; | }