; assembly | /* r2dec pseudo code output */ | /* balxml_configschema.t/none @ 0x41eb70 */ | #include | ; (fcn) method.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaComplexTypeElementChoice_.parseSubElement_char_const__BloombergLP::balxml::Decoder_ () | uint64_t method_BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaComplexTypeElementChoice_parseSubElement_char_const_BloombergLP::balxml::Decoder_ (int64_t arg3, char * s, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_38h; | int64_t var_40h; | int64_t var_f0h; | int64_t var_f8h; | rdx = arg3; | rsi = s; | rdi = arg1; | /* BloombergLP::balxml::Decoder_ChoiceContext::parseSubElement(char const*, BloombergLP::balxml::Decoder*) */ 0x0041eb70 push rbp | 0x0041eb71 push r15 | 0x0041eb73 push r14 | 0x0041eb75 push r12 | 0x0041eb77 push rbx | 0x0041eb78 sub rsp, 0x100 | 0x0041eb7f mov r14, rdx | r14 = rdx; 0x0041eb82 mov r15, rsi | r15 = rsi; 0x0041eb85 mov rbx, rdi | rbx = rdi; 0x0041eb88 mov rdi, rsi | 0x0041eb8b call 0x404780 | rax = strlen (rsi); 0x0041eb90 mov r12, rax | r12 = rax; 0x0041eb93 mov bpl, byte [rbx + 8] | bpl = *((rbx + 8)); 0x0041eb97 test bpl, bpl | | if (bpl == 0) { 0x0041eb9a je 0x41ec54 | goto label_1; | } 0x0041eba0 cmp byte [rbx + 0x18], 0 | | if (*((rbx + 0x18)) != 0) { 0x0041eba4 je 0x41ebdd | 0x0041eba6 mov rdi, r15 | 0x0041eba9 call 0x404780 | rax = strlen (r15); 0x0041ebae cmp qword [rbx + 0x38], rax | | if (*((rbx + 0x38)) != rax) { 0x0041ebb2 jne 0x41ebdd | goto label_2; | } 0x0041ebb4 test rax, rax | | if (rax == 0) { 0x0041ebb7 je 0x41ec54 | goto label_1; | } 0x0041ebbd cmp qword [rbx + 0x40], 0x17 | | if (*((rbx + 0x40)) != 0x17) { 0x0041ebc2 je 0x41ebca | 0x0041ebc4 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041ebc8 jmp 0x41ebce | | } else { 0x0041ebca lea rdi, [rbx + 0x20] | rdi = rbx + 0x20; | } 0x0041ebce mov rsi, r15 | rsi = r15; 0x0041ebd1 mov rdx, rax | rdx = rax; 0x0041ebd4 call 0x4048a0 | eax = bcmp (); 0x0041ebd9 test eax, eax | | if (eax == 0) { 0x0041ebdb je 0x41ec54 | goto label_1; | } | } | label_2: 0x0041ebdd mov rsi, qword [r14 + 0x2d0] | 0x0041ebe4 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x0041ebe9 mov rdi, rbx | 0x0041ebec call 0x40ee30 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (rbx, *((r14 + 0x2d0))); 0x0041ebf1 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x0041ebfc mov qword [rsp + 0xf8], r14 | *((rsp + 0xf8)) = r14; 0x0041ec04 mov esi, 0x49aacb | 0x0041ec09 mov edx, 0x2e | 0x0041ec0e mov rdi, rbx | 0x0041ec11 call 0x40db40 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, "Only one selection is permitted inside choice.", 0x2e); 0x0041ec16 mov rdi, rax | rdi = rax; 0x0041ec19 call 0x4049f0 | std::_1::basic_ostream>::flush() (); 0x0041ec1e mov rdi, qword [rsp + 0xf8] | 0x0041ec26 mov esi, dword [rsp + 0xf0] | 0x0041ec2d mov rdx, qword [rsp + 0x38] | 0x0041ec32 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x0041ec36 sub eax, edx | eax -= edx; 0x0041ec38 movsxd rcx, eax | rcx = (int64_t) eax; 0x0041ec3b call 0x421a30 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); | do { 0x0041ec40 lea rdi, [rsp + 8] | 0x0041ec45 call 0x420ff0 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); 0x0041ec4a mov ebx, 0xffffffff | ebx = 0xffffffff; 0x0041ec4f jmp 0x41edec | goto label_3; | label_1: 0x0041ec54 mov byte [rbx + 8], 1 | *((rbx + 8)) = 1; 0x0041ec58 mov rax, qword [r14] | rax = *(r14); 0x0041ec5b cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x0041ec5f je 0x41ec75 | 0x0041ec61 mov rdi, r15 | 0x0041ec64 mov esi, r12d | 0x0041ec67 call 0x435540 | rax = BloombergLP::s_baltst::BasicSchemaComplexTypeElementChoice::lookupSelectionInfo(char const*,int) (r15, r12d); 0x0041ec6c test rax, rax | | if (rax == 0) { 0x0041ec6f je 0x41ed71 | goto label_4; | } | } 0x0041ec75 test bpl, bpl | | if (bpl != 0) { 0x0041ec78 je 0x41ecc7 | 0x0041ec7a movsxd r12, r12d | r12 = (int64_t) r12d; | label_0: 0x0041ec7d mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0041ec82 mov qword [rsp + 0x10], r15 | *((rsp + 0x10)) = r15; 0x0041ec87 mov qword [rsp + 0x18], r12 | *((rsp + 0x18)) = r12; 0x0041ec8c mov rsi, qword [rbx + 0x10] | rsi = *((rbx + 0x10)); 0x0041ec90 mov eax, dword [rsi + 0x40] | eax = *((rsi + 0x40)); 0x0041ec93 cmp eax, 2 | | if (eax == 2) { 0x0041ec96 je 0x41edc2 | goto label_5; | } 0x0041ec9c cmp eax, 1 | | if (eax == 1) { 0x0041ec9f je 0x41edd7 | goto label_6; | } 0x0041eca5 mov ebx, 0xffffffff | ebx = 0xffffffff; 0x0041ecaa test eax, eax | | if (eax != 0) { 0x0041ecac jne 0x41edec | goto label_3; | } 0x0041ecb2 mov edx, dword [rip + 0x831b8] | 0x0041ecb8 lea rdi, [rsp + 8] | 0x0041ecbd call 0x410db0 | intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaAnnotationElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, rsi, *(0x004a1e70)); 0x0041ecc2 jmp 0x41edea | goto label_7; | } 0x0041ecc7 mov rdi, qword [rbx + 0x10] | 0x0041eccb mov rsi, r15 | 0x0041ecce mov edx, r12d | edx = r12d; 0x0041ecd1 call 0x436430 | eax = BloombergLP::s_baltst::BasicSchemaComplexTypeElementChoice::makeSelection(char const*,int) (*((rbx + 0x10)), r15); 0x0041ecd6 test eax, eax | | if (eax == 0) { 0x0041ecd8 je 0x41edfe | goto label_8; | } 0x0041ecde mov rsi, qword [r14 + 0x2d0] | 0x0041ece5 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x0041ecea mov rdi, rbx | 0x0041eced call 0x40ee30 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (rbx, *((r14 + 0x2d0))); 0x0041ecf2 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x0041ecfd mov qword [rsp + 0xf8], r14 | *((rsp + 0xf8)) = r14; 0x0041ed05 mov esi, 0x49aa63 | 0x0041ed0a mov edx, 0x1b | 0x0041ed0f mov rdi, rbx | 0x0041ed12 call 0x40db40 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, "Unable to make selection: \", 0x1b); 0x0041ed17 mov rbx, rax | rbx = rax; 0x0041ed1a mov rdi, r15 | 0x0041ed1d call 0x404780 | rax = strlen (r15); 0x0041ed22 mov rdi, rbx | 0x0041ed25 mov rsi, r15 | 0x0041ed28 mov rdx, rax | 0x0041ed2b call 0x40db40 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r15, rax); 0x0041ed30 mov esi, 0x49a969 | 0x0041ed35 mov edx, 2 | 0x0041ed3a mov rdi, rax | 0x0041ed3d call 0x40db40 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x49a969, 2); 0x0041ed42 mov rdi, rax | rdi = rax; 0x0041ed45 call 0x4049f0 | std::_1::basic_ostream>::flush() (); 0x0041ed4a mov rdi, qword [rsp + 0xf8] | 0x0041ed52 mov esi, dword [rsp + 0xf0] | 0x0041ed59 mov rdx, qword [rsp + 0x38] | 0x0041ed5e mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x0041ed62 sub eax, edx | eax -= edx; 0x0041ed64 movsxd rcx, eax | rcx = (int64_t) eax; 0x0041ed67 call 0x421a30 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x0041ed6c jmp 0x41ec40 | | } while (1); | label_4: 0x0041ed71 inc dword [r14 + 0x410] | *((r14 + 0x410))++; 0x0041ed78 mov byte [rbx + 0x18], 1 | *((rbx + 0x18)) = 1; 0x0041ed7c lea rdi, [rbx + 0x20] | 0x0041ed80 movsxd rdx, r12d | rdx = (int64_t) r12d; 0x0041ed83 mov rbp, qword [rbx + 0x38] | rbp = *((rbx + 0x38)); 0x0041ed87 mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x0041ed8f mov ecx, 0x49a5e7 | 0x0041ed94 mov rsi, r15 | 0x0041ed97 call 0x476e80 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbx + 0x20, r15, rdx, "string<...>::assign(char*...): string too long"); 0x0041ed9c lea rbx, [rsp + 8] | rbx = rsp + 8; 0x0041eda1 mov rdi, rbx | rdi = rbx; 0x0041eda4 call 0x421e30 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x0041eda9 mov rdi, rbx | 0x0041edac mov rsi, r14 | 0x0041edaf call 0x420960 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rbx, r14); 0x0041edb4 mov ebx, eax | ebx = eax; 0x0041edb6 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0041edbb call 0x422260 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); 0x0041edc0 jmp 0x41edec | goto label_3; | label_5: 0x0041edc2 mov rsi, qword [rsi] | 0x0041edc5 mov edx, dword [rip + 0x830f5] | 0x0041edcb lea rdi, [rsp + 8] | 0x0041edd0 call 0x41c8a0 | intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaChoiceElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, *(rsi), *(0x004a1ec0)); 0x0041edd5 jmp 0x41edea | goto label_7; | label_6: 0x0041edd7 mov rsi, qword [rsi] | 0x0041edda mov edx, dword [rip + 0x830b8] | 0x0041ede0 lea rdi, [rsp + 8] | 0x0041ede5 call 0x417fb0 | eax = intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaSequenceElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, *(rsi), *(0x004a1e98)); | label_7: 0x0041edea mov ebx, eax | ebx = eax; | label_3: 0x0041edec mov eax, ebx | 0x0041edee add rsp, 0x100 | 0x0041edf5 pop rbx | 0x0041edf6 pop r12 | 0x0041edf8 pop r14 | 0x0041edfa pop r15 | 0x0041edfc pop rbp | 0x0041edfd ret | return rax; | label_8: 0x0041edfe mov byte [rbx + 0x18], 1 | *((rbx + 0x18)) = 1; 0x0041ee02 lea rdi, [rbx + 0x20] | 0x0041ee06 movsxd r12, r12d | r12 = (int64_t) r12d; 0x0041ee09 mov rbp, qword [rbx + 0x38] | rbp = *((rbx + 0x38)); 0x0041ee0d mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x0041ee15 mov ecx, 0x49a5e7 | 0x0041ee1a mov rsi, r15 | 0x0041ee1d mov rdx, r12 | 0x0041ee20 call 0x476e80 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbx + 0x20, r15, r12, "string<...>::assign(char*...): string too long"); 0x0041ee25 jmp 0x41ec7d | goto label_0; | }