ScriptInterpreter.cpp revision 263363
1//===-- ScriptInterpreter.cpp -----------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/lldb-python.h"
11
12#include "lldb/Interpreter/ScriptInterpreter.h"
13
14#include <string>
15#include <stdlib.h>
16#include <stdio.h>
17
18#include "lldb/Core/Error.h"
19#include "lldb/Core/Stream.h"
20#include "lldb/Core/StringList.h"
21#include "lldb/Interpreter/CommandReturnObject.h"
22#include "lldb/Interpreter/ScriptInterpreterPython.h"
23#include "lldb/Utility/PseudoTerminal.h"
24
25using namespace lldb;
26using namespace lldb_private;
27
28ScriptInterpreter::ScriptInterpreter (CommandInterpreter &interpreter, lldb::ScriptLanguage script_lang) :
29    m_interpreter (interpreter),
30    m_script_lang (script_lang)
31{
32}
33
34ScriptInterpreter::~ScriptInterpreter ()
35{
36}
37
38CommandInterpreter &
39ScriptInterpreter::GetCommandInterpreter ()
40{
41    return m_interpreter;
42}
43
44void
45ScriptInterpreter::CollectDataForBreakpointCommandCallback
46(
47    BreakpointOptions *bp_options,
48    CommandReturnObject &result
49)
50{
51    result.SetStatus (eReturnStatusFailed);
52    result.AppendError ("ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
53}
54
55void
56ScriptInterpreter::CollectDataForWatchpointCommandCallback
57(
58    WatchpointOptions *bp_options,
59    CommandReturnObject &result
60)
61{
62    result.SetStatus (eReturnStatusFailed);
63    result.AppendError ("ScriptInterpreter::GetScriptCommands(StringList &) is not implemented.");
64}
65
66std::string
67ScriptInterpreter::LanguageToString (lldb::ScriptLanguage language)
68{
69    std::string return_value;
70
71    switch (language)
72    {
73        case eScriptLanguageNone:
74            return_value = "None";
75            break;
76        case eScriptLanguagePython:
77            return_value = "Python";
78            break;
79    }
80
81    return return_value;
82}
83
84std::unique_ptr<ScriptInterpreterLocker>
85ScriptInterpreter::AcquireInterpreterLock ()
86{
87    return std::unique_ptr<ScriptInterpreterLocker>(new ScriptInterpreterLocker());
88}
89
90void
91ScriptInterpreter::InitializeInterpreter (SWIGInitCallback python_swig_init_callback,
92                                          SWIGBreakpointCallbackFunction swig_breakpoint_callback,
93                                          SWIGWatchpointCallbackFunction swig_watchpoint_callback,
94                                          SWIGPythonTypeScriptCallbackFunction swig_typescript_callback,
95                                          SWIGPythonCreateSyntheticProvider swig_synthetic_script,
96                                          SWIGPythonCalculateNumChildren swig_calc_children,
97                                          SWIGPythonGetChildAtIndex swig_get_child_index,
98                                          SWIGPythonGetIndexOfChildWithName swig_get_index_child,
99                                          SWIGPythonCastPyObjectToSBValue swig_cast_to_sbvalue ,
100                                          SWIGPythonGetValueObjectSPFromSBValue swig_get_valobj_sp_from_sbvalue,
101                                          SWIGPythonUpdateSynthProviderInstance swig_update_provider,
102                                          SWIGPythonMightHaveChildrenSynthProviderInstance swig_mighthavechildren_provider,
103                                          SWIGPythonCallCommand swig_call_command,
104                                          SWIGPythonCallModuleInit swig_call_module_init,
105                                          SWIGPythonCreateOSPlugin swig_create_os_plugin,
106                                          SWIGPythonScriptKeyword_Process swig_run_script_keyword_process,
107                                          SWIGPythonScriptKeyword_Thread swig_run_script_keyword_thread,
108                                          SWIGPythonScriptKeyword_Target swig_run_script_keyword_target,
109                                          SWIGPythonScriptKeyword_Frame swig_run_script_keyword_frame,
110                                          SWIGPython_GetDynamicSetting swig_plugin_get)
111{
112#ifndef LLDB_DISABLE_PYTHON
113    ScriptInterpreterPython::InitializeInterpreter (python_swig_init_callback,
114                                                    swig_breakpoint_callback,
115                                                    swig_watchpoint_callback,
116                                                    swig_typescript_callback,
117                                                    swig_synthetic_script,
118                                                    swig_calc_children,
119                                                    swig_get_child_index,
120                                                    swig_get_index_child,
121                                                    swig_cast_to_sbvalue ,
122                                                    swig_get_valobj_sp_from_sbvalue,
123                                                    swig_update_provider,
124                                                    swig_mighthavechildren_provider,
125                                                    swig_call_command,
126                                                    swig_call_module_init,
127                                                    swig_create_os_plugin,
128                                                    swig_run_script_keyword_process,
129                                                    swig_run_script_keyword_thread,
130                                                    swig_run_script_keyword_target,
131                                                    swig_run_script_keyword_frame,
132                                                    swig_plugin_get);
133#endif // #ifndef LLDB_DISABLE_PYTHON
134}
135
136void
137ScriptInterpreter::TerminateInterpreter ()
138{
139#ifndef LLDB_DISABLE_PYTHON
140    ScriptInterpreterPython::TerminateInterpreter ();
141#endif // #ifndef LLDB_DISABLE_PYTHON
142}
143
144