; assembly | /* r2dec pseudo code output */ | /* bdlat_symbolicconverter.t/none @ 0x40ffa0 */ | #include | ; (fcn) method.int_BloombergLP::bdlat_SymbolicConverter_StoreInSequence_BloombergLP::test::MixedSequence_.operator___BloombergLP::test::EnumerationA::Value__BloombergLP::bdlat_AttributeInfo__BloombergLP::test::EnumerationA::Value_const__BloombergLP::bdlat_Attri () | uint64_t method_int_BloombergLP::bdlat_SymbolicConverter_StoreInSequence_BloombergLP::test::MixedSequence_operator_BloombergLP::test::EnumerationA::Value_BloombergLP::bdlat_AttributeInfo_BloombergLP::test::EnumerationA::Value_const_BloombergLP::bdlat_Attri (int64_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bdlat_SymbolicConverter_StoreInSequence::operator()(BloombergLP::test::EnumerationA::Value const&, BloombergLP::bdlat_AttributeInfo const&) const */ 0x0040ffa0 push r15 | 0x0040ffa2 push r14 | 0x0040ffa4 push r13 | 0x0040ffa6 push r12 | 0x0040ffa8 push rbx | 0x0040ffa9 mov rbx, rdx | rbx = rdx; 0x0040ffac mov r12, rsi | r12 = rsi; 0x0040ffaf mov r15, rdi | r15 = rdi; 0x0040ffb2 mov r14, qword [rdi] | r14 = *(rdi); 0x0040ffb5 mov r13, qword [rdi + 8] | r13 = *((rdi + 8)); 0x0040ffb9 mov rdi, qword [rdx + 8] | 0x0040ffbd mov esi, dword [rdx + 0x10] | 0x0040ffc0 call 0x404960 | rax = BloombergLP::test::MixedSequence::lookupAttributeInfo(char const*,int) (*((rdx + 8)), *((rdx + 0x10))); 0x0040ffc5 test rax, rax | | if (rax != 0) { 0x0040ffc8 je 0x40fff4 | 0x0040ffca mov eax, dword [rax] | eax = *(rax); 0x0040ffcc dec eax | eax--; 0x0040ffce cmp eax, 4 | | if (eax > 4) { 0x0040ffd1 ja 0x40fff4 | goto label_2; | } | /* switch table (5 cases) at 0x437d10 */ 0x0040ffd3 jmp qword [rax*8 + 0x437d10] | 0x0040ffda add r14, 0x40 | r14 += 0x40; 0x0040ffde mov rdi, r13 | 0x0040ffe1 mov rsi, r14 | 0x0040ffe4 mov rdx, r12 | rdx = r12; 0x0040ffe7 call 0x410860 | eax = intBloombergLP::bdlat_SymbolicConverter_Imp::convert(BloombergLP::test::CustomizedA*,BloombergLP::bdlat_TypeCategory::CustomizedType,BloombergLP::test::EnumerationA::Valueconst&,BloombergLP::bdlat_TypeCategory::Enumeration) (r13, r14); 0x0040ffec test eax, eax | | if (eax == 0) { 0x0040ffee je 0x410069 | goto label_3; | } | label_0: 0x0040fff0 mov r13, qword [r15 + 8] | r13 = *((r15 + 8)); | } | label_2: 0x0040fff4 mov rdi, qword [r13] | 0x0040fff8 mov esi, 0x438d26 | 0x0040fffd mov edx, 0x1d | 0x00410002 call 0x40f6c0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*(r13), "Failed to convert attribute ', 0x1d); 0x00410007 mov rsi, qword [rbx + 8] | 0x0041000b movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041000f mov rdi, rax | 0x00410012 call 0x40f6c0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, *((rbx + 8)), rdx); 0x00410017 mov esi, 0x438d44 | 0x0041001c mov edx, 2 | 0x00410021 mov rdi, rax | 0x00410024 call 0x40f6c0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x438d44, 2); 0x00410029 mov ebx, 0xfffffff9 | ebx = 0xfffffff9; | do { | label_1: 0x0041002e mov eax, ebx | eax = 0xfffffff9; 0x00410030 pop rbx | 0x00410031 pop r12 | 0x00410033 pop r13 | 0x00410035 pop r14 | 0x00410037 pop r15 | 0x00410039 ret | return rax; 0x0041003a mov dword [r14 + 0x70], 0 | *((r14 + 0x70)) = 0; 0x00410042 mov byte [r14 + 0x74], 1 | *((r14 + 0x74)) = 1; 0x00410047 mov eax, dword [r12] | eax = *(r12); 0x0041004b mov dword [r14 + 0x70], eax | *((r14 + 0x70)) = eax; 0x0041004f xor ebx, ebx | ebx = 0; 0x00410051 jmp 0x41002e | | } while (1); 0x00410053 add r14, 0x78 | r14 += 0x78; 0x00410057 mov rdi, r13 | 0x0041005a mov rsi, r14 | 0x0041005d mov rdx, r12 | rdx = r12; 0x00410060 call 0x4109c0 | eax = intBloombergLP::bdlat_SymbolicConverter_Imp::convert(BloombergLP::test::EnumerationA::Value*,BloombergLP::bdlat_TypeCategory::Enumeration,BloombergLP::test::EnumerationA::Valueconst&,BloombergLP::bdlat_TypeCategory::Enumeration) (r13, r14); 0x00410065 test eax, eax | | if (eax != 0) { 0x00410067 jne 0x40fff0 | goto label_0; | } | label_3: 0x00410069 xor ebx, ebx | ebx = 0; 0x0041006b jmp 0x41002e | goto label_1; 0x0041006d mov eax, dword [r12] | eax = *(r12); 0x00410071 mov dword [r14 + 0x7c], eax | *((r14 + 0x7c)) = eax; 0x00410075 xor ebx, ebx | ebx = 0; 0x00410077 jmp 0x41002e | goto label_1; 0x00410079 lea r15, [r14 + 0x80] | r15 = r14 + 0x80; 0x00410080 mov eax, dword [r12] | eax = *(r12); 0x00410084 xor ebx, ebx | ebx = 0; 0x00410086 cmp eax, 2 | 0x00410089 mov ecx, 0x437e86 | ecx = "VALUE2"; | if (eax != 2) { 0x0041008e cmovne rcx, rbx | rcx = rbx; | } 0x00410092 cmp eax, 1 | 0x00410095 mov r12d, 0x437e7f | r12d = "VALUE1"; | if (eax != 1) { 0x0041009b cmovne r12, rcx | r12 = rcx; | } 0x0041009f mov rdi, r12 | 0x004100a2 call 0x402ef0 | rax = strlen (r12); 0x004100a7 mov r13, qword [r14 + 0x98] | r13 = *((r14 + 0x98)); 0x004100ae mov qword [r14 + 0x98], 0 | *((r14 + 0x98)) = 0; 0x004100b9 mov ecx, 0x438d47 | 0x004100be mov rdi, r15 | 0x004100c1 mov rsi, r12 | 0x004100c4 mov rdx, rax | 0x004100c7 call 0x413fd0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r15, r12, rax, "string<...>::assign(char*...): string too long"); 0x004100cc jmp 0x41002e | goto label_1; | }