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.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@130832 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/OptionGroupValueObjectDisplay.cpp b/source/Interpreter/OptionGroupValueObjectDisplay.cpp
index dac44b1..3150ea7 100644
--- a/source/Interpreter/OptionGroupValueObjectDisplay.cpp
+++ b/source/Interpreter/OptionGroupValueObjectDisplay.cpp
@@ -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