11d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek//===-- SBCommandInterpreter.cpp --------------------------------*- C++ -*-===// 297ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// 397ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// The LLVM Compiler Infrastructure 497ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// 597ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// This file is distributed under the University of Illinois Open Source 697ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// License. See LICENSE.TXT for details. 797ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu// 897ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu//===----------------------------------------------------------------------===// 997ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 101d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek#include "lldb/lldb-python.h" 1197ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 1297ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu#include "lldb/lldb-types.h" 1397ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu#include "lldb/Core/SourceManager.h" 1497ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu#include "lldb/Core/Listener.h" 1555fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#include "lldb/Interpreter/CommandInterpreter.h" 1655fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#include "lldb/Interpreter/CommandObjectMultiword.h" 17471c8b49982d1132f30b0b0da27fef94fd6e4f67Benjamin Kramer#include "lldb/Interpreter/CommandReturnObject.h" 1897ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu#include "lldb/Target/Target.h" 1997ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 20fa6ef180c0d3609124217387618fbb51bbdd2e48Mike Stump#include "lldb/API/SBBroadcaster.h" 2197ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu#include "lldb/API/SBCommandReturnObject.h" 22b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek#include "lldb/API/SBCommandInterpreter.h" 2355fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#include "lldb/API/SBProcess.h" 242cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek#include "lldb/API/SBTarget.h" 25db34ab70961ca4b24b600eb47053d7af304659f5Tom Care#include "lldb/API/SBListener.h" 262cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek#include "lldb/API/SBStream.h" 27283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek#include "lldb/API/SBStringList.h" 28b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek 299b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramerusing namespace lldb; 3087a05f1fe8ae14044f182b015b279e0a6f4cbdd1Mike Stumpusing namespace lldb_private; 3155fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass CommandPluginInterfaceImplementation : public CommandObjectParsed 33a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek{ 3497ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xupublic: 3597ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu CommandPluginInterfaceImplementation (CommandInterpreter &interpreter, 36a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek const char *name, 37a5937bbfd19e61d651a58b0f0ffeef68457902a5Ted Kremenek lldb::SBCommandPluginInterface* backend, 381d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek const char *help = NULL, 39a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek const char *syntax = NULL, 40a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek uint32_t flags = 0) : 41b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek CommandObjectParsed (interpreter, name, help, syntax, flags), 42b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek m_backend(backend) {} 43bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines virtual bool 45bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek IsRemovable() const { return true; } 46bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesprotected: 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines virtual bool 49bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek DoExecute (Args& command, CommandReturnObject &result) 50b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek { 51bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek SBCommandReturnObject sb_return(&result); 52bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek SBCommandInterpreter sb_interpreter(&m_interpreter); 531d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek SBDebugger debugger_sb(m_interpreter.GetDebugger().shared_from_this()); 54a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek bool ret = m_backend->DoExecute (debugger_sb,(char**)command.GetArgumentVector(), sb_return); 55b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek sb_return.Release(); 56b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek return ret; 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 58bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek lldb::SBCommandPluginInterface* m_backend; 59bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek}; 606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesSBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) : 62bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek m_opaque_ptr (interpreter) 63bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek{ 64bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 65bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek 661d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek if (log) 675a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose log->Printf ("SBCommandInterpreter::SBCommandInterpreter (interpreter=%p)" 685a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose " => SBCommandInterpreter(%p)", interpreter, m_opaque_ptr); 69a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek} 7002a88c3edf1aeb9580e0b6e444b30c52846a673cTed Kremenek 71651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesSBCommandInterpreter::SBCommandInterpreter(const SBCommandInterpreter &rhs) : 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines m_opaque_ptr (rhs.m_opaque_ptr) 73a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek{ 74a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek} 75bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek 76b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenekconst SBCommandInterpreter & 77b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted KremenekSBCommandInterpreter::operator = (const SBCommandInterpreter &rhs) 785a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose{ 7902a88c3edf1aeb9580e0b6e444b30c52846a673cTed Kremenek m_opaque_ptr = rhs.m_opaque_ptr; 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return *this; 81b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek} 82b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek 831d26f48dc2eea1c07431ca1519d7034a21b9bcffTed KremenekSBCommandInterpreter::~SBCommandInterpreter () 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 8558f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek} 8658f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek 87a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenekbool 88a43df9539644bf1c258e12710cd69d79b0b078cdTed KremenekSBCommandInterpreter::IsValid() const 89a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek{ 90a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek return m_opaque_ptr != NULL; 91a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek} 92453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks 9322c0cbee5bb2150841e0046354fd37ba22de747aNAKAMURA Takumi 94a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenekbool 95a43df9539644bf1c258e12710cd69d79b0b078cdTed KremenekSBCommandInterpreter::CommandExists (const char *cmd) 96453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks{ 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (cmd && m_opaque_ptr) 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return m_opaque_ptr->CommandExists (cmd); 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return false; 100453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks} 101a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek 102a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenekbool 103651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesSBCommandInterpreter::AliasExists (const char *cmd) 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (cmd && m_opaque_ptr) 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return m_opaque_ptr->AliasExists (cmd); 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return false; 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hineslldb::ReturnStatus 111651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesSBCommandInterpreter::HandleCommand (const char *command_line, SBCommandReturnObject &result, bool add_to_history) 11230a45344c827a8346f6ecfda56b7811d1e031767Ted Kremenek{ 113fa6ef180c0d3609124217387618fbb51bbdd2e48Mike Stump Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 114fa6ef180c0d3609124217387618fbb51bbdd2e48Mike Stump 115fa6ef180c0d3609124217387618fbb51bbdd2e48Mike Stump if (log) 11697ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p), add_to_history=%i)", 1179f61aa9e280adea9fbf3365f0e4f6ed568c9885aJeffrey Yasskin m_opaque_ptr, command_line, result.get(), add_to_history); 11897ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 11997ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu result.Clear(); 120453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks if (command_line && m_opaque_ptr) 121453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks { 122453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks m_opaque_ptr->HandleCommand (command_line, add_to_history ? eLazyBoolYes : eLazyBoolNo, result.ref()); 123453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks } 124453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks else 125453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks { 126453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks result->AppendError ("SBCommandInterpreter or the command line is not valid"); 127453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks result->SetStatus (eReturnStatusFailed); 128453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks } 129453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks 130453cb859a3c8dcafe79ae840dfc35ff8eae1b4b3Anna Zaks // We need to get the value again, in case the command disabled the log! 1311d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 13282cd37cf1cccde162d1f13eda6cdfe1398216f36Ted Kremenek if (log) 13382cd37cf1cccde162d1f13eda6cdfe1398216f36Ted Kremenek { 134ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek SBStream sstr; 135ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek result.GetDescription (sstr); 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines log->Printf ("SBCommandInterpreter(%p)::HandleCommand (command=\"%s\", SBCommandReturnObject(%p): %s, add_to_history=%i) => %i", 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines m_opaque_ptr, command_line, result.get(), sstr.GetData(), add_to_history, result.GetStatus()); 138ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek } 139ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek 140ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek return result.GetStatus(); 141ccf1bfde160c03c677ba530c9dcb77365a9c2d7bTed Kremenek} 1421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint 14482cd37cf1cccde162d1f13eda6cdfe1398216f36Ted KremenekSBCommandInterpreter::HandleCompletion (const char *current_line, 14582cd37cf1cccde162d1f13eda6cdfe1398216f36Ted Kremenek const char *cursor, 1461d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek const char *last_char, 1470d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek int match_start_point, 1480d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek int max_return_elements, 1490d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek SBStringList &matches) 150ac73ea8c12772fd0dcec71b83c193a2837de7f8bJordy Rose{ 151ac73ea8c12772fd0dcec71b83c193a2837de7f8bJordy Rose Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1520d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek int num_completions = 0; 1530d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek 1540d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek // Sanity check the arguments that are passed in: 1550d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek // cursor & last_char have to be within the current_line. 1561d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek if (current_line == NULL || cursor == NULL || last_char == NULL) 1570d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek return 0; 158ac73ea8c12772fd0dcec71b83c193a2837de7f8bJordy Rose 159ac73ea8c12772fd0dcec71b83c193a2837de7f8bJordy Rose if (cursor < current_line || last_char < current_line) 1600d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek return 0; 1610d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek 1620d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek size_t current_line_size = strlen (current_line); 1630d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek if (cursor - current_line > current_line_size || last_char - current_line > current_line_size) 1640d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek return 0; 1650d28d360b5559abda755e50b855ba5e59727d9cdTed Kremenek 16649a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose if (log) 16749a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose log->Printf ("SBCommandInterpreter(%p)::HandleCompletion (current_line=\"%s\", cursor at: %" PRId64 ", last char at: %" PRId64 ", match_start_point: %d, max_return_elements: %d)", 16849a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose m_opaque_ptr, current_line, (uint64_t) (cursor - current_line), (uint64_t) (last_char - current_line), match_start_point, max_return_elements); 16949a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose 17049a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose if (m_opaque_ptr) 17149a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose { 17249a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose lldb_private::StringList lldb_matches; 17349a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose num_completions = m_opaque_ptr->HandleCompletion (current_line, cursor, last_char, match_start_point, 17449a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose max_return_elements, lldb_matches); 17549a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose 17649a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose SBStringList temp_list (&lldb_matches); 17749a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose matches.AppendList (temp_list); 17849a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose } 1791d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek if (log) 180bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek log->Printf ("SBCommandInterpreter(%p)::HandleCompletion - Found %d completions.", m_opaque_ptr, num_completions); 1819b823e8e1ccb8a2cb49923bad22a80ca96f41f92Ted Kremenek 1829b823e8e1ccb8a2cb49923bad22a80ca96f41f92Ted Kremenek return num_completions; 183d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek} 184b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek 185b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenekint 186d064fdc4b7b64ca55b40b70490c79d6f569df78eTed KremenekSBCommandInterpreter::HandleCompletion (const char *current_line, 187d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek uint32_t cursor_pos, 188d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek int match_start_point, 18949a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose int max_return_elements, 19049a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose lldb::SBStringList &matches) 19149a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose{ 1926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const char *cursor = current_line + cursor_pos; 1936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const char *last_char = current_line + strlen (current_line); 1946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return HandleCompletion (current_line, cursor, last_char, match_start_point, max_return_elements, matches); 195d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek} 196b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek 19797ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xubool 19897ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing XuSBCommandInterpreter::HasCommands () 1991d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek{ 200ad5a894df1841698c824381b414630799adc26caTed Kremenek if (m_opaque_ptr) 201bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek return m_opaque_ptr->HasCommands(); 202bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek return false; 203bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek} 204bc5cb8a5fe2b88f917d47ceb58b53696a121e57eTed Kremenek 205ad5a894df1841698c824381b414630799adc26caTed Kremenekbool 206ad5a894df1841698c824381b414630799adc26caTed KremenekSBCommandInterpreter::HasAliases () 207ad5a894df1841698c824381b414630799adc26caTed Kremenek{ 20849a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose if (m_opaque_ptr) 20949a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose return m_opaque_ptr->HasAliases(); 21049a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose return false; 2116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 2126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 2136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesbool 214ad5a894df1841698c824381b414630799adc26caTed KremenekSBCommandInterpreter::HasAliasOptions () 215b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek{ 216ad5a894df1841698c824381b414630799adc26caTed Kremenek if (m_opaque_ptr) 217ad5a894df1841698c824381b414630799adc26caTed Kremenek return m_opaque_ptr->HasAliasOptions (); 2181d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek return false; 219283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek} 220b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek 221283a358aecb75e30fcd486f2206f6c03c5e7f11dTed KremenekSBProcess 222283a358aecb75e30fcd486f2206f6c03c5e7f11dTed KremenekSBCommandInterpreter::GetProcess () 223b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek{ 224b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek SBProcess sb_process; 225283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek ProcessSP process_sp; 2266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (m_opaque_ptr) 2276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines { 228283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 22942461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek if (target_sp) 2301d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek { 23142461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek Mutex::Locker api_locker(target_sp->GetAPIMutex()); 232b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek process_sp = target_sp->GetProcessSP(); 23342461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek sb_process.SetSP(process_sp); 23442461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek } 235af13d5b25b360e698cc1cf1055ad7d14e008e505Ted Kremenek } 236b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 23742461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek 2386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (log) 2396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines log->Printf ("SBCommandInterpreter(%p)::GetProcess () => SBProcess(%p)", 24042461eecee98fff3671b3c14ce10f1a9e18cc95cTed Kremenek m_opaque_ptr, process_sp.get()); 241283a358aecb75e30fcd486f2206f6c03c5e7f11dTed Kremenek 242682060c5d95f6e4f79536013781ab0870cdd3850Ted Kremenek 2434e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie return sb_process; 24404eeba43040969c05cfcb563195ef5b199297b62Anders Carlsson} 24504eeba43040969c05cfcb563195ef5b199297b62Anders Carlsson 2461d26f48dc2eea1c07431ca1519d7034a21b9bcffTed KremenekSBDebugger 2471d3ca251f9891623fac0dbe70eece42564e274edJordan RoseSBCommandInterpreter::GetDebugger () 248bb518991ce4298d8662235fc8cb13813f011c18dJordan Rose{ 249bb518991ce4298d8662235fc8cb13813f011c18dJordan Rose SBDebugger sb_debugger; 250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (m_opaque_ptr) 251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines sb_debugger.reset(m_opaque_ptr->GetDebugger().shared_from_this()); 252bb518991ce4298d8662235fc8cb13813f011c18dJordan Rose Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 253bb518991ce4298d8662235fc8cb13813f011c18dJordan Rose 25449a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose if (log) 25549a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose log->Printf ("SBCommandInterpreter(%p)::GetDebugger () => SBDebugger(%p)", 25649a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose m_opaque_ptr, sb_debugger.get()); 25749a246f4fad959888bb0164c624c3c2b03078e91Jordan Rose 2581d3ca251f9891623fac0dbe70eece42564e274edJordan Rose 25997ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu return sb_debugger; 26097ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu} 26197ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 2621d26f48dc2eea1c07431ca1519d7034a21b9bcffTed KremenekCommandInterpreter * 263245adabd97c8c770c13935a9075f2243cc6f1d57Tom CareSBCommandInterpreter::get () 264b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek{ 265b8ad5ee345fa1fdd1fa9253f2d01f69becc88a04Ted Kremenek return m_opaque_ptr; 266245adabd97c8c770c13935a9075f2243cc6f1d57Tom Care} 267245adabd97c8c770c13935a9075f2243cc6f1d57Tom Care 268d200187bd27f9ad68699693a6e57f9ee3ff260faJordy RoseCommandInterpreter & 269a43df9539644bf1c258e12710cd69d79b0b078cdTed KremenekSBCommandInterpreter::ref () 27081d18bf944bd885c48b693c2c8c651607001ad9dTed Kremenek{ 27181d18bf944bd885c48b693c2c8c651607001ad9dTed Kremenek assert (m_opaque_ptr); 272a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek return *m_opaque_ptr; 273a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek} 274a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek 275a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenekvoid 2761d26f48dc2eea1c07431ca1519d7034a21b9bcffTed KremenekSBCommandInterpreter::reset (lldb_private::CommandInterpreter *interpreter) 2772376002038c8b904acd20be754aedd1a7471be71Ted Kremenek{ 278d200187bd27f9ad68699693a6e57f9ee3ff260faJordy Rose m_opaque_ptr = interpreter; 2792376002038c8b904acd20be754aedd1a7471be71Ted Kremenek} 28097ab3941effe1f508c7113d9aa0c2887774f6fa8Zhongxing Xu 28118c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xuvoid 282b1b5daf30d2597e066936772bd206500232d7d65Ted KremenekSBCommandInterpreter::SourceInitFileInHomeDirectory (SBCommandReturnObject &result) 2831d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek{ 284b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek result.Clear(); 285b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek if (m_opaque_ptr) 286b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek { 287b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 2887fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek Mutex::Locker api_locker; 2897fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek if (target_sp) 2907fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek api_locker.Lock(target_sp->GetAPIMutex()); 2917fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek m_opaque_ptr->SourceInitFile (false, result.ref()); 2927fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek } 2937fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek else 2947fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek { 2957fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek result->AppendError ("SBCommandInterpreter is not valid"); 2961d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek result->SetStatus (eReturnStatusFailed); 297b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek } 2981d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 299b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek 300b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek if (log) 301b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInHomeDirectory (&SBCommandReturnObject(%p))", 302dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek m_opaque_ptr, result.get()); 303dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek 304dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek} 305dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek 306dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenekvoid 307dc0d909f0f6684159c8475db1a15967e5613cb27Ted KremenekSBCommandInterpreter::SourceInitFileInCurrentWorkingDirectory (SBCommandReturnObject &result) 3081d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek{ 309dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek result.Clear(); 3109c378f705405d37f49795d5e915989de774fe11fTed Kremenek if (m_opaque_ptr) 3110ee4124012950d7bb853438629b8e7652febf183Ted Kremenek { 3120ee4124012950d7bb853438629b8e7652febf183Ted Kremenek TargetSP target_sp(m_opaque_ptr->GetDebugger().GetSelectedTarget()); 3130ee4124012950d7bb853438629b8e7652febf183Ted Kremenek Mutex::Locker api_locker; 314dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek if (target_sp) 315dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek api_locker.Lock(target_sp->GetAPIMutex()); 316dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek m_opaque_ptr->SourceInitFile (true, result.ref()); 317dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek } 3181d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek else 31918c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu { 32018c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu result->AppendError ("SBCommandInterpreter is not valid"); 321dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek result->SetStatus (eReturnStatusFailed); 3221d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek } 32318c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 32418c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu 325dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek if (log) 3267fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek log->Printf ("SBCommandInterpreter(%p)::SourceInitFileInCurrentWorkingDirectory (&SBCommandReturnObject(%p))", 327dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek m_opaque_ptr, result.get()); 328dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek} 329dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek 3300ee4124012950d7bb853438629b8e7652febf183Ted KremenekSBBroadcaster 331dc0d909f0f6684159c8475db1a15967e5613cb27Ted KremenekSBCommandInterpreter::GetBroadcaster () 332dc0d909f0f6684159c8475db1a15967e5613cb27Ted Kremenek{ 3330ee4124012950d7bb853438629b8e7652febf183Ted Kremenek Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3340ee4124012950d7bb853438629b8e7652febf183Ted Kremenek 3351d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek SBBroadcaster broadcaster (m_opaque_ptr, false); 3360ee4124012950d7bb853438629b8e7652febf183Ted Kremenek 3370ee4124012950d7bb853438629b8e7652febf183Ted Kremenek if (log) 3380ee4124012950d7bb853438629b8e7652febf183Ted Kremenek log->Printf ("SBCommandInterpreter(%p)::GetBroadcaster() => SBBroadcaster(%p)", 3390ee4124012950d7bb853438629b8e7652febf183Ted Kremenek m_opaque_ptr, broadcaster.get()); 3400ee4124012950d7bb853438629b8e7652febf183Ted Kremenek 341d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek return broadcaster; 3420ee4124012950d7bb853438629b8e7652febf183Ted Kremenek} 343d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek 3440ee4124012950d7bb853438629b8e7652febf183Ted Kremenekconst char * 3450ee4124012950d7bb853438629b8e7652febf183Ted KremenekSBCommandInterpreter::GetBroadcasterClass () 3460ee4124012950d7bb853438629b8e7652febf183Ted Kremenek{ 3470ee4124012950d7bb853438629b8e7652febf183Ted Kremenek return Communication::GetStaticBroadcasterClass().AsCString(); 3480ee4124012950d7bb853438629b8e7652febf183Ted Kremenek} 34958f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenek 35058f5ec7d56b1ebf5f90ee11226ebe7663f2821eaTed Kremenekconst char * 3510ee4124012950d7bb853438629b8e7652febf183Ted KremenekSBCommandInterpreter::GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type) 3521d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek{ 35354c809b19444a01444f36e93d1d28c9a5668484cTed Kremenek return CommandObject::GetArgumentTypeAsCString (arg_type); 354892697dd2287caf7c29aaaa82909b0e90b8b63feTed Kremenek} 355d706434b0231c76fd9acf30060646a7aa8f69aefZhongxing Xu 35662d399e1880aacd9dc494fce374245b0da915adaZhongxing Xuconst char * 357892697dd2287caf7c29aaaa82909b0e90b8b63feTed KremenekSBCommandInterpreter::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type) 35862d399e1880aacd9dc494fce374245b0da915adaZhongxing Xu{ 359d064fdc4b7b64ca55b40b70490c79d6f569df78eTed Kremenek return CommandObject::GetArgumentDescriptionAsCString (arg_type); 36062d399e1880aacd9dc494fce374245b0da915adaZhongxing Xu} 36162d399e1880aacd9dc494fce374245b0da915adaZhongxing Xu 362892697dd2287caf7c29aaaa82909b0e90b8b63feTed Kremenekbool 36362d399e1880aacd9dc494fce374245b0da915adaZhongxing XuSBCommandInterpreter::SetCommandOverrideCallback (const char *command_name, 36462d399e1880aacd9dc494fce374245b0da915adaZhongxing Xu lldb::CommandOverrideCallback callback, 36562d399e1880aacd9dc494fce374245b0da915adaZhongxing Xu void *baton) 36618c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu{ 36718c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu if (command_name && command_name[0] && m_opaque_ptr) 3680ee4124012950d7bb853438629b8e7652febf183Ted Kremenek { 3691d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek std::string command_name_str (command_name); 3700ee4124012950d7bb853438629b8e7652febf183Ted Kremenek CommandObject *cmd_obj = m_opaque_ptr->GetCommandObjectForCommand(command_name_str); 3710ee4124012950d7bb853438629b8e7652febf183Ted Kremenek if (cmd_obj) 3720ee4124012950d7bb853438629b8e7652febf183Ted Kremenek { 3730ee4124012950d7bb853438629b8e7652febf183Ted Kremenek assert(command_name_str.empty()); 37418c7c06033cafe8c0cdcbe5759c802728688b49fZhongxing Xu cmd_obj->SetOverrideCallback (callback, baton); 3757fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek return true; 3767fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek } 3777fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek } 3787fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek return false; 3797fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek} 3807fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek 3817fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek#ifndef LLDB_DISABLE_PYTHON 3827fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek 3837fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek// Defined in the SWIG source file 3847fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenekextern "C" void 3857fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenekinit_lldb(void); 3867fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek 3877fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek#else 3887fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek 3897fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenekextern "C" void init_lldb(void); 3907fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek 3917fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenek// Usually defined in the SWIG source file, but we have sripting disabled 3927fa9b4f258636d89342eda28f21a986c8ac353b1Ted Kremenekextern "C" void 393b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenekinit_lldb(void) 39467d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek{ 39567d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek} 39667d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek 39767d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek#endif 39867d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek 39967d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenekvoid 40067d1287035767f4f6c8ca0c2bb755990012a44caTed KremenekSBCommandInterpreter::InitializeSWIG () 40167d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek{ 40267d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek static bool g_initialized = false; 40367d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek if (!g_initialized) 4046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines { 40567d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek g_initialized = true; 40667d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek#ifndef LLDB_DISABLE_PYTHON 407fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks ScriptInterpreter::InitializeInterpreter (init_lldb); 408fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks#endif 409fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks } 410fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks} 4118ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu 4128ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xulldb::SBCommand 4138ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing XuSBCommandInterpreter::AddMultiwordCommand (const char* name, const char* help) 4148ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu{ 4158ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu CommandObjectMultiword *new_command = new CommandObjectMultiword(*m_opaque_ptr,name,help); 4168ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu new_command->SetRemovable (true); 4178ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu lldb::CommandObjectSP new_command_sp(new_command); 4188ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 4198ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu return lldb::SBCommand(new_command_sp); 4208ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu return lldb::SBCommand(); 4218ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu} 4228ddf7cead8a67342a4584a203e0bf736b7efedbeZhongxing Xu 423ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Roselldb::SBCommand 42475f8bd01319000b3e1438847505302670514759dJordan RoseSBCommandInterpreter::AddCommand (const char* name, lldb::SBCommandPluginInterface* impl, const char* help) 42575f8bd01319000b3e1438847505302670514759dJordan Rose{ 42675f8bd01319000b3e1438847505302670514759dJordan Rose lldb::CommandObjectSP new_command_sp; 42775f8bd01319000b3e1438847505302670514759dJordan Rose new_command_sp.reset(new CommandPluginInterfaceImplementation(*m_opaque_ptr,name,impl,help)); 42875f8bd01319000b3e1438847505302670514759dJordan Rose 42975f8bd01319000b3e1438847505302670514759dJordan Rose if (new_command_sp && m_opaque_ptr->AddUserCommand(name, new_command_sp, true)) 43075f8bd01319000b3e1438847505302670514759dJordan Rose return lldb::SBCommand(new_command_sp); 43175f8bd01319000b3e1438847505302670514759dJordan Rose return lldb::SBCommand(); 432ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose} 433ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose 434ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan RoseSBCommand::SBCommand () 43575f8bd01319000b3e1438847505302670514759dJordan Rose{} 43675f8bd01319000b3e1438847505302670514759dJordan Rose 437ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan RoseSBCommand::SBCommand (lldb::CommandObjectSP cmd_sp) : m_opaque_sp (cmd_sp) 43875f8bd01319000b3e1438847505302670514759dJordan Rose{} 43975f8bd01319000b3e1438847505302670514759dJordan Rose 440ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rosebool 44175f8bd01319000b3e1438847505302670514759dJordan RoseSBCommand::IsValid () 44275f8bd01319000b3e1438847505302670514759dJordan Rose{ 44375f8bd01319000b3e1438847505302670514759dJordan Rose return (bool)m_opaque_sp; 44475f8bd01319000b3e1438847505302670514759dJordan Rose} 44575f8bd01319000b3e1438847505302670514759dJordan Rose 44675f8bd01319000b3e1438847505302670514759dJordan Roseconst char* 44775f8bd01319000b3e1438847505302670514759dJordan RoseSBCommand::GetName () 448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 449ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose if (IsValid ()) 450ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose return m_opaque_sp->GetCommandName (); 451ac7cc2d37e82181e73fcc265c1d0a619d18b7605Jordan Rose return NULL; 45267d1287035767f4f6c8ca0c2bb755990012a44caTed Kremenek} 453b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek 454b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenekconst char* 455b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted KremenekSBCommand::GetHelp () 456b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek{ 457b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek if (IsValid ()) 458b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek return m_opaque_sp->GetHelp (); 459b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek return NULL; 4609b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramer} 4619b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramer 462b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremeneklldb::SBCommand 463b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted KremenekSBCommand::AddMultiwordCommand (const char* name, const char* help) 464b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek{ 465b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek if (!IsValid ()) 4662cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek return lldb::SBCommand(); 467b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek if (m_opaque_sp->IsMultiwordObject() == false) 4687502c1d3ce8bb97bcc4f7bebef507040bd93b26fJohn McCall return lldb::SBCommand(); 469b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek CommandObjectMultiword *new_command = new CommandObjectMultiword(m_opaque_sp->GetCommandInterpreter(),name,help); 470b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek new_command->SetRemovable (true); 471b1a7b65231e86f7da6aacbf00bcdc16c56350e65Ted Kremenek lldb::CommandObjectSP new_command_sp(new_command); 47285248734f404fbb9b2f88ecd5296761a8578def6Ted Kremenek if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 47315ce164836472bfba88b30e53aa3f6ac0fb8a95dTed Kremenek return lldb::SBCommand(new_command_sp); 47485248734f404fbb9b2f88ecd5296761a8578def6Ted Kremenek return lldb::SBCommand(); 4759b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramer} 47685248734f404fbb9b2f88ecd5296761a8578def6Ted Kremenek 4779b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramerlldb::SBCommand 47885248734f404fbb9b2f88ecd5296761a8578def6Ted KremenekSBCommand::AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, const char* help) 47985248734f404fbb9b2f88ecd5296761a8578def6Ted Kremenek{ 4809b20a90dff2ed605153c68a5c58b6aadcdb0952bBenjamin Kramer if (!IsValid ()) 48185248734f404fbb9b2f88ecd5296761a8578def6Ted Kremenek return lldb::SBCommand(); 4822cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek if (m_opaque_sp->IsMultiwordObject() == false) 4832cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek return lldb::SBCommand(); 4842cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek lldb::CommandObjectSP new_command_sp; 4852cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek new_command_sp.reset(new CommandPluginInterfaceImplementation(m_opaque_sp->GetCommandInterpreter(),name,impl,help)); 4862cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek if (new_command_sp && m_opaque_sp->LoadSubCommand(name,new_command_sp)) 4872cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek return lldb::SBCommand(new_command_sp); 48815ce164836472bfba88b30e53aa3f6ac0fb8a95dTed Kremenek return lldb::SBCommand(); 48915ce164836472bfba88b30e53aa3f6ac0fb8a95dTed Kremenek} 49015ce164836472bfba88b30e53aa3f6ac0fb8a95dTed Kremenek 49115ce164836472bfba88b30e53aa3f6ac0fb8a95dTed Kremenek