<rdar://problem/12462575> Refactoring a block of shared code in the NSString data formatter

llvm-svn: 165557
This commit is contained in:
Enrico Granata 2012-10-09 22:44:18 +00:00
parent 7edfe5f6b2
commit a5d3ba008b
1 changed files with 59 additions and 146 deletions

View File

@ -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)
{