forked from OSchip/llvm-project
<rdar://problem/12462575> Refactoring a block of shared code in the NSString data formatter
llvm-svn: 165557
This commit is contained in:
parent
7edfe5f6b2
commit
a5d3ba008b
|
@ -476,6 +476,62 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
ReadUTFBufferAndDumpToStream (uint64_t location,
|
||||
const ProcessSP& process_sp,
|
||||
Stream& stream)
|
||||
{
|
||||
Error error;
|
||||
lldb::DataBufferSP buffer_sp(new DataBufferHeap(1024,0));
|
||||
size_t data_read = process_sp->ReadMemoryFromInferior(location, (char*)buffer_sp->GetBytes(), 1024, error);
|
||||
if (error.Fail())
|
||||
{
|
||||
stream.Printf("unable to read data");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
stream.Printf("@\"");
|
||||
if (data_read)
|
||||
{
|
||||
UTF16 *data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
UTF16 *data_end_ptr = data_ptr + 256;
|
||||
|
||||
while (data_ptr < data_end_ptr)
|
||||
{
|
||||
if (!*data_ptr)
|
||||
{
|
||||
data_end_ptr = data_ptr;
|
||||
break;
|
||||
}
|
||||
data_ptr++;
|
||||
}
|
||||
|
||||
*data_ptr = 0;
|
||||
data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
|
||||
lldb::DataBufferSP utf8_data_buffer_sp(new DataBufferHeap(1024,0));
|
||||
UTF8* utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
UTF8* utf8_data_end_ptr = utf8_data_ptr + 1024;
|
||||
|
||||
ConvertUTF16toUTF8 ( (const UTF16**)&data_ptr,
|
||||
data_end_ptr,
|
||||
&utf8_data_ptr,
|
||||
utf8_data_end_ptr,
|
||||
lenientConversion);
|
||||
utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
for (;utf8_data_ptr != utf8_data_end_ptr; utf8_data_ptr++)
|
||||
{
|
||||
if (!*utf8_data_ptr)
|
||||
break;
|
||||
stream.Printf("%c",*utf8_data_ptr);
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream& stream)
|
||||
{
|
||||
|
@ -541,56 +597,7 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
if (error.Fail())
|
||||
return false;
|
||||
if (has_explicit_length and is_unicode)
|
||||
{
|
||||
lldb::DataBufferSP buffer_sp(new DataBufferHeap(1024,0));
|
||||
size_t data_read = process_sp->ReadMemoryFromInferior(location, (char*)buffer_sp->GetBytes(), 1024, error);
|
||||
if (error.Fail())
|
||||
{
|
||||
stream.Printf("erorr reading pte");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
stream.Printf("@\"");
|
||||
if (data_read)
|
||||
{
|
||||
UTF16 *data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
UTF16 *data_end_ptr = data_ptr + 256;
|
||||
|
||||
while (data_ptr < data_end_ptr)
|
||||
{
|
||||
if (!*data_ptr)
|
||||
{
|
||||
data_end_ptr = data_ptr;
|
||||
break;
|
||||
}
|
||||
data_ptr++;
|
||||
}
|
||||
|
||||
*data_ptr = 0;
|
||||
data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
|
||||
lldb::DataBufferSP utf8_data_buffer_sp(new DataBufferHeap(1024,0));
|
||||
UTF8* utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
UTF8* utf8_data_end_ptr = utf8_data_ptr + 1024;
|
||||
|
||||
ConvertUTF16toUTF8 ( (const UTF16**)&data_ptr,
|
||||
data_end_ptr,
|
||||
&utf8_data_ptr,
|
||||
utf8_data_end_ptr,
|
||||
lenientConversion);
|
||||
utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
for (;utf8_data_ptr != utf8_data_end_ptr; utf8_data_ptr++)
|
||||
{
|
||||
if (!*utf8_data_ptr)
|
||||
break;
|
||||
stream.Printf("%c",*utf8_data_ptr);
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
return ReadUTFBufferAndDumpToStream (location, process_sp, stream);
|
||||
else
|
||||
{
|
||||
location++;
|
||||
|
@ -633,106 +640,12 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
|
|||
if (error.Fail())
|
||||
return false;
|
||||
}
|
||||
lldb::DataBufferSP buffer_sp(new DataBufferHeap(1024,0));
|
||||
size_t data_read = process_sp->ReadMemoryFromInferior(location, (char*)buffer_sp->GetBytes(), 1024, error);
|
||||
if (error.Fail())
|
||||
{
|
||||
stream.Printf("erorr reading pte");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
stream.Printf("@\"");
|
||||
if (data_read)
|
||||
{
|
||||
UTF16 *data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
UTF16 *data_end_ptr = data_ptr + 256;
|
||||
|
||||
while (data_ptr < data_end_ptr)
|
||||
{
|
||||
if (!*data_ptr)
|
||||
{
|
||||
data_end_ptr = data_ptr;
|
||||
break;
|
||||
}
|
||||
data_ptr++;
|
||||
}
|
||||
|
||||
*data_ptr = 0;
|
||||
data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
|
||||
lldb::DataBufferSP utf8_data_buffer_sp(new DataBufferHeap(1024,0));
|
||||
UTF8* utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
UTF8* utf8_data_end_ptr = utf8_data_ptr + 1024;
|
||||
|
||||
ConvertUTF16toUTF8 ( (const UTF16**)&data_ptr,
|
||||
data_end_ptr,
|
||||
&utf8_data_ptr,
|
||||
utf8_data_end_ptr,
|
||||
lenientConversion);
|
||||
utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
for (;utf8_data_ptr != utf8_data_end_ptr; utf8_data_ptr++)
|
||||
{
|
||||
if (!*utf8_data_ptr)
|
||||
break;
|
||||
stream.Printf("%c",*utf8_data_ptr);
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
return ReadUTFBufferAndDumpToStream (location, process_sp, stream);
|
||||
}
|
||||
else if (is_special)
|
||||
{
|
||||
uint64_t location = valobj_addr + (ptr_size == 8 ? 12 : 8);
|
||||
lldb::DataBufferSP buffer_sp(new DataBufferHeap(1024,0));
|
||||
size_t data_read = process_sp->ReadMemoryFromInferior(location, (char*)buffer_sp->GetBytes(), 1024, error);
|
||||
if (error.Fail())
|
||||
{
|
||||
stream.Printf("erorr reading pte");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
stream.Printf("@\"");
|
||||
if (data_read)
|
||||
{
|
||||
UTF16 *data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
UTF16 *data_end_ptr = data_ptr + 256;
|
||||
|
||||
while (data_ptr < data_end_ptr)
|
||||
{
|
||||
if (!*data_ptr)
|
||||
{
|
||||
data_end_ptr = data_ptr;
|
||||
break;
|
||||
}
|
||||
data_ptr++;
|
||||
}
|
||||
|
||||
*data_ptr = 0;
|
||||
data_ptr = (UTF16*)buffer_sp->GetBytes();
|
||||
|
||||
lldb::DataBufferSP utf8_data_buffer_sp(new DataBufferHeap(1024,0));
|
||||
UTF8* utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
UTF8* utf8_data_end_ptr = utf8_data_ptr + 1024;
|
||||
|
||||
ConvertUTF16toUTF8 ( (const UTF16**)&data_ptr,
|
||||
data_end_ptr,
|
||||
&utf8_data_ptr,
|
||||
utf8_data_end_ptr,
|
||||
lenientConversion);
|
||||
utf8_data_ptr = (UTF8*)utf8_data_buffer_sp->GetBytes();
|
||||
for (;utf8_data_ptr != utf8_data_end_ptr; utf8_data_ptr++)
|
||||
{
|
||||
if (!*utf8_data_ptr)
|
||||
break;
|
||||
stream.Printf("%c",*utf8_data_ptr);
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
}
|
||||
stream.Printf("\"");
|
||||
return true;
|
||||
return ReadUTFBufferAndDumpToStream (location, process_sp, stream);
|
||||
}
|
||||
else if (is_inline)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue