abidh created this revision.
abidh added a reviewer: ki.stfu.
abidh added a subscriber: lldb-commits.

I observed that eclipse was passing --thread-group for many other commands
then we are currently handling. Looking at the MI documentation, the
following link states that each MI command accept the --thread and
--frame option. Looking at the GDB implementation, it seems that apart
from these 2, --thread-group is also handled the same way.

https://sourceware.org/gdb/onlinedocs/gdb/Context-management.html#Context-management

So instead of handling those arguments in every comamnds, I have moved
them into the base class and removed them from elsewhere. Now any command
can use these arguments. The patch seems big but most of the changes are
mechanical.

http://reviews.llvm.org/D14177

Files:
  packages/Python/lldbsuite/test/tools/lldb-mi/stack/TestMiStack.py
  tools/lldb-mi/MICmdBase.cpp
  tools/lldb-mi/MICmdBase.h
  tools/lldb-mi/MICmdCmdBreak.cpp
  tools/lldb-mi/MICmdCmdBreak.h
  tools/lldb-mi/MICmdCmdData.cpp
  tools/lldb-mi/MICmdCmdData.h
  tools/lldb-mi/MICmdCmdExec.cpp
  tools/lldb-mi/MICmdCmdExec.h
  tools/lldb-mi/MICmdCmdFile.cpp
  tools/lldb-mi/MICmdCmdFile.h
  tools/lldb-mi/MICmdCmdGdbSet.cpp
  tools/lldb-mi/MICmdCmdGdbSet.h
  tools/lldb-mi/MICmdCmdGdbShow.cpp
  tools/lldb-mi/MICmdCmdGdbShow.h
  tools/lldb-mi/MICmdCmdStack.cpp
  tools/lldb-mi/MICmdCmdStack.h
  tools/lldb-mi/MICmdCmdVar.cpp
  tools/lldb-mi/MICmdCmdVar.h
  tools/lldb-mi/MICmdInvoker.cpp

Index: tools/lldb-mi/MICmdInvoker.cpp
===================================================================
--- tools/lldb-mi/MICmdInvoker.cpp
+++ tools/lldb-mi/MICmdInvoker.cpp
@@ -189,16 +189,20 @@
 {
     bool bOk = CmdAdd(vCmd);
 
-    if (bOk && !vCmd.ParseArgs())
+    if(bOk)
     {
-        // Report command execution failed
-        const SMICmdData cmdData(vCmd.GetCmdData());
-        CmdStdout(cmdData);
-        CmdCauseAppExit(vCmd);
-        CmdDelete(cmdData.id);
+        vCmd.ParseCommonArgs();
+        if (!vCmd.ParseArgs())
+        {
+            // Report command execution failed
+            const SMICmdData cmdData(vCmd.GetCmdData());
+            CmdStdout(cmdData);
+            CmdCauseAppExit(vCmd);
+            CmdDelete(cmdData.id);
 
-        // Proceed to wait or execute next command
-        return MIstatus::success;
+            // Proceed to wait or execute next command
+            return MIstatus::success;
+        }
     }
 
     if (bOk && !vCmd.Execute())
Index: tools/lldb-mi/MICmdCmdVar.h
===================================================================
--- tools/lldb-mi/MICmdCmdVar.h
+++ tools/lldb-mi/MICmdCmdVar.h
@@ -78,9 +78,6 @@
     bool m_bValid; // True = Variable is valid, false = not valid
     CMIUtilString m_strExpression;
     CMIUtilString m_strValue;
-    const CMIUtilString m_constStrArgThread;      // Not specified in MI spec but Eclipse gives this option
-    const CMIUtilString m_constStrArgThreadGroup; // Not specified in MI spec but Eclipse gives this option
-    const CMIUtilString m_constStrArgFrame;       // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgName;
     const CMIUtilString m_constStrArgFrameAddr;
     const CMIUtilString m_constStrArgExpression;
Index: tools/lldb-mi/MICmdCmdVar.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdVar.cpp
+++ tools/lldb-mi/MICmdCmdVar.cpp
@@ -51,9 +51,6 @@
     , m_strType("??")
     , m_bValid(false)
     , m_strValue("??")
-    , m_constStrArgThread("thread")
-    , m_constStrArgThreadGroup("thread-group")
-    , m_constStrArgFrame("frame")
     , m_constStrArgName("name")
     , m_constStrArgFrameAddr("frame-addr")
     , m_constStrArgExpression("expression")
@@ -88,10 +85,6 @@
 bool
 CMICmdCmdVarCreate::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgThreadGroup, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgName, false, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgFrameAddr, false, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpression, true, true, true, true));
