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