From a5d3ba008b14509aa9c95911de3b5e26a7976b5d Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Tue, 9 Oct 2012 22:44:18 +0000 Subject: [PATCH] Refactoring a block of shared code in the NSString data formatter llvm-svn: 165557 --- lldb/source/Core/CXXFormatterFunctions.cpp | 205 +++++++++-------------------- 1 file changed, 59 insertions(+), 146 deletions(-) diff --git a/lldb/source/Core/CXXFormatterFunctions.cpp b/lldb/source/Core/CXXFormatterFunctions.cpp index 60e6833..d8b929e 100644 --- a/lldb/source/Core/CXXFormatterFunctions.cpp +++ b/lldb/source/Core/CXXFormatterFunctions.cpp @@ -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) { -- 2.7.4