Index: tools/lldb-mi/MICmdCmdStack.h
===================================================================
--- tools/lldb-mi/MICmdCmdStack.h
+++ tools/lldb-mi/MICmdCmdStack.h
@@ -57,7 +57,6 @@
     // Attributes:
   private:
     MIuint m_nThreadFrames;
-    const CMIUtilString m_constStrArgThread;   // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgMaxDepth; // Not handled by *this command
 };
 
@@ -122,7 +121,6 @@
   private:
     MIuint m_nThreadFrames;
     VecMIValueResult_t m_vecMIValueResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgFrameLow;
     const CMIUtilString m_constStrArgFrameHigh;
 };
@@ -155,7 +153,6 @@
   private:
     bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
     CMICmnMIValueList m_miValueList;
-    const CMIUtilString m_constStrArgThread;      // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgPrintValues;
     const CMIUtilString m_constStrArgFrameLow;
     const CMIUtilString m_constStrArgFrameHigh;
@@ -189,8 +186,6 @@
   private:
     bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
     CMICmnMIValueList m_miValueList;
-    const CMIUtilString m_constStrArgThread;      // Not specified in MI spec but Eclipse gives this option
-    const CMIUtilString m_constStrArgFrame;       // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgPrintValues;
 };
 
@@ -222,8 +217,6 @@
 private:
     bool m_bThreadInvalid; // True = yes invalid thread, false = thread object valid
     CMICmnMIValueList m_miValueList;
-    const CMIUtilString m_constStrArgThread;
-    const CMIUtilString m_constStrArgFrame;
     const CMIUtilString m_constStrArgPrintValues;
 };
 
@@ -254,5 +247,5 @@
     // Attributes:
   private:
     bool m_bFrameInvalid; // True = yes invalid frame, false = ok
-    const CMIUtilString m_constStrArgFrame;
+    const CMIUtilString m_constStrArgFrameId;
 };
Index: tools/lldb-mi/MICmdCmdStack.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdStack.cpp
+++ tools/lldb-mi/MICmdCmdStack.cpp
@@ -41,7 +41,6 @@
 //--
 CMICmdCmdStackInfoDepth::CMICmdCmdStackInfoDepth()
     : m_nThreadFrames(0)
-    , m_constStrArgThread("thread")
     , m_constStrArgMaxDepth("max-depth")
 {
     // Command factory matches this name with that received from the stdin stream
@@ -74,7 +73,6 @@
 bool
 CMICmdCmdStackInfoDepth::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgMaxDepth, false, false));
     return ParseValidateCmdOptions();
 }
@@ -265,7 +263,6 @@
 //--
 CMICmdCmdStackListFrames::CMICmdCmdStackListFrames()
     : m_nThreadFrames(0)
-    , m_constStrArgThread("thread")
     , m_constStrArgFrameLow("low-frame")
     , m_constStrArgFrameHigh("high-frame")
 {
@@ -446,7 +443,6 @@
 CMICmdCmdStackListArguments::CMICmdCmdStackListArguments()
     : m_bThreadInvalid(false)
     , m_miValueList(true)
-    , m_constStrArgThread("thread")
     , m_constStrArgPrintValues("print-values")
     , m_constStrArgFrameLow("low-frame")
     , m_constStrArgFrameHigh("high-frame")
@@ -632,8 +628,6 @@
 CMICmdCmdStackListLocals::CMICmdCmdStackListLocals()
     : m_bThreadInvalid(false)
     , m_miValueList(true)
-    , m_constStrArgThread("thread")
-    , m_constStrArgFrame("frame")
     , m_constStrArgPrintValues("print-values")
 {
     // Command factory matches this name with that received from the stdin stream
@@ -666,8 +660,6 @@
 bool
 CMICmdCmdStackListLocals::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
     return ParseValidateCmdOptions();
 }
@@ -795,8 +787,6 @@
 CMICmdCmdStackListVariables::CMICmdCmdStackListVariables()
     : m_bThreadInvalid(false)
     , m_miValueList(true)
-    , m_constStrArgThread("thread")
-    , m_constStrArgFrame("frame")
     , m_constStrArgPrintValues("print-values")
 {
     // Command factory matches this name with that received from the stdin stream
@@ -829,8 +819,6 @@
 bool
 CMICmdCmdStackListVariables::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValPrintValues(m_constStrArgPrintValues, true, true));
     return ParseValidateCmdOptions();
 }
