This is a very large commit that completely re-does the way lldb
handles user settable internal variables (the equivalent of set/show
variables in gdb).  In addition to the basic infrastructure (most of
which is defined in UserSettingsController.{h,cpp}, there are examples
of two classes that have been set up to contain user settable
variables (the Debugger and Process classes).  The 'settings' command
has been modified to be a command-subcommand structure, and the 'set',
'show' and 'append' commands have been moved into this sub-commabnd
structure.  The old StateVariable class has been completely replaced
by this, and the state variable dictionary has been removed from the
Command Interpreter.  Places that formerly accessed the state variable
mechanism have been modified to access the variables in this new
structure instead (checking the term-width; getting/checking the
prompt; etc.)

Variables are attached to classes; there are two basic "flavors" of
variables that can be set: "global" variables (static/class-wide), and
"instance" variables (one per instance of the class).  The whole thing
has been set up so that any global or instance variable can be set at
any time (e.g. on start up, in your .lldbinit file), whether or not
any instances actually exist (there's a whole pending and default
values mechanism to help deal with that).




git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@113041 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBDebugger.cpp b/source/API/SBDebugger.cpp
index fe2b99a..7af3903 100644
--- a/source/API/SBDebugger.cpp
+++ b/source/API/SBDebugger.cpp
@@ -22,11 +22,12 @@
 #include "lldb/API/SBCommandReturnObject.h"
 #include "lldb/API/SBEvent.h"
 #include "lldb/API/SBFrame.h"
-#include "lldb/API/SBTarget.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBThread.h"
-#include "lldb/API/SBSourceManager.h"
 #include "lldb/API/SBInputReader.h"
+#include "lldb/API/SBProcess.h"
+#include "lldb/API/SBSourceManager.h"
+#include "lldb/API/SBStringList.h"
+#include "lldb/API/SBTarget.h"
+#include "lldb/API/SBThread.h"
 
 using namespace lldb;
 using namespace lldb_private;
@@ -564,6 +565,32 @@
     return sb_debugger;
 }
 
+SBError
+SBDebugger::SetInternalVariable (const char *var_name, const char *value)
+{
+    lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
+
+    Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, false);
+    SBError sb_error;
+    sb_error.SetError (err);
+
+    return sb_error;
+}
+
+lldb::SBStringList
+SBDebugger::GetInternalVariableValue (const char *var_name)
+{
+    SBStringList ret_value;
+    lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
+
+    lldb::SettableVariableType var_type;
+    StringList value = root_settings_controller->GetVariable (var_name, var_type);
+    for (int i = 0; i < value.GetSize(); ++i)
+        ret_value.AppendString (value.GetStringAtIndex(i));
+
+    return ret_value;
+}
+
 bool
 SBDebugger::SetUseExternalEditor (bool value)
 {
@@ -582,4 +609,3 @@
         return false;
 }
 
-