[Lldb-commits] [lldb] r130832 - in /lldb/trunk: include/lldb/ include/lldb/API/ include/lldb/Core/ include/lldb/Interpreter/ include/lldb/Target/ source/API/ source/Commands/ source/Core/ source/Interpreter/ source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/ source/Target/ test/array_types/ test/bitfields/ test/breakpoint_command/ test/breakpoint_conditions/ test/class_types/ test/cpp/dynamic-value/ test/forward/ test/foundation/ test/function_types/ test/global_v...

Jim Ingham jingham at apple.com
Tue May 3 20:43:19 PDT 2011


Author: jingham
Date: Tue May  3 22:43:18 2011
New Revision: 130832

URL: http://llvm.org/viewvc/llvm-project?rev=130832&view=rev
Log:
Change "frame var" over to using OptionGroups (and thus the OptionGroupVariableObjectDisplay).
Change the boolean "use_dynamic" over to a tri-state, no-dynamic, dynamic-w/o running target,
and dynamic with running target.

Modified:
    lldb/trunk/include/lldb/API/SBFrame.h
    lldb/trunk/include/lldb/API/SBValue.h
    lldb/trunk/include/lldb/Core/ValueObject.h
    lldb/trunk/include/lldb/Core/ValueObjectConstResult.h
    lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h
    lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
    lldb/trunk/include/lldb/Target/LanguageRuntime.h
    lldb/trunk/include/lldb/Target/StackFrame.h
    lldb/trunk/include/lldb/Target/Target.h
    lldb/trunk/include/lldb/lldb-enumerations.h
    lldb/trunk/source/API/SBFrame.cpp
    lldb/trunk/source/API/SBValue.cpp
    lldb/trunk/source/Commands/CommandObjectExpression.cpp
    lldb/trunk/source/Commands/CommandObjectFrame.cpp
    lldb/trunk/source/Commands/CommandObjectMemory.cpp
    lldb/trunk/source/Core/ValueObject.cpp
    lldb/trunk/source/Core/ValueObjectDynamicValue.cpp
    lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp
    lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
    lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
    lldb/trunk/source/Target/StackFrame.cpp
    lldb/trunk/source/Target/Target.cpp
    lldb/trunk/test/array_types/TestArrayTypes.py
    lldb/trunk/test/bitfields/TestBitfields.py
    lldb/trunk/test/breakpoint_command/TestBreakpointCommand.py
    lldb/trunk/test/breakpoint_conditions/TestBreakpointConditions.py
    lldb/trunk/test/class_types/TestClassTypes.py
    lldb/trunk/test/cpp/dynamic-value/TestDynamicValue.py
    lldb/trunk/test/forward/TestForwardDeclaration.py
    lldb/trunk/test/foundation/TestObjCMethods.py
    lldb/trunk/test/function_types/TestFunctionTypes.py
    lldb/trunk/test/global_variables/TestGlobalVariables.py
    lldb/trunk/test/objc-dynamic-value/TestObjCDynamicValue.py
    lldb/trunk/test/set_values/TestSetValues.py
    lldb/trunk/test/signed_types/TestSignedTypes.py
    lldb/trunk/test/types/AbstractBase.py
    lldb/trunk/test/unique-types/TestUniqueTypes.py
    lldb/trunk/test/unsigned_types/TestUnsignedTypes.py

Modified: lldb/trunk/include/lldb/API/SBFrame.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBFrame.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBFrame.h (original)
+++ lldb/trunk/include/lldb/API/SBFrame.h Tue May  3 22:43:18 2011
@@ -76,7 +76,7 @@
     EvaluateExpression (const char *expr);    
 
     lldb::SBValue
-    EvaluateExpression (const char *expr, bool fetch_dynamic_value);
+    EvaluateExpression (const char *expr, lldb::DynamicValueType use_dynamic);
 
     // Gets the lexical block that defines the stack frame. Another way to think
     // of this is it will return the block that contains all of the variables
@@ -126,7 +126,7 @@
                   bool locals,
                   bool statics,
                   bool in_scope_only,
-                  bool use_dynamic);
+                  lldb::DynamicValueType  use_dynamic);
 
     lldb::SBValueList
     GetRegisters ();
@@ -136,7 +136,7 @@
     FindVariable (const char *var_name);
 
     lldb::SBValue
-    FindVariable (const char *var_name, bool use_dynamic);
+    FindVariable (const char *var_name, lldb::DynamicValueType use_dynamic);
 
     // Find variables, register sets, registers, or persistent variables using
     // the frame as the scope
@@ -144,7 +144,7 @@
     FindValue (const char *name, ValueType value_type);
 
     lldb::SBValue
-    FindValue (const char *name, ValueType value_type, bool use_dynamic);
+    FindValue (const char *name, ValueType value_type, lldb::DynamicValueType use_dynamic);
 
     bool
     GetDescription (lldb::SBStream &description);

Modified: lldb/trunk/include/lldb/API/SBValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBValue.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBValue.h (original)
+++ lldb/trunk/include/lldb/API/SBValue.h Tue May  3 22:43:18 2011
@@ -100,7 +100,7 @@
     GetChildAtIndex (uint32_t idx);
 
     lldb::SBValue
-    GetChildAtIndex (uint32_t idx, bool use_dynamic);
+    GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic);
 
     // Matches children of this object only and will match base classes and
     // member names if this is a clang typed object.
@@ -115,7 +115,7 @@
     // Matches child members of this object and child members of any base
     // classes.
     lldb::SBValue
-    GetChildMemberWithName (const char *name, bool use_dynamic);
+    GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic);
 
     uint32_t
     GetNumChildren ();

Modified: lldb/trunk/include/lldb/Core/ValueObject.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObject.h Tue May  3 22:43:18 2011
@@ -366,7 +366,7 @@
     GetSyntheticArrayMemberFromPointer (int32_t index, bool can_create);
     
     lldb::ValueObjectSP
-    GetDynamicValue (bool can_create);
+    GetDynamicValue (lldb::DynamicValueType valueType);
     
     virtual lldb::ValueObjectSP
     CreateConstantValue (const ConstString &name);
@@ -403,7 +403,7 @@
                      bool show_types,
                      bool show_location,
                      bool use_objc,
-                     bool use_dynamic,
+                     lldb::DynamicValueType use_dynamic,
                      bool scope_already_checked,
                      bool flat_output);
 
@@ -533,7 +533,7 @@
     UpdateValue () = 0;
 
     virtual void
-    CalculateDynamicValue ();
+    CalculateDynamicValue (lldb::DynamicValueType use_dynamic);
     
     // Should only be called by ValueObject::GetChildAtIndex()
     // Returns a ValueObject managed by this ValueObject's manager.

Modified: lldb/trunk/include/lldb/Core/ValueObjectConstResult.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectConstResult.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObjectConstResult.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObjectConstResult.h Tue May  3 22:43:18 2011
@@ -96,12 +96,13 @@
     virtual bool
     UpdateValue ();
 
+    // CalculateDynamicValue doesn't change the dynamic value, since this can get
+    // called at any time and you can't reliably fetch the dynamic value at any time.
+    // If we want to have dynamic values for ConstResults, then we'll need to make them
+    // up when we make the const result & stuff them in by hand.
     virtual void
-    CalculateDynamicValue () {} // CalculateDynamicValue doesn't change the dynamic value, since this can get
-                                // called at any time and you can't reliably fetch the dynamic value at any time.
-                                // If we want to have dynamic values for ConstResults, then we'll need to make them
-                                // up when we make the const result & stuff them in by hand.
-                                    
+    CalculateDynamicValue (lldb::DynamicValueType use_dynamic) {} 
+                                        
     clang::ASTContext *m_clang_ast; // The clang AST that the clang type comes from
     ConstString m_type_name;
     uint32_t m_byte_size;

Modified: lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObjectDynamicValue.h Tue May  3 22:43:18 2011
@@ -90,10 +90,11 @@
     Address  m_address;  ///< The variable that this value object is based upon
     lldb::TypeSP m_type_sp;
     lldb::ValueObjectSP m_owning_valobj_sp;
+    lldb::DynamicValueType m_use_dynamic;
 
 private:
     friend class ValueObject;
-    ValueObjectDynamicValue (ValueObject &parent);
+    ValueObjectDynamicValue (ValueObject &parent, lldb::DynamicValueType use_dynamic);
 
     //------------------------------------------------------------------
     // For ValueObject only

Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h (original)
+++ lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h Tue May  3 22:43:18 2011
@@ -53,6 +53,7 @@
     bool use_objc;
     uint32_t max_depth;
     uint32_t ptr_depth;
+    lldb::DynamicValueType use_dynamic;
 };
 
 } // namespace lldb_private

Modified: lldb/trunk/include/lldb/Target/LanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/LanguageRuntime.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/LanguageRuntime.h (original)
+++ lldb/trunk/include/lldb/Target/LanguageRuntime.h Tue May  3 22:43:18 2011
@@ -43,7 +43,10 @@
     GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope) = 0;
     
     virtual bool
-    GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address) = 0;
+    GetDynamicTypeAndAddress (ValueObject &in_value, 
+                              lldb::DynamicValueType use_dynamic, 
+                              TypeAndOrName &class_type_or_name, 
+                              Address &address) = 0;
     
     // This should be a fast test to determine whether it is likely that this value would
     // have a dynamic type.

Modified: lldb/trunk/include/lldb/Target/StackFrame.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/StackFrame.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/StackFrame.h (original)
+++ lldb/trunk/include/lldb/Target/StackFrame.h Tue May  3 22:43:18 2011
@@ -33,8 +33,7 @@
     enum ExpressionPathOption
     {
         eExpressionPathOptionCheckPtrVsMember   = (1u << 0),
-        eExpressionPathOptionsNoFragileObjcIvar = (1u << 1),
-        eExpressionPathOptionsDynamicValue      = (1u << 2)
+        eExpressionPathOptionsNoFragileObjcIvar = (1u << 1)
     };
     //------------------------------------------------------------------
     // Constructors and Destructors
@@ -104,7 +103,11 @@
 
     // See ExpressionPathOption enumeration for "options" values
     lldb::ValueObjectSP
-    GetValueForVariableExpressionPath (const char *var_expr, uint32_t options, Error &error);
+    GetValueForVariableExpressionPath (const char *var_expr, 
+                                       lldb::DynamicValueType use_dynamic, 
+                                       uint32_t options,
+                                       lldb::VariableSP &var_sp,
+                                       Error &error);
 
     bool
     HasDebugInformation ();
@@ -134,10 +137,10 @@
     }
     
     lldb::ValueObjectSP
-    GetValueObjectForFrameVariable (const lldb::VariableSP &variable_sp, bool use_dynamic);
+    GetValueObjectForFrameVariable (const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic);
 
     lldb::ValueObjectSP