@@ -956,7 +944,7 @@
 //--
 CMICmdCmdStackSelectFrame::CMICmdCmdStackSelectFrame()
     : m_bFrameInvalid(false)
-    , m_constStrArgFrame("frame")
+    , m_constStrArgFrameId("frame_id")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "stack-select-frame";
@@ -988,7 +976,7 @@
 bool
 CMICmdCmdStackSelectFrame::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrame, true, false));
+    m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgFrameId, true, false));
     return ParseValidateCmdOptions();
 }
 
@@ -1004,7 +992,7 @@
 bool
 CMICmdCmdStackSelectFrame::Execute()
 {
-    CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrame);
+    CMICMDBASE_GETOPTION(pArgFrame, Number, m_constStrArgFrameId);
 
     CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
     lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
Index: tools/lldb-mi/MICmdCmdGdbShow.h
===================================================================
--- tools/lldb-mi/MICmdCmdGdbShow.h
+++ tools/lldb-mi/MICmdCmdGdbShow.h
@@ -74,8 +74,7 @@
     // Attributes:
   private:
     const static MapGdbOptionNameToFnGdbOptionPtr_t ms_mapGdbOptionNameToFnGdbOptionPtr;
-    //
-    const CMIUtilString m_constStrArgNamedThreadGrp;
+
     const CMIUtilString m_constStrArgNamedGdbOption;
     bool m_bGdbOptionRecognised;   // True = This command has a function with a name that matches the Print argument, false = not found
     bool m_bGdbOptionFnSuccessful; // True = The print function completed its task ok, false = function failed for some reason
Index: tools/lldb-mi/MICmdCmdGdbShow.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdGdbShow.cpp
+++ tools/lldb-mi/MICmdCmdGdbShow.cpp
@@ -39,8 +39,7 @@
 // Throws:  None.
 //--
 CMICmdCmdGdbShow::CMICmdCmdGdbShow()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedGdbOption("option")
+    : m_constStrArgNamedGdbOption("option")
     , m_bGdbOptionRecognised(true)
     , m_bGdbOptionFnSuccessful(false)
     , m_bGbbOptionFnHasError(false)
@@ -77,8 +76,6 @@
 CMICmdCmdGdbShow::ParseArgs()
 {
     m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
-    m_setCmdArgs.Add(
         new CMICmdArgValListOfN(m_constStrArgNamedGdbOption, true, true, CMICmdArgValListBase::eArgValType_StringAnything));
     return ParseValidateCmdOptions();
 }
Index: tools/lldb-mi/MICmdCmdGdbSet.h
===================================================================
--- tools/lldb-mi/MICmdCmdGdbSet.h
+++ tools/lldb-mi/MICmdCmdGdbSet.h
@@ -76,7 +76,6 @@
   private:
     const static MapGdbOptionNameToFnGdbOptionPtr_t ms_mapGdbOptionNameToFnGdbOptionPtr;
     //
-    const CMIUtilString m_constStrArgNamedThreadGrp;
     const CMIUtilString m_constStrArgNamedGdbOption;
     bool m_bGdbOptionRecognised;   // True = This command has a function with a name that matches the Print argument, false = not found
     bool m_bGdbOptionFnSuccessful; // True = The print function completed its task ok, false = function failed for some reason
Index: tools/lldb-mi/MICmdCmdGdbSet.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdGdbSet.cpp
+++ tools/lldb-mi/MICmdCmdGdbSet.cpp
@@ -35,8 +35,7 @@
 // Throws:  None.
 //--
 CMICmdCmdGdbSet::CMICmdCmdGdbSet()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedGdbOption("option")
+    : m_constStrArgNamedGdbOption("option")
     , m_bGdbOptionRecognised(true)
     , m_bGdbOptionFnSuccessful(false)
     , m_bGbbOptionFnHasError(false)
@@ -73,8 +72,6 @@
 CMICmdCmdGdbSet::ParseArgs()
 {
     m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
-    m_setCmdArgs.Add(
         new CMICmdArgValListOfN(m_constStrArgNamedGdbOption, true, true, CMICmdArgValListBase::eArgValType_StringAnything));
     return ParseValidateCmdOptions();
 }
