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