-    TrackGlobalVariable (const lldb::VariableSP &variable_sp, bool use_dynamic);
+    TrackGlobalVariable (const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic);
     
     //------------------------------------------------------------------
     // lldb::ExecutionContextScope pure virtual functions

Modified: lldb/trunk/include/lldb/Target/Target.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Target.h (original)
+++ lldb/trunk/include/lldb/Target/Target.h Tue May  3 22:43:18 2011
@@ -40,6 +40,7 @@
 class TargetInstanceSettings : public InstanceSettings
 {
 public:
+    static OptionEnumValueElement g_dynamic_value_types[];
 
     TargetInstanceSettings (UserSettingsController &owner, bool live_instance = true, const char *name = NULL);
 
@@ -67,10 +68,10 @@
                               StringList &value,
                               Error *err);
 
-    bool
+    lldb::DynamicValueType
     GetPreferDynamicValue()
     {
-        return m_prefer_dynamic_value;
+        return (lldb::DynamicValueType) g_dynamic_value_types[m_prefer_dynamic_value].value;
     }
 
     bool
@@ -96,9 +97,10 @@
     
     OptionValueFileSpec m_expr_prefix_file;
     lldb::DataBufferSP m_expr_prefix_contents_sp;
-    OptionValueBoolean m_prefer_dynamic_value;
+    int                m_prefer_dynamic_value;
     OptionValueBoolean m_skip_prologue;
     PathMappingList m_source_map;
+    
 
 };
 
@@ -483,7 +485,7 @@
                         StackFrame *frame,
                         bool unwind_on_error,
                         bool keep_in_memory,
-                        bool fetch_dynamic_value,
+                        lldb::DynamicValueType use_dynamic,
                         lldb::ValueObjectSP &result_valobj_sp);
 
     ClangPersistentVariables &

Modified: lldb/trunk/include/lldb/lldb-enumerations.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-enumerations.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-enumerations.h (original)
+++ lldb/trunk/include/lldb/lldb-enumerations.h Tue May  3 22:43:18 2011
@@ -316,7 +316,13 @@
         eLanguageTypePython          = 0x0014    ///< Python.
     } LanguageType;
 
-
+    typedef enum DynamicValueType
+    {
+        eNoDynamicValues = 0,
+        eDynamicCanRunTarget    = 1,
+        eDynamicDontRunTarget   = 2
+    } DynamicValueType;
+    
     typedef enum AccessType
     {
         eAccessNone,

Modified: lldb/trunk/source/API/SBFrame.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBFrame.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/API/SBFrame.cpp (original)
+++ lldb/trunk/source/API/SBFrame.cpp Tue May  3 22:43:18 2011
@@ -343,12 +343,12 @@
 SBValue
 SBFrame::FindVariable (const char *name)
 {
-    bool use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType  use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
     return FindVariable (name, use_dynamic);
 }
 
 SBValue
-SBFrame::FindVariable (const char *name, bool use_dynamic)
+SBFrame::FindVariable (const char *name, lldb::DynamicValueType use_dynamic)
 {
     VariableSP var_sp;
     SBValue sb_value;
@@ -389,12 +389,12 @@
 SBValue
 SBFrame::FindValue (const char *name, ValueType value_type)
 {
-    bool use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
     return FindValue (name, value_type, use_dynamic);
 }
 
 SBValue
-SBFrame::FindValue (const char *name, ValueType value_type, bool use_dynamic)
+SBFrame::FindValue (const char *name, ValueType value_type, lldb::DynamicValueType use_dynamic)
 {
     SBValue sb_value;
     if (m_opaque_sp && name && name[0])
@@ -579,7 +579,7 @@
                        bool statics,
                        bool in_scope_only)
 {
-    bool use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
     return GetVariables (arguments, locals, statics, in_scope_only, use_dynamic);
 }
 
@@ -588,7 +588,7 @@
                        bool locals,
                        bool statics,
                        bool in_scope_only,
-                       bool use_dynamic)
+                       lldb::DynamicValueType  use_dynamic)
 {
     LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
 
@@ -706,12 +706,12 @@
 SBValue
 SBFrame::EvaluateExpression (const char *expr)
 {
-    bool use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType use_dynamic = m_opaque_sp->CalculateTarget()->GetPreferDynamicValue();
     return EvaluateExpression (expr, use_dynamic);
 }
 
 SBValue
-SBFrame::EvaluateExpression (const char *expr, bool fetch_dynamic_value)
+SBFrame::EvaluateExpression (const char *expr, lldb::DynamicValueType fetch_dynamic_value)
 {
     Mutex::Locker api_locker (m_opaque_sp->GetThread().GetProcess().GetTarget().GetAPIMutex());
 
@@ -732,8 +732,8 @@
         exe_results = m_opaque_sp->GetThread().GetProcess().GetTarget().EvaluateExpression(expr, 
                                                                                            m_opaque_sp.get(), 
                                                                                            unwind_on_error, 
-                                                                                           fetch_dynamic_value, 
                                                                                            keep_in_memory, 
+                                                                                           fetch_dynamic_value, 
                                                                                            *expr_result);
     }
     

Modified: lldb/trunk/source/API/SBValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBValue.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/API/SBValue.cpp (original)
+++ lldb/trunk/source/API/SBValue.cpp Tue May  3 22:43:18 2011
@@ -339,12 +339,12 @@
 SBValue
 SBValue::GetChildAtIndex (uint32_t idx)
 {
-    bool use_dynamic_value = m_opaque_sp->GetUpdatePoint().GetTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType use_dynamic_value = m_opaque_sp->GetUpdatePoint().GetTarget()->GetPreferDynamicValue();
     return GetChildAtIndex (idx, use_dynamic_value);
 }
 
 SBValue
-SBValue::GetChildAtIndex (uint32_t idx, bool use_dynamic_value)
+SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic)
 {
     lldb::ValueObjectSP child_sp;
 
@@ -353,11 +353,11 @@
         child_sp = m_opaque_sp->GetChildAtIndex (idx, true);
     }
 
-    if (use_dynamic_value)
+    if (use_dynamic != lldb::eNoDynamicValues)
     {
         if (child_sp)
         {
-            lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (true);
+            lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic);
             if (dynamic_sp)
                 child_sp = dynamic_sp;
         }
@@ -391,12 +391,12 @@
 SBValue
 SBValue::GetChildMemberWithName (const char *name)
 {
-    bool use_dynamic_value = m_opaque_sp->GetUpdatePoint().GetTarget()->GetPreferDynamicValue();
+    lldb::DynamicValueType use_dynamic_value = m_opaque_sp->GetUpdatePoint().GetTarget()->GetPreferDynamicValue();
     return GetChildMemberWithName (name, use_dynamic_value);
 }
 
 SBValue
-SBValue::GetChildMemberWithName (const char *name, bool use_dynamic_value)
+SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic_value)
 {
     lldb::ValueObjectSP child_sp;
     const ConstString str_name (name);
@@ -406,11 +406,11 @@
         child_sp = m_opaque_sp->GetChildMemberWithName (str_name, true);
     }
 
-    if (use_dynamic_value)
+    if (use_dynamic_value != lldb::eNoDynamicValues)
     {
         if (child_sp)
         {
-            lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (true);
+            lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic_value);
             if (dynamic_sp)
                 child_sp = dynamic_sp;
         }

Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Tue May  3 22:43:18 2011
@@ -260,27 +260,22 @@
         ExecutionResults exe_results;
         
         bool keep_in_memory = true;
-        bool use_dynamic;
+        lldb::DynamicValueType use_dynamic;
         // If use dynamic is not set, get it from the target:
         switch (m_options.use_dynamic)
         {
         case eLazyBoolCalculate:
-            {   
-                if (m_exe_ctx.target->GetPreferDynamicValue())
-                    use_dynamic = true;
-                else
-                    use_dynamic = false;
-            }
+            use_dynamic = m_exe_ctx.target->GetPreferDynamicValue();
             break;
         case eLazyBoolYes:
-            use_dynamic = true;
+            use_dynamic = lldb::eDynamicCanRunTarget;
             break;
         case eLazyBoolNo:
-            use_dynamic = false;
+            use_dynamic = lldb::eNoDynamicValues;
             break;
         }
         
