124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBCommandInterpreter.cpp --------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-types.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/SourceManager.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Listener.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandInterpreter.h" 166d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata#include "lldb/Interpreter/CommandObjectMultiword.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBBroadcaster.h" 21d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBCommandReturnObject.h" 22d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBCommandInterpreter.h" 23d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBProcess.h" 24d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBTarget.h" 25d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBListener.h" 267826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/API/SBStream.h" 27d6ec8aaa74c926cab7147259cdf772b1338d0336Eli Friedman#include "lldb/API/SBStringList.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 326d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataclass CommandPluginInterfaceImplementation : public CommandObjectParsed 336d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 346d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatapublic: 356d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata CommandPluginInterfaceImplementation (CommandInterpreter &interpreter, 366d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata const char *name, 376d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBCommandPluginInterface* backend, 386d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata const char *help = NULL, 396d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata const char *syntax = NULL, 406d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata uint32_t flags = 0) : 416d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata CommandObjectParsed (interpreter, name, help, syntax, flags), 426d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata m_backend(backend) {} 436d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 446d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata virtual bool 45f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton IsRemovable() const { return true; } 466d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 476d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataprotected: 486d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata virtual bool 496d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata DoExecute (Args& command, CommandReturnObject &result) 506d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata { 516d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata SBCommandReturnObject sb_return(&result); 526d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata SBCommandInterpreter sb_interpreter(&m_interpreter); 536d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata SBDebugger debugger_sb(m_interpreter.GetDebugger().shared_from_this()); 546d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata bool ret = m_backend->DoExecute (debugger_sb,(char**)command.GetArgumentVector(), sb_return); 556d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata sb_return.Release(); 566d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return ret; 576d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata } 586d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::SBCommandPluginInterface* m_backend; 596d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata}; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6163094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) : 6263094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr (interpreter) 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 64952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 657826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 667826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 67a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBCommandInterpreter::SBCommandInterpreter (interpreter=%p)" 68a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton " => SBCommandInterpreter(%p)", interpreter, m_opaque_ptr); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 71538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBCommandInterpreter::SBCommandInterpreter(const SBCommandInterpreter &rhs) : 72538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 73538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 74538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 75538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 76538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBCommandInterpreter & 77538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBCommandInterpreter::operator = (const SBCommandInterpreter &rhs) 78538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 79538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 80538eb82a89a68dbc57251915080bd5152b333978Greg Clayton return *this; 81538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 82538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::~SBCommandInterpreter () 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 8863094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBCommandInterpreter::IsValid() const 8963094e0bb161580564954dee512955c1c79d3476Greg Clayton{ 9063094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr != NULL; 9163094e0bb161580564954dee512955c1c79d3476Greg Clayton} 9263094e0bb161580564954dee512955c1c79d3476Greg Clayton 9363094e0bb161580564954dee512955c1c79d3476Greg Clayton 9463094e0bb161580564954dee512955c1c79d3476Greg Claytonbool 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::CommandExists (const char *cmd) 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 97bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen if (cmd && m_opaque_ptr) 9863094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->CommandExists (cmd); 9963094e0bb161580564954dee512955c1c79d3476Greg Clayton return false; 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::AliasExists (const char *cmd) 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 105bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen if (cmd && m_opaque_ptr) 10663094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->AliasExists (cmd); 10763094e0bb161580564954dee512955c1c79d3476Greg Clayton return false; 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::ReturnStatus 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history) 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 113952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1147826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 1157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 11649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p), add_to_history=%i)", 11749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, command_line, result.get(), add_to_history); 1187826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.Clear(); 120bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen if (command_line && m_opaque_ptr) 12163094e0bb161580564954dee512955c1c79d3476Greg Clayton { 12201bc2d493b48e4904e3241a7768e18fdd9bb6835Enrico Granata m_opaque_ptr->HandleCommand (command_line, add_to_history ? eLazyBoolYes : eLazyBoolNo, result.ref()); 12363094e0bb161580564954dee512955c1c79d3476Greg Clayton } 12463094e0bb161580564954dee512955c1c79d3476Greg Clayton else 12563094e0bb161580564954dee512955c1c79d3476Greg Clayton { 126bab8cc9b05a2559759ec3252c6c519ca77479675Johnny Chen result->AppendError ("SBCommandInterpreter or the command line is not valid"); 12763094e0bb161580564954dee512955c1c79d3476Greg Clayton result->SetStatus (eReturnStatusFailed); 12863094e0bb161580564954dee512955c1c79d3476Greg Clayton } 1297826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 1307de24cc82694ad5cdde03b90c2546b7d56b251ceCaroline Tice // We need to get the value again, in case the command disabled the log! 1317de24cc82694ad5cdde03b90c2546b7d56b251ceCaroline Tice log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 1327826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 1337826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 1347826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 1357826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice result.GetDescription (sstr); 13649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p): %s, add_to_history=%i) => %i", 13749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ptr, command_line, result.get(), sstr.GetData(), add_to_history, result.GetStatus()); 1387826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 1397826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.GetStatus(); 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::HandleCompletion (const char *current_line, 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *cursor, 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *last_char, 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int match_start_point, 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int max_return_elements, 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBStringList &matches) 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 151952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 15263094e0bb161580564954dee512955c1c79d3476Greg Clayton int num_completions = 0; 1533cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham 1543cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham // Sanity check the arguments that are passed in: 1553cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham // cursor & last_char have to be within the current_line. 1563cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham if (current_line == NULL || cursor == NULL || last_char == NULL) 1573cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham return 0; 1583cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham 1593cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham if (cursor < current_line || last_char < current_line) 1603cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham return 0; 1613cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham 1623cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham size_t current_line_size = strlen (current_line); 1633cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham if (cursor - current_line > current_line_size || last_char - current_line > current_line_size) 1643cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham return 0; 1653cbf848f6d6ab60cdbe232083a4cc9e56054ca6eJim Ingham 166bc8c4996019433dbf3437e690ec9aa16730194d8Jim Ingham if (log) 1675f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBCommandInterpreter(%p)::HandleCompletion (current_line=\"%s\", cursor at: %" PRId64 ", last char at: %" PRId64 ", match_start_point: %d, max_return_elements: %d)", 168a092d901bec2beaed29603acad318d8d93da3f4aJason Molenda m_opaque_ptr, current_line, (uint64_t) (cursor - current_line), (uint64_t) (last_char - current_line), match_start_point, max_return_elements); 169bc8c4996019433dbf3437e690ec9aa16730194d8Jim Ingham 17063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 17163094e0bb161580564954dee512955c1c79d3476Greg Clayton { 17263094e0bb161580564954dee512955c1c79d3476Greg Clayton lldb_private::StringList lldb_matches; 17363094e0bb161580564954dee512955c1c79d3476Greg Clayton num_completions = m_opaque_ptr->HandleCompletion (current_line, cursor, last_char, match_start_point, 17463094e0bb161580564954dee512955c1c79d3476Greg Clayton max_return_elements, lldb_matches); 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17663094e0bb161580564954dee512955c1c79d3476Greg Clayton SBStringList temp_list (&lldb_matches); 17763094e0bb161580564954dee512955c1c79d3476Greg Clayton matches.AppendList (temp_list); 17863094e0bb161580564954dee512955c1c79d3476Greg Clayton } 179bc8c4996019433dbf3437e690ec9aa16730194d8Jim Ingham if (log) 180bc8c4996019433dbf3437e690ec9aa16730194d8Jim Ingham log->Printf ("SBCommandInterpreter(%p)::HandleCompletion - Found %d completions.", m_opaque_ptr, num_completions); 181bc8c4996019433dbf3437e690ec9aa16730194d8Jim Ingham 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return num_completions; 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18503c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Inghamint 18603c8ee5aeafcd6c43f10002a4f8096af01780f86Jim InghamSBCommandInterpreter::HandleCompletion (const char *current_line, 18703c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham uint32_t cursor_pos, 18803c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham int match_start_point, 18903c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham int max_return_elements, 19003c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham lldb::SBStringList &matches) 19103c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham{ 19203c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham const char *cursor = current_line + cursor_pos; 19303c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham const char *last_char = current_line + strlen (current_line); 19403c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham return HandleCompletion (current_line, cursor, last_char, match_start_point, max_return_elements, matches); 19503c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham} 19603c8ee5aeafcd6c43f10002a4f8096af01780f86Jim Ingham 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::HasCommands () 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 20063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 20163094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->HasCommands(); 20263094e0bb161580564954dee512955c1c79d3476Greg Clayton return false; 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::HasAliases () 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 20863094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 20963094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->HasAliases(); 21063094e0bb161580564954dee512955c1c79d3476Greg Clayton return false; 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::HasAliasOptions () 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 21763094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr->HasAliasOptions (); 21863094e0bb161580564954dee512955c1c79d3476Greg Clayton return false; 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::GetProcess () 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 224334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton SBProcess sb_process; 225334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton ProcessSP process_sp; 22663094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 228bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 229bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (target_sp) 230bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton { 231bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker(target_sp->GetAPIMutex()); 232334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton process_sp = target_sp->GetProcessSP(); 233334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton sb_process.SetSP(process_sp); 234bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton } 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 236952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 237a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 238a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 239a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBCommandInterpreter(%p)::GetProcess () => SBProcess(%p)", 240334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton m_opaque_ptr, process_sp.get()); 241a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 242a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 243334d33a19fd28cf41cba74cc61cf149e7101a603Greg Clayton return sb_process; 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2466d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBDebugger 2476d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommandInterpreter::GetDebugger () 2486d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 2496d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata SBDebugger sb_debugger; 2506d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (m_opaque_ptr) 2516d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata sb_debugger.reset(m_opaque_ptr->GetDebugger().shared_from_this()); 252952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2536d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 2546d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (log) 2556d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata log->Printf ("SBCommandInterpreter(%p)::GetDebugger () => SBDebugger(%p)", 2566d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata m_opaque_ptr, sb_debugger.get()); 2576d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 2586d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 2596d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return sb_debugger; 2606d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 2616d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandInterpreter * 26363094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBCommandInterpreter::get () 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 26563094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr; 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandInterpreter & 26963094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBCommandInterpreter::ref () 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 27163094e0bb161580564954dee512955c1c79d3476Greg Clayton assert (m_opaque_ptr); 27263094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ptr; 27363094e0bb161580564954dee512955c1c79d3476Greg Clayton} 27463094e0bb161580564954dee512955c1c79d3476Greg Clayton 27563094e0bb161580564954dee512955c1c79d3476Greg Claytonvoid 27663094e0bb161580564954dee512955c1c79d3476Greg ClaytonSBCommandInterpreter::reset (lldb_private::CommandInterpreter *interpreter) 27763094e0bb161580564954dee512955c1c79d3476Greg Clayton{ 27863094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr = interpreter; 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::SourceInitFileInHomeDirectory (SBCommandReturnObject &result) 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.Clear(); 28563094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 28663094e0bb161580564954dee512955c1c79d3476Greg Clayton { 287bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 288bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker; 289bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (target_sp) 2901b584ebc1de8b50fe375cffb5fb33ad13be10046Jim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 29163094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr->SourceInitFile (false, result.ref()); 29263094e0bb161580564954dee512955c1c79d3476Greg Clayton } 29363094e0bb161580564954dee512955c1c79d3476Greg Clayton else 29463094e0bb161580564954dee512955c1c79d3476Greg Clayton { 29563094e0bb161580564954dee512955c1c79d3476Greg Clayton result->AppendError ("SBCommandInterpreter is not valid"); 29663094e0bb161580564954dee512955c1c79d3476Greg Clayton result->SetStatus (eReturnStatusFailed); 29763094e0bb161580564954dee512955c1c79d3476Greg Clayton } 298952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 299a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 300a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 301a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInHomeDirectory (&SBCommandReturnObject(%p))", 302a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton m_opaque_ptr, result.get()); 303a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result) 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.Clear(); 31063094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ptr) 31163094e0bb161580564954dee512955c1c79d3476Greg Clayton { 312bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 313bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton Mutex::Locker api_locker; 314bdcda468276dc9ab6bf648fc8cc07f3faad91526Greg Clayton if (target_sp) 3151b584ebc1de8b50fe375cffb5fb33ad13be10046Jim Ingham api_locker.Lock(target_sp->GetAPIMutex()); 31663094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr->SourceInitFile (true, result.ref()); 31763094e0bb161580564954dee512955c1c79d3476Greg Clayton } 31863094e0bb161580564954dee512955c1c79d3476Greg Clayton else 31963094e0bb161580564954dee512955c1c79d3476Greg Clayton { 32063094e0bb161580564954dee512955c1c79d3476Greg Clayton result->AppendError ("SBCommandInterpreter is not valid"); 32163094e0bb161580564954dee512955c1c79d3476Greg Clayton result->SetStatus (eReturnStatusFailed); 32263094e0bb161580564954dee512955c1c79d3476Greg Clayton } 323952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 324a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 325a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 326a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInCurrentWorkingDirectory (&SBCommandReturnObject(%p))", 327a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton m_opaque_ptr, result.get()); 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBroadcaster 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBCommandInterpreter::GetBroadcaster () 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 333952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3347826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 33563094e0bb161580564954dee512955c1c79d3476Greg Clayton SBBroadcaster broadcaster (m_opaque_ptr, false); 3367826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 3377826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 338a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton log->Printf ("SBCommandInterpreter(%p)::GetBroadcaster() => SBBroadcaster(%p)", 33961ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice m_opaque_ptr, broadcaster.get()); 3407826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return broadcaster; 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3445a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Inghamconst char * 3455a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim InghamSBCommandInterpreter::GetBroadcasterClass () 3465a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham{ 3475a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham return Communication::GetStaticBroadcasterClass().AsCString(); 3485a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham} 3495a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham 350aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Claytonconst char * 351aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg ClaytonSBCommandInterpreter::GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type) 352aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton{ 353aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return CommandObject::GetArgumentTypeAsCString (arg_type); 354aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton} 355aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 356aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Claytonconst char * 357aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg ClaytonSBCommandInterpreter::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type) 358aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton{ 359aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return CommandObject::GetArgumentDescriptionAsCString (arg_type); 360aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton} 361aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 362f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Claytonbool 363f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg ClaytonSBCommandInterpreter::SetCommandOverrideCallback (const char *command_name, 364f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton lldb::CommandOverrideCallback callback, 365f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton void *baton) 366f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton{ 367f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton if (command_name && command_name[0] && m_opaque_ptr) 368f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton { 3695f2b926834ef43ae25cf3afdabaf4c79fda1153eGreg Clayton std::string command_name_str (command_name); 3705f2b926834ef43ae25cf3afdabaf4c79fda1153eGreg Clayton CommandObject *cmd_obj = m_opaque_ptr->GetCommandObjectForCommand(command_name_str); 371f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton if (cmd_obj) 372f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton { 3735f2b926834ef43ae25cf3afdabaf4c79fda1153eGreg Clayton assert(command_name_str.empty()); 374f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton cmd_obj->SetOverrideCallback (callback, baton); 375f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton return true; 376f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton } 377f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton } 378f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton return false; 379f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton} 380aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 3813e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#ifndef LLDB_DISABLE_PYTHON 382c2a2825d787be5459fc55264e55b6020ff62f68aEnrico Granata 3833e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton// Defined in the SWIG source file 3843e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Claytonextern "C" void 3853e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Claytoninit_lldb(void); 3863e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton 3873e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#else 388c2a2825d787be5459fc55264e55b6020ff62f68aEnrico Granata 389e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Claytonextern "C" void init_lldb(void); 390e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton 3913e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton// Usually defined in the SWIG source file, but we have sripting disabled 3923e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Claytonextern "C" void 3933e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Claytoninit_lldb(void) 3943e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton{ 3953e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton} 3963e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton 3973e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#endif 3983e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton 399e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Claytonvoid 400e86cbb9ef128db87cf904e330b2edfc15566bacdGreg ClaytonSBCommandInterpreter::InitializeSWIG () 401e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton{ 402e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton static bool g_initialized = false; 403e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton if (!g_initialized) 404e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton { 405e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton g_initialized = true; 4063e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#ifndef LLDB_DISABLE_PYTHON 4071328b1410eb0f5e03c3b3ee302e9adca3e1b0361Enrico Granata ScriptInterpreter::InitializeInterpreter (init_lldb); 4083e4238d47a6d1a3106f357d2e7b495870721c7aeGreg Clayton#endif 409e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton } 410e86cbb9ef128db87cf904e330b2edfc15566bacdGreg Clayton} 411f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton 4126d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::SBCommand 4136d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommandInterpreter::AddMultiwordCommand (const char* name, const char* help) 4146d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4156d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata CommandObjectMultiword *new_command = new CommandObjectMultiword(*m_opaque_ptr,name,help); 4166d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata new_command->SetRemovable (true); 4176d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::CommandObjectSP new_command_sp(new_command); 4186d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 4196d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(new_command_sp); 4206d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4216d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4226d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4236d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::SBCommand 4246d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommandInterpreter::AddCommand (const char* name, lldb::SBCommandPluginInterface* impl, const char* help) 4256d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4266d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::CommandObjectSP new_command_sp; 4276d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata new_command_sp.reset(new CommandPluginInterfaceImplementation(*m_opaque_ptr,name,impl,help)); 4286d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4296d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 4306d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(new_command_sp); 4316d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4326d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4336d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4346d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::SBCommand () 4356d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{} 4366d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4376d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::SBCommand (lldb::CommandObjectSP cmd_sp) : m_opaque_sp (cmd_sp) 4386d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{} 4396d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4406d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatabool 4416d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::IsValid () 4426d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4436d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return (bool)m_opaque_sp; 4446d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4456d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4466d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataconst char* 4476d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::GetName () 4486d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4496d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (IsValid ()) 4506d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return m_opaque_sp->GetCommandName (); 4516d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return NULL; 4526d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4536d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4546d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granataconst char* 4556d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::GetHelp () 4566d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4576d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (IsValid ()) 4586d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return m_opaque_sp->GetHelp (); 4596d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return NULL; 4606d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4616d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4626d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::SBCommand 4636d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::AddMultiwordCommand (const char* name, const char* help) 4646d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4656d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (!IsValid ()) 4666d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4676d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (m_opaque_sp->IsMultiwordObject() == false) 4686d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4696d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata CommandObjectMultiword *new_command = new CommandObjectMultiword(m_opaque_sp->GetCommandInterpreter(),name,help); 4706d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata new_command->SetRemovable (true); 4716d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::CommandObjectSP new_command_sp(new_command); 4726d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 4736d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(new_command_sp); 4746d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4756d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4766d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 4776d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granatalldb::SBCommand 4786d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico GranataSBCommand::AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, const char* help) 4796d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata{ 4806d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (!IsValid ()) 4816d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4826d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (m_opaque_sp->IsMultiwordObject() == false) 4836d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4846d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata lldb::CommandObjectSP new_command_sp; 4856d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata new_command_sp.reset(new CommandPluginInterfaceImplementation(m_opaque_sp->GetCommandInterpreter(),name,impl,help)); 4866d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 4876d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(new_command_sp); 4886d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata return lldb::SBCommand(); 4896d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata} 4906d101887bb427b3c879c0c06775ab4dcb1cd265bEnrico Granata 491