[Lldb-commits] [lldb] r149080 - in /lldb/trunk: include/lldb/Core/ValueObject.h source/Commands/CommandObjectExpression.cpp source/Commands/CommandObjectFrame.cpp source/Commands/CommandObjectMemory.cpp source/Commands/CommandObjectTarget.cpp source/Core/ValueObject.cpp

Greg Clayton gclayton at apple.com
Thu Jan 26 13:08:31 PST 2012


Author: gclayton
Date: Thu Jan 26 15:08:30 2012
New Revision: 149080

URL: http://llvm.org/viewvc/llvm-project?rev=149080&view=rev
Log:
Fixed formats being able to be applied recursively when using:
target variable -f <format> [args]
frame variable -f <format> [args]
expression -f <format> -- expr


Modified:
    lldb/trunk/include/lldb/Core/ValueObject.h
    lldb/trunk/source/Commands/CommandObjectExpression.cpp
    lldb/trunk/source/Commands/CommandObjectFrame.cpp
    lldb/trunk/source/Commands/CommandObjectMemory.cpp
    lldb/trunk/source/Commands/CommandObjectTarget.cpp
    lldb/trunk/source/Core/ValueObject.cpp

Modified: lldb/trunk/include/lldb/Core/ValueObject.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObject.h Thu Jan 26 15:08:30 2012
@@ -216,19 +216,21 @@
         bool m_flat_output;
         uint32_t m_omit_summary_depth;
         bool m_ignore_cap;
+        lldb::Format m_override_format;
         
         DumpValueObjectOptions() :
-        m_ptr_depth(0),
-        m_max_depth(UINT32_MAX),
-        m_show_types(false),
-        m_show_location(false),
-        m_use_objc(false),
-        m_use_dynamic(lldb::eNoDynamicValues),
-        m_use_synthetic(lldb::eUseSyntheticFilter),
-        m_scope_already_checked(false),
-        m_flat_output(false),
-        m_omit_summary_depth(0),
-        m_ignore_cap(false)
+            m_ptr_depth(0),
+            m_max_depth(UINT32_MAX),
+            m_show_types(false),
+            m_show_location(false),
+            m_use_objc(false),
+            m_use_dynamic(lldb::eNoDynamicValues),
+            m_use_synthetic(lldb::eUseSyntheticFilter),
+            m_scope_already_checked(false),
+            m_flat_output(false),
+            m_omit_summary_depth(0),
+            m_ignore_cap(false), 
+            m_override_format (lldb::eFormatDefault)
         {}
         
         static const DumpValueObjectOptions
@@ -829,7 +831,8 @@
     static void
     DumpValueObject (Stream &s,
                      ValueObject *valobj,
-                     const DumpValueObjectOptions& options)
+                     const DumpValueObjectOptions& options,
+                     lldb::Format format = lldb::eFormatDefault)
     {
         
         if (!valobj)
@@ -849,14 +852,16 @@
                                      options.m_scope_already_checked,
                                      options.m_flat_output,
                                      options.m_omit_summary_depth,
-                                     options.m_ignore_cap);
+                                     options.m_ignore_cap,
+                                     format);
     }
                      
     static void
     DumpValueObject (Stream &s,
                      ValueObject *valobj,
                      const char *root_valobj_name,
-                     const DumpValueObjectOptions& options)
+                     const DumpValueObjectOptions& options,
+                     lldb::Format format = lldb::eFormatDefault)
     {
         
         if (!valobj)
@@ -876,7 +881,8 @@
                                      options.m_scope_already_checked,
                                      options.m_flat_output,
                                      options.m_omit_summary_depth,
-                                     options.m_ignore_cap);
+                                     options.m_ignore_cap,
+                                     format);
     }
     
     static void
@@ -894,7 +900,8 @@
                      bool scope_already_checked,
                      bool flat_output,
                      uint32_t omit_summary_depth,
-                     bool ignore_cap);
+                     bool ignore_cap,
+                     lldb::Format format = lldb::eFormatDefault);
     
     // returns true if this is a char* or a char[]
     // if it is a char* and check_pointer is true,

Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Thu Jan 26 15:08:30 2012
@@ -368,7 +368,8 @@
                                               true,                     // Scope is already checked. Const results are always in scope.
                                               false,                    // Don't flatten output
                                               0,                        // Always use summaries (you might want an option --no-summary like there is for frame variable)
-                                              false);                   // Do not show more children than settings allow
+                                              false,                    // Do not show more children than settings allow
+                                              format);                  // Format override
                 if (result)
                     result->SetStatus (eReturnStatusSuccessFinishResult);
             }

Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Thu Jan 26 15:08:30 2012
@@ -476,8 +476,8 @@
                                         valobj_sp = frame->GetValueObjectForFrameVariable (var_sp, m_varobj_options.use_dynamic);
                                         if (valobj_sp)
                                         {
-                                            if (format != eFormatDefault)
-                                                valobj_sp->SetFormat (format);
+//                                            if (format != eFormatDefault)
+//                                                valobj_sp->SetFormat (format);
                                             
                                             if (m_option_variable.show_decl && var_sp->GetDeclaration ().GetFile())
                                             {
@@ -490,7 +490,8 @@
                                                 valobj_sp->SetCustomSummaryFormat(summary_format_sp);
                                             ValueObject::DumpValueObject (result.GetOutputStream(), 
                                                                           valobj_sp.get(),
-                                                                          options);
+                                                                          options,
+                                                                          format);
                                         }
                                     }
                                 }
