]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Interpreter/CommandObjectMultiword.h
Merge clang 7.0.1 and several follow-up changes
[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 #include "lldb/Utility/CompletionRequest.h"
19
20 namespace lldb_private {
21
22 //-------------------------------------------------------------------------
23 // CommandObjectMultiword
24 //-------------------------------------------------------------------------
25
26 class CommandObjectMultiword : public CommandObject {
27   // These two want to iterate over the subcommand dictionary.
28   friend class CommandInterpreter;
29   friend class CommandObjectSyntax;
30
31 public:
32   CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
33                          const char *help = nullptr,
34                          const char *syntax = nullptr, uint32_t flags = 0);
35
36   ~CommandObjectMultiword() override;
37
38   bool IsMultiwordObject() override { return true; }
39
40   CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
41
42   bool LoadSubCommand(llvm::StringRef cmd_name,
43                       const lldb::CommandObjectSP &command_obj) override;
44
45   void GenerateHelpText(Stream &output_stream) override;
46
47   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
48                                         StringList *matches = nullptr) override;
49
50   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
51                                      StringList *matches = nullptr) override;
52
53   void AproposAllSubCommands(llvm::StringRef prefix,
54                              llvm::StringRef search_word,
55                              StringList &commands_found,
56                              StringList &commands_help) override;
57
58   bool WantsRawCommandString() override { return false; }
59
60   int HandleCompletion(CompletionRequest &request) override;
61
62   const char *GetRepeatCommand(Args &current_command_args,
63                                uint32_t index) override;
64
65   bool Execute(const char *args_string, CommandReturnObject &result) override;
66
67   bool IsRemovable() const override { return m_can_be_removed; }
68
69   void SetRemovable(bool removable) { m_can_be_removed = removable; }
70
71 protected:
72   CommandObject::CommandMap &GetSubcommandDictionary() {
73     return m_subcommand_dict;
74   }
75
76   CommandObject::CommandMap m_subcommand_dict;
77   bool m_can_be_removed;
78 };
79
80 class CommandObjectProxy : public CommandObject {
81 public:
82   CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
83                      const char *help = nullptr, const char *syntax = nullptr,
84                      uint32_t flags = 0);
85
86   ~CommandObjectProxy() override;
87
88   // Subclasses must provide a command object that will be transparently used
89   // for this object.
90   virtual CommandObject *GetProxyCommandObject() = 0;
91
92   llvm::StringRef GetHelpLong() override;
93
94   bool IsRemovable() const override;
95
96   bool IsMultiwordObject() override;
97
98   CommandObjectMultiword *GetAsMultiwordCommand() override;
99
100   void GenerateHelpText(Stream &result) override;
101
102   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
103                                         StringList *matches = nullptr) override;
104
105   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
106                                      StringList *matches = nullptr) override;
107
108   void AproposAllSubCommands(llvm::StringRef prefix,
109                              llvm::StringRef search_word,
110                              StringList &commands_found,
111                              StringList &commands_help) override;
112
113   bool LoadSubCommand(llvm::StringRef cmd_name,
114                       const lldb::CommandObjectSP &command_obj) override;
115
116   bool WantsRawCommandString() override;
117
118   bool WantsCompletion() override;
119
120   Options *GetOptions() override;
121
122   int HandleCompletion(CompletionRequest &request) override;
123
124   int HandleArgumentCompletion(
125       CompletionRequest &request,
126       OptionElementVector &opt_element_vector) override;
127
128   const char *GetRepeatCommand(Args &current_command_args,
129                                uint32_t index) override;
130
131   bool Execute(const char *args_string, CommandReturnObject &result) override;
132
133 protected:
134   // These two want to iterate over the subcommand dictionary.
135   friend class CommandInterpreter;
136   friend class CommandObjectSyntax;
137 };
138
139 } // namespace lldb_private
140
141 #endif // liblldb_CommandObjectMultiword_h_