diff options
Diffstat (limited to 'tools/lldb-mi/MICmdInterpreter.cpp')
-rw-r--r-- | tools/lldb-mi/MICmdInterpreter.cpp | 290 |
1 files changed, 0 insertions, 290 deletions
diff --git a/tools/lldb-mi/MICmdInterpreter.cpp b/tools/lldb-mi/MICmdInterpreter.cpp deleted file mode 100644 index 9e37ac2d61089..0000000000000 --- a/tools/lldb-mi/MICmdInterpreter.cpp +++ /dev/null @@ -1,290 +0,0 @@ -//===-- MICmdInterpreter.cpp ------------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// In-house headers: -#include "MICmdInterpreter.h" -#include "MICmdFactory.h" - -//++ -// Details: CMICmdInterpreter constructor. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -CMICmdInterpreter::CMICmdInterpreter() - : m_rCmdFactory(CMICmdFactory::Instance()) {} - -//++ -// Details: CMICmdInterpreter destructor. -// Type: Overridable. -// Args: None. -// Return: None. -// Throws: None. -//-- -CMICmdInterpreter::~CMICmdInterpreter() { Shutdown(); } - -//++ -// Details: Initialize resources for *this Command Interpreter. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMICmdInterpreter::Initialize() { - m_clientUsageRefCnt++; - - if (m_bInitialized) - return MIstatus::success; - - m_bInitialized = true; - - return MIstatus::success; -} - -//++ -// Details: Release resources for *this Command Interpreter. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMICmdInterpreter::Shutdown() { - if (--m_clientUsageRefCnt > 0) - return MIstatus::success; - - if (!m_bInitialized) - return MIstatus::success; - - m_bInitialized = false; - - 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. -// 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; - } - - // 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 -// the MI driver. -// Type: Method. -// Args: vCmd - (R) Command information structure. -// 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); -} - -//++ -// 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. -// 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 -// command execution purposes. -// Type: Method. -// Args: vTextLine - (R) Text data to interpret. -// 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; - } - - 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. -// '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 -// command execution purposes. -// Type: Method. -// Args: vTextLine - (R) Text data to interpret. -// 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; -} - -//++ -// Details: Does the command entered match the criteria for a MI command format. -// Is the command token present before the hyphen? -// Type: Method. -// Args: vTextLine - (R) Text data to interpret. -// 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); -} - -//++ -// 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. -// 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; - } - - if (bFoundCmd) - m_miCmdData.strMiCmdAll = vTextLine; - - return bFoundCmd; -} - -//++ -// 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; -} |