; assembly | /* r2dec pseudo code output */ | /* bdlat_symbolicconverter.t/none @ 0x4104e0 */ | #include | ; (fcn) method.int_BloombergLP::bdlat_SymbolicConverter_StoreInChoice_BloombergLP::test::ChoiceA_.operator___bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____BloombergLP::bdlat_SelectionInfo__bsl::basic_string_char__std::__1::char_tra () | uint64_t method_int_BloombergLP::bdlat_SymbolicConverter_StoreInChoice_BloombergLP::test::ChoiceA_operator_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_BloombergLP::bdlat_SelectionInfo_bsl::basic_string_char_std::_1::char_tra (uint32_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlat_SymbolicConverter_StoreInChoice::operator(), bsl::allocator >, BloombergLP::bdlat_SelectionInfo>(bsl::basic_string, bsl::allocator > const&, BloombergLP::bdlat_SelectionInfo const&) const */ 0x004104e0 push rbp | 0x004104e1 push r15 | 0x004104e3 push r14 | 0x004104e5 push r13 | 0x004104e7 push r12 | 0x004104e9 push rbx | 0x004104ea push rax | 0x004104eb mov rbx, rdx | rbx = rdx; 0x004104ee mov r14, rdi | r14 = rdi; 0x004104f1 cmp dword [rdx + 0x10], 0xa | | if (*((rdx + 0x10)) == 0xa) { 0x004104f5 jne 0x4105a0 | 0x004104fb mov r15, rsi | r15 = rsi; 0x004104fe mov r12, qword [r14] | r12 = *(r14); 0x00410501 mov r13, qword [rbx + 8] | r13 = *((rbx + 8)); 0x00410505 movsx rbp, byte [r13] | rbp = *(r13); 0x0041050a call 0x402ed0 | rax = ctype_toupper_loc (); 0x0041050f mov rax, qword [rax] | rax = *(rax); 0x00410512 cmp dword [rax + rbp*4], 0x53 | | if (*((rax + rbp*4)) != 0x53) { 0x00410516 jne 0x4105a0 | goto label_1; | } 0x0041051c movsx rcx, byte [r13 + 1] | rcx = *((r13 + 1)); 0x00410521 cmp dword [rax + rcx*4], 0x45 | | if (*((rax + rcx*4)) != 0x45) { 0x00410525 jne 0x4105a0 | goto label_1; | } 0x00410527 movsx rcx, byte [r13 + 2] | rcx = *((r13 + 2)); 0x0041052c cmp dword [rax + rcx*4], 0x4c | | if (*((rax + rcx*4)) != 0x4c) { 0x00410530 jne 0x4105a0 | goto label_1; | } 0x00410532 movsx rcx, byte [r13 + 3] | rcx = *((r13 + 3)); 0x00410537 cmp dword [rax + rcx*4], 0x45 | | if (*((rax + rcx*4)) != 0x45) { 0x0041053b jne 0x4105a0 | goto label_1; | } 0x0041053d movsx rcx, byte [r13 + 4] | rcx = *((r13 + 4)); 0x00410542 cmp dword [rax + rcx*4], 0x43 | | if (*((rax + rcx*4)) != 0x43) { 0x00410546 jne 0x4105a0 | goto label_1; | } 0x00410548 movsx rcx, byte [r13 + 5] | rcx = *((r13 + 5)); 0x0041054d cmp dword [rax + rcx*4], 0x54 | | if (*((rax + rcx*4)) != 0x54) { 0x00410551 jne 0x4105a0 | goto label_1; | } 0x00410553 movsx rcx, byte [r13 + 6] | rcx = *((r13 + 6)); 0x00410558 cmp dword [rax + rcx*4], 0x49 | | if (*((rax + rcx*4)) != 0x49) { 0x0041055c jne 0x4105a0 | goto label_1; | } 0x0041055e movsx rcx, byte [r13 + 7] | rcx = *((r13 + 7)); 0x00410563 cmp dword [rax + rcx*4], 0x4f | | if (*((rax + rcx*4)) != 0x4f) { 0x00410567 jne 0x4105a0 | goto label_1; | } 0x00410569 movsx rcx, byte [r13 + 8] | rcx = *((r13 + 8)); 0x0041056e cmp dword [rax + rcx*4], 0x4e | | if (*((rax + rcx*4)) != 0x4e) { 0x00410572 jne 0x4105a0 | goto label_1; | } 0x00410574 movsx rcx, byte [r13 + 9] | rcx = *((r13 + 9)); 0x00410579 mov eax, dword [rax + rcx*4] | eax = *((rax + rcx*4)); 0x0041057c cmp eax, 0x31 | | if (eax != 0x31) { 0x0041057f je 0x41058d | 0x00410581 cmp eax, 0x32 | | if (eax != 0x32) { 0x00410584 jne 0x4105a0 | goto label_1; | } 0x00410586 mov eax, 0x4377f8 | eax = 0x4377f8; 0x0041058b jmp 0x410592 | | } else { 0x0041058d mov eax, 0x4377d0 | eax = BloombergLP::test::ChoiceA::SELECTION_INFO_ARRAY; | } 0x00410592 mov esi, dword [rax] | 0x00410594 mov rdi, r12 | 0x00410597 call 0x40f380 | eax = BloombergLP::test::ChoiceA::makeSelection(int) (r12, *(rax)); 0x0041059c test eax, eax | | if (eax == 0) { 0x0041059e je 0x4105ec | goto label_2; | } | } | label_1: 0x004105a0 mov rax, qword [r14 + 8] | rax = *((r14 + 8)); 0x004105a4 mov rdi, qword [rax] | 0x004105a7 mov esi, 0x438d76 | 0x004105ac mov edx, 0x1a | | do { 0x004105b1 call 0x40f6c0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*(rax), "Failed to make selection ', 0x1a); 0x004105b6 mov rdi, rax | 0x004105b9 mov rsi, qword [rbx + 8] | 0x004105bd movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x004105c1 call 0x40f6c0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, *((rbx + 8)), rdx); 0x004105c6 mov esi, 0x438d44 | 0x004105cb mov edx, 2 | 0x004105d0 mov rdi, rax | 0x004105d3 call 0x40f6c0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x438d44, 2); 0x004105d8 mov eax, 0xfffffff8 | eax = 0xfffffff8; | label_0: 0x004105dd add rsp, 8 | 0x004105e1 pop rbx | 0x004105e2 pop r12 | 0x004105e4 pop r13 | 0x004105e6 pop r14 | 0x004105e8 pop r15 | 0x004105ea pop rbp | 0x004105eb ret | return rax; | label_2: 0x004105ec mov rdi, qword [r14] | rdi = *(r14); 0x004105ef cmp dword [rdi + 0x30], 1 | | if (*((rdi + 0x30)) == 1) { 0x004105f3 jne 0x410601 | 0x004105f5 mov rsi, r15 | rsi = r15; 0x004105f8 call 0x40fc00 | eax = intBloombergLP::bdlat_ValueTypeFunctions_Imp::assignSimpleTypes,bsl::allocator>,bsl::basic_string,bsl::allocator>>(bsl::basic_string,bsl::allocator>*,bsl::basic_string,bsl::allocator>const&,BloombergLP::bdlat_ValueTypeFunctions_Imp::IsConvertible) (rdi, rsi, rdx, rcx, r8, r9); 0x004105fd test eax, eax | | if (eax == 0) { 0x004105ff je 0x410614 | goto label_3; | } | } 0x00410601 mov rax, qword [r14 + 8] | rax = *((r14 + 8)); 0x00410605 mov rdi, qword [rax] | rdi = *(rax); 0x00410608 mov esi, 0x438d91 | esi = "Failed to convert selection '; 0x0041060d mov edx, 0x1d | edx = 0x1d; 0x00410612 jmp 0x4105b1 | | } while (1); | label_3: 0x00410614 xor eax, eax | eax = 0; 0x00410616 jmp 0x4105dd | goto label_0; | }