Index: tools/lldb-mi/MICmdCmdFile.h
===================================================================
--- tools/lldb-mi/MICmdCmdFile.h
+++ tools/lldb-mi/MICmdCmdFile.h
@@ -56,8 +56,6 @@
     // Attributes:
   private:
     const CMIUtilString m_constStrArgNameFile;
-    const CMIUtilString
-        m_constStrArgThreadGrp; // Not handled by *this command. Not specified in MI spec but Eclipse gives this option sometimes
     const CMIUtilString m_constStrArgNamedPlatformName; // Added to support iOS platform selection
     const CMIUtilString m_constStrArgNamedRemotePath; // Added to support iOS device remote file location
 };
Index: tools/lldb-mi/MICmdCmdFile.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdFile.cpp
+++ tools/lldb-mi/MICmdCmdFile.cpp
@@ -32,7 +32,6 @@
 //--
 CMICmdCmdFileExecAndSymbols::CMICmdCmdFileExecAndSymbols()
     : m_constStrArgNameFile("file")
-    , m_constStrArgThreadGrp("thread-group")
     , m_constStrArgNamedPlatformName("p")
     , m_constStrArgNamedRemotePath("r")
 {
@@ -66,8 +65,6 @@
 bool
 CMICmdCmdFileExecAndSymbols::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValFile(m_constStrArgNameFile, true, true));
     m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgNamedPlatformName, false, true,
                                                  CMICmdArgValListBase::eArgValType_String, 1));
Index: tools/lldb-mi/MICmdCmdExec.h
===================================================================
--- tools/lldb-mi/MICmdCmdExec.h
+++ tools/lldb-mi/MICmdCmdExec.h
@@ -120,7 +120,6 @@
     // Attributes:
   private:
     lldb::SBCommandReturnObject m_lldbResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but Eclipse gives this option
 };
 
@@ -151,7 +150,6 @@
     // Attributes:
   private:
     lldb::SBCommandReturnObject m_lldbResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but Eclipse gives this option
 };
 
@@ -182,7 +180,6 @@
     // Attributes:
   private:
     lldb::SBCommandReturnObject m_lldbResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but Eclipse gives this option
 };
 
@@ -213,7 +210,6 @@
     // Attributes:
   private:
     lldb::SBCommandReturnObject m_lldbResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNumber; // Not specified in MI spec but Eclipse gives this option
 };
 
@@ -244,8 +240,6 @@
     // Attributes:
   private:
     lldb::SBCommandReturnObject m_lldbResult;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
-    const CMIUtilString m_constStrArgFrame;  // Not specified in MI spec but Eclipse gives this option
 };
 
 // CODETAG_DEBUG_SESSION_RUNNING_PROG_RECEIVED_SIGINT_PAUSE_PROGRAM
Index: tools/lldb-mi/MICmdCmdExec.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdExec.cpp
+++ tools/lldb-mi/MICmdCmdExec.cpp
@@ -299,8 +299,7 @@
 // Throws:  None.
 //--
 CMICmdCmdExecNext::CMICmdCmdExecNext()
-    : m_constStrArgThread("thread")
-    , m_constStrArgNumber("number")
+    : m_constStrArgNumber("number")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "exec-next";
@@ -332,7 +331,6 @@
 bool
 CMICmdCmdExecNext::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
     return ParseValidateCmdOptions();
 }
@@ -425,8 +423,7 @@
 // Throws:  None.
 //--
 CMICmdCmdExecStep::CMICmdCmdExecStep()
-    : m_constStrArgThread("thread")
-    , m_constStrArgNumber("number")
+    : m_constStrArgNumber("number")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "exec-step";
@@ -458,7 +455,6 @@
 bool
 CMICmdCmdExecStep::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
     return ParseValidateCmdOptions();
 }
@@ -551,8 +547,7 @@
 // Throws:  None.
 //--
 CMICmdCmdExecNextInstruction::CMICmdCmdExecNextInstruction()
-    : m_constStrArgThread("thread")
-    , m_constStrArgNumber("number")
+    : m_constStrArgNumber("number")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "exec-next-instruction";
@@ -584,7 +579,6 @@
 bool
 CMICmdCmdExecNextInstruction::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
     return ParseValidateCmdOptions();
 }
@@ -677,8 +671,7 @@
 // Throws:  None.
 //--
 CMICmdCmdExecStepInstruction::CMICmdCmdExecStepInstruction()
