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 &current_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 &current_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)