-        exe_results = m_exe_ctx.target->EvaluateExpression(expr, m_exe_ctx.frame, m_options.unwind_on_error, use_dynamic, keep_in_memory, result_valobj_sp);
+        exe_results = m_exe_ctx.target->EvaluateExpression(expr, m_exe_ctx.frame, m_options.unwind_on_error, keep_in_memory, use_dynamic, result_valobj_sp);
         
         if (exe_results == eExecutionInterrupted && !m_options.unwind_on_error)
         {

Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Tue May  3 22:43:18 2011
@@ -25,6 +25,7 @@
 #include "lldb/Interpreter/CommandInterpreter.h"
 #include "lldb/Interpreter/CommandReturnObject.h"
 #include "lldb/Interpreter/Options.h"
+#include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
 #include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/ObjectFile.h"
@@ -285,73 +286,46 @@
 {
 public:
 
-    class CommandOptions : public Options
+    class OptionGroupFrameVariable : public OptionGroup
     {
     public:
 
-        CommandOptions (CommandInterpreter &interpreter) :
-            Options(interpreter)
+        OptionGroupFrameVariable ()
         {
-            OptionParsingStarting ();
         }
 
         virtual
-        ~CommandOptions ()
+        ~OptionGroupFrameVariable ()
         {
         }
 
+        virtual uint32_t
+        GetNumDefinitions ();
+
+        virtual const OptionDefinition*
+        GetDefinitions ()
+        {
+            return g_option_table;
+        }
+    
         virtual Error
-        SetOptionValue (uint32_t option_idx, const char *option_arg)
+        SetOptionValue (CommandInterpreter &interpreter,
+                        uint32_t option_idx, 
+                        const char *option_arg)
         {
             Error error;
-            bool success;
-            char short_option = (char) m_getopt_table[option_idx].val;
+            char short_option = (char) g_option_table[option_idx].short_option;
             switch (short_option)
             {
-            case 'o':   use_objc     = true;  break;
-            case 'd':
-                {
-                    bool success;
-                    bool result;
-                    result = Args::StringToBoolean(option_arg, true, &success);
-                    if (!success)
-                        error.SetErrorStringWithFormat("Invalid dynamic value setting: \"%s\".\n", option_arg);
-                    else
-                    {
-                        if (result)
-                            use_dynamic  = eLazyBoolYes;  
-                        else
-                            use_dynamic = eLazyBoolNo;
-                    }
-                }
-                break;
             case 'r':   use_regex    = true;  break;
             case 'a':   show_args    = false; break;
             case 'l':   show_locals  = false; break;
             case 'g':   show_globals = true;  break;
-            case 't':   show_types   = true;  break;
-            case 'y':   show_summary = false; break;
-            case 'L':   show_location= true;  break;
             case 'c':   show_decl    = true;  break;
-            case 'D':   debug        = true;  break;
             case 'f':   error = Args::StringToFormat(option_arg, format, NULL); break;
-            case 'F':   flat_output  = true;  break;
-            case 'A':
-                max_depth = Args::StringToUInt32 (option_arg, UINT32_MAX, 0, &success);
-                if (!success)
-                    error.SetErrorStringWithFormat("Invalid max depth '%s'.\n", option_arg);
-                break;
-
-            case 'p':
-                ptr_depth = Args::StringToUInt32 (option_arg, 0, 0, &success);
-                if (!success)
-                    error.SetErrorStringWithFormat("Invalid pointer depth '%s'.\n", option_arg);
-                break;
-
             case 'G':
                 globals.push_back(ConstString (option_arg));
                 break;
-
             case 's':
                 show_scope = true;
                 break;
@@ -364,52 +338,29 @@
             return error;
         }
 
-        void
-        OptionParsingStarting ()
+        virtual void
+        OptionParsingStarting (CommandInterpreter &interpreter)
         {
-            use_objc      = false;
-            use_regex     = false;
             show_args     = true;
-            show_locals   = true;
-            show_globals  = false;
-            show_types    = false;
-            show_scope    = false;
-            show_summary  = true;
-            show_location = false;
             show_decl     = false;
-            debug         = false;
-            flat_output   = false;
-            use_dynamic   = eLazyBoolCalculate;
-            max_depth     = UINT32_MAX;
-            ptr_depth     = 0;
             format        = eFormatDefault;
+            show_globals  = false;
+            show_locals   = true;
+            use_regex     = false;
+            show_scope    = false;
             globals.clear();
         }
 
-        const OptionDefinition*
-        GetDefinitions ()
-        {
-            return g_option_table;
-        }
-
         // Options table: Required for subclasses of Options.
 
         static OptionDefinition g_option_table[];
-        bool use_objc:1,
-             use_regex:1,
+        
+        bool use_regex:1,
              show_args:1,
              show_locals:1,
              show_globals:1,
-             show_types:1,
              show_scope:1,
-             show_summary:1,
-             show_location:1,
-             show_decl:1,
-             debug:1,
-             flat_output:1;
-        LazyBool     use_dynamic;
-        uint32_t max_depth; // The depth to print when dumping concrete (not pointers) aggreate values
-        uint32_t ptr_depth; // The default depth that is dumped when we find pointers
+             show_decl:1;
         lldb::Format format; // The format to use when dumping variables or children of variables
         std::vector<ConstString> globals;
         // Instance variables to hold the values for command options.
@@ -426,7 +377,9 @@
                        "'var->child.x'.",
                        NULL,
                        eFlagProcessMustBeLaunched | eFlagProcessMustBePaused),
-        m_options (interpreter)
+        m_option_group (interpreter),
+        m_frame_var_options(),
+        m_varobj_options()
     {
         CommandArgumentEntry arg;
         CommandArgumentData var_name_arg;
@@ -440,6 +393,10 @@
         
         // Push the data for the first argument into the m_arguments vector.
         m_arguments.push_back (arg);
+        
+        m_option_group.Append (&m_frame_var_options, LLDB_OPT_SET_ALL, LLDB_OPT_SET_1);
+        m_option_group.Append (&m_varobj_options, LLDB_OPT_SET_ALL, LLDB_OPT_SET_1);
+        m_option_group.Finalize();
     }
 
     virtual
@@ -451,7 +408,7 @@
     Options *
     GetOptions ()
     {
-        return &m_options;
+        return &m_option_group;
     }
 
 
@@ -479,40 +436,19 @@
             VariableSP var_sp;
             ValueObjectSP valobj_sp;
 
-            bool use_dynamic;
-            
-            // If use dynamic is not set, get it from the target:
-            switch (m_options.use_dynamic)
-            {
-            case eLazyBoolCalculate:
-                {   
-                    if (exe_ctx.target->GetPreferDynamicValue())
-                        use_dynamic = true;
-                    else
-                        use_dynamic = false;
-                }
-                break;
-            case eLazyBoolYes:
-                use_dynamic = true;
-                break;
-            case eLazyBoolNo:
-                use_dynamic = false;
-                break;
-            }
-            
             const char *name_cstr = NULL;
             size_t idx;
-            if (!m_options.globals.empty())
+            if (!m_frame_var_options.globals.empty())
             {
                 uint32_t fail_count = 0;
                 if (exe_ctx.target)
                 {
-                    const size_t num_globals = m_options.globals.size();
+                    const size_t num_globals = m_frame_var_options.globals.size();
                     for (idx = 0; idx < num_globals; ++idx)
                     {
                         VariableList global_var_list;
                         const uint32_t num_matching_globals 
-                                = exe_ctx.target->GetImages().FindGlobalVariables (m_options.globals[idx], 
+                                = exe_ctx.target->GetImages().FindGlobalVariables (m_frame_var_options.globals[idx], 
                                                                                    true, 
                                                                                    UINT32_MAX, 
                                                                                    global_var_list);
@@ -521,7 +457,7 @@
                         {
                             ++fail_count;
                             result.GetErrorStream().Printf ("error: can't find global variable '%s'\n", 
-                                                            m_options.globals[idx].AsCString());
+                                                            m_frame_var_options.globals[idx].AsCString());
                         }
                         else
                         {
@@ -530,16 +466,18 @@
                                 var_sp = global_var_list.GetVariableAtIndex(global_idx);
                                 if (var_sp)
                                 {
-                                    valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, use_dynamic);
+                                    valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, 
+                                                                                               m_varobj_options.use_dynamic);
                                     if (!valobj_sp)
-                                        valobj_sp = exe_ctx.frame->TrackGlobalVariable (var_sp, use_dynamic);
+                                        valobj_sp = exe_ctx.frame->TrackGlobalVariable (var_sp, 
+                                                                                        m_varobj_options.use_dynamic);
 
                                     if (valobj_sp)
                                     {
-                                        if (m_options.format != eFormatDefault)
-                                            valobj_sp->SetFormat (m_options.format);
+                                        if (m_frame_var_options.format != eFormatDefault)
+                                            valobj_sp->SetFormat (m_frame_var_options.format);
 
-                                        if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                        if (m_frame_var_options.show_decl && var_sp->GetDeclaration ().GetFile())
                                         {
                                             var_sp->GetDeclaration ().DumpStopContext (&s, false);
                                             s.PutCString (": ");
@@ -548,15 +486,15 @@
                                         ValueObject::DumpValueObject (result.GetOutputStream(), 
                                                                       valobj_sp.get(), 
                                                                       name_cstr, 
-                                                                      m_options.ptr_depth, 
+                                                                      m_varobj_options.ptr_depth, 
                                                                       0, 
-                                                                      m_options.max_depth, 
-                                                                      m_options.show_types,
-                                                                      m_options.show_location,
-                                                                      m_options.use_objc,
-                                                                      use_dynamic,
+                                                                      m_varobj_options.max_depth, 
+                                                                      m_varobj_options.show_types,
+                                                                      m_varobj_options.show_location,
+                                                                      m_varobj_options.use_objc,
+                                                                      m_varobj_options.use_dynamic,
                                                                       false,
-                                                                      m_options.flat_output);                                        
+                                                                      m_varobj_options.flat_output);                                        
                                     }
                                 }
                             }
@@ -576,9 +514,9 @@
                     // variable objects from them...
                     for (idx = 0; (name_cstr = command.GetArgumentAtIndex(idx)) != NULL; ++idx)
                     {
-                        uint32_t ptr_depth = m_options.ptr_depth;
+                        uint32_t ptr_depth = m_varobj_options.ptr_depth;
                         
-                        if (m_options.use_regex)
+                        if (m_frame_var_options.use_regex)
                         {
                             const uint32_t regex_start_index = regex_var_list.GetSize();
                             RegularExpression regex (name_cstr);
@@ -597,13 +535,13 @@
                                         var_sp = regex_var_list.GetVariableAtIndex (regex_idx);
                                         if (var_sp)
                                         {
-                                            valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, use_dynamic);
+                                            valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, m_varobj_options.use_dynamic);
                                             if (valobj_sp)
                                             {                                        
-                                                if (m_options.format != eFormatDefault)
-                                                    valobj_sp->SetFormat (m_options.format);
+                                                if (m_frame_var_options.format != eFormatDefault)
+                                                    valobj_sp->SetFormat (m_frame_var_options.format);
                                                 
-                                                if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                                if (m_frame_var_options.show_decl && var_sp->GetDeclaration ().GetFile())
                                                 {
                                                     var_sp->GetDeclaration ().DumpStopContext (&s, false);
                                                     s.PutCString (": ");
@@ -612,15 +550,15 @@
                                                 ValueObject::DumpValueObject (result.GetOutputStream(), 
                                                                               valobj_sp.get(), 
                                                                               var_sp->GetName().AsCString(), 
-                                                                              m_options.ptr_depth, 
+                                                                              m_varobj_options.ptr_depth, 
                                                                               0, 
-                                                                              m_options.max_depth, 
-                                                                              m_options.show_types,
-                                                                              m_options.show_location,
-                                                                              m_options.use_objc,
-                                                                              use_dynamic, 
+                                                                              m_varobj_options.max_depth, 
+                                                                              m_varobj_options.show_types,
+                                                                              m_varobj_options.show_location,
+                                                                              m_varobj_options.use_objc,
+                                                                              m_varobj_options.use_dynamic, 
                                                                               false,
-                                                                              m_options.flat_output);                                        
+                                                                              m_varobj_options.flat_output);                                        
                                             }
                                         }
                                     }
@@ -643,16 +581,17 @@
                         {
                             Error error;
                             uint32_t expr_path_options = StackFrame::eExpressionPathOptionCheckPtrVsMember;
-                            if (use_dynamic)
-                                expr_path_options |= StackFrame::eExpressionPathOptionsDynamicValue;
-                                
-                            valobj_sp = exe_ctx.frame->GetValueForVariableExpressionPath (name_cstr, expr_path_options, error);
+                            lldb::VariableSP var_sp;
+                            valobj_sp = exe_ctx.frame->GetValueForVariableExpressionPath (name_cstr, 
+                                                                                          m_varobj_options.use_dynamic, 
+                                                                                          expr_path_options,
+                                                                                          var_sp,
+                                                                                          error);
                             if (valobj_sp)
                             {
-                                if (m_options.format != eFormatDefault)
-                                    valobj_sp->SetFormat (m_options.format);
-                                
-                                if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                if (m_frame_var_options.format != eFormatDefault)
+                                    valobj_sp->SetFormat (m_frame_var_options.format);
+                                if (m_frame_var_options.show_decl && var_sp && var_sp->GetDeclaration ().GetFile())
                                 {
                                     var_sp->GetDeclaration ().DumpStopContext (&s, false);
                                     s.PutCString (": ");
@@ -662,13 +601,13 @@
                                                               valobj_sp->GetParent() ? name_cstr : NULL, 
                                                               ptr_depth, 
                                                               0, 
-                                                              m_options.max_depth, 
-                                                              m_options.show_types,
-                                                              m_options.show_location,
-                                                              m_options.use_objc,
-                                                              use_dynamic,
+                                                              m_varobj_options.max_depth, 
+                                                              m_varobj_options.show_types,
+                                                              m_varobj_options.show_location,
+                                                              m_varobj_options.use_objc,
+                                                              m_varobj_options.use_dynamic,
                                                               false,
-                                                              m_options.flat_output);
+                                                              m_varobj_options.flat_output);
                             }
                             else
                             {
@@ -696,26 +635,26 @@
                             switch (var_sp->GetScope())
                             {
                             case eValueTypeVariableGlobal:
-                                dump_variable = m_options.show_globals;
-                                if (dump_variable && m_options.show_scope)
+                                dump_variable = m_frame_var_options.show_globals;
+                                if (dump_variable && m_frame_var_options.show_scope)
                                     s.PutCString("GLOBAL: ");
                                 break;
 
                             case eValueTypeVariableStatic:
-                                dump_variable = m_options.show_globals;
-                                if (dump_variable && m_options.show_scope)
+                                dump_variable = m_frame_var_options.show_globals;
+                                if (dump_variable && m_frame_var_options.show_scope)
                                     s.PutCString("STATIC: ");
                                 break;
                                 
                             case eValueTypeVariableArgument:
-                                dump_variable = m_options.show_args;
-                                if (dump_variable && m_options.show_scope)
+                                dump_variable = m_frame_var_options.show_args;
+                                if (dump_variable && m_frame_var_options.show_scope)
                                     s.PutCString("   ARG: ");
                                 break;
                                 
                             case eValueTypeVariableLocal:
-                                dump_variable = m_options.show_locals;
-                                if (dump_variable && m_options.show_scope)
+                                dump_variable = m_frame_var_options.show_locals;
+                                if (dump_variable && m_frame_var_options.show_scope)
                                     s.PutCString(" LOCAL: ");
                                 break;
 
@@ -729,17 +668,18 @@
                                 // Use the variable object code to make sure we are
                                 // using the same APIs as the the public API will be
                                 // using...
-                                valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, use_dynamic);
+                                valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp, 
+                                                                                           m_varobj_options.use_dynamic);
                                 if (valobj_sp)
                                 {
-                                    if (m_options.format != eFormatDefault)
-                                        valobj_sp->SetFormat (m_options.format);
+                                    if (m_frame_var_options.format != eFormatDefault)
+                                        valobj_sp->SetFormat (m_frame_var_options.format);
                                     
                                     // When dumping all variables, don't print any variables
                                     // that are not in scope to avoid extra unneeded output
                                     if (valobj_sp->IsInScope ())
                                     {
-                                        if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                        if (m_frame_var_options.show_decl && var_sp->GetDeclaration ().GetFile())
                                         {
                                             var_sp->GetDeclaration ().DumpStopContext (&s, false);
                                             s.PutCString (": ");
@@ -747,15 +687,15 @@
                                         ValueObject::DumpValueObject (result.GetOutputStream(), 
                                                                       valobj_sp.get(), 
                                                                       name_cstr, 
-                                                                      m_options.ptr_depth, 
+                                                                      m_varobj_options.ptr_depth, 
                                                                       0, 
-                                                                      m_options.max_depth, 
-                                                                      m_options.show_types,
-                                                                      m_options.show_location,
-                                                                      m_options.use_objc,
-                                                                      use_dynamic, 
+                                                                      m_varobj_options.max_depth, 
+                                                                      m_varobj_options.show_types,
+                                                                      m_varobj_options.show_location,
+                                                                      m_varobj_options.use_objc,
+                                                                      m_varobj_options.use_dynamic, 
                                                                       false,
-                                                                      m_options.flat_output);                                        
+                                                                      m_varobj_options.flat_output);                                        
                                     }
                                 }
                             }
@@ -769,31 +709,32 @@
     }
 protected:
 
-    CommandOptions m_options;
+    OptionGroupOptions m_option_group;
+    OptionGroupFrameVariable m_frame_var_options;
+    OptionGroupValueObjectDisplay m_varobj_options;
 };
 
 OptionDefinition
