diff options
| author | Abhishek Aggarwal <abhishek.a.aggarwal@intel.com> | 2016-07-29 07:46:32 +0000 |
|---|---|---|
| committer | Abhishek Aggarwal <abhishek.a.aggarwal@intel.com> | 2016-07-29 07:46:32 +0000 |
| commit | f605c198c9ae45951dff98224d92593c1596186b (patch) | |
| tree | 6c0f1629bf77cc25aa9c9d89758723af1e8ce4bf /lldb/source/API/SBCommandInterpreter.cpp | |
| parent | 17a586e6de8ac3bf5bd49038564662d6a35496a4 (diff) | |
| download | bcm5719-llvm-f605c198c9ae45951dff98224d92593c1596186b.tar.gz bcm5719-llvm-f605c198c9ae45951dff98224d92593c1596186b.zip | |
Improve code of loading plugins that provide cmnds
Summary:
- Modified code that enables writing new user-defined commands
and use them through LLDB CLI. Modifications are:
-- Define the 'syntax' for each user-defined command
--- Added an argument in SBCommandInterpreter::AddCommand()
and SBCommand::AddCommand() API
--- Allow passing syntax for each user-defined command
--- Earlier, only 'help' could be defined and passed for commands
-- Passed 'number of arguments' entered on CLI for user-defined commands
--- Added an argument (number of options) in SBCommandPluginInterface::DoExecute()
API to know the number of arguments passed for commands
-- In CommandPluginInterfaceImplementation class:
--- Make the data member m_backend a shared_ptr
--- Avoids memory leaks of dynamically allocated SBCommandPluginInterface instances
created in lldb::PluginInitialize() API
Signed-off-by: Abhishek Aggarwal <abhishek.a.aggarwal@intel.com>
Reviewers: jingham, granata.enrico, clayborg
Subscribers: labath, lldb-commits
Differential Revision: https://reviews.llvm.org/D22863
llvm-svn: 277125
Diffstat (limited to 'lldb/source/API/SBCommandInterpreter.cpp')
| -rw-r--r-- | lldb/source/API/SBCommandInterpreter.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/lldb/source/API/SBCommandInterpreter.cpp b/lldb/source/API/SBCommandInterpreter.cpp index dfa1709a349..c93db506c5a 100644 --- a/lldb/source/API/SBCommandInterpreter.cpp +++ b/lldb/source/API/SBCommandInterpreter.cpp @@ -153,7 +153,7 @@ protected: sb_return.Release(); return ret; } - lldb::SBCommandPluginInterface* m_backend; + std::shared_ptr<lldb::SBCommandPluginInterface> m_backend; }; SBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) : @@ -605,6 +605,17 @@ SBCommandInterpreter::AddCommand (const char* name, lldb::SBCommandPluginInterfa return lldb::SBCommand(); } +lldb::SBCommand +SBCommandInterpreter::AddCommand (const char* name, lldb::SBCommandPluginInterface* impl, const char* help, const char* syntax) +{ + lldb::CommandObjectSP new_command_sp; + new_command_sp.reset(new CommandPluginInterfaceImplementation(*m_opaque_ptr,name, impl, help, syntax)); + + if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) + return lldb::SBCommand(new_command_sp); + return lldb::SBCommand(); +} + SBCommand::SBCommand() = default; SBCommand::SBCommand (lldb::CommandObjectSP cmd_sp) : m_opaque_sp (cmd_sp) @@ -677,6 +688,21 @@ SBCommand::AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, c return lldb::SBCommand(); } +lldb::SBCommand +SBCommand::AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, const char* help, const char* syntax) +{ + if (!IsValid ()) + return lldb::SBCommand(); + if (!m_opaque_sp->IsMultiwordObject()) + return lldb::SBCommand(); + lldb::CommandObjectSP new_command_sp; + new_command_sp.reset(new CommandPluginInterfaceImplementation(m_opaque_sp->GetCommandInterpreter(),name,impl,help, syntax)); + if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) + return lldb::SBCommand(new_command_sp); + return lldb::SBCommand(); +} + + uint32_t SBCommand::GetFlags () { |

