diff options
author | emaste <emaste@FreeBSD.org> | 2015-02-06 21:38:51 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2015-02-06 21:38:51 +0000 |
commit | 0c2019f4ca6b2dc6d710f6bb16a0e3ed10271531 (patch) | |
tree | 09bc83f73246ee3c7a779605cd0122093d2a8a19 /tools/lldb-mi/MICmdInterpreter.cpp | |
parent | 01ee1789d6aa7294e5966a97f8d29387f6f81699 (diff) | |
download | FreeBSD-src-0c2019f4ca6b2dc6d710f6bb16a0e3ed10271531.zip FreeBSD-src-0c2019f4ca6b2dc6d710f6bb16a0e3ed10271531.tar.gz |
Import LLDB as of upstream SVN r225923 (git 2b588ecd)
This corresponds with the branchpoint for the 3.6 release.
A number of files not required for the FreeBSD build have been removed.
Sponsored by: DARPA, AFRL
Diffstat (limited to 'tools/lldb-mi/MICmdInterpreter.cpp')
-rw-r--r-- | tools/lldb-mi/MICmdInterpreter.cpp | 442 |
1 files changed, 225 insertions, 217 deletions
diff --git a/tools/lldb-mi/MICmdInterpreter.cpp b/tools/lldb-mi/MICmdInterpreter.cpp index dd5b281..33db4b8 100644 --- a/tools/lldb-mi/MICmdInterpreter.cpp +++ b/tools/lldb-mi/MICmdInterpreter.cpp @@ -8,15 +8,15 @@ //===----------------------------------------------------------------------===// //++ -// File: MICmdInterpreter.cpp +// File: MICmdInterpreter.cpp // -// Overview: CMICmdInterpreter implementation. +// Overview: CMICmdInterpreter implementation. // -// Environment: Compilers: Visual C++ 12. -// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 -// Libraries: See MIReadmetxt. +// Environment: Compilers: Visual C++ 12. +// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 +// Libraries: See MIReadmetxt. // -// Copyright: None. +// Copyright: None. //-- // In-house headers: @@ -24,278 +24,286 @@ #include "MICmdFactory.h" //++ ------------------------------------------------------------------------------------ -// Details: CMICmdInterpreter constructor. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. +// Details: CMICmdInterpreter constructor. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. //-- -CMICmdInterpreter::CMICmdInterpreter( void ) -: m_rCmdFactory( CMICmdFactory::Instance() ) +CMICmdInterpreter::CMICmdInterpreter(void) + : m_rCmdFactory(CMICmdFactory::Instance()) { } //++ ------------------------------------------------------------------------------------ -// Details: CMICmdInterpreter destructor. -// Type: Overridable. -// Args: None. -// Return: None. -// Throws: None. +// Details: CMICmdInterpreter destructor. +// Type: Overridable. +// Args: None. +// Return: None. +// Throws: None. //-- -CMICmdInterpreter::~CMICmdInterpreter( void ) +CMICmdInterpreter::~CMICmdInterpreter(void) { - Shutdown(); + Shutdown(); } //++ ------------------------------------------------------------------------------------ -// Details: Initialize resources for *this Command Interpreter. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// 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( void ) +bool +CMICmdInterpreter::Initialize(void) { - m_clientUsageRefCnt++; + 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. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// 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( void ) +bool +CMICmdInterpreter::Shutdown(void) { - if( --m_clientUsageRefCnt > 0 ) - return MIstatus::success; - - if( !m_bInitialized ) - return MIstatus::success; + if (--m_clientUsageRefCnt > 0) + return MIstatus::success; - m_bInitialized = false; + if (!m_bInitialized) + return MIstatus::success; - 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. +// 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 ) +bool +CMICmdInterpreter::ValidateIsMi(const CMIUtilString &vTextLine, bool &vwbYesValid, bool &vwbCmdNotInCmdFactor, SMICmdData &rwCmdData) { - vwbYesValid = false; - vwbCmdNotInCmdFactor = false; - rwCmdData.Clear(); + vwbYesValid = false; + vwbCmdNotInCmdFactor = false; + rwCmdData.Clear(); - if( vTextLine.empty() ) - return MIstatus::success; + 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) + // 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; + m_miCmdData.Clear(); + m_miCmdData.strMiCmd = vTextLine; - // The following change m_miCmdData as valid parts are indentified - vwbYesValid = (MiHasCmdTokenEndingHypthen( vTextLine ) || MiHasCmdTokenEndingAlpha( vTextLine )); - vwbYesValid = vwbYesValid && MiHasCmd( vTextLine ); - if( vwbYesValid ) - { - vwbCmdNotInCmdFactor = !HasCmdFactoryGotMiCmd( MiGetCmdData() ); - vwbYesValid = !vwbCmdNotInCmdFactor; - } + // The following change m_miCmdData as valid parts are indentified + vwbYesValid = (MiHasCmdTokenEndingHypthen(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; + // Update command's meta data valid state + m_miCmdData.bCmdValid = vwbYesValid; - // Ok to return new updated command information - rwCmdData = MiGetCmdData(); + // Ok to return new updated command information + rwCmdData = MiGetCmdData(); - return MIstatus::success; + 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. +// 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 +bool +CMICmdInterpreter::HasCmdFactoryGotMiCmd(const SMICmdData &vCmd) const { - return m_rCmdFactory.CmdExist( vCmd.strMiCmd ); + 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. +// 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::MiHasCmdTokenEndingHypthen( const CMIUtilString & vTextLine ) +bool +CMICmdInterpreter::MiHasCmdTokenEndingHypthen(const CMIUtilString &vTextLine) { - // The hythen is mandatory - const MIint nPos = vTextLine.find( "-", 0 ); - if( (nPos == (MIint) std::string::npos) ) - return false; - - if( MiHasCmdTokenPresent( vTextLine ) ) - { - const std::string strNum = vTextLine.substr( 0, nPos ); - if( !CMIUtilString( strNum.c_str() ).IsNumber() ) - return false; - - m_miCmdData.strMiCmdToken = strNum.c_str(); - } - - m_miCmdData.bMIOldStyle = false; - - return true; + // The hythen is mandatory + const MIint nPos = vTextLine.find("-", 0); + if ((nPos == (MIint)std::string::npos)) + return false; + + if (MiHasCmdTokenPresent(vTextLine)) + { + const std::string strNum = vTextLine.substr(0, nPos); + if (!CMIUtilString(strNum.c_str()).IsNumber()) + return false; + + m_miCmdData.strMiCmdToken = strNum.c_str(); + } + + 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. +// 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 ) +bool +CMICmdInterpreter::MiHasCmdTokenEndingAlpha(const CMIUtilString &vTextLine) { - MIchar 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; + MIchar 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 hypen? -// Type: Method. -// Args: vTextLine - (R) Text data to interpret. -// Return: bool - True = yes command token present, false = token not present. -// Throws: None. +// Details: Does the command entered match the criteria for a MI command format. +// Is the command token present before the hypen? +// 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 ) +bool +CMICmdInterpreter::MiHasCmdTokenPresent(const CMIUtilString &vTextLine) { - const MIint nPos = vTextLine.find( "-", 0 ); - return (nPos > 0); + const MIint nPos = vTextLine.find("-", 0); + return (nPos > 0); } //++ ------------------------------------------------------------------------------------ -// Details: Does the command name entered match the criteria for a MI command format. -// Is a recogised 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. +// Details: Does the command name entered match the criteria for a MI command format. +// Is a recogised 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 ) +bool +CMICmdInterpreter::MiHasCmd(const CMIUtilString &vTextLine) { - MIint nPos = 0; - if( m_miCmdData.bMIOldStyle ) - { - char cChar = vTextLine[ 0 ]; - MIuint i = 0; - while( ::isdigit( cChar ) != 0 ) - { - cChar = vTextLine[ ++i ]; - } - nPos = --i; - } - else - { - nPos = vTextLine.find( "-", 0 ); - } - - bool bFoundCmd = false; - const MIint nLen = vTextLine.length(); - const MIint nPos2 = vTextLine.find( " ", nPos ); - if( nPos2 != (MIint) std::string::npos ) - { - if( nPos2 == nLen ) - return false; - const CMIUtilString cmd = CMIUtilString( vTextLine.substr( nPos + 1, nPos2 - nPos - 1 ).c_str() ); - if( cmd.empty() ) - return false; - - m_miCmdData.strMiCmd = cmd; - - if( nPos2 < nLen ) - m_miCmdData.strMiCmdOption = CMIUtilString( vTextLine.substr( nPos2 + 1, nLen - nPos2 - 1 ).c_str() ); - - bFoundCmd = true; - } - else - { - const CMIUtilString cmd = CMIUtilString( vTextLine.substr( nPos + 1, nLen - nPos - 1 ).c_str() ); - if( cmd.empty() ) - return false; - m_miCmdData.strMiCmd = cmd; - bFoundCmd = true; - } - - if( bFoundCmd ) - m_miCmdData.strMiCmdAll = vTextLine; - - return bFoundCmd; + MIint nPos = 0; + if (m_miCmdData.bMIOldStyle) + { + char cChar = vTextLine[0]; + MIuint i = 0; + while (::isdigit(cChar) != 0) + { + cChar = vTextLine[++i]; + } + nPos = --i; + } + else + { + nPos = vTextLine.find("-", 0); + } + + bool bFoundCmd = false; + const MIint nLen = vTextLine.length(); + const MIint nPos2 = vTextLine.find(" ", nPos); + if (nPos2 != (MIint)std::string::npos) + { + if (nPos2 == nLen) + return false; + const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nPos2 - nPos - 1).c_str()); + if (cmd.empty()) + return false; + + m_miCmdData.strMiCmd = cmd; + + if (nPos2 < nLen) + m_miCmdData.strMiCmdOption = CMIUtilString(vTextLine.substr(nPos2 + 1, nLen - nPos2 - 1).c_str()); + + bFoundCmd = true; + } + else + { + const CMIUtilString cmd = CMIUtilString(vTextLine.substr(nPos + 1, nLen - nPos - 1).c_str()); + 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. +// 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( void ) const +const SMICmdData & +CMICmdInterpreter::MiGetCmdData(void) const { - return m_miCmdData; + return m_miCmdData; } - |