Wrapped up the work I am going to do for now for the "add-dsym" or "target symfile add" command.

We can now do:

Specify a path to a debug symbols file:
(lldb) add-dsym <path-to-dsym>

Go and download the dSYM file for the "libunc.dylib" module in your target:
(lldb) add-dsym --shlib libunc.dylib

Go and download the dSYM given a UUID:
(lldb) add-dsym --uuid <UUID>

Go and download the dSYM file for the current frame:
(lldb) add-dsym --frame



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@164806 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/OptionGroupBoolean.cpp b/source/Interpreter/OptionGroupBoolean.cpp
index f5403cf..58ac0f1 100644
--- a/source/Interpreter/OptionGroupBoolean.cpp
+++ b/source/Interpreter/OptionGroupBoolean.cpp
@@ -21,20 +21,19 @@
                                         bool required,
                                         const char *long_option, 
                                         char short_option,
-                                        uint32_t completion_type,
-                                        lldb::CommandArgumentType argument_type,
                                         const char *usage_text,
-                                        bool default_value) :
+                                        bool default_value,
+                                        bool no_argument_toggle_default) :
     m_value (default_value, default_value)
 {
     m_option_definition.usage_mask = usage_mask;
     m_option_definition.required = required;
     m_option_definition.long_option = long_option;
     m_option_definition.short_option = short_option;
-    m_option_definition.option_has_arg = required_argument;
+    m_option_definition.option_has_arg = no_argument_toggle_default ? no_argument : required_argument;
     m_option_definition.enum_values = NULL;
-    m_option_definition.completion_type = completion_type;
-    m_option_definition.argument_type = argument_type;
+    m_option_definition.completion_type = 0;
+    m_option_definition.argument_type = eArgTypeBoolean;
     m_option_definition.usage_text = usage_text;
 }
 
@@ -47,7 +46,17 @@
                                     uint32_t option_idx,
                                     const char *option_arg)
 {
-    Error error (m_value.SetValueFromCString (option_arg));
+    Error error;
+    if (m_option_definition.option_has_arg == no_argument)
+    {
+        // Not argument, toggle the default value and mark the option as having been set
+        m_value.SetCurrentValue (!m_value.GetDefaultValue());
+        m_value.SetOptionWasSet ();
+    }
+    else
+    {
+        error = m_value.SetValueFromCString (option_arg);
+    }
     return error;
 }