-CommandObjectFrameVariable::CommandOptions::g_option_table[] =
+CommandObjectFrameVariable::OptionGroupFrameVariable::g_option_table[] =
 {
-{ LLDB_OPT_SET_1, false, "aggregate-depth", 'A', required_argument, NULL, 0, eArgTypeCount,   "Set the max recurse depth when dumping aggregate types (default is infinity)."},
 { LLDB_OPT_SET_1, false, "no-args",         'a', no_argument,       NULL, 0, eArgTypeNone,    "Omit function arguments."},
 { LLDB_OPT_SET_1, false, "show-declaration",'c', no_argument,       NULL, 0, eArgTypeNone,    "Show variable declaration information (source file and line where the variable was declared)."},
-{ LLDB_OPT_SET_1, false, "debug",           'D', no_argument,       NULL, 0, eArgTypeNone,    "Enable verbose debug information."},
-{ LLDB_OPT_SET_1, false, "dynamic-type",    'd', required_argument, NULL, 0, eArgTypeBoolean, "Show the object as its full dynamic type, not its static type, if available."},
 { LLDB_OPT_SET_1, false, "format",          'f', required_argument, NULL, 0, eArgTypeExprFormat,  "Specify the format that the variable output should use."},
-{ LLDB_OPT_SET_1, false, "flat",            'F', no_argument,       NULL, 0, eArgTypeNone,    "Display results in a flat format that uses expression paths for each variable or member."},
 { LLDB_OPT_SET_1, false, "show-globals",    'g', no_argument,       NULL, 0, eArgTypeNone,    "Show the current frame source file global and static variables."},
 { LLDB_OPT_SET_1, false, "find-global",     'G', required_argument, NULL, 0, eArgTypeVarName, "Find a global variable by name (which might not be in the current stack frame source file)."},
-{ LLDB_OPT_SET_1, false, "location",        'L', no_argument,       NULL, 0, eArgTypeNone,    "Show variable location information."},
 { LLDB_OPT_SET_1, false, "no-locals",       'l', no_argument,       NULL, 0, eArgTypeNone,    "Omit local variables."},
-{ LLDB_OPT_SET_1, false, "objc",            'o', no_argument,       NULL, 0, eArgTypeNone,    "When looking up a variable by name, print as an Objective-C object."},
-{ LLDB_OPT_SET_1, false, "ptr-depth",       'p', required_argument, NULL, 0, eArgTypeCount,   "The number of pointers to be traversed when dumping values (default is zero)."},
 { LLDB_OPT_SET_1, false, "regex",           'r', no_argument,       NULL, 0, eArgTypeRegularExpression,    "The <variable-name> argument for name lookups are regular expressions."},
 { LLDB_OPT_SET_1, false, "scope",           's', no_argument,       NULL, 0, eArgTypeNone,    "Show variable scope (argument, local, global, static)."},
-{ LLDB_OPT_SET_1, false, "show-types",      't', no_argument,       NULL, 0, eArgTypeNone,    "Show variable types when dumping values."},
-{ LLDB_OPT_SET_1, false, "no-summary",      'y', no_argument,       NULL, 0, eArgTypeNone,    "Omit summary information."},
 { 0, false, NULL, 0, 0, NULL, NULL, eArgTypeNone, NULL }
 };
+
+uint32_t
+CommandObjectFrameVariable::OptionGroupFrameVariable::GetNumDefinitions ()
+{
+    return sizeof(CommandObjectFrameVariable::OptionGroupFrameVariable::g_option_table)/sizeof(OptionDefinition);
+}
+        
+
 #pragma mark CommandObjectMultiwordFrame
 
 //-------------------------------------------------------------------------

Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Tue May  3 22:43:18 2011
@@ -643,7 +643,6 @@
                     if (format != eFormatDefault)
                         valobj_sp->SetFormat (format);
 
-                    bool use_dynamic = false;
                     bool scope_already_checked = true;
                     
                     ValueObject::DumpValueObject (*output_stream,
@@ -655,7 +654,7 @@
                                                   m_varobj_options.show_types,
                                                   m_varobj_options.show_location,
                                                   m_varobj_options.use_objc,
-                                                  use_dynamic,
+                                                  m_varobj_options.use_dynamic,
                                                   scope_already_checked,
                                                   m_varobj_options.flat_output);
                 }

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Tue May  3 22:43:18 2011
@@ -986,8 +986,11 @@
 }
 
 void
-ValueObject::CalculateDynamicValue ()
+ValueObject::CalculateDynamicValue (lldb::DynamicValueType use_dynamic)
 {
+    if (use_dynamic == lldb::eNoDynamicValues)
+        return;
+        
     if (!m_dynamic_value && !IsDynamic())
     {
         Process *process = m_update_point.GetProcess();
@@ -1013,12 +1016,12 @@
             {
                 LanguageRuntime *objc_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeObjC);
                 if (objc_runtime)
-                    worth_having_dynamic_value = cpp_runtime->CouldHaveDynamicValue(*this);
+                    worth_having_dynamic_value = objc_runtime->CouldHaveDynamicValue(*this);
             }
         }
         
         if (worth_having_dynamic_value)
-            m_dynamic_value = new ValueObjectDynamicValue (*this);
+            m_dynamic_value = new ValueObjectDynamicValue (*this, use_dynamic);
             
 //        if (worth_having_dynamic_value)
 //            printf ("Adding dynamic value %s (%p) to (%p) - manager %p.\n", m_name.GetCString(), m_dynamic_value, this, m_manager);
@@ -1027,11 +1030,14 @@
 }
 
 ValueObjectSP