-    : m_constStrArgThread("thread")
-    , m_constStrArgNumber("number")
+    : m_constStrArgNumber("number")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "exec-step-instruction";
@@ -710,7 +703,6 @@
 bool
 CMICmdCmdExecStepInstruction::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumber, false, false));
     return ParseValidateCmdOptions();
 }
@@ -803,8 +795,6 @@
 // Throws:  None.
 //--
 CMICmdCmdExecFinish::CMICmdCmdExecFinish()
-    : m_constStrArgThread("thread")
-    , m_constStrArgFrame("frame")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "exec-finish";
@@ -836,8 +826,6 @@
 bool
 CMICmdCmdExecFinish::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
     return ParseValidateCmdOptions();
 }
 
Index: tools/lldb-mi/MICmdCmdData.h
===================================================================
--- tools/lldb-mi/MICmdCmdData.h
+++ tools/lldb-mi/MICmdCmdData.h
@@ -75,8 +75,6 @@
     CMICmnMIValueTuple m_miValueTuple;
     bool m_bFoundInvalidChar; // True = yes found unexpected character in the expression, false = all ok
     char m_cExpressionInvalidChar;
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option. Not handled by command.
-    const CMIUtilString m_constStrArgFrame;  // Not specified in MI spec but Eclipse gives this option. Not handled by command.
     const CMIUtilString m_constStrArgExpr;
 };
 
@@ -106,7 +104,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThread;    // Not specified in MI spec but Eclipse gives this option. Not handled by command.
     const CMIUtilString m_constStrArgAddrStart; // MI spec non mandatory, *this command mandatory
     const CMIUtilString m_constStrArgAddrEnd;   // MI spec non mandatory, *this command mandatory
     const CMIUtilString m_constStrArgConsume;
@@ -140,8 +137,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThread; // Not in the MI spec but implemented by GDB.
-    const CMIUtilString m_constStrArgFrame; // Not in the MI spec but implemented by GDB.
     const CMIUtilString m_constStrArgByteOffset;
     const CMIUtilString m_constStrArgAddrExpr;
     const CMIUtilString m_constStrArgNumBytes;
@@ -204,7 +199,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThreadGroup; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgRegNo;       // Not handled by *this command
     CMICmnMIValueList m_miValueList;
 };
@@ -240,7 +234,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgSkip;   // Not handled by *this command
     const CMIUtilString m_constStrArgFormat;
     const CMIUtilString m_constStrArgRegNo;
@@ -297,7 +290,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThread; // Not specified in MI spec but Eclipse gives this option. Not handled by command.
     const CMIUtilString m_constStrArgAddr;
     const CMIUtilString m_constStrArgContents;
     const CMIUtilString m_constStrArgCount;
@@ -331,7 +323,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgThread;   // Not specified in MI spec but Eclipse gives this option. Not handled by command.
     const CMIUtilString m_constStrArgOffset;   // Not specified in MI spec but Eclipse gives this option.
     const CMIUtilString m_constStrArgAddr;     // Not specified in MI spec but Eclipse gives this option.
     const CMIUtilString m_constStrArgD;        // Not specified in MI spec but Eclipse gives this option.
Index: tools/lldb-mi/MICmdCmdData.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdData.cpp
+++ tools/lldb-mi/MICmdCmdData.cpp
@@ -57,8 +57,6 @@
     , m_strValue("??")
     , m_bFoundInvalidChar(false)
     , m_cExpressionInvalidChar(0x00)
-    , m_constStrArgThread("thread")
-    , m_constStrArgFrame("frame")
     , m_constStrArgExpr("expr")
 {
     // Command factory matches this name with that received from the stdin stream
@@ -91,8 +89,6 @@
 bool
 CMICmdCmdDataEvaluateExpression::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgExpr, true, true, true, true));
     return ParseValidateCmdOptions();
 }
@@ -241,8 +237,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataDisassemble::CMICmdCmdDataDisassemble()
-    : m_constStrArgThread("thread")
-    , m_constStrArgAddrStart("s")
+    : m_constStrArgAddrStart("s")
     , m_constStrArgAddrEnd("e")
     , m_constStrArgConsume("--")
     , m_constStrArgMode("mode")
