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