-ValueObject::GetDynamicValue (bool can_create)
+ValueObject::GetDynamicValue (DynamicValueType use_dynamic)
 {
-    if (!IsDynamic() && m_dynamic_value == NULL && can_create)
+    if (use_dynamic == lldb::eNoDynamicValues)
+        return ValueObjectSP();
+        
+    if (!IsDynamic() && m_dynamic_value == NULL)
     {
-        CalculateDynamicValue();
+        CalculateDynamicValue(use_dynamic);
     }
     if (m_dynamic_value)
         return m_dynamic_value->GetSP();
@@ -1137,16 +1143,16 @@
     bool show_types,
     bool show_location,
     bool use_objc,
-    bool use_dynamic,
+    lldb::DynamicValueType use_dynamic,
     bool scope_already_checked,
     bool flat_output
 )
 {
     if (valobj  && valobj->UpdateValueIfNeeded ())
     {
-        if (use_dynamic)
+        if (use_dynamic != lldb::eNoDynamicValues)
         {
-            ValueObject *dynamic_value = valobj->GetDynamicValue(true).get();
+            ValueObject *dynamic_value = valobj->GetDynamicValue(use_dynamic).get();
             if (dynamic_value)
                 valobj = dynamic_value;
         }

Modified: lldb/trunk/source/Core/ValueObjectDynamicValue.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectDynamicValue.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObjectDynamicValue.cpp (original)
+++ lldb/trunk/source/Core/ValueObjectDynamicValue.cpp Tue May  3 22:43:18 2011
@@ -34,10 +34,11 @@
 
 using namespace lldb_private;
 
-ValueObjectDynamicValue::ValueObjectDynamicValue (ValueObject &parent) :
+ValueObjectDynamicValue::ValueObjectDynamicValue (ValueObject &parent, lldb::DynamicValueType use_dynamic) :
     ValueObject(parent),
     m_address (),
-    m_type_sp()
+    m_type_sp(),
+    m_use_dynamic (use_dynamic)
 {
     SetName (parent.GetName().AsCString());
 }
@@ -122,6 +123,14 @@
         return false;
     }
     
+    // Setting our type_sp to NULL will route everything back through our
+    // parent which is equivalent to not using dynamic values.
+    if (m_use_dynamic == lldb::eNoDynamicValues)
+    {
+        m_type_sp.reset();
+        return true;
+    }
+    
     ExecutionContext exe_ctx (GetExecutionContextScope());
     
     if (exe_ctx.target)
@@ -144,19 +153,19 @@
     {
         LanguageRuntime *runtime = process->GetLanguageRuntime (known_type);
         if (runtime)
-            found_dynamic_type = runtime->GetDynamicTypeAndAddress (*m_parent, class_type_or_name, dynamic_address);
+            found_dynamic_type = runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
     }
     else
     {
         LanguageRuntime *cpp_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeC_plus_plus);
         if (cpp_runtime)
-            found_dynamic_type = cpp_runtime->GetDynamicTypeAndAddress (*m_parent, class_type_or_name, dynamic_address);
+            found_dynamic_type = cpp_runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
         
         if (!found_dynamic_type)
         {
             LanguageRuntime *objc_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeObjC);
             if (objc_runtime)
-                found_dynamic_type = cpp_runtime->GetDynamicTypeAndAddress (*m_parent, class_type_or_name, dynamic_address);
+                found_dynamic_type = cpp_runtime->GetDynamicTypeAndAddress (*m_parent, m_use_dynamic, class_type_or_name, dynamic_address);
         }
     }
     

Modified: lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp (original)
+++ lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp Tue May  3 22:43:18 2011
@@ -13,6 +13,8 @@
 // C++ Includes
 // Other libraries and framework includes
 // Project includes
+#include "lldb/Target/Target.h"
+#include "lldb/Interpreter/CommandInterpreter.h"
 
 using namespace lldb;
 using namespace lldb_private;
@@ -28,6 +30,8 @@
 static OptionDefinition
 g_option_table[] =
 {
+    { LLDB_OPT_SET_1, false, "dynamic-type",    'd', required_argument, TargetInstanceSettings::g_dynamic_value_types, 
+                                                                              0, eArgTypeNone,   "Show the object as its full dynamic type, not its static type, if available."},
     { LLDB_OPT_SET_1, false, "depth",           'D', required_argument, NULL, 0, eArgTypeCount,     "Set the max recurse depth when dumping aggregate types (default is infinity)."},
     { LLDB_OPT_SET_1, false, "flat",            'F', no_argument,       NULL, 0, eArgTypeNone,      "Display results in a flat format that uses expression paths for each variable or member."},
     { LLDB_OPT_SET_1, false, "location",        'L', no_argument,       NULL, 0, eArgTypeNone,      "Show variable location information."},
@@ -64,6 +68,17 @@
 
     switch (short_option)
     {
+        case 'd':
+            {
+                bool success;
+                int32_t result;
+                result = Args::StringToOptionEnum (option_arg, TargetInstanceSettings::g_dynamic_value_types, 2, &success);
+                if (!success)
+                    error.SetErrorStringWithFormat("Invalid dynamic value setting: \"%s\".\n", option_arg);
+                else
+                    use_dynamic = (lldb::DynamicValueType) result;
+            }
+            break;
         case 'T':   show_types   = true;  break;
         case 'Y':   show_summary = false; break;
         case 'L':   show_location= true;  break;
@@ -99,5 +114,13 @@
     use_objc      = false;
     max_depth     = UINT32_MAX;
     ptr_depth     = 0;
-}
-
+    
+    Target *target = interpreter.GetExecutionContext().target;
+    if (target != NULL)
+        use_dynamic = target->GetPreferDynamicValue();
+    else
+    {
+        // If we don't have any targets, then dynamic values won't do us much good.
+        use_dynamic = lldb::eNoDynamicValues;
+    }
+}
\ No newline at end of file

Modified: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp Tue May  3 22:43:18 2011
@@ -41,7 +41,10 @@
 }
 
 bool
-ItaniumABILanguageRuntime::GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &dynamic_address)
+ItaniumABILanguageRuntime::GetDynamicTypeAndAddress (ValueObject &in_value, 
+                                                     lldb::DynamicValueType use_dynamic, 
+                                                     TypeAndOrName &class_type_or_name, 
+                                                     Address &dynamic_address)
 {
     // For Itanium, if the type has a vtable pointer in the object, it will be at offset 0
     // in the object.  That will point to the "address point" within the vtable (not the beginning of the

Modified: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h Tue May  3 22:43:18 2011
@@ -31,7 +31,10 @@
         IsVTableName (const char *name);
         
         virtual bool
-        GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address);
+        GetDynamicTypeAndAddress (ValueObject &in_value, 
+                                  lldb::DynamicValueType use_dynamic, 
+                                  TypeAndOrName &class_type_or_name, 
+                                  Address &address);
         
         virtual bool
         CouldHaveDynamicValue (ValueObject &in_value);

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp Tue May  3 22:43:18 2011
@@ -194,11 +194,18 @@
 bool
 AppleObjCRuntime::CouldHaveDynamicValue (ValueObject &in_value)
 {
-    return in_value.IsPointerType();
+    lldb::LanguageType known_type = in_value.GetObjectRuntimeLanguage();
+    if (known_type == lldb::eLanguageTypeObjC)
+        return true;
+    else
+        return in_value.IsPointerType();
 }
 
 bool
-AppleObjCRuntime::GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address)
+AppleObjCRuntime::GetDynamicTypeAndAddress (ValueObject &in_value, 
+                                            lldb::DynamicValueType use_dynamic, 
+                                            TypeAndOrName &class_type_or_name, 
+                                            Address &address)
 {
     return false;
 }

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h Tue May  3 22:43:18 2011
@@ -41,7 +41,10 @@
     CouldHaveDynamicValue (ValueObject &in_value);
     
     virtual bool
-    GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address);
+    GetDynamicTypeAndAddress (ValueObject &in_value, 
+                              lldb::DynamicValueType use_dynamic, 
+                              TypeAndOrName &class_type_or_name, 
+                              Address &address);
 
     // These are the ObjC specific functions.
     

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp Tue May  3 22:43:18 2011
@@ -41,7 +41,10 @@
 static const char *pluginShort = "language.apple.objc.v1";
 
 bool
-AppleObjCRuntimeV1::GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address)
+AppleObjCRuntimeV1::GetDynamicTypeAndAddress (ValueObject &in_value, 
+                                             lldb::DynamicValueType use_dynamic, 
+                                             TypeAndOrName &class_type_or_name, 
+                                             Address &address)
 {
     return false;
 }

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h Tue May  3 22:43:18 2011
@@ -32,7 +32,10 @@
     
     // These are generic runtime functions:
     virtual bool
-    GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address);
+    GetDynamicTypeAndAddress (ValueObject &in_value, 
+                              lldb::DynamicValueType use_dynamic, 
+                              TypeAndOrName &class_type_or_name, 
+                              Address &address);
 
     virtual ClangUtilityFunction *
     CreateObjectChecker (const char *);

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp Tue May  3 22:43:18 2011
@@ -219,7 +219,10 @@
 }
 
 bool
-AppleObjCRuntimeV2::GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address)
+AppleObjCRuntimeV2::GetDynamicTypeAndAddress (ValueObject &in_value, 
+                                             lldb::DynamicValueType use_dynamic, 
+                                             TypeAndOrName &class_type_or_name, 
+                                             Address &address)
 {
     // The Runtime is attached to a particular process, you shouldn't pass in a value from another process.
     assert (in_value.GetUpdatePoint().GetProcess() == m_process);
@@ -316,7 +319,7 @@
         }
         
         char class_buffer[1024];
-        if (class_name == NULL)
+        if (class_name == NULL && use_dynamic != lldb::eDynamicDontRunTarget)
         {
             // If the class address didn't point into the binary, or
             // it points into the right section but there wasn't a symbol

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h Tue May  3 22:43:18 2011
@@ -32,7 +32,10 @@
     
     // These are generic runtime functions:
     virtual bool
-    GetDynamicTypeAndAddress (ValueObject &in_value, TypeAndOrName &class_type_or_name, Address &address);
+    GetDynamicTypeAndAddress (ValueObject &in_value, 
+                              lldb::DynamicValueType use_dynamic, 
+                              TypeAndOrName &class_type_or_name, 
+                              Address &address);
     
     virtual ClangUtilityFunction *
     CreateObjectChecker (const char *);

Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp (original)
+++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp Tue May  3 22:43:18 2011
@@ -807,7 +807,8 @@
             dispatch_values.PushValue (*(argument_values.GetValueAtIndex(sel_index)));
             
             Value flag_value;
-            lldb::clang_type_t clang_int_type = clang_ast_context->GetBuiltinTypeForEncodingAndBitSize(lldb::eEncodingSint, 32);
+            lldb::clang_type_t clang_int_type 
+                    = clang_ast_context->GetBuiltinTypeForEncodingAndBitSize(lldb::eEncodingSint, 32);
             flag_value.SetValueType (Value::eValueTypeScalar);
             flag_value.SetContext (Value::eContextTypeClangType, clang_int_type);
             

Modified: lldb/trunk/source/Target/StackFrame.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/StackFrame.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Target/StackFrame.cpp (original)
+++ lldb/trunk/source/Target/StackFrame.cpp Tue May  3 22:43:18 2011
@@ -486,14 +486,17 @@
 }
 
 ValueObjectSP
