ScriptInterpreter.h revision 52ebc0aab1fdecb634801deceeddd71a14c2148c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- ScriptInterpreter.h -------------------------------------*- C++ -*-===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef liblldb_ScriptInterpreter_h_
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define liblldb_ScriptInterpreter_h_
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/lldb-private.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Broadcaster.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "lldb/Core/Error.h"
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Utility/PseudoTerminal.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace lldb_private {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScriptInterpreterObject
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScriptInterpreterObject() :
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    m_object(NULL)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScriptInterpreterObject(void* obj) :
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    m_object(obj)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScriptInterpreterObject(const ScriptInterpreterObject& rhs)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : m_object(rhs.m_object)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void*
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetObject()
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return m_object;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    operator bool ()
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return m_object != NULL;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScriptInterpreterObject&
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    operator = (const ScriptInterpreterObject& rhs)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (this != &rhs)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_object = rhs.m_object;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return *this;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~ScriptInterpreterObject()
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* m_object;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScriptInterpreter
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef void (*SWIGInitCallback) (void);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool (*SWIGBreakpointCallbackFunction) (const char *python_function_name,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const char *session_dictionary_name,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const lldb::StackFrameSP& frame_sp,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const lldb::BreakpointLocationSP &bp_loc_sp);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool (*SWIGWatchpointCallbackFunction) (const char *python_function_name,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const char *session_dictionary_name,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const lldb::StackFrameSP& frame_sp,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                    const lldb::WatchpointSP &wp_sp);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool (*SWIGPythonTypeScriptCallbackFunction) (const char *python_function_name,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          void *session_dictionary,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          const lldb::ValueObjectSP& valobj_sp,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          void** pyfunct_wrapper,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                          std::string& retval);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef void* (*SWIGPythonCreateSyntheticProvider) (const char *python_class_name,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        const char *session_dictionary_name,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        const lldb::ValueObjectSP& valobj_sp);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef void* (*SWIGPythonCreateOSPlugin) (const char *python_class_name,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               const char *session_dictionary_name,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                               const lldb::ProcessSP& process_sp);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef uint32_t       (*SWIGPythonCalculateNumChildren)                   (void *implementor);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef void*          (*SWIGPythonGetChildAtIndex)                        (void *implementor, uint32_t idx);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef int            (*SWIGPythonGetIndexOfChildWithName)                (void *implementor, const char* child_name);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef void*          (*SWIGPythonCastPyObjectToSBValue)                  (void* data);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool           (*SWIGPythonUpdateSynthProviderInstance)            (void* data);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool           (*SWIGPythonMightHaveChildrenSynthProviderInstance) (void* data);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool           (*SWIGPythonCallCommand)                 (const char *python_function_name,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     const char *session_dictionary_name,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     lldb::DebuggerSP& debugger,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     const char* args,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     std::string& err_msg,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     lldb_private::CommandReturnObject& cmd_retobj);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef bool           (*SWIGPythonCallModuleInit)              (const char *python_module_name,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     const char *session_dictionary_name,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                                     lldb::DebuggerSP& debugger);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef enum
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeCharPtr,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeBool,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeShortInt,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeShortIntUnsigned,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeInt,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeIntUnsigned,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeLongInt,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeLongIntUnsigned,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeLongLong,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeLongLongUnsigned,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeFloat,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeDouble,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeChar,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eScriptReturnTypeCharStrOrNone
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } ScriptReturnType;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScriptInterpreter (CommandInterpreter &interpreter, lldb::ScriptLanguage script_lang);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~ScriptInterpreter ();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    struct ExecuteScriptOptions
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public:
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ExecuteScriptOptions () :
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_enable_io(true),
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_set_lldb_globals(true),
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_maskout_errors(true)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetEnableIO () const
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return m_enable_io;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetSetLLDBGlobals () const
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return m_set_lldb_globals;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetMaskoutErrors () const
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return m_maskout_errors;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ExecuteScriptOptions&
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetEnableIO (bool enable)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_enable_io = enable;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return *this;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ExecuteScriptOptions&
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetSetLLDBGlobals (bool set)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_set_lldb_globals = set;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return *this;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ExecuteScriptOptions&
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SetMaskoutErrors (bool maskout)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            m_maskout_errors = maskout;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return *this;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private:
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool m_enable_io;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool m_set_lldb_globals;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool m_maskout_errors;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExecuteOneLine (const char *command,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    CommandReturnObject *result,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const ExecuteScriptOptions &options = ExecuteScriptOptions()) = 0;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExecuteInterpreterLoop () = 0;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExecuteOneLineWithReturn (const char *in_string,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              ScriptReturnType return_type,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              void *ret_value,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const ExecuteScriptOptions &options = ExecuteScriptOptions())
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return true;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual bool
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExecuteMultipleLines (const char *in_string,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const ExecuteScriptOptions &options = ExecuteScriptOptions())
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
212        return true;
213    }
214
215    virtual bool
216    ExportFunctionDefinitionToInterpreter (StringList &function_def)
217    {
218        return false;
219    }
220
221    virtual bool
222    GenerateBreakpointCommandCallbackData (StringList &input, std::string& output)
223    {
224        return false;
225    }
226
227    virtual bool
228    GenerateWatchpointCommandCallbackData (StringList &input, std::string& output)
229    {
230        return false;
231    }
232
233    virtual bool
234    GenerateTypeScriptFunction (const char* oneliner, std::string& output, void* name_token = NULL)
235    {
236        return false;
237    }
238
239    virtual bool
240    GenerateTypeScriptFunction (StringList &input, std::string& output, void* name_token = NULL)
241    {
242        return false;
243    }
244
245    virtual bool
246    GenerateScriptAliasFunction (StringList &input, std::string& output)
247    {
248        return false;
249    }
250
251    virtual bool
252    GenerateTypeSynthClass (StringList &input, std::string& output, void* name_token = NULL)
253    {
254        return false;
255    }
256
257    virtual bool
258    GenerateTypeSynthClass (const char* oneliner, std::string& output, void* name_token = NULL)
259    {
260        return false;
261    }
262
263    virtual lldb::ScriptInterpreterObjectSP
264    CreateSyntheticScriptedProvider (const char *class_name,
265                                     lldb::ValueObjectSP valobj)
266    {
267        return lldb::ScriptInterpreterObjectSP();
268    }
269
270    virtual lldb::ScriptInterpreterObjectSP
271    OSPlugin_CreatePluginObject (const char *class_name,
272                                 lldb::ProcessSP process_sp)
273    {
274        return lldb::ScriptInterpreterObjectSP();
275    }
276
277    virtual lldb::ScriptInterpreterObjectSP
278    OSPlugin_RegisterInfo (lldb::ScriptInterpreterObjectSP os_plugin_object_sp)
279    {
280        return lldb::ScriptInterpreterObjectSP();
281    }
282
283    virtual lldb::ScriptInterpreterObjectSP
284    OSPlugin_ThreadsInfo (lldb::ScriptInterpreterObjectSP os_plugin_object_sp)
285    {
286        return lldb::ScriptInterpreterObjectSP();
287    }
288
289    virtual lldb::ScriptInterpreterObjectSP
290    OSPlugin_RegisterContextData (lldb::ScriptInterpreterObjectSP os_plugin_object_sp,
291                                  lldb::tid_t thread_id)
292    {
293        return lldb::ScriptInterpreterObjectSP();
294    }
295
296    virtual lldb::ScriptInterpreterObjectSP
297    OSPlugin_CreateThread (lldb::ScriptInterpreterObjectSP os_plugin_object_sp,
298                           lldb::tid_t tid,
299                           lldb::addr_t context)
300    {
301        return lldb::ScriptInterpreterObjectSP();
302    }
303
304    virtual bool
305    GenerateFunction(const char *signature, const StringList &input)
306    {
307        return false;
308    }
309
310    virtual void
311    CollectDataForBreakpointCommandCallback (BreakpointOptions *bp_options,
312                                             CommandReturnObject &result);
313
314    virtual void
315    CollectDataForWatchpointCommandCallback (WatchpointOptions *wp_options,
316                                             CommandReturnObject &result);
317
318    /// Set a one-liner as the callback for the breakpoint.
319    virtual void
320    SetBreakpointCommandCallback (BreakpointOptions *bp_options,
321                                  const char *oneliner)
322    {
323        return;
324    }
325
326    /// Set a one-liner as the callback for the watchpoint.
327    virtual void
328    SetWatchpointCommandCallback (WatchpointOptions *wp_options,
329                                  const char *oneliner)
330    {
331        return;
332    }
333
334    virtual bool
335    GetScriptedSummary (const char *function_name,
336                        lldb::ValueObjectSP valobj,
337                        lldb::ScriptInterpreterObjectSP& callee_wrapper_sp,
338                        std::string& retval)
339    {
340        return false;
341    }
342
343    virtual uint32_t
344    CalculateNumChildren (const lldb::ScriptInterpreterObjectSP& implementor)
345    {
346        return 0;
347    }
348
349    virtual lldb::ValueObjectSP
350    GetChildAtIndex (const lldb::ScriptInterpreterObjectSP& implementor, uint32_t idx)
351    {
352        return lldb::ValueObjectSP();
353    }
354
355    virtual int
356    GetIndexOfChildWithName (const lldb::ScriptInterpreterObjectSP& implementor, const char* child_name)
357    {
358        return UINT32_MAX;
359    }
360
361    virtual bool
362    UpdateSynthProviderInstance (const lldb::ScriptInterpreterObjectSP& implementor)
363    {
364        return false;
365    }
366
367    virtual bool
368    MightHaveChildrenSynthProviderInstance (const lldb::ScriptInterpreterObjectSP& implementor)
369    {
370        return true;
371    }
372
373    virtual bool
374    RunScriptBasedCommand (const char* impl_function,
375                           const char* args,
376                           ScriptedCommandSynchronicity synchronicity,
377                           lldb_private::CommandReturnObject& cmd_retobj,
378                           Error& error)
379    {
380        return false;
381    }
382
383    virtual bool
384    GetDocumentationForItem (const char* item, std::string& dest)
385    {
386		dest.clear();
387        return false;
388    }
389
390    virtual bool
391    CheckObjectExists (const char* name)
392    {
393        return false;
394    }
395
396    virtual bool
397    LoadScriptingModule (const char* filename,
398                         bool can_reload,
399                         bool init_session,
400                         lldb_private::Error& error)
401    {
402        error.SetErrorString("loading unimplemented");
403        return false;
404    }
405
406    virtual lldb::ScriptInterpreterObjectSP
407    MakeScriptObject (void* object)
408    {
409        return lldb::ScriptInterpreterObjectSP(new ScriptInterpreterObject(object));
410    }
411
412    const char *
413    GetScriptInterpreterPtyName ();
414
415    int
416    GetMasterFileDescriptor ();
417
418	CommandInterpreter &
419	GetCommandInterpreter ();
420
421    static std::string
422    LanguageToString (lldb::ScriptLanguage language);
423
424    static void
425    InitializeInterpreter (SWIGInitCallback python_swig_init_callback);
426
427    static void
428    TerminateInterpreter ();
429
430    virtual void
431    ResetOutputFileHandle (FILE *new_fh) { } //By default, do nothing.
432
433protected:
434    CommandInterpreter &m_interpreter;
435    lldb::ScriptLanguage m_script_lang;
436};
437
438} // namespace lldb_private
439
440#endif // #ifndef liblldb_ScriptInterpreter_h_
441