[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