-StackFrame::GetValueForVariableExpressionPath (const char *var_expr_cstr, uint32_t options, Error &error)
+StackFrame::GetValueForVariableExpressionPath (const char *var_expr_cstr, 
+                                               lldb::DynamicValueType use_dynamic,
+                                               uint32_t options, 
+                                               lldb::VariableSP &var_sp,
+                                               Error &error)
 {
 
     if (var_expr_cstr && var_expr_cstr[0])
     {
         const bool check_ptr_vs_member = (options & eExpressionPathOptionCheckPtrVsMember) != 0;
         const bool no_fragile_ivar = (options & eExpressionPathOptionsNoFragileObjcIvar) != 0;
-        const bool dynamic_value = (options & eExpressionPathOptionsDynamicValue) != 0;
         error.Clear();
         bool deref = false;
         bool address_of = false;
@@ -526,10 +529,10 @@
             else
                 name_const_string.SetCStringWithLength (var_path.c_str(), separator_idx);
 
-            VariableSP var_sp (variable_list->FindVariable(name_const_string));
+            var_sp = variable_list->FindVariable(name_const_string);
             if (var_sp)
             {
-                valobj_sp = GetValueObjectForFrameVariable (var_sp, dynamic_value);
+                valobj_sp = GetValueObjectForFrameVariable (var_sp, use_dynamic);
                 if (!valobj_sp)
                     return valobj_sp;
                     
@@ -626,9 +629,9 @@
                             }
                             // Remove the child name from the path
                             var_path.erase(0, child_name.GetLength());
-                            if (dynamic_value)
+                            if (use_dynamic != lldb::eNoDynamicValues)
                             {
-                                ValueObjectSP dynamic_value_sp(child_valobj_sp->GetDynamicValue(true));
+                                ValueObjectSP dynamic_value_sp(child_valobj_sp->GetDynamicValue(use_dynamic));
                                 if (dynamic_value_sp)
                                     child_valobj_sp = dynamic_value_sp;
                             }
@@ -688,9 +691,9 @@
                                 // %i is the array index
                                 var_path.erase(0, (end - var_path.c_str()) + 1);
                                 separator_idx = var_path.find_first_of(".-[");
-                                if (dynamic_value)
+                                if (use_dynamic != lldb::eNoDynamicValues)
                                 {
-                                    ValueObjectSP dynamic_value_sp(child_valobj_sp->GetDynamicValue(true));
+                                    ValueObjectSP dynamic_value_sp(child_valobj_sp->GetDynamicValue(use_dynamic));
                                     if (dynamic_value_sp)
                                         child_valobj_sp = dynamic_value_sp;
                                 }
@@ -738,7 +741,8 @@
             }
             else
             {
-                error.SetErrorStringWithFormat("no variable named '%s' found in this frame", name_const_string.GetCString());
+                error.SetErrorStringWithFormat("no variable named '%s' found in this frame", 
+                                               name_const_string.GetCString());
             }
         }
     }
@@ -809,7 +813,7 @@
 
 
 ValueObjectSP
-StackFrame::GetValueObjectForFrameVariable (const VariableSP &variable_sp, bool use_dynamic)
+StackFrame::GetValueObjectForFrameVariable (const VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
 {
     ValueObjectSP valobj_sp;
     VariableList *var_list = GetVariableList (true);
@@ -830,9 +834,9 @@
             }
         }
     }
-    if (use_dynamic && valobj_sp)
+    if (use_dynamic != lldb::eNoDynamicValues && valobj_sp)
     {
-        ValueObjectSP dynamic_sp = valobj_sp->GetDynamicValue (true);
+        ValueObjectSP dynamic_sp = valobj_sp->GetDynamicValue (use_dynamic);
         if (dynamic_sp)
             return dynamic_sp;
     }
@@ -840,7 +844,7 @@
 }
 
 ValueObjectSP
