124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_CommandObjectMultiword_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_CommandObjectMultiword_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandObject.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiword 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectMultiword : public CommandObject 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 29da26bd203cbb104291b39891febf7481794f205fJim Ingham// These two want to iterate over the subcommand dictionary. 30da26bd203cbb104291b39891febf7481794f205fJim Inghamfriend class CommandInterpreter; 31da26bd203cbb104291b39891febf7481794f205fJim Inghamfriend class CommandObjectSyntax; 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 33238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectMultiword (CommandInterpreter &interpreter, 34238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char *name, 3563094e0bb161580564954dee512955c1c79d3476Greg Clayton const char *help = NULL, 3663094e0bb161580564954dee512955c1c79d3476Greg Clayton const char *syntax = NULL, 3763094e0bb161580564954dee512955c1c79d3476Greg Clayton uint32_t flags = 0); 3863094e0bb161580564954dee512955c1c79d3476Greg Clayton 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectMultiword (); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsMultiwordObject () { return true; } 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 456d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata virtual bool 46238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand (const char *cmd_name, 4763094e0bb161580564954dee512955c1c79d3476Greg Clayton const lldb::CommandObjectSP& command_obj); 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual void 50035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata GenerateHelpText (Stream &output_stream); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual lldb::CommandObjectSP 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual CommandObject * 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual void 5913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton AproposAllSubCommands (const char *prefix, 6013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *search_word, 6113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &commands_found, 6213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &commands_help); 6313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 65da26bd203cbb104291b39891febf7481794f205fJim Ingham WantsRawCommandString() { return false; }; 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual int 68238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton HandleCompletion (Args &input, 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int &cursor_index, 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int &cursor_char_position, 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int match_start_point, 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int max_return_elements, 73802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham bool &word_complete, 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringList &matches); 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 76767af88aa617288e584afcfed055f7755e408542Jim Ingham virtual const char *GetRepeatCommand (Args ¤t_command_args, uint32_t index); 77767af88aa617288e584afcfed055f7755e408542Jim Ingham 78da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual bool 79da26bd203cbb104291b39891febf7481794f205fJim Ingham Execute (const char *args_string, 80da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandReturnObject &result); 816d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 826d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata virtual bool 83f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton IsRemovable() const { return m_can_be_removed; } 846d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 856d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata void 866d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata SetRemovable (bool removable) 876d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata { 886d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata m_can_be_removed = removable; 896d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata } 906d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 91da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 92da26bd203cbb104291b39891febf7481794f205fJim Ingham 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject::CommandMap m_subcommand_dict; 946d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata bool m_can_be_removed; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 9813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonclass CommandObjectProxy : public CommandObject 9913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{ 10013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonpublic: 10113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton CommandObjectProxy (CommandInterpreter &interpreter, 10213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *name, 10313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *help = NULL, 10413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *syntax = NULL, 10513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton uint32_t flags = 0); 10613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 10713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual 10813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton ~CommandObjectProxy (); 10913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 11013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton // Subclasses must provide a command object that will be transparently 11113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton // used for this object. 11213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual CommandObject * 11313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetProxyCommandObject() = 0; 11413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 11513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual const char * 11613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetHelpLong (); 11713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 11813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 11913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton IsRemovable() const; 12013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 12113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 12213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton IsMultiwordObject (); 12313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 12413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual lldb::CommandObjectSP 12513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL); 12613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 12713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual CommandObject * 12813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL); 12913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 13013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual void 13113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton AproposAllSubCommands (const char *prefix, 13213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *search_word, 13313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &commands_found, 13413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &commands_help); 13513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 13613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 13713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton LoadSubCommand (const char *cmd_name, 13813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const lldb::CommandObjectSP& command_obj); 13913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 14013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 14113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton WantsRawCommandString(); 14213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 14313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 14413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton WantsCompletion(); 14513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 14613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual Options * 14713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetOptions (); 14813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 14913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 15013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual int 15113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton HandleCompletion (Args &input, 15213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int &cursor_index, 15313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int &cursor_char_position, 15413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int match_start_point, 15513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int max_return_elements, 15613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton bool &word_complete, 15713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &matches); 15813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 15913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual int 16013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton HandleArgumentCompletion (Args &input, 16113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int &cursor_index, 16213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int &cursor_char_position, 16313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton OptionElementVector &opt_element_vector, 16413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int match_start_point, 16513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton int max_return_elements, 16613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton bool &word_complete, 16713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton StringList &matches); 16813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 16913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual const char * 17013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton GetRepeatCommand (Args ¤t_command_args, 17113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton uint32_t index); 17213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 17313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton virtual bool 17413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton Execute (const char *args_string, 17513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton CommandReturnObject &result); 17613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 17713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonprotected: 17813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 17913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton // These two want to iterate over the subcommand dictionary. 18013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton friend class CommandInterpreter; 18113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton friend class CommandObjectSyntax; 18213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 18313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}; 18413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_CommandObjectMultiword_h_ 188