@@ -278,7 +273,6 @@
 bool
 CMICmdCmdDataDisassemble::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(
         new CMICmdArgValOptionShort(m_constStrArgAddrStart, true, true, CMICmdArgValListBase::eArgValType_StringQuotedNumber, 1));
     m_setCmdArgs.Add(
@@ -463,9 +457,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataReadMemoryBytes::CMICmdCmdDataReadMemoryBytes()
-    : m_constStrArgThread("thread")
-    , m_constStrArgFrame("frame")
-    , m_constStrArgByteOffset("o")
+    : m_constStrArgByteOffset("o")
     , m_constStrArgAddrExpr("address")
     , m_constStrArgNumBytes("count")
     , m_pBufferMemory(nullptr)
@@ -507,8 +499,6 @@
 bool
 CMICmdCmdDataReadMemoryBytes::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgByteOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgAddrExpr, true, true, true, true));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNumBytes, true, true));
@@ -789,8 +779,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataListRegisterNames::CMICmdCmdDataListRegisterNames()
-    : m_constStrArgThreadGroup("thread-group")
-    , m_constStrArgRegNo("regno")
+    : m_constStrArgRegNo("regno")
     , m_miValueList(true)
 {
     // Command factory matches this name with that received from the stdin stream
@@ -823,7 +812,6 @@
 bool
 CMICmdCmdDataListRegisterNames::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThreadGroup, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgRegNo, false, false, CMICmdArgValListBase::eArgValType_Number));
     return ParseValidateCmdOptions();
 }
@@ -977,8 +965,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataListRegisterValues::CMICmdCmdDataListRegisterValues()
-    : m_constStrArgThread("thread")
-    , m_constStrArgSkip("skip-unavailable")
+    : m_constStrArgSkip("skip-unavailable")
     , m_constStrArgFormat("fmt")
     , m_constStrArgRegNo("regno")
     , m_miValueList(true)
@@ -1288,8 +1275,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataWriteMemoryBytes::CMICmdCmdDataWriteMemoryBytes()
-    : m_constStrArgThread("thread")
-    , m_constStrArgAddr("address")
+    : m_constStrArgAddr("address")
     , m_constStrArgContents("contents")
     , m_constStrArgCount("count")
 {
@@ -1323,7 +1309,6 @@
 bool
 CMICmdCmdDataWriteMemoryBytes::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgAddr, true, true, false, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgContents, true, true, true, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgCount, false, true, false, true));
@@ -1400,8 +1385,7 @@
 // Throws:  None.
 //--
 CMICmdCmdDataWriteMemory::CMICmdCmdDataWriteMemory()
-    : m_constStrArgThread("thread")
-    , m_constStrArgOffset("o")
+    : m_constStrArgOffset("o")
     , m_constStrArgAddr("address")
     , m_constStrArgD("d")
     , m_constStrArgNumber("a number")
@@ -1445,7 +1429,6 @@
 bool
 CMICmdCmdDataWriteMemory::ParseArgs()
 {
-    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, false, false, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgOffset, false, true, CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgAddr, true, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgD, true, true));
Index: tools/lldb-mi/MICmdCmdBreak.h
===================================================================
--- tools/lldb-mi/MICmdCmdBreak.h
+++ tools/lldb-mi/MICmdCmdBreak.h
@@ -95,7 +95,6 @@
     const CMIUtilString m_constStrArgNamedInoreCnt;
     const CMIUtilString m_constStrArgNamedRestrictBrkPtToThreadId;
     const CMIUtilString m_constStrArgNamedLocation;
-    const CMIUtilString m_constStrArgNamedThreadGroup; // Not specified in MI spec but Eclipse gives this option sometimes
 };
 
 //++ ============================================================================
@@ -125,7 +124,6 @@
     // Attributes:
   private:
     const CMIUtilString m_constStrArgNamedBrkPt;
-    const CMIUtilString m_constStrArgNamedThreadGrp; // Not specified in MI spec but Eclipse gives this option
 };
 
 //++ ============================================================================
@@ -154,7 +152,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgNamedThreadGrp; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNamedBrkPt;
     bool m_bBrkPtDisabledOk;
     MIuint m_nBrkPtId;
@@ -186,7 +183,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgNamedThreadGrp; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNamedBrkPt;
     bool m_bBrkPtEnabledOk;
     MIuint m_nBrkPtId;
@@ -218,7 +214,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgNamedThreadGrp; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNamedNumber;
     const CMIUtilString m_constStrArgNamedCount;
     MIuint m_nBrkPtId;
@@ -255,7 +250,6 @@
 
     // Attributes:
   private:
