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