; assembly | /* r2dec pseudo code output */ | /* balxml_configschema.t/assume @ 0x419630 */ | #include | ; (fcn) method.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaElementChoice_.parseSubElement_char_const__BloombergLP::balxml::Decoder_ () | uint64_t method_BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaElementChoice_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*) */ 0x00419630 push rbp | 0x00419631 push r15 | 0x00419633 push r14 | 0x00419635 push r12 | 0x00419637 push rbx | 0x00419638 sub rsp, 0x100 | 0x0041963f mov r14, rdx | r14 = rdx; 0x00419642 mov r15, rsi | r15 = rsi; 0x00419645 mov rbx, rdi | rbx = rdi; 0x00419648 mov rdi, rsi | 0x0041964b call 0x404740 | rax = strlen (rsi); 0x00419650 mov r12, rax | r12 = rax; 0x00419653 mov bpl, byte [rbx + 8] | bpl = *((rbx + 8)); 0x00419657 test bpl, bpl | | if (bpl == 0) { 0x0041965a je 0x419714 | goto label_2; | } 0x00419660 cmp byte [rbx + 0x18], 0 | | if (*((rbx + 0x18)) != 0) { 0x00419664 je 0x41969d | 0x00419666 mov rdi, r15 | 0x00419669 call 0x404740 | rax = strlen (r15); 0x0041966e cmp qword [rbx + 0x38], rax | | if (*((rbx + 0x38)) != rax) { 0x00419672 jne 0x41969d | goto label_3; | } 0x00419674 test rax, rax | | if (rax == 0) { 0x00419677 je 0x419714 | goto label_2; | } 0x0041967d cmp qword [rbx + 0x40], 0x17 | | if (*((rbx + 0x40)) != 0x17) { 0x00419682 je 0x41968a | 0x00419684 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x00419688 jmp 0x41968e | | } else { 0x0041968a lea rdi, [rbx + 0x20] | rdi = rbx + 0x20; | } 0x0041968e mov rsi, r15 | rsi = r15; 0x00419691 mov rdx, rax | rdx = rax; 0x00419694 call 0x404860 | eax = bcmp (); 0x00419699 test eax, eax | | if (eax == 0) { 0x0041969b je 0x419714 | goto label_2; | } | } | label_3: 0x0041969d mov rsi, qword [r14 + 0x2d0] | 0x004196a4 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x004196a9 mov rdi, rbx | 0x004196ac call 0x40edc0 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (rbx, *((r14 + 0x2d0))); 0x004196b1 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x004196bc mov qword [rsp + 0xf8], r14 | *((rsp + 0xf8)) = r14; 0x004196c4 mov esi, 0x49a751 | 0x004196c9 mov edx, 0x2e | 0x004196ce mov rdi, rbx | 0x004196d1 call 0x40daf0 | 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); 0x004196d6 mov rdi, rax | rdi = rax; 0x004196d9 call 0x4049b0 | std::_1::basic_ostream>::flush() (); 0x004196de mov rdi, qword [rsp + 0xf8] | 0x004196e6 mov esi, dword [rsp + 0xf0] | 0x004196ed mov rdx, qword [rsp + 0x38] | 0x004196f2 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x004196f6 sub eax, edx | eax -= edx; 0x004196f8 movsxd rcx, eax | rcx = (int64_t) eax; 0x004196fb call 0x421940 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); | label_0: 0x00419700 lea rdi, [rsp + 8] | 0x00419705 call 0x420f00 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); | do { 0x0041970a mov ebx, 0xffffffff | ebx = 0xffffffff; 0x0041970f jmp 0x4198a3 | goto label_4; | label_2: 0x00419714 mov byte [rbx + 8], 1 | *((rbx + 8)) = 1; 0x00419718 mov rax, qword [r14] | rax = *(r14); 0x0041971b cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x0041971f je 0x419735 | 0x00419721 mov rdi, r15 | 0x00419724 mov esi, r12d | 0x00419727 call 0x438770 | rax = BloombergLP::s_baltst::BasicSchemaElementChoice::lookupSelectionInfo(char const*,int) (r15, r12d); 0x0041972c test rax, rax | | if (rax == 0) { 0x0041972f je 0x41982b | goto label_5; | } | } 0x00419735 test bpl, bpl | | if (bpl == 0) { 0x00419738 je 0x419781 | goto label_6; | } 0x0041973a movsxd r12, r12d | r12 = (int64_t) r12d; | label_1: 0x0041973d mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x00419742 mov qword [rsp + 0x10], r15 | *((rsp + 0x10)) = r15; 0x00419747 mov qword [rsp + 0x18], r12 | *((rsp + 0x18)) = r12; 0x0041974c mov rsi, qword [rbx + 0x10] | rsi = *((rbx + 0x10)); 0x00419750 mov eax, dword [rsi + 0xa0] | eax = *((rsi + 0xa0)); 0x00419756 cmp eax, 2 | | if (eax == 2) { 0x00419759 je 0x41987c | goto label_7; | } 0x0041975f cmp eax, 1 | | if (eax == 1) { 0x00419762 je 0x419891 | goto label_8; | } 0x00419768 test eax, eax | 0x0041976a jne 0x41970a | | } while (eax != 0); 0x0041976c mov edx, dword [rip + 0x885de] | 0x00419772 lea rdi, [rsp + 8] | 0x00419777 call 0x410d30 | intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaAnnotationElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, rsi, *(0x004a1d50)); 0x0041977c jmp 0x4198a1 | goto label_9; | label_6: 0x00419781 mov rdi, qword [rbx + 0x10] | 0x00419785 mov rsi, r15 | 0x00419788 mov edx, r12d | 0x0041978b call 0x439400 | eax = BloombergLP::s_baltst::BasicSchemaElementChoice::makeSelection(char const*,int) (*((rbx + 0x10)), r15, r12d); 0x00419790 test eax, eax | | if (eax != 0) { 0x00419792 je 0x4198b5 | 0x00419798 mov rsi, qword [r14 + 0x2d0] | 0x0041979f lea rbx, [rsp + 8] | rbx = rsp + 8; 0x004197a4 mov rdi, rbx | 0x004197a7 call 0x40edc0 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (rbx, *((r14 + 0x2d0))); 0x004197ac mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x004197b7 mov qword [rsp + 0xf8], r14 | *((rsp + 0xf8)) = r14; 0x004197bf mov esi, 0x49a6e9 | 0x004197c4 mov edx, 0x1b | 0x004197c9 mov rdi, rbx | 0x004197cc call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, "Unable to make selection: \", 0x1b); 0x004197d1 mov rbx, rax | rbx = rax; 0x004197d4 mov rdi, r15 | 0x004197d7 call 0x404740 | rax = strlen (r15); 0x004197dc mov rdi, rbx | 0x004197df mov rsi, r15 | 0x004197e2 mov rdx, rax | 0x004197e5 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r15, rax); 0x004197ea mov esi, 0x49a5ef | 0x004197ef mov edx, 2 | 0x004197f4 mov rdi, rax | 0x004197f7 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x49a5ef, 2); 0x004197fc mov rdi, rax | rdi = rax; 0x004197ff call 0x4049b0 | std::_1::basic_ostream>::flush() (); 0x00419804 mov rdi, qword [rsp + 0xf8] | 0x0041980c mov esi, dword [rsp + 0xf0] | 0x00419813 mov rdx, qword [rsp + 0x38] | 0x00419818 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x0041981c sub eax, edx | eax -= edx; 0x0041981e movsxd rcx, eax | rcx = (int64_t) eax; 0x00419821 call 0x421940 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x00419826 jmp 0x419700 | goto label_0; | label_5: 0x0041982b inc dword [r14 + 0x410] | *((r14 + 0x410))++; 0x00419832 mov byte [rbx + 0x18], 1 | *((rbx + 0x18)) = 1; 0x00419836 lea rdi, [rbx + 0x20] | 0x0041983a movsxd rdx, r12d | rdx = (int64_t) r12d; 0x0041983d mov rbp, qword [rbx + 0x38] | rbp = *((rbx + 0x38)); 0x00419841 mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x00419849 mov ecx, 0x49a26b | 0x0041984e mov rsi, r15 | 0x00419851 call 0x476b20 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbx + 0x20, r15, rdx, "string<...>::assign(char*...): string too long"); 0x00419856 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x0041985b mov rdi, rbx | rdi = rbx; 0x0041985e call 0x421d50 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x00419863 mov rdi, rbx | 0x00419866 mov rsi, r14 | 0x00419869 call 0x420870 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rbx, r14); 0x0041986e mov ebx, eax | ebx = eax; 0x00419870 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00419875 call 0x422180 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); 0x0041987a jmp 0x4198a3 | goto label_4; | label_7: 0x0041987c mov rsi, qword [rsi] | 0x0041987f mov edx, dword [rip + 0x8851b] | 0x00419885 lea rdi, [rsp + 8] | 0x0041988a call 0x417540 | intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaComplexTypeElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, *(rsi), *(0x004a1da0)); 0x0041988f jmp 0x4198a1 | goto label_9; | label_8: 0x00419891 mov edx, dword [rip + 0x884e1] | 0x00419897 lea rdi, [rsp + 8] | 0x0041989c call 0x411230 | eax = intBloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaSimpleTypeElement*,int,BloombergLP::bdlat_TypeCategory::Sequence) (rsp + 8, rsi, *(0x004a1d78)); | label_9: 0x004198a1 mov ebx, eax | ebx = eax; | label_4: 0x004198a3 mov eax, ebx | 0x004198a5 add rsp, 0x100 | 0x004198ac pop rbx | 0x004198ad pop r12 | 0x004198af pop r14 | 0x004198b1 pop r15 | 0x004198b3 pop rbp | 0x004198b4 ret | return rax; | } 0x004198b5 mov byte [rbx + 0x18], 1 | *((rbx + 0x18)) = 1; 0x004198b9 lea rdi, [rbx + 0x20] | 0x004198bd movsxd r12, r12d | r12 = (int64_t) r12d; 0x004198c0 mov rbp, qword [rbx + 0x38] | rbp = *((rbx + 0x38)); 0x004198c4 mov qword [rbx + 0x38], 0 | *((rbx + 0x38)) = 0; 0x004198cc mov ecx, 0x49a26b | 0x004198d1 mov rsi, r15 | 0x004198d4 mov rdx, r12 | 0x004198d7 call 0x476b20 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbx + 0x20, r15, r12, "string<...>::assign(char*...): string too long"); 0x004198dc jmp 0x41973d | goto label_1; | }