aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lldb-mi/MICmdInterpreter.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-02 19:26:05 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-02 19:26:05 +0000
commit14f1b3e8826ce43b978db93a62d1166055db5394 (patch)
tree0a00ad8d3498783fe0193f3b656bca17c4c8697d /tools/lldb-mi/MICmdInterpreter.cpp
parent4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff)
downloadsrc-14f1b3e8826ce43b978db93a62d1166055db5394.tar.gz
src-14f1b3e8826ce43b978db93a62d1166055db5394.zip
Vendor import of lldb trunk r290819:vendor/lldb/lldb-trunk-r290819
Notes
Notes: svn path=/vendor/lldb/dist/; revision=311128 svn path=/vendor/lldb/lldb-trunk-r290819/; revision=311129; tag=vendor/lldb/lldb-trunk-r290819
Diffstat (limited to 'tools/lldb-mi/MICmdInterpreter.cpp')
-rw-r--r--tools/lldb-mi/MICmdInterpreter.cpp369
1 files changed, 187 insertions, 182 deletions
diff --git a/tools/lldb-mi/MICmdInterpreter.cpp b/tools/lldb-mi/MICmdInterpreter.cpp
index 1abcc9a3f427..8dd99ed5e670 100644
--- a/tools/lldb-mi/MICmdInterpreter.cpp
+++ b/tools/lldb-mi/MICmdInterpreter.cpp
@@ -11,7 +11,8 @@
#include "MICmdInterpreter.h"
#include "MICmdFactory.h"
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInterpreter constructor.
// Type: Method.
// Args: None.
@@ -19,23 +20,20 @@
// Throws: None.
//--
CMICmdInterpreter::CMICmdInterpreter()
- : m_rCmdFactory(CMICmdFactory::Instance())
-{
-}
+ : m_rCmdFactory(CMICmdFactory::Instance()) {}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: CMICmdInterpreter destructor.
// Type: Overridable.
// Args: None.
// Return: None.
// Throws: None.
//--
-CMICmdInterpreter::~CMICmdInterpreter()
-{
- Shutdown();
-}
+CMICmdInterpreter::~CMICmdInterpreter() { Shutdown(); }
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Initialize resources for *this Command Interpreter.
// Type: Method.
// Args: None.
@@ -43,20 +41,19 @@ CMICmdInterpreter::~CMICmdInterpreter()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::Initialize()
-{
- m_clientUsageRefCnt++;
+bool CMICmdInterpreter::Initialize() {
+ m_clientUsageRefCnt++;
- if (m_bInitialized)
- return MIstatus::success;
+ if (m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = true;
+ m_bInitialized = true;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Release resources for *this Command Interpreter.
// Type: Method.
// Args: None.
@@ -64,147 +61,157 @@ CMICmdInterpreter::Initialize()
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::Shutdown()
-{
- if (--m_clientUsageRefCnt > 0)
- return MIstatus::success;
+bool CMICmdInterpreter::Shutdown() {
+ if (--m_clientUsageRefCnt > 0)
+ return MIstatus::success;
- if (!m_bInitialized)
- return MIstatus::success;
+ if (!m_bInitialized)
+ return MIstatus::success;
- m_bInitialized = false;
+ m_bInitialized = false;
- return MIstatus::success;
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Establish whether the text data is an MI format type command.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// vwbYesValid - (W) True = MI type command, false = not recognised.
-// vwbCmdNotInCmdFactor - (W) True = MI command not found in the command factory, false = recognised.
+// vwbYesValid - (W) True = MI type command, false = not
+// recognised.
+// vwbCmdNotInCmdFactor - (W) True = MI command not found in the
+// command factory, false = recognised.
// Return: MIstatus::success - Functional succeeded.
// MIstatus::failure - Functional failed.
// Throws: None.
//--
-bool
-CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData)
-{
- vwbYesValid = false;
- vwbCmdNotInCmdFactor = false;
- rwCmdData.Clear();
-
- if (vTextLine.empty())
- return MIstatus::success;
-
- // MI format is [cmd #]-[command name]<space>[command arg(s)]
- // i.e. 1-file-exec-and-symbols --thread-group i1 DEVICE_EXECUTABLE
- // 5-data-evaluate-expression --thread 1 --frame 0 *(argv)
-
- m_miCmdData.Clear();
- m_miCmdData.strMiCmd = vTextLine;
-
- // The following change m_miCmdData as valid parts are identified
- vwbYesValid = (MiHasCmdTokenEndingHyphen(vTextLine) || MiHasCmdTokenEndingAlpha(vTextLine));
- vwbYesValid = vwbYesValid && MiHasCmd(vTextLine);
- if (vwbYesValid)
- {
- vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd(MiGetCmdData());
- vwbYesValid = !vwbCmdNotInCmdFactor;
- }
+bool CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine,
+ bool &vwbYesValid,
+ bool &vwbCmdNotInCmdFactor,
+ SMICmdData &rwCmdData) {
+ vwbYesValid = false;
+ vwbCmdNotInCmdFactor = false;
+ rwCmdData.Clear();
+
+ if (vTextLine.empty())
+ return MIstatus::success;
- // Update command's meta data valid state
- m_miCmdData.bCmdValid = vwbYesValid;
+ // MI format is [cmd #]-[command name]<space>[command arg(s)]
+ // i.e. 1-file-exec-and-symbols --thread-group i1 DEVICE_EXECUTABLE
+ // 5-data-evaluate-expression --thread 1 --frame 0 *(argv)
- // Ok to return new updated command information
- rwCmdData = MiGetCmdData();
+ m_miCmdData.Clear();
+ m_miCmdData.strMiCmd = vTextLine;
- return MIstatus::success;
+ // The following change m_miCmdData as valid parts are identified
+ vwbYesValid = (MiHasCmdTokenEndingHyphen(vTextLine) ||
+ MiHasCmdTokenEndingAlpha(vTextLine));
+ vwbYesValid = vwbYesValid && MiHasCmd(vTextLine);
+ if (vwbYesValid) {
+ vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd(MiGetCmdData());
+ vwbYesValid = !vwbCmdNotInCmdFactor;
+ }
+
+ // Update command's meta data valid state
+ m_miCmdData.bCmdValid = vwbYesValid;
+
+ // Ok to return new updated command information
+ rwCmdData = MiGetCmdData();
+
+ return MIstatus::success;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Establish whether the command name entered on the stdin stream is recognised by
+//++
+//------------------------------------------------------------------------------------
+// Details: Establish whether the command name entered on the stdin stream is
+// recognised by
// the MI driver.
// Type: Method.
// Args: vCmd - (R) Command information structure.
-// Return: bool - True = yes command is recognised, false = command not recognised.
+// Return: bool - True = yes command is recognised, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const
-{
- return m_rCmdFactory.CmdExist(vCmd.strMiCmd);
+bool CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const {
+ return m_rCmdFactory.CmdExist(vCmd.strMiCmd);
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nn-' where there can be 1 to n digits.
+// The format to validate against is 'nn-' where there can be 1 to n
+// digits.
// I.e. '2-gdb-exit'.
-// Is the execution token present? The command token is entered into the
-// command meta data structure whether correct or not for reporting or later
+// Is the execution token present? The command token is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
// command execution purposes.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not recognised.
+// Return: bool - True = yes command token present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenEndingHyphen(const CMIUtilString &vTextLine)
-{
- // The hyphen is mandatory
- const size_t nPos = vTextLine.find('-', 0);
- if ((nPos == std::string::npos))
- return false;
-
- if (MiHasCmdTokenPresent(vTextLine))
- {
- const std::string strNum = vTextLine.substr(0, nPos);
- if (!CMIUtilString(strNum).IsNumber())
- return false;
-
- m_miCmdData.strMiCmdToken = strNum;
- }
+bool CMICmdInterpreter::MiHasCmdTokenEndingHyphen(
+ const CMIUtilString &vTextLine) {
+ // The hyphen is mandatory
+ const size_t nPos = vTextLine.find('-', 0);
+ if ((nPos == std::string::npos))
+ return false;
+
+ if (MiHasCmdTokenPresent(vTextLine)) {
+ const std::string strNum = vTextLine.substr(0, nPos);
+ if (!CMIUtilString(strNum).IsNumber())
+ return false;
- m_miCmdData.bMIOldStyle = false;
+ m_miCmdData.strMiCmdToken = strNum;
+ }
- return true;
+ m_miCmdData.bMIOldStyle = false;
+
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
-// The format to validate against is 'nnA' where there can be 1 to n digits.
+// The format to validate against is 'nnA' where there can be 1 to n
+// digits.
// 'A' represents any non numeric token. I.e. '1source .gdbinit'.
-// Is the execution token present? The command token is entered into the
-// command meta data structure whether correct or not for reporting or later
+// Is the execution token present? The command token is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
// command execution purposes.
// Type: Method.
// Args: vTextLine - (R) Text data to interpret.
-// Return: bool - True = yes command token present, false = command not recognised.
+// Return: bool - True = yes command token present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine)
-{
- char cChar = vTextLine[0];
- MIuint i = 0;
- while (::isdigit(cChar) != 0)
- {
- cChar = vTextLine[++i];
- }
- if (::isalpha(cChar) == 0)
- return false;
- if (i == 0)
- return false;
-
- const std::string strNum = vTextLine.substr(0, i);
- m_miCmdData.strMiCmdToken = strNum.c_str();
- m_miCmdData.bMIOldStyle = true;
-
- return true;
+bool CMICmdInterpreter::MiHasCmdTokenEndingAlpha(
+ const CMIUtilString &vTextLine) {
+ char cChar = vTextLine[0];
+ MIuint i = 0;
+ while (::isdigit(cChar) != 0) {
+ cChar = vTextLine[++i];
+ }
+ if (::isalpha(cChar) == 0)
+ return false;
+ if (i == 0)
+ return false;
+
+ const std::string strNum = vTextLine.substr(0, i);
+ m_miCmdData.strMiCmdToken = strNum.c_str();
+ m_miCmdData.bMIOldStyle = true;
+
+ return true;
}
-//++ ------------------------------------------------------------------------------------
+//++
+//------------------------------------------------------------------------------------
// Details: Does the command entered match the criteria for a MI command format.
// Is the command token present before the hyphen?
// Type: Method.
@@ -212,86 +219,84 @@ CMICmdInterpreter::MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine)
// Return: bool - True = yes command token present, false = token not present.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine)
-{
- const size_t nPos = vTextLine.find('-', 0);
- return (nPos > 0);
+bool CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine) {
+ const size_t nPos = vTextLine.find('-', 0);
+ return (nPos > 0);
}
-//++ ------------------------------------------------------------------------------------
-// Details: Does the command name entered match the criteria for a MI command format.
-// Is a recognised command present? The command name is entered into the
-// command meta data structure whether correct or not for reporting or later
-// command execution purposes. Command options is present are also put into the
+//++
+//------------------------------------------------------------------------------------
+// Details: Does the command name entered match the criteria for a MI command
+// format.
+// Is a recognised command present? The command name is entered into
+// the
+// command meta data structure whether correct or not for reporting or
+// later
+// command execution purposes. Command options is present are also put
+// into the
// command meta data structure.
// Type: Method.
// Args: vTextLine - (R) Command information structure.
-// Return: bool - True = yes command name present, false = command not recognised.
+// Return: bool - True = yes command name present, false = command not
+// recognised.
// Throws: None.
//--
-bool
-CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine)
-{
- size_t nPos = 0;
- if (m_miCmdData.bMIOldStyle)
- {
- char cChar = vTextLine[0];
- size_t i = 0;
- while (::isdigit(cChar) != 0)
- {
- cChar = vTextLine[++i];
- }
- nPos = --i;
- }
- else
- {
- nPos = vTextLine.find('-', 0);
- }
-
- bool bFoundCmd = false;
- const size_t nLen = vTextLine.length();
- const size_t nPos2 = vTextLine.find(' ', nPos);
- if (nPos2 != std::string::npos)
- {
- if (nPos2 == nLen)
- return false;
- const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1));
- if (cmd.empty())
- return false;
-
- m_miCmdData.strMiCmd = cmd;
-
- if (nPos2 < nLen)
- m_miCmdData.strMiCmdOption = CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1));
-
- bFoundCmd = true;
- }
- else
- {
- const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1));
- if (cmd.empty())
- return false;
- m_miCmdData.strMiCmd = cmd;
- bFoundCmd = true;
+bool CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine) {
+ size_t nPos = 0;
+ if (m_miCmdData.bMIOldStyle) {
+ char cChar = vTextLine[0];
+ size_t i = 0;
+ while (::isdigit(cChar) != 0) {
+ cChar = vTextLine[++i];
}
-
- if (bFoundCmd)
- m_miCmdData.strMiCmdAll = vTextLine;
-
- return bFoundCmd;
+ nPos = --i;
+ } else {
+ nPos = vTextLine.find('-', 0);
+ }
+
+ bool bFoundCmd = false;
+ const size_t nLen = vTextLine.length();
+ const size_t nPos2 = vTextLine.find(' ', nPos);
+ if (nPos2 != std::string::npos) {
+ if (nPos2 == nLen)
+ return false;
+ const CMIUtilString cmd =
+ CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1));
+ if (cmd.empty())
+ return false;
+
+ m_miCmdData.strMiCmd = cmd;
+
+ if (nPos2 < nLen)
+ m_miCmdData.strMiCmdOption =
+ CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1));
+
+ bFoundCmd = true;
+ } else {
+ const CMIUtilString cmd =
+ CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1));
+ if (cmd.empty())
+ return false;
+ m_miCmdData.strMiCmd = cmd;
+ bFoundCmd = true;
+ }
+
+ if (bFoundCmd)
+ m_miCmdData.strMiCmdAll = vTextLine;
+
+ return bFoundCmd;
}
-//++ ------------------------------------------------------------------------------------
-// Details: Retrieve the just entered new command from stdin. It contains the command
+//++
+//------------------------------------------------------------------------------------
+// Details: Retrieve the just entered new command from stdin. It contains the
+// command
// name, number and any options.
// Type: Method.
// Args: vTextLine - (R) Command information structure.
// Return: SMICmdData & - Command meta data information/result/status.
// Throws: None.
//--
-const SMICmdData &
-CMICmdInterpreter::MiGetCmdData() const
-{
- return m_miCmdData;
+const SMICmdData &CMICmdInterpreter::MiGetCmdData() const {
+ return m_miCmdData;
}