]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Interpreter/CommandObjectMultiword.h
MFV r331712:
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Interpreter / CommandObjectMultiword.h
1 //===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_CommandObjectMultiword_h_
11 #define liblldb_CommandObjectMultiword_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Interpreter/CommandObject.h"
18
19 namespace lldb_private {
20
21 //-------------------------------------------------------------------------
22 // CommandObjectMultiword
23 //-------------------------------------------------------------------------
24
25 class CommandObjectMultiword : public CommandObject {
26   // These two want to iterate over the subcommand dictionary.
27   friend class CommandInterpreter;
28   friend class CommandObjectSyntax;
29
30 public:
31   CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
32                          const char *help = nullptr,
33                          const char *syntax = nullptr, uint32_t flags = 0);
34
35   ~CommandObjectMultiword() override;
36
37   bool IsMultiwordObject() override { return true; }
38
39   CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
40
41   bool LoadSubCommand(llvm::StringRef cmd_name,
42                       const lldb::CommandObjectSP &command_obj) override;
43
44   void GenerateHelpText(Stream &output_stream) override;
45
46   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
47                                         StringList *matches = nullptr) override;
48
49   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
50                                      StringList *matches = nullptr) override;
51
52   void AproposAllSubCommands(llvm::StringRef prefix,
53                              llvm::StringRef search_word,
54                              StringList &commands_found,
55                              StringList &commands_help) override;
56
57   bool WantsRawCommandString() override { return false; }
58
59   int HandleCompletion(Args &input, int &cursor_index,
60                        int &cursor_char_position, int match_start_point,
61                        int max_return_elements, bool &word_complete,
62                        StringList &matches) override;
63
64   const char *GetRepeatCommand(Args &current_command_args,
65                                uint32_t index) override;
66
67   bool Execute(const char *args_string, CommandReturnObject &result) override;
68
69   bool IsRemovable() const override { return m_can_be_removed; }
70
71   void SetRemovable(bool removable) { m_can_be_removed = removable; }
72
73 protected:
74   CommandObject::CommandMap &GetSubcommandDictionary() {
75     return m_subcommand_dict;
76   }
77
78   CommandObject::CommandMap m_subcommand_dict;
79   bool m_can_be_removed;
80 };
81
82 class CommandObjectProxy : public CommandObject {
83 public:
84   CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
85                      const char *help = nullptr, const char *syntax = nullptr,
86                      uint32_t flags = 0);
87
88   ~CommandObjectProxy() override;
89
90   // Subclasses must provide a command object that will be transparently
91   // used for this object.
92   virtual CommandObject *GetProxyCommandObject() = 0;
93
94   llvm::StringRef GetHelpLong() override;
95
96   bool IsRemovable() const override;
97
98   bool IsMultiwordObject() override;
99
100   CommandObjectMultiword *GetAsMultiwordCommand() override;
101
102   void GenerateHelpText(Stream &result) override;
103
104   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
105                                         StringList *matches = nullptr) override;
106
107   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
108                                      StringList *matches = nullptr) override;
109
110   void AproposAllSubCommands(llvm::StringRef prefix,
111                              llvm::StringRef search_word,
112                              StringList &commands_found,
113                              StringList &commands_help) override;
114
115   bool LoadSubCommand(llvm::StringRef cmd_name,
116                       const lldb::CommandObjectSP &command_obj) override;
117
118   bool WantsRawCommandString() override;
119
120   bool WantsCompletion() override;
121
122   Options *GetOptions() override;
123
124   int HandleCompletion(Args &input, int &cursor_index,
125                        int &cursor_char_position, int match_start_point,
126                        int max_return_elements, bool &word_complete,
127                        StringList &matches) override;
128
129   int HandleArgumentCompletion(Args &input, int &cursor_index,
130                                int &cursor_char_position,
131                                OptionElementVector &opt_element_vector,
132                                int match_start_point, int max_return_elements,
133                                bool &word_complete,
134                                StringList &matches) override;
135
136   const char *GetRepeatCommand(Args &current_command_args,
137                                uint32_t index) override;
138
139   bool Execute(const char *args_string, CommandReturnObject &result) override;
140
141 protected:
142   // These two want to iterate over the subcommand dictionary.
143   friend class CommandInterpreter;
144   friend class CommandObjectSyntax;
145 };
146
147 } // namespace lldb_private
148
149 #endif // liblldb_CommandObjectMultiword_h_