[Lldb-commits] [lldb] r165557 - /lldb/trunk/source/Core/CXXFormatterFunctions.cpp
Enrico Granata
egranata at apple.com
Tue Oct 9 15:44:18 PDT 2012
Author: enrico
Date: Tue Oct 9 17:44:18 2012
New Revision: 165557
URL: http://llvm.org/viewvc/llvm-project?rev=165557&view=rev
Log:
<rdar://problem/12462575> Refactoring a block of shared code in the NSString data formatter
Modified:
lldb/trunk/source/Core/CXXFormatterFunctions.cpp
Modified: lldb/trunk/source/Core/CXXFormatterFunctions.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/CXXFormatterFunctions.cpp?rev=165557&r1=165556&r2=165557&view=diff
==============================================================================
--- lldb/trunk/source/Core/CXXFormatterFunctions.cpp (original)
+++ lldb/trunk/source/Core/CXXFormatterFunctions.cpp Tue Oct 9 17:44:18 2012
@@ -476,6 +476,62 @@
}
}
+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 @@
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 @@
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)
{
More information about the lldb-commits
mailing list