[Lldb-commits] [lldb] r143251 - in /lldb/trunk: include/lldb/Interpreter/OptionGroupFormat.h source/Interpreter/OptionGroupFormat.cpp

Greg Clayton gclayton at apple.com
Fri Oct 28 16:27:55 PDT 2011


Author: gclayton
Date: Fri Oct 28 18:27:55 2011
New Revision: 143251

URL: http://llvm.org/viewvc/llvm-project?rev=143251&view=rev
Log:
Fixed the GDB format to allow the size and format characters to come in any
order. Also hooked up the new formats for instruction, hex float and address
to the new formats.


Modified:
    lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h
    lldb/trunk/source/Interpreter/OptionGroupFormat.cpp

Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h?rev=143251&r1=143250&r2=143251&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h (original)
+++ lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h Fri Oct 28 18:27:55 2011
@@ -106,11 +106,8 @@
 
 protected:
 
-    lldb::Format
-    SetFormatUsingGDBFormatLetter (char format_letter);
-
-    uint32_t
-    SetByteSizeUsingGDBSizeLetter (char size_letter);
+    bool
+    ParserGDBFormatLetter (char format_letter, lldb::Format &format, uint32_t &byte_size);
 
     OptionValueFormat m_format;
     OptionValueUInt64 m_byte_size;

Modified: lldb/trunk/source/Interpreter/OptionGroupFormat.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionGroupFormat.cpp?rev=143251&r1=143250&r2=143251&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/OptionGroupFormat.cpp (original)
+++ lldb/trunk/source/Interpreter/OptionGroupFormat.cpp Fri Oct 28 18:27:55 2011
@@ -116,13 +116,13 @@
                         count = 0;
                 }
 
-                Format format = SetFormatUsingGDBFormatLetter (gdb_format_cstr[0]);
-                if (format != eFormatInvalid)
-                    ++gdb_format_cstr;
-
-                uint32_t byte_size = SetByteSizeUsingGDBSizeLetter (gdb_format_cstr[0]);
-                if (byte_size > 0)
+                Format format = eFormatDefault;
+                uint32_t byte_size = 0;
+                
+                while (ParserGDBFormatLetter (gdb_format_cstr[0], format, byte_size))
+                {
                     ++gdb_format_cstr;
+                }
                 
                 // We the first character of the "gdb_format_cstr" is not the 
                 // NULL terminator, we didn't consume the entire string and 
@@ -139,7 +139,7 @@
                 // Anything that wasn't set correctly should be set to the
                 // previous default
                 if (format == eFormatInvalid)
-                    format = SetFormatUsingGDBFormatLetter (m_prev_gdb_format);
+                    ParserGDBFormatLetter (m_prev_gdb_format, format, byte_size);
                 
                 const bool byte_size_enabled = m_byte_size.GetDefaultValue() < UINT64_MAX;
                 const bool count_enabled = m_count.GetDefaultValue() < UINT64_MAX;
@@ -147,7 +147,7 @@
                 {
                     // Byte size is enabled
                     if (byte_size == 0)
-                        byte_size = SetByteSizeUsingGDBSizeLetter (m_prev_gdb_size);
+                        ParserGDBFormatLetter (m_prev_gdb_size, format, byte_size);
                 }
                 else
                 {
@@ -198,62 +198,32 @@
     return error;
 }
 
-Format
-OptionGroupFormat::SetFormatUsingGDBFormatLetter (char format_letter)
+bool
+OptionGroupFormat::ParserGDBFormatLetter (char format_letter, Format &format, uint32_t &byte_size)
 {
-    Format format = eFormatInvalid;
     switch (format_letter)
     {
-        case 'o': format = eFormatOctal;        break; 
-        case 'x': format = eFormatHex;          break;
-        case 'd': format = eFormatDecimal;      break;
-        case 'u': format = eFormatUnsigned;     break;
-        case 't': format = eFormatBinary;       break;
-        case 'f': format = eFormatFloat;        break;
-        case 'a': format = eFormatHex;          break; // TODO: add a new format: eFormatAddress
-        case 'i': format = eFormatHex;          break; // TODO: add a new format: eFormatInstruction
-        case 'c': format = eFormatChar;         break;
-        case 's': format = eFormatCString;      break;
-        case 'T': format = eFormatOSType;       break;
-        case 'A': format = eFormatHex;          break; // TODO: add a new format: eFormatHexFloat
+        case 'o': format = eFormatOctal;        m_prev_gdb_format = format_letter; return true; 
+        case 'x': format = eFormatHex;          m_prev_gdb_format = format_letter; return true;
+        case 'd': format = eFormatDecimal;      m_prev_gdb_format = format_letter; return true;
+        case 'u': format = eFormatUnsigned;     m_prev_gdb_format = format_letter; return true;
+        case 't': format = eFormatBinary;       m_prev_gdb_format = format_letter; return true;
+        case 'f': format = eFormatFloat;        m_prev_gdb_format = format_letter; return true;
+        case 'a': format = eFormatAddressInfo;  m_prev_gdb_format = format_letter; return true;
+        case 'i': format = eFormatInstruction;  m_prev_gdb_format = format_letter; return true;
+        case 'c': format = eFormatChar;         m_prev_gdb_format = format_letter; return true;
+        case 's': format = eFormatCString;      m_prev_gdb_format = format_letter; return true;
+        case 'T': format = eFormatOSType;       m_prev_gdb_format = format_letter; return true;
+        case 'A': format = eFormatHexFloat;     m_prev_gdb_format = format_letter; return true;
+        case 'b': byte_size = 1;                m_prev_gdb_size = format_letter;   return true;
+        case 'h': byte_size = 2;                m_prev_gdb_size = format_letter;   return true;
+        case 'w': byte_size = 4;                m_prev_gdb_size = format_letter;   return true;
+        case 'g': byte_size = 8;                m_prev_gdb_size = format_letter;   return true;
         default:  break;
     }
-    if (format != eFormatInvalid)
-        m_prev_gdb_format = format_letter;
-    return format;
+    return false;
 }
 
-uint32_t
-OptionGroupFormat::SetByteSizeUsingGDBSizeLetter (char size_letter)
-{
-    uint32_t byte_size = 0;
-    switch (size_letter)
-    {
-        case 'b': // byte
-            byte_size = 1; 
-            break;
-
-        case 'h': // halfword
-            byte_size = 2;
-            break;
-
-        case 'w': // word
-            byte_size = 4;
-            break;
-
-        case 'g': // giant
-            byte_size = 8;
-            break;
-
-        default:
-            break;
-    }
-    if (byte_size)
-        m_prev_gdb_size = size_letter;
-    return byte_size;
-}
-
-
 void
 OptionGroupFormat::OptionParsingStarting (CommandInterpreter &interpreter)
 {





More information about the lldb-commits mailing list