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