@@ -521,8 +522,8 @@
                                                                               error);
                         if (valobj_sp)
                         {
-                            if (format != eFormatDefault)
-                                valobj_sp->SetFormat (format);
+//                            if (format != eFormatDefault)
+//                                valobj_sp->SetFormat (format);
                             if (m_option_variable.show_decl && var_sp && var_sp->GetDeclaration ().GetFile())
                             {
                                 var_sp->GetDeclaration ().DumpStopContext (&s, false);
@@ -535,7 +536,8 @@
                             ValueObject::DumpValueObject (output_stream, 
                                                           valobj_sp.get(), 
                                                           valobj_sp->GetParent() ? name_cstr : NULL,
-                                                          options);
+                                                          options,
+                                                          format);
                             // Process watchpoint if necessary.
                             if (m_option_watchpoint.watch_variable)
                             {
@@ -639,8 +641,8 @@
                                                                                m_varobj_options.use_dynamic);
                             if (valobj_sp)
                             {
-                                if (format != eFormatDefault)
-                                    valobj_sp->SetFormat (format);
+//                                if (format != eFormatDefault)
+//                                    valobj_sp->SetFormat (format);
 
                                 // When dumping all variables, don't print any variables
                                 // that are not in scope to avoid extra unneeded output
@@ -656,7 +658,8 @@
                                     ValueObject::DumpValueObject (result.GetOutputStream(), 
                                                                   valobj_sp.get(), 
                                                                   name_cstr,
-                                                                  options);
+                                                                  options,
+                                                                  format);
                                 }
                             }
                         }

Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Thu Jan 26 15:08:30 2012
@@ -705,7 +705,8 @@
                                                   scope_already_checked,
                                                   m_varobj_options.flat_output,
                                                   m_varobj_options.be_raw ? UINT32_MAX : m_varobj_options.no_summary_depth,
-                                                  m_varobj_options.be_raw ? true : m_varobj_options.ignore_cap);
+                                                  m_varobj_options.be_raw ? true : m_varobj_options.ignore_cap,
+                                                  format);
                 }
                 else
                 {

Modified: lldb/trunk/source/Commands/CommandObjectTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectTarget.cpp?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectTarget.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectTarget.cpp Thu Jan 26 15:08:30 2012
@@ -593,7 +593,8 @@
         ValueObject::DumpValueObject (s, 
                                       valobj_sp.get(), 
                                       root_name,
-                                      options);                                        
+                                      options,
+                                      format);                                        
 
     }
     

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=149080&r1=149079&r2=149080&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Thu Jan 26 15:08:30 2012
@@ -2979,7 +2979,8 @@
     bool scope_already_checked,
     bool flat_output,
     uint32_t omit_summary_depth,
-    bool ignore_cap
+    bool ignore_cap,
+    Format format_override       // Normally the format is in the valobj, but we might want to override this
 )
 {
     if (valobj)
@@ -3064,6 +3065,7 @@
             }
         }
         
+        std::string value_str;
         const char *val_cstr = NULL;
         const char *sum_cstr = NULL;
         SummaryFormat* entry = valobj->GetSummaryFormat().get();
@@ -3071,9 +3073,26 @@
         if (omit_summary_depth > 0)
             entry = NULL;
         
+        Format orig_format = kNumFormats;
         if (err_cstr == NULL)
         {
+            if (format_override != eFormatDefault)
+            {
+                orig_format = valobj->GetFormat();
+                valobj->SetFormat (format_override);
+            }
             val_cstr = valobj->GetValueAsCString();
+            if (val_cstr)
+            {
+                // Cache the value in our own storage as running summaries might
+                // change our value from underneath us
+                value_str = val_cstr;
+            }
+            if (orig_format != kNumFormats && orig_format != format_override)
+            {
+                valobj->SetFormat (orig_format);
+                orig_format = kNumFormats;
+            }
             err_cstr = valobj->GetError().AsCString();
         }
 
@@ -3086,13 +3105,13 @@
             const bool is_ref = type_flags.Test (ClangASTContext::eTypeIsReference);
             if (print_valobj)
             {
-                
-                sum_cstr = (omit_summary_depth == 0) ? valobj->GetSummaryAsCString() : NULL;
+                if (omit_summary_depth == 0)
+                    sum_cstr = valobj->GetSummaryAsCString();
 
-                // We must calculate this value in realtime because entry might alter this variable's value
-                // (e.g. by saying ${var%fmt}) and render precached values useless
-                if (val_cstr && (!entry || entry->DoesPrintValue() || !sum_cstr))
-                    s.Printf(" %s", valobj->GetValueAsCString());
+                // Make sure we have a value and make sure the summary didn't
+                // specify that the value should not be printed
+                if (!value_str.empty() && (entry == NULL || entry->DoesPrintValue() || sum_cstr == NULL))
+                    s.Printf(" %s", value_str.c_str());
 
                 if (sum_cstr)
                 {
@@ -3199,7 +3218,8 @@
                                                  true,
                                                  flat_output,
                                                  omit_summary_depth > 1 ? omit_summary_depth - 1 : 0,
-                                                 ignore_cap);
+                                                 ignore_cap,
+                                                 format_override);
                             }
                         }
 





More information about the lldb-commits mailing list