15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef liblldb_CommandObjectMultiword_h_ 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define liblldb_CommandObjectMultiword_h_ 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)// C Includes 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// C++ Includes 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Other libraries and framework includes 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Project includes 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Interpreter/CommandObject.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace lldb_private { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch//------------------------------------------------------------------------- 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CommandObjectMultiword 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//------------------------------------------------------------------------- 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandObjectMultiword : public CommandObject 28a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles){ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These two want to iterate over the subcommand dictionary. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)friend class CommandInterpreter; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)friend class CommandObjectSyntax; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandObjectMultiword (CommandInterpreter &interpreter, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *name, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *help = NULL, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *syntax = NULL, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t flags = 0); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ~CommandObjectMultiword (); 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsMultiwordObject () { return true; } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LoadSubCommand (const char *cmd_name, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const lldb::CommandObjectSP& command_obj); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GenerateHelpText (Stream &output_stream); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual lldb::CommandObjectSP 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual CommandObject * 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AproposAllSubCommands (const char *prefix, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char *search_word, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringList &commands_found, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StringList &commands_help); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WantsRawCommandString() { return false; }; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleCompletion (Args &input, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int &cursor_index, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &cursor_char_position, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_start_point, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_return_elements, 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool &word_complete, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringList &matches); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const char *GetRepeatCommand (Args ¤t_command_args, uint32_t index); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Execute (const char *args_string, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandReturnObject &result); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsRemovable() const { return m_can_be_removed; } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRemovable (bool removable) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_can_be_removed = removable; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandObject::CommandMap m_subcommand_dict; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool m_can_be_removed; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandObjectProxy : public CommandObject 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandObjectProxy (CommandInterpreter &interpreter, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *name, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *help = NULL, 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char *syntax = NULL, 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t flags = 0); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~CommandObjectProxy (); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subclasses must provide a command object that will be transparently 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used for this object. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual CommandObject * 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProxyCommandObject() = 0; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const char * 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHelpLong (); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsRemovable() const; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsMultiwordObject (); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual lldb::CommandObjectSP 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual CommandObject * 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AproposAllSubCommands (const char *prefix, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *search_word, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StringList &commands_found, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringList &commands_help); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadSubCommand (const char *cmd_name, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const lldb::CommandObjectSP& command_obj); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual bool 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WantsRawCommandString(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WantsCompletion(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Options * 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOptions (); 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleCompletion (Args &input, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &cursor_index, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &cursor_char_position, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_start_point, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_return_elements, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool &word_complete, 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StringList &matches); 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleArgumentCompletion (Args &input, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &cursor_index, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int &cursor_char_position, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OptionElementVector &opt_element_vector, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_start_point, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_return_elements, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool &word_complete, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringList &matches); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const char * 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRepeatCommand (Args ¤t_command_args, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t index); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool 174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Execute (const char *args_string, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandReturnObject &result); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These two want to iterate over the subcommand dictionary. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class CommandInterpreter; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class CommandObjectSyntax; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace lldb_private 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // liblldb_CommandObjectMultiword_h_ 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)