diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 |
commit | 14f1b3e8826ce43b978db93a62d1166055db5394 (patch) | |
tree | 0a00ad8d3498783fe0193f3b656bca17c4c8697d /tools/lldb-mi/MICmdInterpreter.cpp | |
parent | 4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff) | |
download | src-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.cpp | 369 |
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; } |