-StackFrame::TrackGlobalVariable (const VariableSP &variable_sp, bool use_dynamic)
+StackFrame::TrackGlobalVariable (const VariableSP &variable_sp, lldb::DynamicValueType use_dynamic)
 {
     // Check to make sure we aren't already tracking this variable?
     ValueObjectSP valobj_sp (GetValueObjectForFrameVariable (variable_sp, use_dynamic));

Modified: lldb/trunk/source/Target/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/source/Target/Target.cpp (original)
+++ lldb/trunk/source/Target/Target.cpp Tue May  3 22:43:18 2011
@@ -890,7 +890,7 @@
     StackFrame *frame,
     bool unwind_on_error,
     bool keep_in_memory,
-    bool fetch_dynamic_value,
+    lldb::DynamicValueType use_dynamic,
     lldb::ValueObjectSP &result_valobj_sp
 )
 {
@@ -905,7 +905,12 @@
         Error error;
         const uint32_t expr_path_options = StackFrame::eExpressionPathOptionCheckPtrVsMember |
                                            StackFrame::eExpressionPathOptionsNoFragileObjcIvar;
-        result_valobj_sp = frame->GetValueForVariableExpressionPath (expr_cstr, expr_path_options, error);
+        lldb::VariableSP var_sp;
+        result_valobj_sp = frame->GetValueForVariableExpressionPath (expr_cstr, 
+                                                                     use_dynamic, 
+                                                                     expr_path_options, 
+                                                                     var_sp, 
+                                                                     error);
     }
     else if (m_process_sp)
     {
@@ -932,9 +937,9 @@
         }
         else
         {
-            if (fetch_dynamic_value)
+            if (use_dynamic != lldb::eNoDynamicValues)
             {
-                ValueObjectSP dynamic_sp = result_valobj_sp->GetDynamicValue(true);
+                ValueObjectSP dynamic_sp = result_valobj_sp->GetDynamicValue(use_dynamic);
                 if (dynamic_sp)
                     result_valobj_sp = dynamic_sp;
             }
@@ -1390,7 +1395,7 @@
     InstanceSettings (owner, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance),
     m_expr_prefix_file (),
     m_expr_prefix_contents_sp (),
-    m_prefer_dynamic_value (true, true),
+    m_prefer_dynamic_value (2),
     m_skip_prologue (true, true),
     m_source_map (NULL, NULL)
 {
@@ -1486,7 +1491,10 @@
     }
     else if (var_name == GetSettingNameForPreferDynamicValue())
     {
-        err = UserSettingsController::UpdateBooleanOptionValue (value, op, m_prefer_dynamic_value);
+        int new_value;
+        UserSettingsController::UpdateEnumVariable (g_dynamic_value_types, &new_value, value, err);
+        if (err.Success())
+            m_prefer_dynamic_value = new_value;
     }
     else if (var_name == GetSettingNameForSkipPrologue())
     {
@@ -1579,10 +1587,7 @@
     }
     else if (var_name == GetSettingNameForPreferDynamicValue())
     {
-        if (m_prefer_dynamic_value)
-            value.AppendString ("true");
-        else
-            value.AppendString ("false");
+        value.AppendString (g_dynamic_value_types[m_prefer_dynamic_value].string_value);
     }
     else if (var_name == GetSettingNameForSkipPrologue())
     {
@@ -1620,6 +1625,14 @@
 //--------------------------------------------------
 // Target::SettingsController Variable Tables
 //--------------------------------------------------
+OptionEnumValueElement
+TargetInstanceSettings::g_dynamic_value_types[] =
+{
+{ eNoDynamicValues,     "no-dynamic-values",  "Don't calculate the dynamic type of values"},
+{ eDynamicCanRunTarget,        "run-target",        "Calculate the dynamic type of values even if you have to run the target."},
+{ eDynamicDontRunTarget,       "no-run-target",    "Calculate the dynamic type of values, but don't run the target."},
+{ 0, NULL, NULL }
+};
 
 SettingEntry
 Target::SettingsController::global_settings_table[] =
@@ -1633,11 +1646,11 @@
 SettingEntry
 Target::SettingsController::instance_settings_table[] =
 {
-    // var-name           var-type           default      enum  init'd hidden help-text
-    // =================  ================== ===========  ====  ====== ====== =========================================================================
-    { TSC_EXPR_PREFIX   , eSetVarTypeString , NULL      , NULL, false, false, "Path to a file containing expressions to be prepended to all expressions." },
-    { TSC_PREFER_DYNAMIC, eSetVarTypeBoolean ,"true"    , NULL, false, false, "Should printed values be shown as their dynamic value." },
-    { TSC_SKIP_PROLOGUE , eSetVarTypeBoolean ,"true"    , NULL, false, false, "Skip function prologues when setting breakpoints by name." },
-    { TSC_SOURCE_MAP    , eSetVarTypeArray   ,NULL      , NULL, false, false, "Source path remappings to use when locating source files from debug information." },
-    { NULL              , eSetVarTypeNone   , NULL      , NULL, false, false, NULL }
+    // var-name           var-type           default         enum                    init'd hidden help-text
+    // =================  ================== =============== ======================= ====== ====== =========================================================================
+    { TSC_EXPR_PREFIX   , eSetVarTypeString , NULL          , NULL,                  false, false, "Path to a file containing expressions to be prepended to all expressions." },
+    { TSC_PREFER_DYNAMIC, eSetVarTypeEnum ,  "no-run-target", g_dynamic_value_types, false, false, "Should printed values be shown as their dynamic value." },
+    { TSC_SKIP_PROLOGUE , eSetVarTypeBoolean ,"true"        , NULL,                  false, false, "Skip function prologues when setting breakpoints by name." },
+    { TSC_SOURCE_MAP    , eSetVarTypeArray   ,NULL          , NULL,                  false, false, "Source path remappings to use when locating source files from debug information." },
+    { NULL              , eSetVarTypeNone   , NULL          , NULL,                  false, false, NULL }
 };

Modified: lldb/trunk/test/array_types/TestArrayTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/array_types/TestArrayTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/array_types/TestArrayTypes.py (original)
+++ lldb/trunk/test/array_types/TestArrayTypes.py Tue May  3 22:43:18 2011
@@ -69,7 +69,7 @@
 
         # Issue 'variable list' command on several array-type variables.
 
-        self.expect("frame variable -t strings", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T strings", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(char *[4])',
             substrs = ['(char *) [0]',
                        '(char *) [1]',
@@ -80,14 +80,14 @@
                        'Bonjour',
                        'Guten Tag'])
 
-        self.expect("frame variable -t char_16", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T char_16", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['(char) [0]',
                        '(char) [15]'])
 
-        self.expect("frame variable -t ushort_matrix", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T ushort_matrix", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(unsigned short [2][3])')
 
-        self.expect("frame variable -t long_6", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T long_6", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(long [6])')
 
     def array_types_python(self):

Modified: lldb/trunk/test/bitfields/TestBitfields.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/bitfields/TestBitfields.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/bitfields/TestBitfields.py (original)
+++ lldb/trunk/test/bitfields/TestBitfields.py Tue May  3 22:43:18 2011
@@ -62,7 +62,7 @@
             substrs = [' resolved, hit count = 1'])
 
         # This should display correctly.
-        self.expect("frame variable -t bits", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T bits", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['(uint32_t:1) b1 = 1',
                        '(uint32_t:2) b2 = 3',
                        '(uint32_t:3) b3 = 7',
@@ -74,7 +74,7 @@
 
         # And so should this.
         # rdar://problem/8348251
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['(uint32_t:1) b1 = 1',
                        '(uint32_t:2) b2 = 3',
                        '(uint32_t:3) b3 = 7',

Modified: lldb/trunk/test/breakpoint_command/TestBreakpointCommand.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/breakpoint_command/TestBreakpointCommand.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/breakpoint_command/TestBreakpointCommand.py (original)
+++ lldb/trunk/test/breakpoint_command/TestBreakpointCommand.py Tue May  3 22:43:18 2011
@@ -51,7 +51,7 @@
                         self.line)
 
         # Now add callbacks for the breakpoints just created.
-        self.runCmd("breakpoint command add -s command -o 'frame variable -t -s' 1")
+        self.runCmd("breakpoint command add -s command -o 'frame variable -T -s' 1")
         self.runCmd("breakpoint command add -s python -o 'here = open(\"output.txt\", \"w\"); print >> here, \"lldb\"; here.close()' 2")
 
         # Check that the breakpoint commands are correctly set.
@@ -69,7 +69,7 @@
 
         self.expect("breakpoint command list 1", "Breakpoint 1 command ok",
             substrs = ["Breakpoint commands:",
-                          "frame variable -t -s"])
+                          "frame variable -T -s"])
         self.expect("breakpoint command list 2", "Breakpoint 2 command ok",
             substrs = ["Breakpoint commands:",
                           "here = open",

Modified: lldb/trunk/test/breakpoint_conditions/TestBreakpointConditions.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/breakpoint_conditions/TestBreakpointConditions.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/breakpoint_conditions/TestBreakpointConditions.py (original)
+++ lldb/trunk/test/breakpoint_conditions/TestBreakpointConditions.py Tue May  3 22:43:18 2011
@@ -62,8 +62,8 @@
         self.expect("process status", PROCESS_STOPPED,
             patterns = ['Process .* stopped'])
 
-        # 'frame variable -t val' should return 3 due to breakpoint condition.
-        self.expect("frame variable -t val", VARIABLES_DISPLAYED_CORRECTLY,
+        # 'frame variable -T val' should return 3 due to breakpoint condition.
+        self.expect("frame variable -T val", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(int) val = 3')
 
         # Also check the hit count, which should be 3, by design.
@@ -93,8 +93,8 @@
         self.expect("process status", PROCESS_STOPPED,
             patterns = ['Process .* stopped'])
 
-        # 'frame variable -t val' should return 1 since it is the first breakpoint hit.
-        self.expect("frame variable -t val", VARIABLES_DISPLAYED_CORRECTLY,
+        # 'frame variable -T val' should return 1 since it is the first breakpoint hit.
+        self.expect("frame variable -T val", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(int) val = 1')
 
 

Modified: lldb/trunk/test/class_types/TestClassTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/class_types/TestClassTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/class_types/TestClassTypes.py (original)
+++ lldb/trunk/test/class_types/TestClassTypes.py Tue May  3 22:43:18 2011
@@ -88,7 +88,7 @@
             substrs = [' resolved, hit count = 1'])
 
         # We should be stopped on the ctor function of class C.
-        self.expect("frame variable -t this", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T this", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['C *',
                        ' this = '])
 
@@ -182,8 +182,8 @@
         self.expect("frame variable this",VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['C *'])
 
-        # Verify that frame variable -t this->m_c_int behaves correctly.
-        self.expect("frame variable -t this->m_c_int", VARIABLES_DISPLAYED_CORRECTLY,
+        # Verify that frame variable -T this->m_c_int behaves correctly.
+        self.expect("frame variable -T this->m_c_int", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(int) this->m_c_int = 66')
 
         # Verify that 'expression this' gets the data type correct.

Modified: lldb/trunk/test/cpp/dynamic-value/TestDynamicValue.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/cpp/dynamic-value/TestDynamicValue.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/cpp/dynamic-value/TestDynamicValue.py (original)
+++ lldb/trunk/test/cpp/dynamic-value/TestDynamicValue.py Tue May  3 22:43:18 2011
@@ -61,7 +61,10 @@
         
         # Now read m_b_value which is only in the dynamic value:
 
-        this_dynamic_m_b_value = this_dynamic.GetChildMemberWithName('m_b_value', True)
+        use_dynamic = lldb.eDynamicCanRunTarget
+        no_dynamic  = lldb.eNoDynamicValues
+
+        this_dynamic_m_b_value = this_dynamic.GetChildMemberWithName('m_b_value', use_dynamic)
         self.assertTrue (this_dynamic_m_b_value.IsValid())
         
         m_b_value = int (this_dynamic_m_b_value.GetValue(), 0)
@@ -69,17 +72,17 @@
         
         # Make sure it is not in the static version
 
-        this_static_m_b_value = this_static.GetChildMemberWithName('m_b_value', False)
+        this_static_m_b_value = this_static.GetChildMemberWithName('m_b_value', no_dynamic)
         self.assertTrue (this_static_m_b_value.IsValid() == False)
 
         # Okay, now let's make sure that we can get the dynamic type of a child element:
 
-        contained_auto_ptr = this_dynamic.GetChildMemberWithName ('m_client_A', True)
+        contained_auto_ptr = this_dynamic.GetChildMemberWithName ('m_client_A', use_dynamic)
         self.assertTrue (contained_auto_ptr.IsValid())
-        contained_b = contained_auto_ptr.GetChildMemberWithName ('_M_ptr', True)
+        contained_b = contained_auto_ptr.GetChildMemberWithName ('_M_ptr', use_dynamic)
         self.assertTrue (contained_b.IsValid())
         
-        contained_b_static = contained_auto_ptr.GetChildMemberWithName ('_M_ptr', False)
+        contained_b_static = contained_auto_ptr.GetChildMemberWithName ('_M_ptr', no_dynamic)
         self.assertTrue (contained_b_static.IsValid())
         
         contained_b_addr = int (contained_b.GetValue(), 16)
@@ -128,14 +131,14 @@
         # Now find the dynamic addresses of myB and otherB so we can compare them
         # with the dynamic values we get in doSomething:
 
-        noDynamic = False
-        useDynamic = True
+        use_dynamic = lldb.eDynamicCanRunTarget
+        no_dynamic  = lldb.eNoDynamicValues
 
-        myB = frame.FindVariable ('myB', noDynamic);
+        myB = frame.FindVariable ('myB', no_dynamic);
         self.assertTrue (myB.IsValid())
         myB_loc = int (myB.GetLocation(), 16)
 
-        otherB = frame.FindVariable('otherB', noDynamic)
+        otherB = frame.FindVariable('otherB', no_dynamic)
         self.assertTrue (otherB.IsValid())
         otherB_loc = int (otherB.GetLocation(), 16)
 
@@ -149,13 +152,13 @@
 
         # Get "this" using FindVariable:
 
-        this_static = frame.FindVariable ('this', noDynamic)
-        this_dynamic = frame.FindVariable ('this', useDynamic)
+        this_static = frame.FindVariable ('this', no_dynamic)
+        this_dynamic = frame.FindVariable ('this', use_dynamic)
         self.examine_value_object_of_this_ptr (this_static, this_dynamic, myB_loc)
         
         # Get "this" using FindValue, make sure that works too:
-        this_static = frame.FindValue ('this', lldb.eValueTypeVariableArgument, noDynamic)
-        this_dynamic = frame.FindValue ('this', lldb.eValueTypeVariableArgument, useDynamic)
+        this_static = frame.FindValue ('this', lldb.eValueTypeVariableArgument, no_dynamic)
+        this_dynamic = frame.FindValue ('this', lldb.eValueTypeVariableArgument, use_dynamic)
         self.examine_value_object_of_this_ptr (this_static, this_dynamic, myB_loc)
 
         # Get "this" using the EvaluateExpression:
@@ -167,7 +170,7 @@
         # The "frame var" code uses another path to get into children, so let's
         # make sure that works as well:
 
-        self.expect('frame var -d 1 anotherA.m_client_A._M_ptr', 'frame var finds its way into a child member',
+        self.expect('frame var -d run-target anotherA.m_client_A._M_ptr', 'frame var finds its way into a child member',
             patterns = ['\(.* B \*\)'])
 
         # Now make sure we also get it right for a reference as well:

Modified: lldb/trunk/test/forward/TestForwardDeclaration.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/forward/TestForwardDeclaration.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/forward/TestForwardDeclaration.py (original)
+++ lldb/trunk/test/forward/TestForwardDeclaration.py Tue May  3 22:43:18 2011
@@ -46,7 +46,7 @@
 
         # This should display correctly.
         # Note that the member fields of a = 1 and b = 2 is by design.
-        self.expect("frame variable -t *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['(struct bar) *bar_ptr = ',
                        '(int) a = 1',
                        '(int) b = 2'])

Modified: lldb/trunk/test/foundation/TestObjCMethods.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/foundation/TestObjCMethods.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/foundation/TestObjCMethods.py (original)
+++ lldb/trunk/test/foundation/TestObjCMethods.py Tue May  3 22:43:18 2011
@@ -140,7 +140,7 @@
                        'NSString * str;',
                        'NSDate * date;'])
 
-        self.expect("frame variable -t -s", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T -s", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ["ARG: (MyString *) self"],
             patterns = ["ARG: \(.*\) _cmd",
                         "(struct objc_selector *)|(SEL)"])
@@ -152,16 +152,16 @@
         # rdar://problem/8492646
         # test/foundation fails after updating to tot r115023
         # self->str displays nothing as output
-        self.expect("frame variable -t self->str", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T self->str", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(NSString *) self->str")
 
         # rdar://problem/8447030
         # 'frame variable self->date' displays the wrong data member
-        self.expect("frame variable -t self->date", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T self->date", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(NSDate *) self->date")
 
         # This should display the str and date member fields as well.
-        self.expect("frame variable -t *self", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T *self", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ["(MyString) *self",
                        "(NSString *) str",
                        "(NSDate *) date"])

Modified: lldb/trunk/test/function_types/TestFunctionTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/function_types/TestFunctionTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/function_types/TestFunctionTypes.py (original)
+++ lldb/trunk/test/function_types/TestFunctionTypes.py Tue May  3 22:43:18 2011
@@ -49,7 +49,7 @@
             substrs = [' resolved, hit count = 1'])
 
         # Check that the 'callback' variable display properly.
-        self.expect("frame variable -t callback", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T callback", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = '(int (*)(const char *)) callback =')
 
         # And that we can break on the callback function.

Modified: lldb/trunk/test/global_variables/TestGlobalVariables.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/global_variables/TestGlobalVariables.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/global_variables/TestGlobalVariables.py (original)
+++ lldb/trunk/test/global_variables/TestGlobalVariables.py Tue May  3 22:43:18 2011
@@ -49,7 +49,7 @@
             substrs = [' resolved, hit count = 1'])
 
         # Check that GLOBAL scopes are indicated for the variables.
-        self.expect("frame variable -t -s -g -a", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T -s -g -a", VARIABLES_DISPLAYED_CORRECTLY,
             substrs = ['GLOBAL: (int) g_file_global_int = 42',
                        'GLOBAL: (const char *) g_file_global_cstr',
                        '"g_file_global_cstr"',

Modified: lldb/trunk/test/objc-dynamic-value/TestObjCDynamicValue.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/objc-dynamic-value/TestObjCDynamicValue.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/objc-dynamic-value/TestObjCDynamicValue.py (original)
+++ lldb/trunk/test/objc-dynamic-value/TestObjCDynamicValue.py Tue May  3 22:43:18 2011
@@ -81,9 +81,9 @@
         #  make sure we can get that properly:
 
         frame = thread.GetFrameAtIndex(0)
-        myObserver = frame.FindVariable('myObserver')
+        myObserver = frame.FindVariable('myObserver', lldb.eDynamicCanRunTarget)
         self.assertTrue (myObserver.IsValid())
-        myObserver_source = myObserver.GetChildMemberWithName ('_source')
+        myObserver_source = myObserver.GetChildMemberWithName ('_source', lldb.eDynamicCanRunTarget)
         self.examine_SourceDerived_ptr (myObserver_source)
 
         # The "frame var" code uses another path to get into children, so let's
@@ -91,7 +91,7 @@
 
         result = lldb.SBCommandReturnObject()
 
-        self.expect('frame var -d 1 myObserver->_source', 'frame var finds its way into a child member',
+        self.expect('frame var -d run-target myObserver->_source', 'frame var finds its way into a child member',
             patterns = ['\(SourceDerived \*\)'])
 
         # This test is not entirely related to the main thrust of this test case, but since we're here,
@@ -115,8 +115,8 @@
 
         # Get "object" using FindVariable:
 
-        noDynamic = False
-        useDynamic = True
+        noDynamic = lldb.eNoDynamicValues
+        useDynamic = lldb.eDynamicCanRunTarget
 
         object_static = frame.FindVariable ('object', noDynamic)
         object_dynamic = frame.FindVariable ('object', useDynamic)
@@ -134,8 +134,8 @@
 
         # Get "this" using the EvaluateExpression:
         # These tests fail for now because EvaluateExpression doesn't currently support dynamic typing...
-        #object_static = frame.EvaluateExpression ('object', False)
-        #object_dynamic = frame.EvaluateExpression ('object', True)
+        #object_static = frame.EvaluateExpression ('object', noDynamic)
+        #object_dynamic = frame.EvaluateExpression ('object', useDynamic)
         #self.examine_value_object_of_object_ptr (object_static, object_dynamic, myB_loc)
         
         # Continue again to the handle_SourceBase and make sure we get the correct dynamic value.

Modified: lldb/trunk/test/set_values/TestSetValues.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/set_values/TestSetValues.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/set_values/TestSetValues.py (original)
+++ lldb/trunk/test/set_values/TestSetValues.py Tue May  3 22:43:18 2011
@@ -73,63 +73,63 @@
             substrs = [' resolved, hit count = 1'])
 
         # main.c:15
-        # Check that 'frame variable -t' displays the correct data type and value.
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        # Check that 'frame variable -T' displays the correct data type and value.
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(char) i = 'a'")
 
         # Now set variable 'i' and check that it is correctly displayed.
         self.runCmd("expression i = 'b'")
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(char) i = 'b'")
 
         self.runCmd("continue")
 
         # main.c:36
-        # Check that 'frame variable -t' displays the correct data type and value.
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        # Check that 'frame variable -T' displays the correct data type and value.
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             patterns = ["\((short unsigned int|unsigned short)\) i = 33"])
 
         # Now set variable 'i' and check that it is correctly displayed.
         self.runCmd("expression i = 333")
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             patterns = ["\((short unsigned int|unsigned short)\) i = 333"])
 
         self.runCmd("continue")
 
         # main.c:57
-        # Check that 'frame variable -t' displays the correct data type and value.
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        # Check that 'frame variable -T' displays the correct data type and value.
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(long int) i = 33")
 
         # Now set variable 'i' and check that it is correctly displayed.
         self.runCmd("expression i = 33333")
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(long int) i = 33333")
 
         self.runCmd("continue")
 
         # main.c:78
-        # Check that 'frame variable -t' displays the correct data type and value.
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        # Check that 'frame variable -T' displays the correct data type and value.
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(double) i = 3.14159")
 
         # Now set variable 'i' and check that it is correctly displayed.
         self.runCmd("expression i = 3.14")
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(double) i = 3.14")
 
         self.runCmd("continue")
 
         # main.c:85
-        # Check that 'frame variable -t' displays the correct data type and value.
+        # Check that 'frame variable -T' displays the correct data type and value.
         # rdar://problem/8422727
         # set_values test directory: 'frame variable' shows only (long double) i =
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(long double) i = 3.14159")
 
         # Now set variable 'i' and check that it is correctly displayed.
         self.runCmd("expression i = 3.1")
-        self.expect("frame variable -t", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(long double) i = 3.1")
 
 

Modified: lldb/trunk/test/signed_types/TestSignedTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/signed_types/TestSignedTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/signed_types/TestSignedTypes.py (original)
+++ lldb/trunk/test/signed_types/TestSignedTypes.py Tue May  3 22:43:18 2011
@@ -54,7 +54,7 @@
         self.runCmd("thread step-over")
 
         # Test that signed types display correctly.
-        self.expect("frame variable -t -a", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T -a", VARIABLES_DISPLAYED_CORRECTLY,
             patterns = ["\((short int|short)\) the_signed_short = 99"],
             substrs = ["(signed char) the_signed_char = 'c'",
                        "(int) the_signed_int = 99",

Modified: lldb/trunk/test/types/AbstractBase.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/types/AbstractBase.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/types/AbstractBase.py (original)
+++ lldb/trunk/test/types/AbstractBase.py Tue May  3 22:43:18 2011
@@ -9,7 +9,7 @@
 
 def Msg(var, val, using_frame_variable):
     return "'%s %s' matches the output (from compiled code): %s" % (
-        'frame variable -t' if using_frame_variable else 'expression' ,var, val)
+        'frame variable -T' if using_frame_variable else 'expression' ,var, val)
 
 class GenericTester(TestBase):
 
@@ -42,25 +42,25 @@
         #print "golden list:", gl
 
         # Bring the program to the point where we can issue a series of
-        # 'frame variable -t' command.
+        # 'frame variable -T' command.
         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
         self.runCmd("breakpoint set --name Puts")
         self.runCmd("run", RUN_SUCCEEDED)
         self.runCmd("thread step-out", STEP_OUT_SUCCEEDED)
 
-        #self.runCmd("frame variable -t")
+        #self.runCmd("frame variable -T")
 
         # Now iterate through the golden list, comparing against the output from
-        # 'frame variable -t var'.
+        # 'frame variable -T var'.
         for var, val in gl:
-            self.runCmd("frame variable -t %s" % var)
+            self.runCmd("frame variable -T %s" % var)
             output = self.res.GetOutput()
             
             # The input type is in a canonical form as a set of named atoms.
             # The display type string must conatin each and every element.
             #
             # Example:
-            #     runCmd: frame variable -t a_array_bounded[0]
+            #     runCmd: frame variable -T a_array_bounded[0]
             #     output: (char) a_array_bounded[0] = 'a'
             #
             try:
@@ -108,7 +108,7 @@
         self.runCmd("run", RUN_SUCCEEDED)
         self.runCmd("thread step-out", STEP_OUT_SUCCEEDED)
 
-        #self.runCmd("frame variable -t")
+        #self.runCmd("frame variable -T")
 
         # Now iterate through the golden list, comparing against the output from
         # 'expr var'.

Modified: lldb/trunk/test/unique-types/TestUniqueTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/unique-types/TestUniqueTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/unique-types/TestUniqueTypes.py (original)
+++ lldb/trunk/test/unique-types/TestUniqueTypes.py Tue May  3 22:43:18 2011
@@ -59,8 +59,8 @@
                     if clang_version < 3:
                         self.skipTest("rdar://problem/9173060 lldb hangs while running unique-types for clang version < 3")
 
-        # Do a "frame variable -t longs" and verify "long" is in each line of output.
-        self.runCmd("frame variable -t longs")
+        # Do a "frame variable -T longs" and verify "long" is in each line of output.
+        self.runCmd("frame variable -T longs")
         output = self.res.GetOutput()
         for x in [line.strip() for line in output.split(os.linesep)]:
             # Skip empty line or closing brace.
@@ -69,8 +69,8 @@
             self.expect(x, "Expect type 'long'", exe=False,
                 substrs = ['long'])
 
-        # Do a "frame variable -t shorts" and verify "short" is in each line of output.
-        self.runCmd("frame variable -t shorts")
+        # Do a "frame variable -T shorts" and verify "short" is in each line of output.
+        self.runCmd("frame variable -T shorts")
         output = self.res.GetOutput()
         for x in [line.strip() for line in output.split(os.linesep)]:
             # Skip empty line or closing brace.

Modified: lldb/trunk/test/unsigned_types/TestUnsignedTypes.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/unsigned_types/TestUnsignedTypes.py?rev=130832&r1=130831&r2=130832&view=diff
==============================================================================
--- lldb/trunk/test/unsigned_types/TestUnsignedTypes.py (original)
+++ lldb/trunk/test/unsigned_types/TestUnsignedTypes.py Tue May  3 22:43:18 2011
@@ -51,7 +51,7 @@
             substrs = [' resolved, hit count = 1'])
 
         # Test that unsigned types display correctly.
-        self.expect("frame variable -t -a", VARIABLES_DISPLAYED_CORRECTLY,
+        self.expect("frame variable -T -a", VARIABLES_DISPLAYED_CORRECTLY,
             startstr = "(unsigned char) the_unsigned_char = 'c'",
             patterns = ["\((short unsigned int|unsigned short)\) the_unsigned_short = 99"],
             substrs = ["(unsigned int) the_unsigned_int = 99",





More information about the lldb-commits mailing list