1 //===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_CommandObjectMultiword_h_
11 #define liblldb_CommandObjectMultiword_h_
15 // Other libraries and framework includes
17 #include "lldb/Interpreter/CommandObject.h"
19 namespace lldb_private {
21 //-------------------------------------------------------------------------
22 // CommandObjectMultiword
23 //-------------------------------------------------------------------------
25 class CommandObjectMultiword : public CommandObject {
26 // These two want to iterate over the subcommand dictionary.
27 friend class CommandInterpreter;
28 friend class CommandObjectSyntax;
31 CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
32 const char *help = nullptr,
33 const char *syntax = nullptr, uint32_t flags = 0);
35 ~CommandObjectMultiword() override;
37 bool IsMultiwordObject() override { return true; }
39 CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
41 bool LoadSubCommand(llvm::StringRef cmd_name,
42 const lldb::CommandObjectSP &command_obj) override;
44 void GenerateHelpText(Stream &output_stream) override;
46 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
47 StringList *matches = nullptr) override;
49 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
50 StringList *matches = nullptr) override;
52 void AproposAllSubCommands(llvm::StringRef prefix,
53 llvm::StringRef search_word,
54 StringList &commands_found,
55 StringList &commands_help) override;
57 bool WantsRawCommandString() override { return false; }
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;
64 const char *GetRepeatCommand(Args ¤t_command_args,
65 uint32_t index) override;
67 bool Execute(const char *args_string, CommandReturnObject &result) override;
69 bool IsRemovable() const override { return m_can_be_removed; }
71 void SetRemovable(bool removable) { m_can_be_removed = removable; }
74 CommandObject::CommandMap &GetSubcommandDictionary() {
75 return m_subcommand_dict;
78 CommandObject::CommandMap m_subcommand_dict;
79 bool m_can_be_removed;
82 class CommandObjectProxy : public CommandObject {
84 CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
85 const char *help = nullptr, const char *syntax = nullptr,
88 ~CommandObjectProxy() override;
90 // Subclasses must provide a command object that will be transparently
91 // used for this object.
92 virtual CommandObject *GetProxyCommandObject() = 0;
94 llvm::StringRef GetHelpLong() override;
96 bool IsRemovable() const override;
98 bool IsMultiwordObject() override;
100 CommandObjectMultiword *GetAsMultiwordCommand() override;
102 void GenerateHelpText(Stream &result) override;
104 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
105 StringList *matches = nullptr) override;
107 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
108 StringList *matches = nullptr) override;
110 void AproposAllSubCommands(llvm::StringRef prefix,
111 llvm::StringRef search_word,
112 StringList &commands_found,
113 StringList &commands_help) override;
115 bool LoadSubCommand(llvm::StringRef cmd_name,
116 const lldb::CommandObjectSP &command_obj) override;
118 bool WantsRawCommandString() override;
120 bool WantsCompletion() override;
122 Options *GetOptions() override;
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;
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,
134 StringList &matches) override;
136 const char *GetRepeatCommand(Args ¤t_command_args,
137 uint32_t index) override;
139 bool Execute(const char *args_string, CommandReturnObject &result) override;
142 // These two want to iterate over the subcommand dictionary.
143 friend class CommandInterpreter;
144 friend class CommandObjectSyntax;
147 } // namespace lldb_private
149 #endif // liblldb_CommandObjectMultiword_h_