-    const CMIUtilString m_constStrArgNamedThreadGrp; // Not specified in MI spec but Eclipse gives this option
     const CMIUtilString m_constStrArgNamedNumber;
     const CMIUtilString m_constStrArgNamedExpr;
     const CMIUtilString m_constStrArgNamedExprNoQuotes; // Not specified in MI spec, we need to handle expressions not surrounded by quotes
Index: tools/lldb-mi/MICmdCmdBreak.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdBreak.cpp
+++ tools/lldb-mi/MICmdCmdBreak.cpp
@@ -57,7 +57,6 @@
     , m_constStrArgNamedInoreCnt("i")
     , m_constStrArgNamedRestrictBrkPtToThreadId("p")
     , m_constStrArgNamedLocation("location")
-    , m_constStrArgNamedThreadGroup("thread-group")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "break-insert";
@@ -102,8 +101,6 @@
     m_setCmdArgs.Add(new CMICmdArgValOptionShort(m_constStrArgNamedRestrictBrkPtToThreadId, false, true,
                                                    CMICmdArgValListBase::eArgValType_Number, 1));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedLocation, false, true));
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGroup, false, true, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     return ParseValidateCmdOptions();
 }
 
@@ -139,7 +136,7 @@
 CMICmdCmdBreakInsert::Execute()
 {
     CMICMDBASE_GETOPTION(pArgTempBrkPt, OptionShort, m_constStrArgNamedTempBrkPt);
-    CMICMDBASE_GETOPTION(pArgThreadGroup, OptionLong, m_constStrArgNamedThreadGroup);
+    CMICMDBASE_GETOPTION(pArgThreadGroup, OptionLong, m_constStrArgThreadGroup);
     CMICMDBASE_GETOPTION(pArgLocation, String, m_constStrArgNamedLocation);
     CMICMDBASE_GETOPTION(pArgIgnoreCnt, OptionShort, m_constStrArgNamedInoreCnt);
     CMICMDBASE_GETOPTION(pArgPendingBrkPt, OptionShort, m_constStrArgNamedPendinfBrkPt);
@@ -372,7 +369,6 @@
 //--
 CMICmdCmdBreakDelete::CMICmdCmdBreakDelete()
     : m_constStrArgNamedBrkPt("breakpoint")
-    , m_constStrArgNamedThreadGrp("thread-group")
 {
     // Command factory matches this name with that received from the stdin stream
     m_strMiCmd = "break-delete";
@@ -404,8 +400,6 @@
 bool
 CMICmdCmdBreakDelete::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true, CMICmdArgValListBase::eArgValType_Number));
     return ParseValidateCmdOptions();
 }
@@ -488,8 +482,7 @@
 // Throws:  None.
 //--
 CMICmdCmdBreakDisable::CMICmdCmdBreakDisable()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedBrkPt("breakpoint")
+    : m_constStrArgNamedBrkPt("breakpoint")
     , m_bBrkPtDisabledOk(false)
     , m_nBrkPtId(0)
 {
@@ -523,8 +516,6 @@
 bool
 CMICmdCmdBreakDisable::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true, CMICmdArgValListBase::eArgValType_Number));
     return ParseValidateCmdOptions();
 }
@@ -627,8 +618,7 @@
 // Throws:  None.
 //--
 CMICmdCmdBreakEnable::CMICmdCmdBreakEnable()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedBrkPt("breakpoint")
+    : m_constStrArgNamedBrkPt("breakpoint")
     , m_bBrkPtEnabledOk(false)
     , m_nBrkPtId(0)
 {
@@ -662,8 +652,6 @@
 bool
 CMICmdCmdBreakEnable::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgNamedBrkPt, true, true, CMICmdArgValListBase::eArgValType_Number));
     return ParseValidateCmdOptions();
 }
@@ -766,8 +754,7 @@
 // Throws:  None.
 //--
 CMICmdCmdBreakAfter::CMICmdCmdBreakAfter()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedNumber("number")
+    : m_constStrArgNamedNumber("number")
     , m_constStrArgNamedCount("count")
     , m_nBrkPtId(0)
     , m_nBrkPtCount(0)
@@ -802,8 +789,6 @@
 bool
 CMICmdCmdBreakAfter::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNamedNumber, true, true));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNamedCount, true, true));
     return ParseValidateCmdOptions();
@@ -896,8 +881,7 @@
 // Throws:  None.
 //--
 CMICmdCmdBreakCondition::CMICmdCmdBreakCondition()
