ScriptInterpreter.h revision 1414aba4ae30f89c2513bdbbb56c281cec014902
1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//===-- ScriptInterpreter.h -------------------------------------*- C++ -*-===//
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//                     The LLVM Compiler Infrastructure
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// This file is distributed under the University of Illinois Open Source
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// License. See LICENSE.TXT for details.
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//===----------------------------------------------------------------------===//
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#ifndef liblldb_ScriptInterpreter_h_
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#define liblldb_ScriptInterpreter_h_
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include "lldb/lldb-private.h"
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include "lldb/Core/Broadcaster.h"
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include "lldb/Core/Error.h"
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include "lldb/Utility/PseudoTerminal.h"
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace lldb_private {
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass ScriptInterpreterObject
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao{
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreterObject() :
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    m_object(NULL)
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {}
29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreterObject(void* obj) :
31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    m_object(obj)
32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {}
33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreterObject(const ScriptInterpreterObject& rhs)
35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    : m_object(rhs.m_object)
36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {}
37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void*
39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GetObject()
40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return m_object;
42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    operator bool ()
45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return m_object != NULL;
47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreterObject&
50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    operator = (const ScriptInterpreterObject& rhs)
51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        if (this != &rhs)
53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_object = rhs.m_object;
54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return *this;
55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual
58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ~ScriptInterpreterObject()
59ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {}
60ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
61ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoprotected:
62ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void* m_object;
63ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
64ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
65ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass ScriptInterpreterLocker
66ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao{
67ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
68ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
69ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreterLocker ()
70ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
71ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
72ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
73ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual ~ScriptInterpreterLocker ()
74ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
75ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
76ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoprivate:
77ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    DISALLOW_COPY_AND_ASSIGN (ScriptInterpreterLocker);
78ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
79ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
80ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
81ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass ScriptInterpreter
82ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao{
83ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
84ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
85ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef void (*SWIGInitCallback) (void);
86ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
87ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool (*SWIGBreakpointCallbackFunction) (const char *python_function_name,
88ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const char *session_dictionary_name,
89ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const lldb::StackFrameSP& frame_sp,
90ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const lldb::BreakpointLocationSP &bp_loc_sp);
91ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
92ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool (*SWIGWatchpointCallbackFunction) (const char *python_function_name,
93ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const char *session_dictionary_name,
94ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const lldb::StackFrameSP& frame_sp,
95ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                    const lldb::WatchpointSP &wp_sp);
96ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
97ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool (*SWIGPythonTypeScriptCallbackFunction) (const char *python_function_name,
98ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                          void *session_dictionary,
99ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                          const lldb::ValueObjectSP& valobj_sp,
100ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                          void** pyfunct_wrapper,
101ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                          std::string& retval);
102ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
103ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef void* (*SWIGPythonCreateSyntheticProvider) (const char *python_class_name,
104ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                        const char *session_dictionary_name,
105ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                        const lldb::ValueObjectSP& valobj_sp);
106ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
107ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef void* (*SWIGPythonCreateOSPlugin) (const char *python_class_name,
108ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                               const char *session_dictionary_name,
109ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                               const lldb::ProcessSP& process_sp);
110ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
111ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef uint32_t       (*SWIGPythonCalculateNumChildren)                   (void *implementor);
112ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef void*          (*SWIGPythonGetChildAtIndex)                        (void *implementor, uint32_t idx);
113ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef int            (*SWIGPythonGetIndexOfChildWithName)                (void *implementor, const char* child_name);
114ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef void*          (*SWIGPythonCastPyObjectToSBValue)                  (void* data);
115ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool           (*SWIGPythonUpdateSynthProviderInstance)            (void* data);
116ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool           (*SWIGPythonMightHaveChildrenSynthProviderInstance) (void* data);
117ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
118ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
119ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool           (*SWIGPythonCallCommand)                 (const char *python_function_name,
120ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     const char *session_dictionary_name,
121ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     lldb::DebuggerSP& debugger,
122ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     const char* args,
123ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     std::string& err_msg,
124ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     lldb_private::CommandReturnObject& cmd_retobj);
125ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
126ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef bool           (*SWIGPythonCallModuleInit)              (const char *python_module_name,
127ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     const char *session_dictionary_name,
128ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                                                     lldb::DebuggerSP& debugger);
129ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
130ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    typedef enum
131ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
132ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeCharPtr,
133ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeBool,
134ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeShortInt,
135ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeShortIntUnsigned,
136ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeInt,
137ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeIntUnsigned,
138ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeLongInt,
139ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeLongIntUnsigned,
140ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeLongLong,
141ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeLongLongUnsigned,
142ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeFloat,
143ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeDouble,
144ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeChar,
145ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        eScriptReturnTypeCharStrOrNone
146ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    } ScriptReturnType;
147ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
148ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ScriptInterpreter (CommandInterpreter &interpreter, lldb::ScriptLanguage script_lang);
149ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
150ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual ~ScriptInterpreter ();
151ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
152ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    struct ExecuteScriptOptions
153ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
154ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    public:
155ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        ExecuteScriptOptions () :
156ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_enable_io(true),
157ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_set_lldb_globals(true),
158ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_maskout_errors(true)
159ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
160ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
161ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
162ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool
163ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        GetEnableIO () const
164ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
165ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return m_enable_io;
166ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
167ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
168ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool
169ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        GetSetLLDBGlobals () const
170ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
171ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return m_set_lldb_globals;
172ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
173ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
174ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool
175ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        GetMaskoutErrors () const
176ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
177ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return m_maskout_errors;
178ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
179ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
180ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        ExecuteScriptOptions&
181ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        SetEnableIO (bool enable)
182ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
183ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_enable_io = enable;
184ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return *this;
185ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
186ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
187ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        ExecuteScriptOptions&
188ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        SetSetLLDBGlobals (bool set)
189ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
190ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_set_lldb_globals = set;
191ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return *this;
192ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
193ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
194ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        ExecuteScriptOptions&
195ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        SetMaskoutErrors (bool maskout)
196ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        {
197ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            m_maskout_errors = maskout;
198ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao            return *this;
199ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        }
200ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
201ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    private:
202ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool m_enable_io;
203ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool m_set_lldb_globals;
204ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        bool m_maskout_errors;
205ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    };
206ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
207ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
208ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ExecuteOneLine (const char *command,
209ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                    CommandReturnObject *result,
210ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                    const ExecuteScriptOptions &options = ExecuteScriptOptions()) = 0;
211ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
212ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void
213ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ExecuteInterpreterLoop () = 0;
214ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
215ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
216ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ExecuteOneLineWithReturn (const char *in_string,
217ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                              ScriptReturnType return_type,
218ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                              void *ret_value,
219ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                              const ExecuteScriptOptions &options = ExecuteScriptOptions())
220ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
221ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return true;
222ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
223ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
224ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
225ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ExecuteMultipleLines (const char *in_string,
226ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                          const ExecuteScriptOptions &options = ExecuteScriptOptions())
227ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
228ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return true;
229ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
230ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
231ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
232ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    ExportFunctionDefinitionToInterpreter (StringList &function_def)
233ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
234ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
235ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
236ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
237ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
238ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateBreakpointCommandCallbackData (StringList &input, std::string& output)
239ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
240ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
241ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
242ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
243ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
244ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateWatchpointCommandCallbackData (StringList &input, std::string& output)
245ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
246ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
247ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
248ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
249ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
250ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateTypeScriptFunction (const char* oneliner, std::string& output, void* name_token = NULL)
251ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
252ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
253ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
254ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
255ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
256ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateTypeScriptFunction (StringList &input, std::string& output, void* name_token = NULL)
257ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
258ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
259ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
260ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
261ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
262ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateScriptAliasFunction (StringList &input, std::string& output)
263ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
264ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
265ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
266ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
267ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
268ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateTypeSynthClass (StringList &input, std::string& output, void* name_token = NULL)
269ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
270ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
271ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
272ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
273ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
274ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateTypeSynthClass (const char* oneliner, std::string& output, void* name_token = NULL)
275ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
276ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
277ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
278ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
279ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
280ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    CreateSyntheticScriptedProvider (const char *class_name,
281ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                     lldb::ValueObjectSP valobj)
282ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
283ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
284ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
285ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
286ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
287ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    OSPlugin_CreatePluginObject (const char *class_name,
288ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                 lldb::ProcessSP process_sp)
289ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
290ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
291ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
292ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
293ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
294ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    OSPlugin_RegisterInfo (lldb::ScriptInterpreterObjectSP os_plugin_object_sp)
295ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
296ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
297ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
298ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
299ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
300ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    OSPlugin_ThreadsInfo (lldb::ScriptInterpreterObjectSP os_plugin_object_sp)
301ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
302ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
303ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
304ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
305ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
306ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    OSPlugin_RegisterContextData (lldb::ScriptInterpreterObjectSP os_plugin_object_sp,
307ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                  lldb::tid_t thread_id)
308ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
309ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
310ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
311ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
312ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual lldb::ScriptInterpreterObjectSP
313ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    OSPlugin_CreateThread (lldb::ScriptInterpreterObjectSP os_plugin_object_sp,
314ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                           lldb::tid_t tid,
315ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                           lldb::addr_t context)
316ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
317ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return lldb::ScriptInterpreterObjectSP();
318ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
319ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
320ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
321ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    GenerateFunction(const char *signature, const StringList &input)
322ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
323ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return false;
324ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
325ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
326ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void
327ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    CollectDataForBreakpointCommandCallback (BreakpointOptions *bp_options,
328ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                             CommandReturnObject &result);
329ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
330ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void
331ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    CollectDataForWatchpointCommandCallback (WatchpointOptions *wp_options,
332ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                             CommandReturnObject &result);
333ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
334ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    /// Set a one-liner as the callback for the breakpoint.
335ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void
336ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    SetBreakpointCommandCallback (BreakpointOptions *bp_options,
337ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                  const char *oneliner)
338ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
339ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return;
340ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
341ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
342ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    /// Set a one-liner as the callback for the watchpoint.
343ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual void
344ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    SetWatchpointCommandCallback (WatchpointOptions *wp_options,
345ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao                                  const char *oneliner)
346ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    {
347ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        return;
348ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    }
349ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
350ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    virtual bool
351    GetScriptedSummary (const char *function_name,
352                        lldb::ValueObjectSP valobj,
353                        lldb::ScriptInterpreterObjectSP& callee_wrapper_sp,
354                        std::string& retval)
355    {
356        return false;
357    }
358
359    virtual size_t
360    CalculateNumChildren (const lldb::ScriptInterpreterObjectSP& implementor)
361    {
362        return 0;
363    }
364
365    virtual lldb::ValueObjectSP
366    GetChildAtIndex (const lldb::ScriptInterpreterObjectSP& implementor, uint32_t idx)
367    {
368        return lldb::ValueObjectSP();
369    }
370
371    virtual int
372    GetIndexOfChildWithName (const lldb::ScriptInterpreterObjectSP& implementor, const char* child_name)
373    {
374        return UINT32_MAX;
375    }
376
377    virtual bool
378    UpdateSynthProviderInstance (const lldb::ScriptInterpreterObjectSP& implementor)
379    {
380        return false;
381    }
382
383    virtual bool
384    MightHaveChildrenSynthProviderInstance (const lldb::ScriptInterpreterObjectSP& implementor)
385    {
386        return true;
387    }
388
389    virtual bool
390    RunScriptBasedCommand (const char* impl_function,
391                           const char* args,
392                           ScriptedCommandSynchronicity synchronicity,
393                           lldb_private::CommandReturnObject& cmd_retobj,
394                           Error& error)
395    {
396        return false;
397    }
398
399    virtual bool
400    GetDocumentationForItem (const char* item, std::string& dest)
401    {
402		dest.clear();
403        return false;
404    }
405
406    virtual bool
407    CheckObjectExists (const char* name)
408    {
409        return false;
410    }
411
412    virtual bool
413    LoadScriptingModule (const char* filename,
414                         bool can_reload,
415                         bool init_session,
416                         lldb_private::Error& error)
417    {
418        error.SetErrorString("loading unimplemented");
419        return false;
420    }
421
422    virtual lldb::ScriptInterpreterObjectSP
423    MakeScriptObject (void* object)
424    {
425        return lldb::ScriptInterpreterObjectSP(new ScriptInterpreterObject(object));
426    }
427
428    virtual std::auto_ptr<ScriptInterpreterLocker>
429    AcquireInterpreterLock ();
430
431    const char *
432    GetScriptInterpreterPtyName ();
433
434    int
435    GetMasterFileDescriptor ();
436
437	CommandInterpreter &
438	GetCommandInterpreter ();
439
440    static std::string
441    LanguageToString (lldb::ScriptLanguage language);
442
443    static void
444    InitializeInterpreter (SWIGInitCallback python_swig_init_callback);
445
446    static void
447    TerminateInterpreter ();
448
449    virtual void
450    ResetOutputFileHandle (FILE *new_fh) { } //By default, do nothing.
451
452protected:
453    CommandInterpreter &m_interpreter;
454    lldb::ScriptLanguage m_script_lang;
455};
456
457} // namespace lldb_private
458
459#endif // #ifndef liblldb_ScriptInterpreter_h_
460