I have no opposition to unit tests in general, but if somebody finds some free 
time on their hands, it would be really great to make the option definition & 
argument parsing available to the SB API's so that people could define real 
lldb Python commands that did completion, help etc as an equal of the built-in 
commands.  That would allow you to kill two birds with one stone, since then 
you could use the SB API's to test them.

Just a thought while we're allocating other people's time...

Jim

> On Aug 11, 2016, at 5:33 PM, Todd Fiala via lldb-commits 
> <lldb-commits@lists.llvm.org> wrote:
> 
> :-)
> 
> That would be great.  I think it would be useful to invest in that area.  
> I'll add that to my list.
> 
> On Thu, Aug 11, 2016 at 5:11 PM, Zachary Turner <ztur...@google.com> wrote:
> Have you considered writing some unit test for all the option stuff now?
> 
> On Thu, Aug 11, 2016 at 5:10 PM Zachary Turner <ztur...@google.com> wrote:
> This sounds very helpful.  It also means it should become easier to start 
> unit testing the options framework
> 
> On Thu, Aug 11, 2016 at 4:59 PM Todd Fiala via lldb-commits 
> <lldb-commits@lists.llvm.org> wrote:
> Author: tfiala
> Date: Thu Aug 11 18:51:28 2016
> New Revision: 278440
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=278440&view=rev
> Log:
> Decoupled Options from CommandInterpreter.
> 
> Options used to store a reference to the CommandInterpreter instance
> in the base Options class.  This made it impossible to parse options
> independent of a CommandInterpreter.
> 
> This change removes the reference from the base class.  Instead, it
> modifies the options-parsing-related methods to take an
> ExecutionContext pointer, which the options may inspect if they need
> to do so.
> 
> Closes https://reviews.llvm.org/D23416
> Reviewers: clayborg, jingham
> 
> Modified:
>     lldb/trunk/include/lldb/Interpreter/Args.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupArchitecture.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupBoolean.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupFile.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupOutputFile.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupPlatform.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupString.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupUInt64.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupUUID.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupVariable.h
>     lldb/trunk/include/lldb/Interpreter/OptionGroupWatchpoint.h
>     lldb/trunk/include/lldb/Interpreter/Options.h
>     lldb/trunk/include/lldb/Target/Platform.h
>     lldb/trunk/include/lldb/Target/Process.h
>     lldb/trunk/source/Commands/CommandObjectArgs.cpp
>     lldb/trunk/source/Commands/CommandObjectArgs.h
>     lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp
>     lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp
>     lldb/trunk/source/Commands/CommandObjectBugreport.cpp
>     lldb/trunk/source/Commands/CommandObjectCommands.cpp
>     lldb/trunk/source/Commands/CommandObjectDisassemble.cpp
>     lldb/trunk/source/Commands/CommandObjectDisassemble.h
>     lldb/trunk/source/Commands/CommandObjectExpression.cpp
>     lldb/trunk/source/Commands/CommandObjectExpression.h
>     lldb/trunk/source/Commands/CommandObjectFrame.cpp
>     lldb/trunk/source/Commands/CommandObjectHelp.cpp
>     lldb/trunk/source/Commands/CommandObjectHelp.h
>     lldb/trunk/source/Commands/CommandObjectLog.cpp
>     lldb/trunk/source/Commands/CommandObjectMemory.cpp
>     lldb/trunk/source/Commands/CommandObjectPlatform.cpp
>     lldb/trunk/source/Commands/CommandObjectPlugin.cpp
>     lldb/trunk/source/Commands/CommandObjectProcess.cpp
>     lldb/trunk/source/Commands/CommandObjectRegister.cpp
>     lldb/trunk/source/Commands/CommandObjectSettings.cpp
>     lldb/trunk/source/Commands/CommandObjectSource.cpp
>     lldb/trunk/source/Commands/CommandObjectTarget.cpp
>     lldb/trunk/source/Commands/CommandObjectThread.cpp
>     lldb/trunk/source/Commands/CommandObjectType.cpp
>     lldb/trunk/source/Commands/CommandObjectWatchpoint.cpp
>     lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp
>     lldb/trunk/source/Expression/REPL.cpp
>     lldb/trunk/source/Interpreter/Args.cpp
>     lldb/trunk/source/Interpreter/CommandAlias.cpp
>     lldb/trunk/source/Interpreter/CommandObject.cpp
>     lldb/trunk/source/Interpreter/CommandObjectRegexCommand.cpp
>     lldb/trunk/source/Interpreter/OptionGroupArchitecture.cpp
>     lldb/trunk/source/Interpreter/OptionGroupBoolean.cpp
>     lldb/trunk/source/Interpreter/OptionGroupFile.cpp
>     lldb/trunk/source/Interpreter/OptionGroupFormat.cpp
>     lldb/trunk/source/Interpreter/OptionGroupOutputFile.cpp
>     lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp
>     lldb/trunk/source/Interpreter/OptionGroupString.cpp
>     lldb/trunk/source/Interpreter/OptionGroupUInt64.cpp
>     lldb/trunk/source/Interpreter/OptionGroupUUID.cpp
>     lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp
>     lldb/trunk/source/Interpreter/OptionGroupVariable.cpp
>     lldb/trunk/source/Interpreter/OptionGroupWatchpoint.cpp
>     lldb/trunk/source/Interpreter/OptionValueArch.cpp
>     lldb/trunk/source/Interpreter/OptionValueFileSpec.cpp
>     lldb/trunk/source/Interpreter/Options.cpp
>     
> lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>     
> lldb/trunk/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
>     lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
>     lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
>     lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
>     lldb/trunk/source/Target/Platform.cpp
>     lldb/trunk/source/Target/Process.cpp
> 
> Modified: lldb/trunk/include/lldb/Interpreter/Args.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Args.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/Args.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/Args.h Thu Aug 11 18:51:28 2016
> @@ -314,10 +314,22 @@ public:
>      /// get processed start at the second argument. The first argument
>      /// is assumed to be the command and will not be touched.
>      ///
> +    /// param[in] platform_sp
> +    ///   The platform used for option validation.  This is necessary
> +    ///   because an empty execution_context is not enough to get us
> +    ///   to a reasonable platform.  If the platform isn't given,
> +    ///   we'll try to get it from the execution context.  If we can't
> +    ///   get it from the execution context, we'll skip validation.
> +    ///
> +    /// param[in] require_validation
> +    ///   When true, it will fail option parsing if validation could
> +    ///   not occur due to not having a platform.
> +    ///
>      /// @see class Options
>      //------------------------------------------------------------------
>      Error
> -    ParseOptions (Options &options);
> +    ParseOptions (Options &options, ExecutionContext *execution_context,
> +                  lldb::PlatformSP platform_sp, bool require_validation);
> 
>      size_t
>      FindArgumentIndexForOption (Option *long_options, int 
> long_options_index);
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupArchitecture.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupArchitecture.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupArchitecture.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupArchitecture.h Thu Aug 11 
> 18:51:28 2016
> @@ -37,12 +37,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      bool
>      GetArchitecture (Platform *platform, ArchSpec &arch);
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupBoolean.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupBoolean.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupBoolean.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupBoolean.h Thu Aug 11 
> 18:51:28 2016
> @@ -51,12 +51,12 @@ namespace lldb_private {
>          }
> 
>          Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                       uint32_t option_idx,
> -                       const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          OptionValueBoolean &
>          GetOptionValue ()
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupFile.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupFile.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupFile.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupFile.h Thu Aug 11 18:51:28 
> 2016
> @@ -50,12 +50,12 @@ public:
>      }
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      OptionValueFileSpec &
>      GetOptionValue ()
> @@ -105,12 +105,12 @@ public:
>      }
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      OptionValueFileSpecList &
>      GetOptionValue ()
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupFormat.h Thu Aug 11 
> 18:51:28 2016
> @@ -46,12 +46,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      lldb::Format
>      GetFormat () const
> @@ -111,7 +111,7 @@ public:
> 
>  protected:
>      bool
> -    ParserGDBFormatLetter (CommandInterpreter &interpreter,
> +    ParserGDBFormatLetter (ExecutionContext *execution_context,
>                             char format_letter,
>                             lldb::Format &format,
>                             uint32_t &byte_size);
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupOutputFile.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupOutputFile.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupOutputFile.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupOutputFile.h Thu Aug 11 
> 18:51:28 2016
> @@ -37,12 +37,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      const OptionValueFileSpec &
>      GetFile ()
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupPlatform.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupPlatform.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupPlatform.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupPlatform.h Thu Aug 11 
> 18:51:28 2016
> @@ -47,12 +47,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      lldb::PlatformSP
>      CreatePlatformWithOptions (CommandInterpreter &interpreter,
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupString.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupString.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupString.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupString.h Thu Aug 11 
> 18:51:28 2016
> @@ -49,12 +49,12 @@ namespace lldb_private {
>          }
> 
>          Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                       uint32_t option_idx,
> -                       const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          OptionValueString &
>          GetOptionValue ()
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupUInt64.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupUInt64.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupUInt64.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupUInt64.h Thu Aug 11 
> 18:51:28 2016
> @@ -50,12 +50,12 @@ namespace lldb_private {
>          }
> 
>          Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                       uint32_t option_idx,
> -                       const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          OptionValueUInt64 &
>          GetOptionValue ()
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupUUID.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupUUID.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupUUID.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupUUID.h Thu Aug 11 18:51:28 
> 2016
> @@ -37,12 +37,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      const OptionValueUUID &
>      GetOptionValue () const
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h 
> (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h Thu 
> Aug 11 18:51:28 2016
> @@ -37,12 +37,12 @@ public:
>      GetDefinitions() override;
> 
>      Error
> -    SetOptionValue(CommandInterpreter &interpreter,
> -                   uint32_t option_idx,
> -                   const char *option_value) override;
> +    SetOptionValue(uint32_t option_idx,
> +                   const char *option_value,
> +                   ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting(CommandInterpreter &interpreter) override;
> +    OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>      bool
>      AnyOptionWasSet () const
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupVariable.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupVariable.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupVariable.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupVariable.h Thu Aug 11 
> 18:51:28 2016
> @@ -37,12 +37,12 @@ namespace lldb_private {
>          GetDefinitions() override;
> 
>          Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                       uint32_t option_idx,
> -                       const char *option_arg) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_arg,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          bool include_frame_options:1,
>               show_args:1,       // Frame option only (include_frame_options 
> == true)
> 
> Modified: lldb/trunk/include/lldb/Interpreter/OptionGroupWatchpoint.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionGroupWatchpoint.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/OptionGroupWatchpoint.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/OptionGroupWatchpoint.h Thu Aug 11 
> 18:51:28 2016
> @@ -39,12 +39,12 @@ namespace lldb_private {
>          GetDefinitions() override;
> 
>          Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                       uint32_t option_idx,
> -                       const char *option_arg) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_arg,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          // Note:
>          // eWatchRead == LLDB_WATCH_TYPE_READ; and
> 
> Modified: lldb/trunk/include/lldb/Interpreter/Options.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Options.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/Options.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/Options.h Thu Aug 11 18:51:28 2016
> @@ -117,7 +117,7 @@ namespace lldb_private {
>  class Options
>  {
>  public:
> -    Options (CommandInterpreter &interpreter);
> +    Options ();
> 
>      virtual
>      ~Options ();
> @@ -160,7 +160,8 @@ public:
> 
>      void
>      GenerateOptionUsage (Stream &strm,
> -                         CommandObject *cmd);
> +                         CommandObject *cmd,
> +                         uint32_t screen_width);
> 
>      bool
>      SupportsLongOption (const char *long_option);
> @@ -180,10 +181,10 @@ public:
>      // Option::OptionParsingStarting() like they did before. This was error
>      // prone and subclasses shouldn't have to do it.
>      void
> -    NotifyOptionParsingStarting ();
> +    NotifyOptionParsingStarting (ExecutionContext *execution_context);
> 
>      Error
> -    NotifyOptionParsingFinished ();
> +    NotifyOptionParsingFinished (ExecutionContext *execution_context);
> 
>      //------------------------------------------------------------------
>      /// Set the value of an option.
> @@ -196,12 +197,17 @@ public:
>      ///     The argument value for the option that the user entered, or
>      ///     nullptr if there is no argument for the current option.
>      ///
> +    /// @param[in] execution_context
> +    ///     The execution context to use for evaluating the option.
> +    ///     May be nullptr if the option is to be evaluated outside any
> +    ///     particular context.
>      ///
>      /// @see Args::ParseOptions (Options&)
>      /// @see man getopt_long_only
>      //------------------------------------------------------------------
>      virtual Error
> -    SetOptionValue (uint32_t option_idx, const char *option_arg) = 0;
> +    SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                    ExecutionContext *execution_context) = 0;
> 
>      //------------------------------------------------------------------
>      /// Handles the generic bits of figuring out whether we are in an
> @@ -245,6 +251,7 @@ public:
>                              int char_pos,
>                              int match_start_point,
>                              int max_return_elements,
> +                            CommandInterpreter &interpreter,
>                              bool &word_complete,
>                              lldb_private::StringList &matches);
> 
> @@ -276,6 +283,9 @@ public:
>      ///     See CommandObject::HandleCompletions for a description of
>      ///     how these work.
>      ///
> +    /// @param[in] interpreter
> +    ///     The command interpreter in which we're doing completion.
> +    ///
>      /// @param[out] word_complete
>      ///     \btrue if this is a complete option value (a space will
>      ///     be inserted after the completion.) \bfalse otherwise.
> @@ -298,21 +308,15 @@ public:
>                                      int opt_element_index,
>                                      int match_start_point,
>                                      int max_return_elements,
> +                                    CommandInterpreter &interpreter,
>                                      bool &word_complete,
>                                      StringList &matches);
> 
> -    CommandInterpreter&
> -    GetInterpreter()
> -    {
> -        return m_interpreter;
> -    }
> -
>  protected:
>      // This is a set of options expressed as indexes into the options table 
> for this Option.
>      typedef std::set<int> OptionSet;
>      typedef std::vector<OptionSet> OptionSetVector;
> 
> -    CommandInterpreter &m_interpreter;
>      std::vector<Option> m_getopt_table;
>      OptionSet m_seen_options;
>      OptionSetVector m_required_options;
> @@ -343,10 +347,10 @@ protected:
>      // option parse. Each subclass must override this function and revert
>      // all option settings to default values.
>      virtual void
> -    OptionParsingStarting () = 0;
> +    OptionParsingStarting (ExecutionContext *execution_context) = 0;
> 
>      virtual Error
> -    OptionParsingFinished ()
> +    OptionParsingFinished (ExecutionContext *execution_context)
>      {
>          // If subclasses need to know when the options are done being parsed
>          // they can implement this function to do extra checking
> @@ -370,15 +374,15 @@ protected:
>          GetDefinitions () = 0;
> 
>          virtual Error
> -        SetOptionValue (CommandInterpreter &interpreter,
> -                        uint32_t option_idx,
> -                        const char *option_value) = 0;
> +        SetOptionValue (uint32_t option_idx,
> +                        const char *option_value,
> +                        ExecutionContext *execution_context) = 0;
> 
>          virtual void
> -        OptionParsingStarting (CommandInterpreter &interpreter) = 0;
> +        OptionParsingStarting(ExecutionContext *execution_context) = 0;
> 
>          virtual Error
> -        OptionParsingFinished (CommandInterpreter &interpreter)
> +        OptionParsingFinished(ExecutionContext *execution_context)
>          {
>              // If subclasses need to know when the options are done being 
> parsed
>              // they can implement this function to do extra checking
> @@ -390,8 +394,8 @@ protected:
>      class OptionGroupOptions : public Options
>      {
>      public:
> -        OptionGroupOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        OptionGroupOptions () :
> +            Options (),
>              m_option_defs (),
>              m_option_infos (),
>              m_did_finalize (false)
> @@ -451,13 +455,14 @@ protected:
> 
>          Error
>          SetOptionValue(uint32_t option_idx,
> -                       const char *option_arg) override;
> +                       const char *option_arg,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting() override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          Error
> -        OptionParsingFinished() override;
> +        OptionParsingFinished(ExecutionContext *execution_context) override;
> 
>          const OptionDefinition*
>          GetDefinitions() override
> 
> Modified: lldb/trunk/include/lldb/Target/Platform.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Platform.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Platform.h (original)
> +++ lldb/trunk/include/lldb/Target/Platform.h Thu Aug 11 18:51:28 2016
> @@ -1326,12 +1326,12 @@ class ModuleCache;
>          ~OptionGroupPlatformRSync() override = default;
> 
>          lldb_private::Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                      uint32_t option_idx,
> -                      const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          const lldb_private::OptionDefinition*
>          GetDefinitions() override;
> @@ -1362,12 +1362,12 @@ class ModuleCache;
>          ~OptionGroupPlatformSSH() override = default;
> 
>          lldb_private::Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                      uint32_t option_idx,
> -                      const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          uint32_t
>          GetNumDefinitions() override;
> @@ -1396,12 +1396,12 @@ class ModuleCache;
>          ~OptionGroupPlatformCaching() override = default;
> 
>          lldb_private::Error
> -        SetOptionValue(CommandInterpreter &interpreter,
> -                      uint32_t option_idx,
> -                      const char *option_value) override;
> +        SetOptionValue(uint32_t option_idx,
> +                       const char *option_value,
> +                       ExecutionContext *execution_context) override;
> 
>          void
> -        OptionParsingStarting(CommandInterpreter &interpreter) override;
> +        OptionParsingStarting(ExecutionContext *execution_context) override;
> 
>          uint32_t
>          GetNumDefinitions() override;
> 
> Modified: lldb/trunk/include/lldb/Target/Process.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Process.h (original)
> +++ lldb/trunk/include/lldb/Target/Process.h Thu Aug 11 18:51:28 2016
> @@ -421,20 +421,21 @@ protected:
>  class ProcessLaunchCommandOptions : public Options
>  {
>  public:
> -    ProcessLaunchCommandOptions (CommandInterpreter &interpreter) :
> -        Options(interpreter)
> +    ProcessLaunchCommandOptions () :
> +        Options()
>      {
>          // Keep default values of all options in one place: 
> OptionParsingStarting ()
> -        OptionParsingStarting ();
> +        OptionParsingStarting (nullptr);
>      }
> 
>      ~ProcessLaunchCommandOptions() override = default;
> 
>      Error
> -    SetOptionValue (uint32_t option_idx, const char *option_arg) override;
> +    SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                    ExecutionContext *execution_context) override;
> 
>      void
> -    OptionParsingStarting() override
> +    OptionParsingStarting(ExecutionContext *execution_context) override
>      {
>          launch_info.Clear();
>          disable_aslr = eLazyBoolCalculate;
> 
> Modified: lldb/trunk/source/Commands/CommandObjectArgs.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectArgs.cpp?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectArgs.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectArgs.cpp Thu Aug 11 18:51:28 2016
> @@ -37,16 +37,18 @@ using namespace lldb_private;
>  //
> 
>  CommandObjectArgs::CommandOptions::CommandOptions (CommandInterpreter 
> &interpreter) :
> -    Options(interpreter)
> +    Options()
>  {
>      // Keep only one place to reset the values to their defaults
> -    OptionParsingStarting();
> +    OptionParsingStarting(nullptr);
>  }
> 
>  CommandObjectArgs::CommandOptions::~CommandOptions() = default;
> 
>  Error
> -CommandObjectArgs::CommandOptions::SetOptionValue (uint32_t option_idx, 
> const char *option_arg)
> +CommandObjectArgs::CommandOptions::SetOptionValue(uint32_t option_idx,
> +                                                  const char *option_arg,
> +                                            ExecutionContext 
> *execution_context)
>  {
>      Error error;
> 
> @@ -57,7 +59,8 @@ CommandObjectArgs::CommandOptions::SetOp
>  }
> 
>  void
> -CommandObjectArgs::CommandOptions::OptionParsingStarting ()
> +CommandObjectArgs::CommandOptions::OptionParsingStarting(
> +                                            ExecutionContext 
> *execution_context)
>  {
>  }
> 
> 
> Modified: lldb/trunk/source/Commands/CommandObjectArgs.h
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectArgs.h?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectArgs.h (original)
> +++ lldb/trunk/source/Commands/CommandObjectArgs.h Thu Aug 11 18:51:28 2016
> @@ -32,10 +32,11 @@ namespace lldb_private {
>              ~CommandOptions() override;
> 
>              Error
> -            SetOptionValue(uint32_t option_idx, const char *option_arg) 
> override;
> +            SetOptionValue(uint32_t option_idx, const char *option_arg,
> +                           ExecutionContext *execution_context) override;
> 
>              void
> -            OptionParsingStarting() override;
> +            OptionParsingStarting(ExecutionContext *execution_context) 
> override;
> 
>              const OptionDefinition*
>              GetDefinitions() override;
> 
> Modified: lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp Thu Aug 11 
> 18:51:28 2016
> @@ -69,7 +69,7 @@ public:
>                               "breakpoint set",
>                               "Sets a breakpoint or set of breakpoints in the 
> executable.",
>                               "breakpoint set <cmd-options>"),
> -        m_options (interpreter)
> +        m_options ()
>      {
>      }
> 
> @@ -84,8 +84,8 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_condition (),
>              m_filenames (),
>              m_line_num (0),
> @@ -116,7 +116,8 @@ public:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -125,8 +126,9 @@ public:
>              {
>                  case 'a':
>                      {
> -                        ExecutionContext exe_ctx 
> (m_interpreter.GetExecutionContext());
> -                        m_load_addr = Args::StringToAddress(&exe_ctx, 
> option_arg, LLDB_INVALID_ADDRESS, &error);
> +                        m_load_addr =
> +                            Args::StringToAddress(execution_context, 
> option_arg,
> +                                                  LLDB_INVALID_ADDRESS, 
> &error);
>                      }
>                      break;
> 
> @@ -279,9 +281,10 @@ public:
> 
>                  case 'R':
>                      {
> -                        ExecutionContext exe_ctx 
> (m_interpreter.GetExecutionContext());
>                          lldb::addr_t tmp_offset_addr;
> -                        tmp_offset_addr = Args::StringToAddress(&exe_ctx, 
> option_arg, 0, &error);
> +                        tmp_offset_addr =
> +                            Args::StringToAddress(execution_context, 
> option_arg,
> +                                                  0, &error);
>                          if (error.Success())
>                              m_offset_addr = tmp_offset_addr;
>                      }
> @@ -355,7 +358,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_condition.clear();
>              m_filenames.Clear();
> @@ -892,7 +895,7 @@ public:
>                              "If no breakpoint is specified, acts on the last 
> created breakpoint.  "
>                              "With the exception of -e, -d and -i, passing an 
> empty argument clears the modification.",
>                              nullptr),
> -        m_options (interpreter)
> +        m_options ()
>      {
>          CommandArgumentEntry arg;
>          CommandObject::AddIDsArgumentData(arg, eArgTypeBreakpointID, 
> eArgTypeBreakpointIDRange);
> @@ -911,8 +914,8 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_ignore_count (0),
>              m_thread_id(LLDB_INVALID_THREAD_ID),
>              m_thread_id_passed(false),
> @@ -935,7 +938,8 @@ public:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -1031,7 +1035,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_ignore_count = 0;
>              m_thread_id = LLDB_INVALID_THREAD_ID;
> @@ -1418,7 +1422,7 @@ public:
>                              "breakpoint list",
>                              "List some or all breakpoints at configurable 
> levels of detail.",
>                              nullptr),
> -        m_options (interpreter)
> +        m_options ()
>      {
>          CommandArgumentEntry arg;
>          CommandArgumentData bp_id_arg;
> @@ -1445,8 +1449,8 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_level (lldb::eDescriptionLevelBrief),
>              m_use_dummy(false)
>          {
> @@ -1455,7 +1459,8 @@ public:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -1486,7 +1491,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_level = lldb::eDescriptionLevelFull;
>              m_internal = false;
> @@ -1622,7 +1627,7 @@ public:
>          : CommandObjectParsed(interpreter, "breakpoint clear",
>                                "Delete or disable breakpoints matching the 
> specified source file and line.",
>                                "breakpoint clear <cmd-options>"),
> -          m_options(interpreter)
> +          m_options()
>      {
>      }
> 
> @@ -1637,8 +1642,8 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_filename (),
>              m_line_num (0)
>          {
> @@ -1647,7 +1652,8 @@ public:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -1671,7 +1677,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_filename.clear();
>              m_line_num = 0;
> @@ -1815,7 +1821,7 @@ public:
>                              "breakpoint delete",
>                              "Delete the specified breakpoint(s).  If no 
> breakpoints are specified, delete them all.",
>                              nullptr),
> -        m_options (interpreter)
> +        m_options()
>      {
>          CommandArgumentEntry arg;
>          CommandObject::AddIDsArgumentData(arg, eArgTypeBreakpointID, 
> eArgTypeBreakpointIDRange);
> @@ -1834,8 +1840,8 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_use_dummy (false),
>              m_force (false)
>          {
> @@ -1844,7 +1850,8 @@ public:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -1868,7 +1875,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_use_dummy = false;
>              m_force = false;
> @@ -2025,9 +2032,9 @@ public:
>      }
> 
>      Error
> -    SetOptionValue (CommandInterpreter &interpreter,
> -                    uint32_t option_idx,
> -                    const char *option_value) override
> +    SetOptionValue (uint32_t option_idx,
> +                    const char *option_value,
> +                    ExecutionContext *execution_context) override
>      {
>          Error error;
>          const int short_option = 
> g_breakpoint_name_options[option_idx].short_option;
> @@ -2056,7 +2063,7 @@ public:
>      }
> 
>      void
> -    OptionParsingStarting (CommandInterpreter &interpreter) override
> +    OptionParsingStarting (ExecutionContext *execution_context) override
>      {
>          m_name.Clear();
>          m_breakpoint.Clear();
> @@ -2078,7 +2085,7 @@ public:
>                               "Add a name to the breakpoints provided.",
>                               "breakpoint name add <command-options> 
> <breakpoint-id-list>"),
>          m_name_options(),
> -        m_option_group(interpreter)
> +        m_option_group()
>          {
>              // Create the first variant for the first (and only) argument 
> for this command.
>              CommandArgumentEntry arg1;
> @@ -2171,7 +2178,7 @@ public:
>                               "Delete a name from the breakpoints provided.",
>                               "breakpoint name delete <command-options> 
> <breakpoint-id-list>"),
>          m_name_options(),
> -        m_option_group(interpreter)
> +        m_option_group()
>      {
>          // Create the first variant for the first (and only) argument for 
> this command.
>          CommandArgumentEntry arg1;
> @@ -2263,7 +2270,7 @@ public:
>                               "List either the names for a breakpoint or the 
> breakpoints for a given name.",
>                               "breakpoint name list <command-options>"),
>          m_name_options(),
> -        m_option_group(interpreter)
> +        m_option_group()
>      {
>          m_option_group.Append (&m_name_options);
>          m_option_group.Finalize();
> 
> Modified: lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp Thu Aug 11 
> 18:51:28 2016
> @@ -42,7 +42,7 @@ public:
>                                "  If no breakpoint is specified, adds the 
> commands to the last created breakpoint.",
>                                nullptr),
>            IOHandlerDelegateMultiline("DONE", 
> IOHandlerDelegate::Completion::LLDBCommand),
> -          m_options(interpreter)
> +          m_options()
>      {
>          SetHelpLong (
>  R"(
> @@ -295,8 +295,8 @@ are no syntax errors may indicate that a
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions () :
> +            Options (),
>              m_use_commands (false),
>              m_use_script_language (false),
>              m_script_language (eScriptLanguageNone),
> @@ -309,7 +309,8 @@ are no syntax errors may indicate that a
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -363,7 +364,7 @@ are no syntax errors may indicate that a
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_use_commands = true;
>              m_use_script_language = false;
> @@ -566,7 +567,7 @@ public:
>                              "delete",
>                              "Delete the set of commands from a breakpoint.",
>                              nullptr),
> -        m_options (interpreter)
> +        m_options()
>      {
>          CommandArgumentEntry arg;
>          CommandArgumentData bp_id_arg;
> @@ -593,16 +594,17 @@ public:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> -            m_use_dummy (false)
> +        CommandOptions() :
> +            Options(),
> +            m_use_dummy(false)
>          {
>          }
> 
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -622,7 +624,7 @@ public:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_use_dummy = false;
>          }
> 
> Modified: lldb/trunk/source/Commands/CommandObjectBugreport.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBugreport.cpp?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectBugreport.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectBugreport.cpp Thu Aug 11 18:51:28 
> 2016
> @@ -36,7 +36,7 @@ public:
>                              "bugreport unwind",
>                              "Create a bugreport for a bug in the stack 
> unwinding code.",
>                              nullptr),
> -        m_option_group(interpreter),
> +        m_option_group(),
>          m_outfile_options()
>      {
>          m_option_group.Append (&m_outfile_options, LLDB_OPT_SET_ALL, 
> LLDB_OPT_SET_1 | LLDB_OPT_SET_2 | LLDB_OPT_SET_3);
> 
> Modified: lldb/trunk/source/Commands/CommandObjectCommands.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectCommands.cpp?rev=278440&r1=278439&r2=278440&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectCommands.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectCommands.cpp Thu Aug 11 18:51:28 
> 2016
> @@ -44,7 +44,7 @@ public:
>                              "command history",
>                              "Dump the history of commands in this session.",
>                              nullptr),
> -        m_options (interpreter)
> +        m_options()
>      {
>      }
> 
> @@ -60,8 +60,8 @@ protected:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions() :
> +            Options(),
>              m_start_idx(0),
>              m_stop_idx(0),
>              m_count(0),
> @@ -72,7 +72,8 @@ protected:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -107,7 +108,7 @@ protected:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_start_idx.Clear();
>              m_stop_idx.Clear();
> @@ -238,7 +239,7 @@ public:
>      CommandObjectCommandsSource(CommandInterpreter &interpreter)
>          : CommandObjectParsed(interpreter, "command source", "Read and 
> execute LLDB commands from the file <filename>.",
>                                nullptr),
> -          m_options(interpreter)
> +          m_options()
>      {
>          CommandArgumentEntry arg;
>          CommandArgumentData file_arg;
> @@ -274,8 +275,8 @@ public:
>      {
>          std::string completion_str (input.GetArgumentAtIndex(cursor_index));
>          completion_str.erase (cursor_char_position);
> -
> -        CommandCompletions::InvokeCommonCompletionCallbacks(m_interpreter,
> +
> +        
> CommandCompletions::InvokeCommonCompletionCallbacks(GetCommandInterpreter(),
>                                                              
> CommandCompletions::eDiskFileCompletion,
>                                                              
> completion_str.c_str(),
>                                                              
> match_start_point,
> @@ -296,8 +297,8 @@ protected:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions() :
> +            Options(),
>              m_stop_on_error (true),
>              m_silent_run (false),
>              m_stop_on_continue (true)
> @@ -307,7 +308,8 @@ protected:
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -335,7 +337,7 @@ protected:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_stop_on_error.Clear();
>              m_silent_run.Clear();
> @@ -454,9 +456,9 @@ protected:
>          }
> 
>          Error
> -        SetOptionValue (CommandInterpreter &interpreter,
> -                        uint32_t option_idx,
> -                        const char *option_value) override
> +        SetOptionValue (uint32_t option_idx,
> +                        const char *option_value,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
> 
> @@ -483,7 +485,7 @@ protected:
>          }
> 
>          void
> -        OptionParsingStarting (CommandInterpreter &interpreter) override
> +        OptionParsingStarting (ExecutionContext *execution_context) override
>          {
>              m_help.Clear();
>              m_long_help.Clear();
> @@ -509,7 +511,7 @@ public:
>      CommandObjectCommandsAlias(CommandInterpreter &interpreter)
>          : CommandObjectRaw(interpreter, "command alias", "Define a custom 
> command in terms of an existing command.",
>                             nullptr),
> -          m_option_group(interpreter),
> +          m_option_group(),
>            m_command_options()
>      {
>          m_option_group.Append(&m_command_options);
> @@ -630,8 +632,9 @@ protected:
>              result.AppendError ("'command alias' requires at least two 
> arguments");
>              return false;
>          }
> -
> -        m_option_group.NotifyOptionParsingStarting();
> +
> +        ExecutionContext exe_ctx = 
> GetCommandInterpreter().GetExecutionContext();
> +        m_option_group.NotifyOptionParsingStarting(&exe_ctx);
> 
>          const char * remainder = nullptr;
> 
> @@ -663,7 +666,7 @@ protected:
>                  if (!ParseOptions (args, result))
>                      return false;
> 
> -                Error error (m_option_group.NotifyOptionParsingFinished());
> +                Error error 
> (m_option_group.NotifyOptionParsingFinished(&exe_ctx));
>                  if (error.Fail())
>                  {
>                      result.AppendError (error.AsCString());
> @@ -1092,7 +1095,7 @@ public:
>                                "Define a custom command in terms of existing 
> commands by matching regular expressions.",
>                                "command regex <cmd-name> [s/<regex>/<subst>/ 
> ...]"),
>            IOHandlerDelegateMultiline("", 
> IOHandlerDelegate::Completion::LLDBCommand),
> -          m_options(interpreter)
> +          m_options()
>      {
>          SetHelpLong(R"(
>  )" "This command allows the user to create powerful regular expression 
> commands \
> @@ -1359,15 +1362,16 @@ private:
>       class CommandOptions : public Options
>       {
>       public:
> -         CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter)
> +         CommandOptions() :
> +            Options()
>           {
>           }
> 
>           ~CommandOptions() override = default;
> 
>           Error
> -         SetOptionValue (uint32_t option_idx, const char *option_arg) 
> override
> +         SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                         ExecutionContext *execution_context) override
>           {
>               Error error;
>               const int short_option = m_getopt_table[option_idx].val;
> @@ -1389,7 +1393,7 @@ private:
>           }
> 
>           void
> -         OptionParsingStarting () override
> +         OptionParsingStarting (ExecutionContext *execution_context) override
>           {
>               m_help.clear();
>               m_syntax.clear();
> @@ -1676,7 +1680,7 @@ public:
>                              "command script import",
>                              "Import a scripting module in LLDB.",
>                              nullptr),
> -        m_options(interpreter)
> +        m_options()
>      {
>          CommandArgumentEntry arg1;
>          CommandArgumentData cmd_arg;
> @@ -1706,8 +1710,8 @@ public:
>      {
>          std::string completion_str (input.GetArgumentAtIndex(cursor_index));
>          completion_str.erase (cursor_char_position);
> -
> -        CommandCompletions::InvokeCommonCompletionCallbacks(m_interpreter,
> +
> +        
> CommandCompletions::InvokeCommonCompletionCallbacks(GetCommandInterpreter(),
>                                                              
> CommandCompletions::eDiskFileCompletion,
>                                                              
> completion_str.c_str(),
>                                                              
> match_start_point,
> @@ -1728,15 +1732,16 @@ protected:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter)
> +        CommandOptions() :
> +            Options()
>          {
>          }
> 
>          ~CommandOptions() override = default;
> 
>          Error
> -        SetOptionValue (uint32_t option_idx, const char *option_arg) override
> +        SetOptionValue (uint32_t option_idx, const char *option_arg,
> +                        ExecutionContext *execution_context) override
>          {
>              Error error;
>              const int short_option = m_getopt_table[option_idx].val;
> @@ -1755,7 +1760,7 @@ protected:
>          }
> 
>          void
> -        OptionParsingStarting () override
> +        OptionParsingStarting(ExecutionContext *execution_context) override
>          {
>              m_allow_reload = true;
>          }
> @@ -1850,7 +1855,7 @@ public:
>                              "Add a scripted function as an LLDB command.",
>                              nullptr),
>          IOHandlerDelegateMultiline ("DONE"),
> -        m_options (interpreter)
> +        m_options()
>      {
>          CommandArgumentEntry arg1;
>          CommandArgumentData cmd_arg;
> @@ -1878,8 +1883,8 @@ protected:
>      class CommandOptions : public Options
>      {
>      public:
> -        CommandOptions (CommandInterpreter &interpreter) :
> -            Options (interpreter),
> +        CommandOptions() :
> +            Options(),
>              m_class_name(),
>              m_funct_name(),
>              m_short_help(),
> @@ -1890,7 +1895,8 @@ protected:
>          ~CommandOptions() override = default;
> 
>          Error
> -     
> 
> 
> 
> -- 
> -Todd
> _______________________________________________
> lldb-commits mailing list
> lldb-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to