Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:42:49

0001 //===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
0010 #define LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
0011 
0012 #include "lldb/Interpreter/CommandObject.h"
0013 #include "lldb/Utility/CompletionRequest.h"
0014 #include <optional>
0015 
0016 namespace lldb_private {
0017 
0018 // CommandObjectMultiword
0019 
0020 class CommandObjectMultiword : public CommandObject {
0021   // These two want to iterate over the subcommand dictionary.
0022   friend class CommandInterpreter;
0023   friend class CommandObjectSyntax;
0024 
0025 public:
0026   CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
0027                          const char *help = nullptr,
0028                          const char *syntax = nullptr, uint32_t flags = 0);
0029 
0030   ~CommandObjectMultiword() override;
0031 
0032   bool IsMultiwordObject() override { return true; }
0033 
0034   CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
0035 
0036   bool LoadSubCommand(llvm::StringRef cmd_name,
0037                       const lldb::CommandObjectSP &command_obj) override;
0038 
0039   llvm::Error LoadUserSubcommand(llvm::StringRef cmd_name,
0040                                  const lldb::CommandObjectSP &command_obj,
0041                                  bool can_replace) override;
0042 
0043   llvm::Error RemoveUserSubcommand(llvm::StringRef cmd_name, bool multiword_okay);
0044 
0045   void GenerateHelpText(Stream &output_stream) override;
0046 
0047   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
0048                                         StringList *matches = nullptr) override;
0049 
0050   lldb::CommandObjectSP GetSubcommandSPExact(llvm::StringRef sub_cmd) override;
0051 
0052   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
0053                                      StringList *matches = nullptr) override;
0054 
0055   bool WantsRawCommandString() override { return false; }
0056 
0057   void HandleCompletion(CompletionRequest &request) override;
0058 
0059   std::optional<std::string> GetRepeatCommand(Args &current_command_args,
0060                                               uint32_t index) override;
0061 
0062   void Execute(const char *args_string, CommandReturnObject &result) override;
0063 
0064   bool IsRemovable() const override { return m_can_be_removed; }
0065 
0066   void SetRemovable(bool removable) { m_can_be_removed = removable; }
0067 
0068 protected:
0069   CommandObject::CommandMap &GetSubcommandDictionary() {
0070     return m_subcommand_dict;
0071   }
0072 
0073   std::string GetSubcommandsHintText();
0074 
0075   CommandObject::CommandMap m_subcommand_dict;
0076   bool m_can_be_removed;
0077 };
0078 
0079 class CommandObjectProxy : public CommandObject {
0080 public:
0081   CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
0082                      const char *help = nullptr, const char *syntax = nullptr,
0083                      uint32_t flags = 0);
0084 
0085   ~CommandObjectProxy() override;
0086 
0087   // Subclasses must provide a command object that will be transparently used
0088   // for this object.
0089   virtual CommandObject *GetProxyCommandObject() = 0;
0090 
0091   llvm::StringRef GetSyntax() override;
0092 
0093   llvm::StringRef GetHelp() override;
0094 
0095   llvm::StringRef GetHelpLong() override;
0096 
0097   bool IsRemovable() const override;
0098 
0099   bool IsMultiwordObject() override;
0100 
0101   CommandObjectMultiword *GetAsMultiwordCommand() override;
0102 
0103   void GenerateHelpText(Stream &result) override;
0104 
0105   lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
0106                                         StringList *matches = nullptr) override;
0107 
0108   CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
0109                                      StringList *matches = nullptr) override;
0110 
0111   bool LoadSubCommand(llvm::StringRef cmd_name,
0112                       const lldb::CommandObjectSP &command_obj) override;
0113 
0114   bool WantsRawCommandString() override;
0115 
0116   bool WantsCompletion() override;
0117 
0118   Options *GetOptions() override;
0119 
0120   void HandleCompletion(CompletionRequest &request) override;
0121 
0122   void
0123   HandleArgumentCompletion(CompletionRequest &request,
0124                            OptionElementVector &opt_element_vector) override;
0125 
0126   std::optional<std::string> GetRepeatCommand(Args &current_command_args,
0127                                               uint32_t index) override;
0128 
0129   /// \return
0130   ///     An error message to be displayed when the command is executed (i.e.
0131   ///     Execute is called) and \a GetProxyCommandObject returned null.
0132   virtual llvm::StringRef GetUnsupportedError();
0133 
0134   void Execute(const char *args_string, CommandReturnObject &result) override;
0135 
0136 protected:
0137   // These two want to iterate over the subcommand dictionary.
0138   friend class CommandInterpreter;
0139   friend class CommandObjectSyntax;
0140 };
0141 
0142 } // namespace lldb_private
0143 
0144 #endif // LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H