130fdc8d8SChris Lattner //===-- SBCommandInterpreter.cpp --------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1093a64300SDaniel Malea #include "lldb/lldb-python.h" 1193a64300SDaniel Malea 1230fdc8d8SChris Lattner #include "lldb/lldb-types.h" 1330fdc8d8SChris Lattner #include "lldb/Core/SourceManager.h" 1430fdc8d8SChris Lattner #include "lldb/Core/Listener.h" 1530fdc8d8SChris Lattner #include "lldb/Interpreter/CommandInterpreter.h" 1621dfcd9dSEnrico Granata #include "lldb/Interpreter/CommandObjectMultiword.h" 1730fdc8d8SChris Lattner #include "lldb/Interpreter/CommandReturnObject.h" 1830fdc8d8SChris Lattner #include "lldb/Target/Target.h" 1930fdc8d8SChris Lattner 20ca93cc1dSEli Friedman #include "lldb/API/SBBroadcaster.h" 21ca93cc1dSEli Friedman #include "lldb/API/SBCommandReturnObject.h" 22ca93cc1dSEli Friedman #include "lldb/API/SBCommandInterpreter.h" 23ffc9f1deSJim Ingham #include "lldb/API/SBExecutionContext.h" 24ca93cc1dSEli Friedman #include "lldb/API/SBProcess.h" 25ca93cc1dSEli Friedman #include "lldb/API/SBTarget.h" 26ca93cc1dSEli Friedman #include "lldb/API/SBListener.h" 27ceb6b139SCaroline Tice #include "lldb/API/SBStream.h" 28ca93cc1dSEli Friedman #include "lldb/API/SBStringList.h" 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner using namespace lldb; 3130fdc8d8SChris Lattner using namespace lldb_private; 3230fdc8d8SChris Lattner 3326c7bf93SJim Ingham SBCommandInterpreterRunOptions::SBCommandInterpreterRunOptions() 3426c7bf93SJim Ingham { 3526c7bf93SJim Ingham m_opaque_up.reset(new CommandInterpreterRunOptions()); 3626c7bf93SJim Ingham } 3726c7bf93SJim Ingham 3826c7bf93SJim Ingham SBCommandInterpreterRunOptions::~SBCommandInterpreterRunOptions() 3926c7bf93SJim Ingham { 4026c7bf93SJim Ingham 4126c7bf93SJim Ingham } 4226c7bf93SJim Ingham 4326c7bf93SJim Ingham bool 4426c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetStopOnContinue () const 4526c7bf93SJim Ingham { 4626c7bf93SJim Ingham return m_opaque_up->GetStopOnContinue(); 4726c7bf93SJim Ingham } 4826c7bf93SJim Ingham 4926c7bf93SJim Ingham void 5026c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetStopOnContinue (bool stop_on_continue) 5126c7bf93SJim Ingham { 5226c7bf93SJim Ingham m_opaque_up->SetStopOnContinue(stop_on_continue); 5326c7bf93SJim Ingham } 5426c7bf93SJim Ingham 5526c7bf93SJim Ingham bool 5626c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetStopOnError () const 5726c7bf93SJim Ingham { 5826c7bf93SJim Ingham return m_opaque_up->GetStopOnError(); 5926c7bf93SJim Ingham } 6026c7bf93SJim Ingham 6126c7bf93SJim Ingham void 6226c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetStopOnError (bool stop_on_error) 6326c7bf93SJim Ingham { 6426c7bf93SJim Ingham m_opaque_up->SetStopOnError(stop_on_error); 6526c7bf93SJim Ingham } 6626c7bf93SJim Ingham 6726c7bf93SJim Ingham bool 6826c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetStopOnCrash () const 6926c7bf93SJim Ingham { 7026c7bf93SJim Ingham return m_opaque_up->GetStopOnCrash(); 7126c7bf93SJim Ingham } 7226c7bf93SJim Ingham 7326c7bf93SJim Ingham void 7426c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetStopOnCrash (bool stop_on_crash) 7526c7bf93SJim Ingham { 7626c7bf93SJim Ingham m_opaque_up->SetStopOnCrash(stop_on_crash); 7726c7bf93SJim Ingham } 7826c7bf93SJim Ingham 7926c7bf93SJim Ingham bool 8026c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetEchoCommands () const 8126c7bf93SJim Ingham { 8226c7bf93SJim Ingham return m_opaque_up->GetEchoCommands(); 8326c7bf93SJim Ingham } 8426c7bf93SJim Ingham 8526c7bf93SJim Ingham void 8626c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetEchoCommands (bool echo_commands) 8726c7bf93SJim Ingham { 8826c7bf93SJim Ingham m_opaque_up->SetEchoCommands(echo_commands); 8926c7bf93SJim Ingham } 9026c7bf93SJim Ingham 9126c7bf93SJim Ingham bool 9226c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetPrintResults () const 9326c7bf93SJim Ingham { 9426c7bf93SJim Ingham return m_opaque_up->GetPrintResults(); 9526c7bf93SJim Ingham } 9626c7bf93SJim Ingham 9726c7bf93SJim Ingham void 9826c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetPrintResults (bool print_results) 9926c7bf93SJim Ingham { 10026c7bf93SJim Ingham m_opaque_up->SetPrintResults(print_results); 10126c7bf93SJim Ingham } 10226c7bf93SJim Ingham 10326c7bf93SJim Ingham bool 10426c7bf93SJim Ingham SBCommandInterpreterRunOptions::GetAddToHistory () const 10526c7bf93SJim Ingham { 10626c7bf93SJim Ingham return m_opaque_up->GetAddToHistory(); 10726c7bf93SJim Ingham } 10826c7bf93SJim Ingham 10926c7bf93SJim Ingham void 11026c7bf93SJim Ingham SBCommandInterpreterRunOptions::SetAddToHistory (bool add_to_history) 11126c7bf93SJim Ingham { 11226c7bf93SJim Ingham m_opaque_up->SetAddToHistory(add_to_history); 11326c7bf93SJim Ingham } 11426c7bf93SJim Ingham 11526c7bf93SJim Ingham lldb_private::CommandInterpreterRunOptions * 11626c7bf93SJim Ingham SBCommandInterpreterRunOptions::get () const 11726c7bf93SJim Ingham { 11826c7bf93SJim Ingham return m_opaque_up.get(); 11926c7bf93SJim Ingham } 12026c7bf93SJim Ingham 12126c7bf93SJim Ingham lldb_private::CommandInterpreterRunOptions & 12226c7bf93SJim Ingham SBCommandInterpreterRunOptions::ref () const 12326c7bf93SJim Ingham { 12426c7bf93SJim Ingham return *m_opaque_up.get(); 12526c7bf93SJim Ingham } 12626c7bf93SJim Ingham 12721dfcd9dSEnrico Granata class CommandPluginInterfaceImplementation : public CommandObjectParsed 12821dfcd9dSEnrico Granata { 12921dfcd9dSEnrico Granata public: 13021dfcd9dSEnrico Granata CommandPluginInterfaceImplementation (CommandInterpreter &interpreter, 13121dfcd9dSEnrico Granata const char *name, 13221dfcd9dSEnrico Granata lldb::SBCommandPluginInterface* backend, 13321dfcd9dSEnrico Granata const char *help = NULL, 13421dfcd9dSEnrico Granata const char *syntax = NULL, 13521dfcd9dSEnrico Granata uint32_t flags = 0) : 13621dfcd9dSEnrico Granata CommandObjectParsed (interpreter, name, help, syntax, flags), 13721dfcd9dSEnrico Granata m_backend(backend) {} 13821dfcd9dSEnrico Granata 13921dfcd9dSEnrico Granata virtual bool 1403a18e319SGreg Clayton IsRemovable() const { return true; } 14121dfcd9dSEnrico Granata 14221dfcd9dSEnrico Granata protected: 14321dfcd9dSEnrico Granata virtual bool 14421dfcd9dSEnrico Granata DoExecute (Args& command, CommandReturnObject &result) 14521dfcd9dSEnrico Granata { 14621dfcd9dSEnrico Granata SBCommandReturnObject sb_return(&result); 14721dfcd9dSEnrico Granata SBCommandInterpreter sb_interpreter(&m_interpreter); 14821dfcd9dSEnrico Granata SBDebugger debugger_sb(m_interpreter.GetDebugger().shared_from_this()); 14921dfcd9dSEnrico Granata bool ret = m_backend->DoExecute (debugger_sb,(char**)command.GetArgumentVector(), sb_return); 15021dfcd9dSEnrico Granata sb_return.Release(); 15121dfcd9dSEnrico Granata return ret; 15221dfcd9dSEnrico Granata } 15321dfcd9dSEnrico Granata lldb::SBCommandPluginInterface* m_backend; 15421dfcd9dSEnrico Granata }; 15530fdc8d8SChris Lattner 1566611103cSGreg Clayton SBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) : 1576611103cSGreg Clayton m_opaque_ptr (interpreter) 15830fdc8d8SChris Lattner { 1595160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 160ceb6b139SCaroline Tice 161ceb6b139SCaroline Tice if (log) 162750cd175SCaroline Tice log->Printf ("SBCommandInterpreter::SBCommandInterpreter (interpreter=%p)" 163324a1036SSaleem Abdulrasool " => SBCommandInterpreter(%p)", 164324a1036SSaleem Abdulrasool static_cast<void*>(interpreter), 165324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr)); 16630fdc8d8SChris Lattner } 16730fdc8d8SChris Lattner 168efabb123SGreg Clayton SBCommandInterpreter::SBCommandInterpreter(const SBCommandInterpreter &rhs) : 169efabb123SGreg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 170efabb123SGreg Clayton { 171efabb123SGreg Clayton } 172efabb123SGreg Clayton 173efabb123SGreg Clayton const SBCommandInterpreter & 174efabb123SGreg Clayton SBCommandInterpreter::operator = (const SBCommandInterpreter &rhs) 175efabb123SGreg Clayton { 176efabb123SGreg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 177efabb123SGreg Clayton return *this; 178efabb123SGreg Clayton } 179efabb123SGreg Clayton 18030fdc8d8SChris Lattner SBCommandInterpreter::~SBCommandInterpreter () 18130fdc8d8SChris Lattner { 18230fdc8d8SChris Lattner } 18330fdc8d8SChris Lattner 18430fdc8d8SChris Lattner bool 1856611103cSGreg Clayton SBCommandInterpreter::IsValid() const 1866611103cSGreg Clayton { 1876611103cSGreg Clayton return m_opaque_ptr != NULL; 1886611103cSGreg Clayton } 1896611103cSGreg Clayton 1906611103cSGreg Clayton 1916611103cSGreg Clayton bool 19230fdc8d8SChris Lattner SBCommandInterpreter::CommandExists (const char *cmd) 19330fdc8d8SChris Lattner { 194872e0625SJohnny Chen if (cmd && m_opaque_ptr) 1956611103cSGreg Clayton return m_opaque_ptr->CommandExists (cmd); 1966611103cSGreg Clayton return false; 19730fdc8d8SChris Lattner } 19830fdc8d8SChris Lattner 19930fdc8d8SChris Lattner bool 20030fdc8d8SChris Lattner SBCommandInterpreter::AliasExists (const char *cmd) 20130fdc8d8SChris Lattner { 202872e0625SJohnny Chen if (cmd && m_opaque_ptr) 2036611103cSGreg Clayton return m_opaque_ptr->AliasExists (cmd); 2046611103cSGreg Clayton return false; 20530fdc8d8SChris Lattner } 20630fdc8d8SChris Lattner 20744d93782SGreg Clayton bool 20844d93782SGreg Clayton SBCommandInterpreter::IsActive () 20944d93782SGreg Clayton { 21044d93782SGreg Clayton if (m_opaque_ptr) 21144d93782SGreg Clayton return m_opaque_ptr->IsActive (); 21244d93782SGreg Clayton return false; 21344d93782SGreg Clayton } 21444d93782SGreg Clayton 21544d93782SGreg Clayton const char * 21644d93782SGreg Clayton SBCommandInterpreter::GetIOHandlerControlSequence(char ch) 21744d93782SGreg Clayton { 21844d93782SGreg Clayton if (m_opaque_ptr) 21944d93782SGreg Clayton return m_opaque_ptr->GetDebugger().GetTopIOHandlerControlSequence (ch).GetCString(); 22044d93782SGreg Clayton return NULL; 22144d93782SGreg Clayton } 22244d93782SGreg Clayton 22330fdc8d8SChris Lattner lldb::ReturnStatus 22430fdc8d8SChris Lattner SBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history) 22530fdc8d8SChris Lattner { 226ffc9f1deSJim Ingham SBExecutionContext sb_exe_ctx; 227ffc9f1deSJim Ingham return HandleCommand (command_line, sb_exe_ctx, result, add_to_history); 228ffc9f1deSJim Ingham } 229ffc9f1deSJim Ingham 230ffc9f1deSJim Ingham lldb::ReturnStatus 231ffc9f1deSJim Ingham SBCommandInterpreter::HandleCommand (const char *command_line, SBExecutionContext &override_context, SBCommandReturnObject &result, bool add_to_history) 232ffc9f1deSJim Ingham { 2335160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 234ceb6b139SCaroline Tice 235ceb6b139SCaroline Tice if (log) 236cfd1acedSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p), add_to_history=%i)", 237324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), command_line, 238324a1036SSaleem Abdulrasool static_cast<void*>(result.get()), add_to_history); 239ceb6b139SCaroline Tice 240ffc9f1deSJim Ingham ExecutionContext ctx, *ctx_ptr; 241ffc9f1deSJim Ingham if (override_context.get()) 242ffc9f1deSJim Ingham { 243ffc9f1deSJim Ingham ctx = override_context.get()->Lock(true); 244ffc9f1deSJim Ingham ctx_ptr = &ctx; 245ffc9f1deSJim Ingham } 246ffc9f1deSJim Ingham else 247ffc9f1deSJim Ingham ctx_ptr = nullptr; 248ffc9f1deSJim Ingham 249ffc9f1deSJim Ingham 25030fdc8d8SChris Lattner result.Clear(); 251872e0625SJohnny Chen if (command_line && m_opaque_ptr) 2526611103cSGreg Clayton { 25345a44f3cSGreg Clayton result.ref().SetInteractive(false); 254ffc9f1deSJim Ingham m_opaque_ptr->HandleCommand (command_line, add_to_history ? eLazyBoolYes : eLazyBoolNo, result.ref(), ctx_ptr); 2556611103cSGreg Clayton } 2566611103cSGreg Clayton else 2576611103cSGreg Clayton { 258872e0625SJohnny Chen result->AppendError ("SBCommandInterpreter or the command line is not valid"); 2596611103cSGreg Clayton result->SetStatus (eReturnStatusFailed); 2606611103cSGreg Clayton } 261ceb6b139SCaroline Tice 2627b9da4a5SCaroline Tice // We need to get the value again, in case the command disabled the log! 2637b9da4a5SCaroline Tice log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 264ceb6b139SCaroline Tice if (log) 265ceb6b139SCaroline Tice { 266ceb6b139SCaroline Tice SBStream sstr; 267ceb6b139SCaroline Tice result.GetDescription (sstr); 268cfd1acedSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p): %s, add_to_history=%i) => %i", 269324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), command_line, 270324a1036SSaleem Abdulrasool static_cast<void*>(result.get()), sstr.GetData(), 271324a1036SSaleem Abdulrasool add_to_history, result.GetStatus()); 272ceb6b139SCaroline Tice } 273ceb6b139SCaroline Tice 27430fdc8d8SChris Lattner return result.GetStatus(); 27530fdc8d8SChris Lattner } 27630fdc8d8SChris Lattner 277ffc9f1deSJim Ingham void 278ffc9f1deSJim Ingham SBCommandInterpreter::HandleCommandsFromFile (lldb::SBFileSpec &file, 279ffc9f1deSJim Ingham lldb::SBExecutionContext &override_context, 280ffc9f1deSJim Ingham lldb::SBCommandInterpreterRunOptions &options, 281ffc9f1deSJim Ingham lldb::SBCommandReturnObject result) 282ffc9f1deSJim Ingham { 283ffc9f1deSJim Ingham Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 284ffc9f1deSJim Ingham 285ffc9f1deSJim Ingham if (log) 286ffc9f1deSJim Ingham { 287ffc9f1deSJim Ingham SBStream s; 288ffc9f1deSJim Ingham file.GetDescription (s); 289ffc9f1deSJim Ingham log->Printf ("SBCommandInterpreter(%p)::HandleCommandsFromFile (file=\"%s\", SBCommandReturnObject(%p))", 290ffc9f1deSJim Ingham static_cast<void*>(m_opaque_ptr), s.GetData(), 291ffc9f1deSJim Ingham static_cast<void*>(result.get())); 292ffc9f1deSJim Ingham } 293ffc9f1deSJim Ingham 294ffc9f1deSJim Ingham if (!m_opaque_ptr) 295ffc9f1deSJim Ingham { 296ffc9f1deSJim Ingham result->AppendError ("SBCommandInterpreter is not valid."); 297ffc9f1deSJim Ingham result->SetStatus (eReturnStatusFailed); 298ffc9f1deSJim Ingham return; 299ffc9f1deSJim Ingham } 300ffc9f1deSJim Ingham 301ffc9f1deSJim Ingham if (!file.IsValid()) 302ffc9f1deSJim Ingham { 303ffc9f1deSJim Ingham SBStream s; 304ffc9f1deSJim Ingham file.GetDescription (s); 305ffc9f1deSJim Ingham result->AppendErrorWithFormat ("File is not valid: %s.", s.GetData()); 306ffc9f1deSJim Ingham result->SetStatus (eReturnStatusFailed); 307ffc9f1deSJim Ingham } 308ffc9f1deSJim Ingham 309ffc9f1deSJim Ingham FileSpec tmp_spec = file.ref(); 310ffc9f1deSJim Ingham ExecutionContext ctx, *ctx_ptr; 311ffc9f1deSJim Ingham if (override_context.get()) 312ffc9f1deSJim Ingham { 313ffc9f1deSJim Ingham ctx = override_context.get()->Lock(true); 314ffc9f1deSJim Ingham ctx_ptr = &ctx; 315ffc9f1deSJim Ingham } 316ffc9f1deSJim Ingham else 317ffc9f1deSJim Ingham ctx_ptr = nullptr; 318ffc9f1deSJim Ingham 319ffc9f1deSJim Ingham 320ffc9f1deSJim Ingham m_opaque_ptr->HandleCommandsFromFile (tmp_spec, ctx_ptr, options.ref(), result.ref()); 321ffc9f1deSJim Ingham 322ffc9f1deSJim Ingham } 323ffc9f1deSJim Ingham 324ffc9f1deSJim Ingham 32530fdc8d8SChris Lattner int 32630fdc8d8SChris Lattner SBCommandInterpreter::HandleCompletion (const char *current_line, 32730fdc8d8SChris Lattner const char *cursor, 32830fdc8d8SChris Lattner const char *last_char, 32930fdc8d8SChris Lattner int match_start_point, 33030fdc8d8SChris Lattner int max_return_elements, 33130fdc8d8SChris Lattner SBStringList &matches) 33230fdc8d8SChris Lattner { 3335160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3346611103cSGreg Clayton int num_completions = 0; 335ac012605SJim Ingham 336ac012605SJim Ingham // Sanity check the arguments that are passed in: 337ac012605SJim Ingham // cursor & last_char have to be within the current_line. 338ac012605SJim Ingham if (current_line == NULL || cursor == NULL || last_char == NULL) 339ac012605SJim Ingham return 0; 340ac012605SJim Ingham 341ac012605SJim Ingham if (cursor < current_line || last_char < current_line) 342ac012605SJim Ingham return 0; 343ac012605SJim Ingham 344ac012605SJim Ingham size_t current_line_size = strlen (current_line); 3453985c8c6SSaleem Abdulrasool if (cursor - current_line > static_cast<ptrdiff_t>(current_line_size) || 3463985c8c6SSaleem Abdulrasool last_char - current_line > static_cast<ptrdiff_t>(current_line_size)) 347ac012605SJim Ingham return 0; 348ac012605SJim Ingham 349389512dcSJim Ingham if (log) 350d01b2953SDaniel Malea log->Printf ("SBCommandInterpreter(%p)::HandleCompletion (current_line=\"%s\", cursor at: %" PRId64 ", last char at: %" PRId64 ", match_start_point: %d, max_return_elements: %d)", 351324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), current_line, 352324a1036SSaleem Abdulrasool static_cast<uint64_t>(cursor - current_line), 353324a1036SSaleem Abdulrasool static_cast<uint64_t>(last_char - current_line), 354324a1036SSaleem Abdulrasool match_start_point, max_return_elements); 355389512dcSJim Ingham 3566611103cSGreg Clayton if (m_opaque_ptr) 3576611103cSGreg Clayton { 35830fdc8d8SChris Lattner lldb_private::StringList lldb_matches; 3596611103cSGreg Clayton num_completions = m_opaque_ptr->HandleCompletion (current_line, cursor, last_char, match_start_point, 36030fdc8d8SChris Lattner max_return_elements, lldb_matches); 36130fdc8d8SChris Lattner 36230fdc8d8SChris Lattner SBStringList temp_list (&lldb_matches); 36330fdc8d8SChris Lattner matches.AppendList (temp_list); 3646611103cSGreg Clayton } 365389512dcSJim Ingham if (log) 366324a1036SSaleem Abdulrasool log->Printf ("SBCommandInterpreter(%p)::HandleCompletion - Found %d completions.", 367324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), num_completions); 368389512dcSJim Ingham 36930fdc8d8SChris Lattner return num_completions; 37030fdc8d8SChris Lattner } 37130fdc8d8SChris Lattner 372969795f1SJim Ingham int 373969795f1SJim Ingham SBCommandInterpreter::HandleCompletion (const char *current_line, 374969795f1SJim Ingham uint32_t cursor_pos, 375969795f1SJim Ingham int match_start_point, 376969795f1SJim Ingham int max_return_elements, 377969795f1SJim Ingham lldb::SBStringList &matches) 378969795f1SJim Ingham { 379969795f1SJim Ingham const char *cursor = current_line + cursor_pos; 380969795f1SJim Ingham const char *last_char = current_line + strlen (current_line); 381969795f1SJim Ingham return HandleCompletion (current_line, cursor, last_char, match_start_point, max_return_elements, matches); 382969795f1SJim Ingham } 383969795f1SJim Ingham 38430fdc8d8SChris Lattner bool 38530fdc8d8SChris Lattner SBCommandInterpreter::HasCommands () 38630fdc8d8SChris Lattner { 3876611103cSGreg Clayton if (m_opaque_ptr) 3886611103cSGreg Clayton return m_opaque_ptr->HasCommands(); 3896611103cSGreg Clayton return false; 39030fdc8d8SChris Lattner } 39130fdc8d8SChris Lattner 39230fdc8d8SChris Lattner bool 39330fdc8d8SChris Lattner SBCommandInterpreter::HasAliases () 39430fdc8d8SChris Lattner { 3956611103cSGreg Clayton if (m_opaque_ptr) 3966611103cSGreg Clayton return m_opaque_ptr->HasAliases(); 3976611103cSGreg Clayton return false; 39830fdc8d8SChris Lattner } 39930fdc8d8SChris Lattner 40030fdc8d8SChris Lattner bool 40130fdc8d8SChris Lattner SBCommandInterpreter::HasAliasOptions () 40230fdc8d8SChris Lattner { 4036611103cSGreg Clayton if (m_opaque_ptr) 4046611103cSGreg Clayton return m_opaque_ptr->HasAliasOptions (); 4056611103cSGreg Clayton return false; 40630fdc8d8SChris Lattner } 40730fdc8d8SChris Lattner 40830fdc8d8SChris Lattner SBProcess 40930fdc8d8SChris Lattner SBCommandInterpreter::GetProcess () 41030fdc8d8SChris Lattner { 411b9556accSGreg Clayton SBProcess sb_process; 412b9556accSGreg Clayton ProcessSP process_sp; 4136611103cSGreg Clayton if (m_opaque_ptr) 41430fdc8d8SChris Lattner { 415af67cecdSGreg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 416af67cecdSGreg Clayton if (target_sp) 417af67cecdSGreg Clayton { 418af67cecdSGreg Clayton Mutex::Locker api_locker(target_sp->GetAPIMutex()); 419b9556accSGreg Clayton process_sp = target_sp->GetProcessSP(); 420b9556accSGreg Clayton sb_process.SetSP(process_sp); 421af67cecdSGreg Clayton } 42230fdc8d8SChris Lattner } 4235160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4244838131bSGreg Clayton 4254838131bSGreg Clayton if (log) 4264838131bSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::GetProcess () => SBProcess(%p)", 427324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), 428324a1036SSaleem Abdulrasool static_cast<void*>(process_sp.get())); 4294838131bSGreg Clayton 430b9556accSGreg Clayton return sb_process; 43130fdc8d8SChris Lattner } 43230fdc8d8SChris Lattner 43321dfcd9dSEnrico Granata SBDebugger 43421dfcd9dSEnrico Granata SBCommandInterpreter::GetDebugger () 43521dfcd9dSEnrico Granata { 43621dfcd9dSEnrico Granata SBDebugger sb_debugger; 43721dfcd9dSEnrico Granata if (m_opaque_ptr) 43821dfcd9dSEnrico Granata sb_debugger.reset(m_opaque_ptr->GetDebugger().shared_from_this()); 4395160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 44021dfcd9dSEnrico Granata 44121dfcd9dSEnrico Granata if (log) 44221dfcd9dSEnrico Granata log->Printf ("SBCommandInterpreter(%p)::GetDebugger () => SBDebugger(%p)", 443324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), 444324a1036SSaleem Abdulrasool static_cast<void*>(sb_debugger.get())); 44521dfcd9dSEnrico Granata 44621dfcd9dSEnrico Granata return sb_debugger; 44721dfcd9dSEnrico Granata } 44821dfcd9dSEnrico Granata 44930fdc8d8SChris Lattner CommandInterpreter * 4506611103cSGreg Clayton SBCommandInterpreter::get () 45130fdc8d8SChris Lattner { 4526611103cSGreg Clayton return m_opaque_ptr; 45330fdc8d8SChris Lattner } 45430fdc8d8SChris Lattner 45530fdc8d8SChris Lattner CommandInterpreter & 4566611103cSGreg Clayton SBCommandInterpreter::ref () 45730fdc8d8SChris Lattner { 4586611103cSGreg Clayton assert (m_opaque_ptr); 4596611103cSGreg Clayton return *m_opaque_ptr; 4606611103cSGreg Clayton } 4616611103cSGreg Clayton 4626611103cSGreg Clayton void 4636611103cSGreg Clayton SBCommandInterpreter::reset (lldb_private::CommandInterpreter *interpreter) 4646611103cSGreg Clayton { 4656611103cSGreg Clayton m_opaque_ptr = interpreter; 46630fdc8d8SChris Lattner } 46730fdc8d8SChris Lattner 46830fdc8d8SChris Lattner void 46930fdc8d8SChris Lattner SBCommandInterpreter::SourceInitFileInHomeDirectory (SBCommandReturnObject &result) 47030fdc8d8SChris Lattner { 47130fdc8d8SChris Lattner result.Clear(); 4726611103cSGreg Clayton if (m_opaque_ptr) 4736611103cSGreg Clayton { 474af67cecdSGreg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 475af67cecdSGreg Clayton Mutex::Locker api_locker; 476af67cecdSGreg Clayton if (target_sp) 47710ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 4786611103cSGreg Clayton m_opaque_ptr->SourceInitFile (false, result.ref()); 4796611103cSGreg Clayton } 4806611103cSGreg Clayton else 4816611103cSGreg Clayton { 4826611103cSGreg Clayton result->AppendError ("SBCommandInterpreter is not valid"); 4836611103cSGreg Clayton result->SetStatus (eReturnStatusFailed); 4846611103cSGreg Clayton } 4855160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4864838131bSGreg Clayton 4874838131bSGreg Clayton if (log) 4884838131bSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInHomeDirectory (&SBCommandReturnObject(%p))", 489324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), 490324a1036SSaleem Abdulrasool static_cast<void*>(result.get())); 49130fdc8d8SChris Lattner } 49230fdc8d8SChris Lattner 49330fdc8d8SChris Lattner void 49430fdc8d8SChris Lattner SBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result) 49530fdc8d8SChris Lattner { 49630fdc8d8SChris Lattner result.Clear(); 4976611103cSGreg Clayton if (m_opaque_ptr) 4986611103cSGreg Clayton { 499af67cecdSGreg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 500af67cecdSGreg Clayton Mutex::Locker api_locker; 501af67cecdSGreg Clayton if (target_sp) 50210ebffa4SJim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 5036611103cSGreg Clayton m_opaque_ptr->SourceInitFile (true, result.ref()); 5046611103cSGreg Clayton } 5056611103cSGreg Clayton else 5066611103cSGreg Clayton { 5076611103cSGreg Clayton result->AppendError ("SBCommandInterpreter is not valid"); 5086611103cSGreg Clayton result->SetStatus (eReturnStatusFailed); 5096611103cSGreg Clayton } 5105160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 5114838131bSGreg Clayton 5124838131bSGreg Clayton if (log) 5134838131bSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInCurrentWorkingDirectory (&SBCommandReturnObject(%p))", 514324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), 515324a1036SSaleem Abdulrasool static_cast<void*>(result.get())); 51630fdc8d8SChris Lattner } 51730fdc8d8SChris Lattner 51830fdc8d8SChris Lattner SBBroadcaster 51930fdc8d8SChris Lattner SBCommandInterpreter::GetBroadcaster () 52030fdc8d8SChris Lattner { 5215160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 522ceb6b139SCaroline Tice 5236611103cSGreg Clayton SBBroadcaster broadcaster (m_opaque_ptr, false); 524ceb6b139SCaroline Tice 525ceb6b139SCaroline Tice if (log) 5264838131bSGreg Clayton log->Printf ("SBCommandInterpreter(%p)::GetBroadcaster() => SBBroadcaster(%p)", 527324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ptr), static_cast<void*>(broadcaster.get())); 528ceb6b139SCaroline Tice 52930fdc8d8SChris Lattner return broadcaster; 53030fdc8d8SChris Lattner } 53130fdc8d8SChris Lattner 5329d0402b1SGreg Clayton const char * 5334bddaeb5SJim Ingham SBCommandInterpreter::GetBroadcasterClass () 5344bddaeb5SJim Ingham { 535*8a00a562SIlia K return CommandInterpreter::GetStaticBroadcasterClass().AsCString(); 5364bddaeb5SJim Ingham } 5374bddaeb5SJim Ingham 5384bddaeb5SJim Ingham const char * 5399d0402b1SGreg Clayton SBCommandInterpreter::GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type) 5409d0402b1SGreg Clayton { 5419d0402b1SGreg Clayton return CommandObject::GetArgumentTypeAsCString (arg_type); 5429d0402b1SGreg Clayton } 5439d0402b1SGreg Clayton 5449d0402b1SGreg Clayton const char * 5459d0402b1SGreg Clayton SBCommandInterpreter::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type) 5469d0402b1SGreg Clayton { 5479d0402b1SGreg Clayton return CommandObject::GetArgumentDescriptionAsCString (arg_type); 5489d0402b1SGreg Clayton } 5499d0402b1SGreg Clayton 550a9f7b79dSGreg Clayton bool 551a9f7b79dSGreg Clayton SBCommandInterpreter::SetCommandOverrideCallback (const char *command_name, 552a9f7b79dSGreg Clayton lldb::CommandOverrideCallback callback, 553a9f7b79dSGreg Clayton void *baton) 554a9f7b79dSGreg Clayton { 555a9f7b79dSGreg Clayton if (command_name && command_name[0] && m_opaque_ptr) 556a9f7b79dSGreg Clayton { 557af6f2755SGreg Clayton std::string command_name_str (command_name); 558af6f2755SGreg Clayton CommandObject *cmd_obj = m_opaque_ptr->GetCommandObjectForCommand(command_name_str); 559a9f7b79dSGreg Clayton if (cmd_obj) 560a9f7b79dSGreg Clayton { 561af6f2755SGreg Clayton assert(command_name_str.empty()); 562a9f7b79dSGreg Clayton cmd_obj->SetOverrideCallback (callback, baton); 563a9f7b79dSGreg Clayton return true; 564a9f7b79dSGreg Clayton } 565a9f7b79dSGreg Clayton } 566a9f7b79dSGreg Clayton return false; 567a9f7b79dSGreg Clayton } 5689d0402b1SGreg Clayton 569dce502edSGreg Clayton #ifndef LLDB_DISABLE_PYTHON 570be93a35aSEnrico Granata 571dce502edSGreg Clayton // Defined in the SWIG source file 572dce502edSGreg Clayton extern "C" void 573dce502edSGreg Clayton init_lldb(void); 574dce502edSGreg Clayton 5758afa5437SGreg Clayton // these are the Pythonic implementations of the required callbacks 5768afa5437SGreg Clayton // these are scripting-language specific, which is why they belong here 5778afa5437SGreg Clayton // we still need to use function pointers to them instead of relying 5788afa5437SGreg Clayton // on linkage-time resolution because the SWIG stuff and this file 5798afa5437SGreg Clayton // get built at different times 5808afa5437SGreg Clayton extern "C" bool 5818afa5437SGreg Clayton LLDBSwigPythonBreakpointCallbackFunction (const char *python_function_name, 5828afa5437SGreg Clayton const char *session_dictionary_name, 583b57e4a1bSJason Molenda const lldb::StackFrameSP& sb_frame, 5848afa5437SGreg Clayton const lldb::BreakpointLocationSP& sb_bp_loc); 585be93a35aSEnrico Granata 5868afa5437SGreg Clayton extern "C" bool 5878afa5437SGreg Clayton LLDBSwigPythonWatchpointCallbackFunction (const char *python_function_name, 5888afa5437SGreg Clayton const char *session_dictionary_name, 589b57e4a1bSJason Molenda const lldb::StackFrameSP& sb_frame, 5908afa5437SGreg Clayton const lldb::WatchpointSP& sb_wp); 591fc36f791SGreg Clayton 5928afa5437SGreg Clayton extern "C" bool 5938afa5437SGreg Clayton LLDBSwigPythonCallTypeScript (const char *python_function_name, 5948afa5437SGreg Clayton void *session_dictionary, 5958afa5437SGreg Clayton const lldb::ValueObjectSP& valobj_sp, 5968afa5437SGreg Clayton void** pyfunct_wrapper, 5977e4df56aSEnrico Granata const lldb::TypeSummaryOptionsSP& options_sp, 5988afa5437SGreg Clayton std::string& retval); 5998afa5437SGreg Clayton 6008afa5437SGreg Clayton extern "C" void* 6018afa5437SGreg Clayton LLDBSwigPythonCreateSyntheticProvider (const char *python_class_name, 6028afa5437SGreg Clayton const char *session_dictionary_name, 6038afa5437SGreg Clayton const lldb::ValueObjectSP& valobj_sp); 6048afa5437SGreg Clayton 6059fe00e52SEnrico Granata extern "C" void* 6069fe00e52SEnrico Granata LLDBSwigPythonCreateCommandObject (const char *python_class_name, 6079fe00e52SEnrico Granata const char *session_dictionary_name, 6089fe00e52SEnrico Granata const lldb::DebuggerSP debugger_sp); 6098afa5437SGreg Clayton 6102bdbfd50SJim Ingham extern "C" void* 6112bdbfd50SJim Ingham LLDBSwigPythonCreateScriptedThreadPlan (const char *python_class_name, 6122bdbfd50SJim Ingham const char *session_dictionary_name, 6132bdbfd50SJim Ingham const lldb::ThreadPlanSP& thread_plan_sp); 6142bdbfd50SJim Ingham 6152bdbfd50SJim Ingham extern "C" bool 6162bdbfd50SJim Ingham LLDBSWIGPythonCallThreadPlan (void *implementor, 6172bdbfd50SJim Ingham const char *method_name, 6182bdbfd50SJim Ingham Event *event_sp, 6192bdbfd50SJim Ingham bool &got_error); 6202bdbfd50SJim Ingham 621870602ddSSiva Chandra extern "C" size_t 6228afa5437SGreg Clayton LLDBSwigPython_CalculateNumChildren (void *implementor); 6238afa5437SGreg Clayton 6248afa5437SGreg Clayton extern "C" void * 6258afa5437SGreg Clayton LLDBSwigPython_GetChildAtIndex (void *implementor, uint32_t idx); 6268afa5437SGreg Clayton 6278afa5437SGreg Clayton extern "C" int 6288afa5437SGreg Clayton LLDBSwigPython_GetIndexOfChildWithName (void *implementor, const char* child_name); 6298afa5437SGreg Clayton 6308afa5437SGreg Clayton extern "C" void * 6318afa5437SGreg Clayton LLDBSWIGPython_CastPyObjectToSBValue (void* data); 6328afa5437SGreg Clayton 6338afa5437SGreg Clayton extern lldb::ValueObjectSP 6348afa5437SGreg Clayton LLDBSWIGPython_GetValueObjectSPFromSBValue (void* data); 6358afa5437SGreg Clayton 6368afa5437SGreg Clayton extern "C" bool 6378afa5437SGreg Clayton LLDBSwigPython_UpdateSynthProviderInstance (void* implementor); 6388afa5437SGreg Clayton 6398afa5437SGreg Clayton extern "C" bool 6408afa5437SGreg Clayton LLDBSwigPython_MightHaveChildrenSynthProviderInstance (void* implementor); 6418afa5437SGreg Clayton 642d07cfd3aSEnrico Granata extern "C" void * 643d07cfd3aSEnrico Granata LLDBSwigPython_GetValueSynthProviderInstance (void* implementor); 644d07cfd3aSEnrico Granata 6458afa5437SGreg Clayton extern "C" bool 6468afa5437SGreg Clayton LLDBSwigPythonCallCommand (const char *python_function_name, 6478afa5437SGreg Clayton const char *session_dictionary_name, 6488afa5437SGreg Clayton lldb::DebuggerSP& debugger, 6498afa5437SGreg Clayton const char* args, 65006be059aSEnrico Granata lldb_private::CommandReturnObject &cmd_retobj, 65106be059aSEnrico Granata lldb::ExecutionContextRefSP exe_ctx_ref_sp); 6528afa5437SGreg Clayton 6538afa5437SGreg Clayton extern "C" bool 6549fe00e52SEnrico Granata LLDBSwigPythonCallCommandObject (void *implementor, 6559fe00e52SEnrico Granata lldb::DebuggerSP& debugger, 6569fe00e52SEnrico Granata const char* args, 6579fe00e52SEnrico Granata lldb_private::CommandReturnObject& cmd_retobj, 6589fe00e52SEnrico Granata lldb::ExecutionContextRefSP exe_ctx_ref_sp); 6599fe00e52SEnrico Granata 6609fe00e52SEnrico Granata extern "C" bool 6618afa5437SGreg Clayton LLDBSwigPythonCallModuleInit (const char *python_module_name, 6628afa5437SGreg Clayton const char *session_dictionary_name, 6638afa5437SGreg Clayton lldb::DebuggerSP& debugger); 6648afa5437SGreg Clayton 6658afa5437SGreg Clayton extern "C" void* 6668afa5437SGreg Clayton LLDBSWIGPythonCreateOSPlugin (const char *python_class_name, 6678afa5437SGreg Clayton const char *session_dictionary_name, 6688afa5437SGreg Clayton const lldb::ProcessSP& process_sp); 6698afa5437SGreg Clayton 6708afa5437SGreg Clayton extern "C" bool 6718afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordProcess (const char* python_function_name, 6728afa5437SGreg Clayton const char* session_dictionary_name, 6738afa5437SGreg Clayton lldb::ProcessSP& process, 6748afa5437SGreg Clayton std::string& output); 6758afa5437SGreg Clayton 6768afa5437SGreg Clayton extern "C" bool 6778afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordThread (const char* python_function_name, 6788afa5437SGreg Clayton const char* session_dictionary_name, 6798afa5437SGreg Clayton lldb::ThreadSP& thread, 6808afa5437SGreg Clayton std::string& output); 6818afa5437SGreg Clayton 6828afa5437SGreg Clayton extern "C" bool 6838afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordTarget (const char* python_function_name, 6848afa5437SGreg Clayton const char* session_dictionary_name, 6858afa5437SGreg Clayton lldb::TargetSP& target, 6868afa5437SGreg Clayton std::string& output); 6878afa5437SGreg Clayton 6888afa5437SGreg Clayton extern "C" bool 6898afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordFrame (const char* python_function_name, 6908afa5437SGreg Clayton const char* session_dictionary_name, 691b57e4a1bSJason Molenda lldb::StackFrameSP& frame, 6928afa5437SGreg Clayton std::string& output); 6938afa5437SGreg Clayton 69488282c69SEnrico Granata extern "C" bool 69588282c69SEnrico Granata LLDBSWIGPythonRunScriptKeywordValue (const char* python_function_name, 69688282c69SEnrico Granata const char* session_dictionary_name, 69788282c69SEnrico Granata lldb::ValueObjectSP& value, 69888282c69SEnrico Granata std::string& output); 69988282c69SEnrico Granata 7008afa5437SGreg Clayton extern "C" void* 7018afa5437SGreg Clayton LLDBSWIGPython_GetDynamicSetting (void* module, 7028afa5437SGreg Clayton const char* setting, 7038afa5437SGreg Clayton const lldb::TargetSP& target_sp); 7048afa5437SGreg Clayton 705dce502edSGreg Clayton 706dce502edSGreg Clayton #endif 707dce502edSGreg Clayton 708fc36f791SGreg Clayton void 709fc36f791SGreg Clayton SBCommandInterpreter::InitializeSWIG () 710fc36f791SGreg Clayton { 711fc36f791SGreg Clayton static bool g_initialized = false; 712fc36f791SGreg Clayton if (!g_initialized) 713fc36f791SGreg Clayton { 714fc36f791SGreg Clayton g_initialized = true; 715dce502edSGreg Clayton #ifndef LLDB_DISABLE_PYTHON 7168afa5437SGreg Clayton ScriptInterpreter::InitializeInterpreter (init_lldb, 7178afa5437SGreg Clayton LLDBSwigPythonBreakpointCallbackFunction, 7188afa5437SGreg Clayton LLDBSwigPythonWatchpointCallbackFunction, 7198afa5437SGreg Clayton LLDBSwigPythonCallTypeScript, 7208afa5437SGreg Clayton LLDBSwigPythonCreateSyntheticProvider, 7219fe00e52SEnrico Granata LLDBSwigPythonCreateCommandObject, 7228afa5437SGreg Clayton LLDBSwigPython_CalculateNumChildren, 7238afa5437SGreg Clayton LLDBSwigPython_GetChildAtIndex, 7248afa5437SGreg Clayton LLDBSwigPython_GetIndexOfChildWithName, 7258afa5437SGreg Clayton LLDBSWIGPython_CastPyObjectToSBValue, 7268afa5437SGreg Clayton LLDBSWIGPython_GetValueObjectSPFromSBValue, 7278afa5437SGreg Clayton LLDBSwigPython_UpdateSynthProviderInstance, 7288afa5437SGreg Clayton LLDBSwigPython_MightHaveChildrenSynthProviderInstance, 729d07cfd3aSEnrico Granata LLDBSwigPython_GetValueSynthProviderInstance, 7308afa5437SGreg Clayton LLDBSwigPythonCallCommand, 7319fe00e52SEnrico Granata LLDBSwigPythonCallCommandObject, 7328afa5437SGreg Clayton LLDBSwigPythonCallModuleInit, 7338afa5437SGreg Clayton LLDBSWIGPythonCreateOSPlugin, 7348afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordProcess, 7358afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordThread, 7368afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordTarget, 7378afa5437SGreg Clayton LLDBSWIGPythonRunScriptKeywordFrame, 73888282c69SEnrico Granata LLDBSWIGPythonRunScriptKeywordValue, 7392bdbfd50SJim Ingham LLDBSWIGPython_GetDynamicSetting, 7402bdbfd50SJim Ingham LLDBSwigPythonCreateScriptedThreadPlan, 7412bdbfd50SJim Ingham LLDBSWIGPythonCallThreadPlan); 742dce502edSGreg Clayton #endif 743fc36f791SGreg Clayton } 744fc36f791SGreg Clayton } 745a9f7b79dSGreg Clayton 74621dfcd9dSEnrico Granata lldb::SBCommand 74721dfcd9dSEnrico Granata SBCommandInterpreter::AddMultiwordCommand (const char* name, const char* help) 74821dfcd9dSEnrico Granata { 74921dfcd9dSEnrico Granata CommandObjectMultiword *new_command = new CommandObjectMultiword(*m_opaque_ptr,name,help); 75021dfcd9dSEnrico Granata new_command->SetRemovable (true); 75121dfcd9dSEnrico Granata lldb::CommandObjectSP new_command_sp(new_command); 75221dfcd9dSEnrico Granata if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 75321dfcd9dSEnrico Granata return lldb::SBCommand(new_command_sp); 75421dfcd9dSEnrico Granata return lldb::SBCommand(); 75521dfcd9dSEnrico Granata } 75621dfcd9dSEnrico Granata 75721dfcd9dSEnrico Granata lldb::SBCommand 75821dfcd9dSEnrico Granata SBCommandInterpreter::AddCommand (const char* name, lldb::SBCommandPluginInterface* impl, const char* help) 75921dfcd9dSEnrico Granata { 76021dfcd9dSEnrico Granata lldb::CommandObjectSP new_command_sp; 76121dfcd9dSEnrico Granata new_command_sp.reset(new CommandPluginInterfaceImplementation(*m_opaque_ptr,name,impl,help)); 76221dfcd9dSEnrico Granata 76321dfcd9dSEnrico Granata if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 76421dfcd9dSEnrico Granata return lldb::SBCommand(new_command_sp); 76521dfcd9dSEnrico Granata return lldb::SBCommand(); 76621dfcd9dSEnrico Granata } 76721dfcd9dSEnrico Granata 76821dfcd9dSEnrico Granata SBCommand::SBCommand () 76921dfcd9dSEnrico Granata {} 77021dfcd9dSEnrico Granata 77121dfcd9dSEnrico Granata SBCommand::SBCommand (lldb::CommandObjectSP cmd_sp) : m_opaque_sp (cmd_sp) 77221dfcd9dSEnrico Granata {} 77321dfcd9dSEnrico Granata 77421dfcd9dSEnrico Granata bool 77521dfcd9dSEnrico Granata SBCommand::IsValid () 77621dfcd9dSEnrico Granata { 77721dfcd9dSEnrico Granata return (bool)m_opaque_sp; 77821dfcd9dSEnrico Granata } 77921dfcd9dSEnrico Granata 78021dfcd9dSEnrico Granata const char* 78121dfcd9dSEnrico Granata SBCommand::GetName () 78221dfcd9dSEnrico Granata { 78321dfcd9dSEnrico Granata if (IsValid ()) 78421dfcd9dSEnrico Granata return m_opaque_sp->GetCommandName (); 78521dfcd9dSEnrico Granata return NULL; 78621dfcd9dSEnrico Granata } 78721dfcd9dSEnrico Granata 78821dfcd9dSEnrico Granata const char* 78921dfcd9dSEnrico Granata SBCommand::GetHelp () 79021dfcd9dSEnrico Granata { 79121dfcd9dSEnrico Granata if (IsValid ()) 79221dfcd9dSEnrico Granata return m_opaque_sp->GetHelp (); 79321dfcd9dSEnrico Granata return NULL; 79421dfcd9dSEnrico Granata } 79521dfcd9dSEnrico Granata 796cc342da5SEnrico Granata const char* 797cc342da5SEnrico Granata SBCommand::GetHelpLong () 798cc342da5SEnrico Granata { 799cc342da5SEnrico Granata if (IsValid ()) 800cc342da5SEnrico Granata return m_opaque_sp->GetHelpLong (); 801cc342da5SEnrico Granata return NULL; 802cc342da5SEnrico Granata } 803cc342da5SEnrico Granata 804cc342da5SEnrico Granata void 805cc342da5SEnrico Granata SBCommand::SetHelp (const char* help) 806cc342da5SEnrico Granata { 807cc342da5SEnrico Granata if (IsValid()) 808cc342da5SEnrico Granata m_opaque_sp->SetHelp(help); 809cc342da5SEnrico Granata } 810cc342da5SEnrico Granata 811cc342da5SEnrico Granata void 812cc342da5SEnrico Granata SBCommand::SetHelpLong (const char* help) 813cc342da5SEnrico Granata { 814cc342da5SEnrico Granata if (IsValid()) 815cc342da5SEnrico Granata m_opaque_sp->SetHelpLong(help); 816cc342da5SEnrico Granata } 817cc342da5SEnrico Granata 81821dfcd9dSEnrico Granata lldb::SBCommand 81921dfcd9dSEnrico Granata SBCommand::AddMultiwordCommand (const char* name, const char* help) 82021dfcd9dSEnrico Granata { 82121dfcd9dSEnrico Granata if (!IsValid ()) 82221dfcd9dSEnrico Granata return lldb::SBCommand(); 82321dfcd9dSEnrico Granata if (m_opaque_sp->IsMultiwordObject() == false) 82421dfcd9dSEnrico Granata return lldb::SBCommand(); 82521dfcd9dSEnrico Granata CommandObjectMultiword *new_command = new CommandObjectMultiword(m_opaque_sp->GetCommandInterpreter(),name,help); 82621dfcd9dSEnrico Granata new_command->SetRemovable (true); 82721dfcd9dSEnrico Granata lldb::CommandObjectSP new_command_sp(new_command); 82821dfcd9dSEnrico Granata if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 82921dfcd9dSEnrico Granata return lldb::SBCommand(new_command_sp); 83021dfcd9dSEnrico Granata return lldb::SBCommand(); 83121dfcd9dSEnrico Granata } 83221dfcd9dSEnrico Granata 83321dfcd9dSEnrico Granata lldb::SBCommand 83421dfcd9dSEnrico Granata SBCommand::AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, const char* help) 83521dfcd9dSEnrico Granata { 83621dfcd9dSEnrico Granata if (!IsValid ()) 83721dfcd9dSEnrico Granata return lldb::SBCommand(); 83821dfcd9dSEnrico Granata if (m_opaque_sp->IsMultiwordObject() == false) 83921dfcd9dSEnrico Granata return lldb::SBCommand(); 84021dfcd9dSEnrico Granata lldb::CommandObjectSP new_command_sp; 84121dfcd9dSEnrico Granata new_command_sp.reset(new CommandPluginInterfaceImplementation(m_opaque_sp->GetCommandInterpreter(),name,impl,help)); 84221dfcd9dSEnrico Granata if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 84321dfcd9dSEnrico Granata return lldb::SBCommand(new_command_sp); 84421dfcd9dSEnrico Granata return lldb::SBCommand(); 84521dfcd9dSEnrico Granata } 84621dfcd9dSEnrico Granata 847