-    : m_constStrArgNamedThreadGrp("thread-group")
-    , m_constStrArgNamedNumber("number")
+    : m_constStrArgNamedNumber("number")
     , m_constStrArgNamedExpr("expr")
     , m_constStrArgNamedExprNoQuotes(
           "expression not surround by quotes") // Not specified in MI spec, we need to handle expressions not surrounded by quotes
@@ -933,8 +917,6 @@
 bool
 CMICmdCmdBreakCondition::ParseArgs()
 {
-    m_setCmdArgs.Add(
-        new CMICmdArgValOptionLong(m_constStrArgNamedThreadGrp, false, false, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
     m_setCmdArgs.Add(new CMICmdArgValNumber(m_constStrArgNamedNumber, true, true));
     m_setCmdArgs.Add(new CMICmdArgValString(m_constStrArgNamedExpr, true, true, true, true));
     m_setCmdArgs.Add(new CMICmdArgValListOfN(m_constStrArgNamedExprNoQuotes, false, false,
Index: tools/lldb-mi/MICmdBase.h
===================================================================
--- tools/lldb-mi/MICmdBase.h
+++ tools/lldb-mi/MICmdBase.h
@@ -65,6 +65,7 @@
     virtual CMICmdFactory::CmdCreatorFnPtr GetCmdCreatorFn() const;
 
     virtual MIuint GetGUID();
+    void ParseCommonArgs();
 
     // Overrideable:
   public:
@@ -94,6 +95,15 @@
     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;
+
+    // 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;
 };
 
 //++ ------------------------------------------------------------------------------------
Index: tools/lldb-mi/MICmdBase.cpp
===================================================================
--- tools/lldb-mi/MICmdBase.cpp
+++ tools/lldb-mi/MICmdBase.cpp
@@ -11,6 +11,7 @@
 #include "MICmdBase.h"
 #include "MICmnMIValueConst.h"
 #include "MICmnLLDBDebugSessionInfo.h"
+#include "MICmdArgValOptionLong.h"
 
 //++ ------------------------------------------------------------------------------------
 // Details: CMICmdBase constructor.
@@ -23,6 +24,12 @@
     : m_pSelfCreatorFn(nullptr)
     , m_rLLDBDebugSessionInfo(CMICmnLLDBDebugSessionInfo::Instance())
     , m_bHasResultRecordExtra(false)
+    , m_constStrArgThreadGroup("thread-group")
+    , m_constStrArgThread("thread")
+    , m_constStrArgFrame("frame")
+    , m_ThreadGrpArgMandatory(false)
+    , m_ThreadArgMandatory(false)
+    , m_FrameArgMandatory(false)
 {
 }
 
@@ -79,6 +86,20 @@
 }
 
 //++ ------------------------------------------------------------------------------------
+// Details: Help parse the arguments that are common to all commands.
+// Args:    None.
+// Return:  None
+// Throws:  None.
+//--
+void
+CMICmdBase::ParseCommonArgs()
+{
+    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThreadGroup, m_ThreadGrpArgMandatory, true, CMICmdArgValListBase::eArgValType_ThreadGrp, 1));
+    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgThread, m_ThreadArgMandatory, true, CMICmdArgValListBase::eArgValType_Number, 1));
+    m_setCmdArgs.Add(new CMICmdArgValOptionLong(m_constStrArgFrame, m_FrameArgMandatory, true, CMICmdArgValListBase::eArgValType_Number, 1));
+}
+
+//++ ------------------------------------------------------------------------------------
 // Details: The invoker requires this function. A command must be given working data and
 //          provide data about its status or provide information to other objects.
 // Type:    Overridden.
Index: packages/Python/lldbsuite/test/tools/lldb-mi/stack/TestMiStack.py
===================================================================
--- packages/Python/lldbsuite/test/tools/lldb-mi/stack/TestMiStack.py
+++ packages/Python/lldbsuite/test/tools/lldb-mi/stack/TestMiStack.py
@@ -441,7 +441,7 @@
 
         # Test that -stack-select-frame requires 1 mandatory argument
         self.runCmd("-stack-select-frame")
-        self.expect("\^error,msg=\"Command 'stack-select-frame'\. Command Args\. Validation failed. Mandatory args not found: frame\"")
+        self.expect("\^error,msg=\"Command 'stack-select-frame'\. Command Args\. Validation failed. Mandatory args not found: frame_id\"")
 
         # Test that -stack-select-frame fails on invalid frame number
         self.runCmd("-stack-select-frame 99")
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to