aboutsummaryrefslogtreecommitdiff
path: root/lldb/tools/lldb-mi/MICmdBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/lldb-mi/MICmdBase.h')
-rw-r--r--lldb/tools/lldb-mi/MICmdBase.h214
1 files changed, 124 insertions, 90 deletions
diff --git a/lldb/tools/lldb-mi/MICmdBase.h b/lldb/tools/lldb-mi/MICmdBase.h
index aa56748..66f9fa6 100644
--- a/lldb/tools/lldb-mi/MICmdBase.h
+++ b/lldb/tools/lldb-mi/MICmdBase.h
@@ -13,19 +13,20 @@
// C++ Includes
// Other libraries and framework includes
// Project includes
-#include "MIUtilString.h"
-#include "MICmnBase.h"
-#include "MICmnResources.h"
-#include "MICmdInvoker.h"
-#include "MICmdFactory.h"
+#include "MICmdArgSet.h"
#include "MICmdData.h"
+#include "MICmdFactory.h"
+#include "MICmdInvoker.h"
+#include "MICmnBase.h"
#include "MICmnMIResultRecord.h"
-#include "MICmdArgSet.h"
+#include "MICmnResources.h"
+#include "MIUtilString.h"
// Declarations:
class CMICmnLLDBDebugSessionInfo;
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI command base class. MI commands derive from this base class.
// The Command Factory creates command objects and passes them to the
// Command Invoker. The Invoker takes ownership of any commands created
@@ -39,116 +40,149 @@ class CMICmnLLDBDebugSessionInfo;
// function. The other type of command is one that just does some work,
// ends, then the Invoker calls the command's Acknowledge function. No
// events set up.
-// A command's Execute(), Acknowledge() and event callback functions are
+// A command's Execute(), Acknowledge() and event callback functions
+// are
// carried out in the main thread.
-// A command may use the argument derived object classes (CMICmdArgValBase)
+// A command may use the argument derived object classes
+// (CMICmdArgValBase)
// to factor handling and parsing of different types of arguments
// presented to a command. A command will produce an error should it
// be presented with arguments or options it does not understand.
//--
-class CMICmdBase : public CMICmnBase, public CMICmdInvoker::ICmd, public CMICmdFactory::ICmd
-{
- // Methods:
- public:
- CMICmdBase();
+class CMICmdBase : public CMICmnBase,
+ public CMICmdInvoker::ICmd,
+ public CMICmdFactory::ICmd {
+ // Methods:
+public:
+ CMICmdBase();
- // Overridden:
- // From CMICmdInvoker::ICmd
- const SMICmdData &GetCmdData() const override;
- const CMIUtilString &GetErrorDescription() const override;
- void SetCmdData(const SMICmdData &vCmdData) override;
- void CmdFinishedTellInvoker() const override;
- const CMIUtilString &GetMIResultRecord() const override;
- const CMIUtilString &GetMIResultRecordExtra() const override;
- bool HasMIResultRecordExtra() const override;
- bool ParseArgs() override;
- // From CMICmdFactory::ICmd
- const CMIUtilString &GetMiCmd() const override;
- CMICmdFactory::CmdCreatorFnPtr GetCmdCreatorFn() const override;
+ // Overridden:
+ // From CMICmdInvoker::ICmd
+ const SMICmdData &GetCmdData() const override;
+ const CMIUtilString &GetErrorDescription() const override;
+ void SetCmdData(const SMICmdData &vCmdData) override;
+ void CmdFinishedTellInvoker() const override;
+ const CMIUtilString &GetMIResultRecord() const override;
+ const CMIUtilString &GetMIResultRecordExtra() const override;
+ bool HasMIResultRecordExtra() const override;
+ bool ParseArgs() override;
+ // From CMICmdFactory::ICmd
+ const CMIUtilString &GetMiCmd() const override;
+ CMICmdFactory::CmdCreatorFnPtr GetCmdCreatorFn() const override;
- virtual MIuint GetGUID();
- void AddCommonArgs();
+ virtual MIuint GetGUID();
+ void AddCommonArgs();
- // Overrideable:
- ~CMICmdBase() override;
- virtual bool GetExitAppOnCommandFailure() const;
+ // Overrideable:
+ ~CMICmdBase() override;
+ virtual bool GetExitAppOnCommandFailure() const;
- // Methods:
- protected:
- void SetError(const CMIUtilString &rErrMsg);
- template <class T> T *GetOption(const CMIUtilString &vStrOptionName);
- bool ParseValidateCmdOptions();
+ // Methods:
+protected:
+ void SetError(const CMIUtilString &rErrMsg);
+ template <class T> T *GetOption(const CMIUtilString &vStrOptionName);
+ bool ParseValidateCmdOptions();
- // Attributes:
- CMICmdFactory::CmdCreatorFnPtr m_pSelfCreatorFn;
- CMIUtilString m_strCurrentErrDescription; // Reason for Execute or Acknowledge function failure
- SMICmdData m_cmdData; // Holds information/status of *this command. Used by other MI code to report or determine state of a command.
- bool m_bWaitForEventFromSBDebugger; // True = yes event type command wait, false = command calls Acknowledge() straight after Execute()
- // no waiting
- CMIUtilString m_strMiCmd; // The MI text identifying *this command i.e. 'break-insert'
- CMICmnMIResultRecord m_miResultRecord; // This is completed in the Acknowledge() function and returned to the Command Invoker to proceed
- // stdout output. Each command forms 1 response to its input.
- CMIUtilString m_miResultRecordExtra; // This is completed in the Acknowledge() function and returned to the Command Invoker to proceed
- // stdout output. Hack command produce more response text to help the client because of using LLDB
- CMICmnLLDBDebugSessionInfo &
- m_rLLDBDebugSessionInfo; // Access to command sharing information or data across any and all command based derived classes.
- bool m_bHasResultRecordExtra; // True = Yes command produced additional MI output to its 1 line response, false = no extra MI output
- // formed.
- CMICmdArgSet m_setCmdArgs; // The list of arguments *this command needs to parse from the options string to carry out work.
- const CMIUtilString m_constStrArgThreadGroup;
- const CMIUtilString m_constStrArgThread;
- const CMIUtilString m_constStrArgFrame;
- const CMIUtilString m_constStrArgConsume;
+ // Attributes:
+ CMICmdFactory::CmdCreatorFnPtr m_pSelfCreatorFn;
+ CMIUtilString m_strCurrentErrDescription; // Reason for Execute or Acknowledge
+ // function failure
+ SMICmdData m_cmdData; // Holds information/status of *this command. Used by
+ // other MI code to report or determine state of a
+ // command.
+ bool m_bWaitForEventFromSBDebugger; // True = yes event type command wait,
+ // false = command calls Acknowledge()
+ // straight after Execute()
+ // no waiting
+ CMIUtilString
+ m_strMiCmd; // The MI text identifying *this command i.e. 'break-insert'
+ CMICmnMIResultRecord m_miResultRecord; // This is completed in the
+ // Acknowledge() function and returned
+ // to the Command Invoker to proceed
+ // stdout output. Each command forms 1 response to its input.
+ CMIUtilString m_miResultRecordExtra; // This is completed in the Acknowledge()
+ // function and returned to the Command
+ // Invoker to proceed
+ // stdout output. Hack command produce more response text to help the client
+ // because of using LLDB
+ CMICmnLLDBDebugSessionInfo &m_rLLDBDebugSessionInfo; // Access to command
+ // sharing information or
+ // data across any and
+ // all command based
+ // derived classes.
+ bool m_bHasResultRecordExtra; // True = Yes command produced additional MI
+ // output to its 1 line response, false = no
+ // extra MI output
+ // formed.
+ CMICmdArgSet m_setCmdArgs; // The list of arguments *this command needs to
+ // parse from the options string to carry out work.
+ const CMIUtilString m_constStrArgThreadGroup;
+ const CMIUtilString m_constStrArgThread;
+ const CMIUtilString m_constStrArgFrame;
+ const CMIUtilString m_constStrArgConsume;
- // These 3 members can be used by the derived classes to make any of
- // "thread", "frame" or "thread-group" mandatory.
- bool m_ThreadGrpArgMandatory;
- bool m_ThreadArgMandatory;
- bool m_FrameArgMandatory;
+ // These 3 members can be used by the derived classes to make any of
+ // "thread", "frame" or "thread-group" mandatory.
+ bool m_ThreadGrpArgMandatory;
+ bool m_ThreadArgMandatory;
+ bool m_FrameArgMandatory;
};
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the command argument or option object pointer so that it can be
-// examined. If the option found and valid get the value (number, string or list
-// - see CMICmdArgValBase class) from it to use with the command's decision
-// making. If the argument is not found the command's error description is set
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the command argument or option object pointer so that it
+// can be
+// examined. If the option found and valid get the value (number,
+// string or list
+// - see CMICmdArgValBase class) from it to use with the command's
+// decision
+// making. If the argument is not found the command's error description
+// is set
// describing the error condition.
// Type: Template method.
-// Args: vStrOptionName - (R) The text name of the argument or option to search for in
-// the list of the command's possible arguments or options.
+// Args: vStrOptionName - (R) The text name of the argument or option to
+// search for in
+// the list of the command's possible arguments
+// or options.
// Return: T * - CMICmdArgValBase derived object.
-// - nullptr = function has failed, unable to retrieve the option/arg object.
+// - nullptr = function has failed, unable to retrieve the
+// option/arg object.
// Throws: None.
//--
template <class T>
-T *
-CMICmdBase::GetOption(const CMIUtilString &vStrOptionName)
-{
- CMICmdArgValBase *pPtrBase = nullptr;
- if (!m_setCmdArgs.GetArg(vStrOptionName, pPtrBase))
- {
- SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND), m_cmdData.strMiCmd.c_str(), vStrOptionName.c_str()));
- return nullptr;
- }
+T *CMICmdBase::GetOption(const CMIUtilString &vStrOptionName) {
+ CMICmdArgValBase *pPtrBase = nullptr;
+ if (!m_setCmdArgs.GetArg(vStrOptionName, pPtrBase)) {
+ SetError(CMIUtilString::Format(MIRSRC(IDS_CMD_ERR_OPTION_NOT_FOUND),
+ m_cmdData.strMiCmd.c_str(),
+ vStrOptionName.c_str()));
+ return nullptr;
+ }
- return static_cast<T *>(pPtrBase);
+ return static_cast<T *>(pPtrBase);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the command argument or option object pointer using template function
-// CMICmdBase::GetOption(). Should the argument (by name) not be found the
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the command argument or option object pointer using
+// template function
+// CMICmdBase::GetOption(). Should the argument (by name) not be found
+// the
// command will exit with a failure (set in GetOption()).
// Type: Preprocessor macro.
// Args: a - (R) The actual variable's name.
-// b - (R) The type of variable (appended to CMICmdArgVal i.e. CMICmdArgValString).
-// c - (R) The text name of the argument or option to search for in the list of
+// b - (R) The type of variable (appended to CMICmdArgVal i.e.
+// CMICmdArgValString).
+// c - (R) The text name of the argument or option to search for in
+// the list of
// the command's possible arguments or options.
// Return: T * - CMICmdArgValBase derived object.
-// - nullptr = function has failed, unable to retrieve the option/arg object.
+// - nullptr = function has failed, unable to retrieve the
+// option/arg object.
// Throws: None.
//--
-#define CMICMDBASE_GETOPTION(a, b, c) \
- CMICmdArgVal##b *a = CMICmdBase::GetOption<CMICmdArgVal##b>(c); \
- if (a == nullptr) \
- return MIstatus::failure;
+#define CMICMDBASE_GETOPTION(a, b, c) \
+ CMICmdArgVal##b *a = CMICmdBase::GetOption<CMICmdArgVal##b>(c); \
+ if (a == nullptr) \
+ return MIstatus::failure;
// This comment is to stop compile warning for #define