summaryrefslogtreecommitdiffstats
path: root/lldb/include
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/include')
-rw-r--r--lldb/include/lldb/API/SystemInitializerFull.h1
-rw-r--r--lldb/include/lldb/Core/PluginManager.h17
-rw-r--r--lldb/include/lldb/Interpreter/CommandInterpreter.h8
-rw-r--r--lldb/include/lldb/Interpreter/PythonDataObjects.h280
-rw-r--r--lldb/include/lldb/Interpreter/ScriptInterpreter.h4
-rw-r--r--lldb/include/lldb/Interpreter/ScriptInterpreterNone.h35
-rw-r--r--lldb/include/lldb/Interpreter/ScriptInterpreterPython.h563
-rw-r--r--lldb/include/lldb/Utility/PythonPointer.h73
-rw-r--r--lldb/include/lldb/lldb-forward.h2
-rw-r--r--lldb/include/lldb/lldb-private-interfaces.h1
-rw-r--r--lldb/include/lldb/lldb-python.h31
11 files changed, 28 insertions, 987 deletions
diff --git a/lldb/include/lldb/API/SystemInitializerFull.h b/lldb/include/lldb/API/SystemInitializerFull.h
index 6280fe8aef0..0b4e8795ffd 100644
--- a/lldb/include/lldb/API/SystemInitializerFull.h
+++ b/lldb/include/lldb/API/SystemInitializerFull.h
@@ -33,7 +33,6 @@ class SystemInitializerFull : public SystemInitializerCommon
private:
void InitializeSWIG();
- void TerminateSWIG();
};
}
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index 5aa014acf1d..e5864175491 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -296,6 +296,23 @@ public:
GetProcessPluginDescriptionAtIndex (uint32_t idx);
//------------------------------------------------------------------
+ // ScriptInterpreter
+ //------------------------------------------------------------------
+ static bool
+ RegisterPlugin(const ConstString &name, const char *description, lldb::ScriptLanguage script_lang,
+ ScriptInterpreterCreateInstance create_callback);
+
+ static bool
+ UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
+
+ static ScriptInterpreterCreateInstance
+ GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
+
+ static lldb::ScriptInterpreterSP
+ GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
+ CommandInterpreter &interpreter);
+
+ //------------------------------------------------------------------
// SymbolFile
//------------------------------------------------------------------
static bool
diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h
index 0b555b576bb..a5a36a31531 100644
--- a/lldb/include/lldb/Interpreter/CommandInterpreter.h
+++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h
@@ -14,6 +14,7 @@
// C++ Includes
// Other libraries and framework includes
// Project includes
+#include "lldb/lldb-forward.h"
#include "lldb/lldb-private.h"
#include "lldb/Core/Broadcaster.h"
#include "lldb/Core/Debugger.h"
@@ -520,7 +521,10 @@ public:
GetOptionArgumentPosition (const char *in_string);
ScriptInterpreter *
- GetScriptInterpreter (bool can_create = true);
+ GetScriptInterpreter(bool can_create = true);
+
+ void
+ SetScriptInterpreter();
void
SkipLLDBInitFiles (bool skip_lldbinit_files)
@@ -709,7 +713,7 @@ private:
OptionArgMap m_alias_options; // Stores any options (with or without arguments) that go with any alias.
CommandHistory m_command_history;
std::string m_repeat_command; // Stores the command that will be executed for an empty command string.
- std::unique_ptr<ScriptInterpreter> m_script_interpreter_ap;
+ lldb::ScriptInterpreterSP m_script_interpreter_sp;
lldb::IOHandlerSP m_command_io_handler_sp;
char m_comment_char;
bool m_batch_command_mode;
diff --git a/lldb/include/lldb/Interpreter/PythonDataObjects.h b/lldb/include/lldb/Interpreter/PythonDataObjects.h
deleted file mode 100644
index df281b533cb..00000000000
--- a/lldb/include/lldb/Interpreter/PythonDataObjects.h
+++ /dev/null
@@ -1,280 +0,0 @@
-//===-- PythonDataObjects.h----------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef liblldb_PythonDataObjects_h_
-#define liblldb_PythonDataObjects_h_
-
-// C Includes
-// C++ Includes
-
-// Other libraries and framework includes
-// Project includes
-#include "lldb/lldb-defines.h"
-#include "lldb/Core/ConstString.h"
-#include "lldb/Core/StructuredData.h"
-#include "lldb/Core/Flags.h"
-#include "lldb/Interpreter/OptionValue.h"
-#include "lldb/lldb-python.h"
-
-namespace lldb_private {
-class PythonString;
-class PythonList;
-class PythonDictionary;
-class PythonObject;
-class PythonInteger;
-
-class StructuredPythonObject : public StructuredData::Generic
-{
- public:
- StructuredPythonObject()
- : StructuredData::Generic()
- {
- }
-
- StructuredPythonObject(void *obj)
- : StructuredData::Generic(obj)
- {
- Py_XINCREF(GetValue());
- }
-
- virtual ~StructuredPythonObject()
- {
- if (Py_IsInitialized())
- Py_XDECREF(GetValue());
- SetValue(nullptr);
- }
-
- bool
- IsValid() const override
- {
- return GetValue() && GetValue() != Py_None;
- }
-
- void Dump(Stream &s) const override;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(StructuredPythonObject);
-};
-
-enum class PyObjectType
-{
- Unknown,
- None,
- Integer,
- Dictionary,
- List,
- String
-};
-
- class PythonObject
- {
- public:
- PythonObject () :
- m_py_obj(NULL)
- {
- }
-
- explicit PythonObject (PyObject* py_obj) :
- m_py_obj(NULL)
- {
- Reset (py_obj);
- }
-
- PythonObject (const PythonObject &rhs) :
- m_py_obj(NULL)
- {
- Reset (rhs.m_py_obj);
- }
-
- virtual
- ~PythonObject ()
- {
- Reset (NULL);
- }
-
- bool
- Reset (const PythonObject &object)
- {
- return Reset(object.get());
- }
-
- virtual bool
- Reset (PyObject* py_obj = NULL)
- {
- if (py_obj != m_py_obj)
- {
- if (Py_IsInitialized())
- Py_XDECREF(m_py_obj);
- m_py_obj = py_obj;
- if (Py_IsInitialized())
- Py_XINCREF(m_py_obj);
- }
- return true;
- }
-
- void
- Dump () const
- {
- if (m_py_obj)
- _PyObject_Dump (m_py_obj);
- else
- puts ("NULL");
- }
-
- void
- Dump (Stream &strm) const;
-
- PyObject*
- get () const
- {
- return m_py_obj;
- }
-
- PyObjectType GetObjectType() const;
-
- PythonString
- Repr ();
-
- PythonString
- Str ();
-
- explicit operator bool () const
- {
- return m_py_obj != NULL;
- }
-
- bool
- IsNULLOrNone () const;
-
- StructuredData::ObjectSP CreateStructuredObject() const;
-
- protected:
- PyObject* m_py_obj;
- };
-
- class PythonString: public PythonObject
- {
- public:
- PythonString ();
- PythonString (PyObject *o);
- PythonString (const PythonObject &object);
- PythonString (llvm::StringRef string);
- PythonString (const char *string);
- virtual ~PythonString ();
-
- virtual bool
- Reset (PyObject* py_obj = NULL);
-
- llvm::StringRef
- GetString() const;
-
- size_t
- GetSize() const;
-
- void SetString(llvm::StringRef string);
-
- StructuredData::StringSP CreateStructuredString() const;
- };
-
- class PythonInteger: public PythonObject
- {
- public:
-
- PythonInteger ();
- PythonInteger (PyObject* py_obj);
- PythonInteger (const PythonObject &object);
- PythonInteger (int64_t value);
- virtual ~PythonInteger ();
-
- virtual bool
- Reset (PyObject* py_obj = NULL);
-
- int64_t GetInteger() const;
-
- void
- SetInteger (int64_t value);
-
- StructuredData::IntegerSP CreateStructuredInteger() const;
- };
-
- class PythonList: public PythonObject
- {
- public:
-
- PythonList (bool create_empty);
- PythonList (PyObject* py_obj);
- PythonList (const PythonObject &object);
- PythonList (uint32_t count);
- virtual ~PythonList ();
-
- virtual bool
- Reset (PyObject* py_obj = NULL);
-
- uint32_t GetSize() const;
-
- PythonObject GetItemAtIndex(uint32_t index) const;
-
- void
- SetItemAtIndex (uint32_t index, const PythonObject &object);
-
- void
- AppendItem (const PythonObject &object);
-
- StructuredData::ArraySP CreateStructuredArray() const;
- };
-
- class PythonDictionary: public PythonObject
- {
- public:
-
- explicit PythonDictionary (bool create_empty);
- PythonDictionary (PyObject* object);
- PythonDictionary (const PythonObject &object);
- virtual ~PythonDictionary ();
-
- virtual bool
- Reset (PyObject* object = NULL);
-
- uint32_t GetSize() const;
-
- PythonObject
- GetItemForKey (const PythonString &key) const;
-
- const char *
- GetItemForKeyAsString (const PythonString &key, const char *fail_value = NULL) const;
-
- int64_t
- GetItemForKeyAsInteger (const PythonString &key, int64_t fail_value = 0) const;
-
- PythonObject
- GetItemForKey (const char *key) const;
-
- typedef bool (*DictionaryIteratorCallback)(PythonString* key, PythonDictionary* dict);
-
- PythonList
- GetKeys () const;
-
- PythonString
- GetKeyAtPosition (uint32_t pos) const;
-
- PythonObject
- GetValueAtPosition (uint32_t pos) const;
-
- void
- SetItemForKey (const PythonString &key, PyObject *value);
-
- void
- SetItemForKey (const PythonString &key, const PythonObject& value);
-
- StructuredData::DictionarySP CreateStructuredDictionary() const;
- };
-
-} // namespace lldb_private
-
-#endif // liblldb_PythonDataObjects_h_
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreter.h b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
index 0f45dd8245e..8a67807c810 100644
--- a/lldb/include/lldb/Interpreter/ScriptInterpreter.h
+++ b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
@@ -14,6 +14,7 @@
#include "lldb/Core/Broadcaster.h"
#include "lldb/Core/Error.h"
+#include "lldb/Core/PluginInterface.h"
#include "lldb/Core/StructuredData.h"
#include "lldb/Utility/PseudoTerminal.h"
@@ -36,8 +37,7 @@ private:
DISALLOW_COPY_AND_ASSIGN (ScriptInterpreterLocker);
};
-
-class ScriptInterpreter
+class ScriptInterpreter : public PluginInterface
{
public:
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreterNone.h b/lldb/include/lldb/Interpreter/ScriptInterpreterNone.h
deleted file mode 100644
index 6c82b60b0bc..00000000000
--- a/lldb/include/lldb/Interpreter/ScriptInterpreterNone.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- ScriptInterpreterNone.h ---------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef liblldb_ScriptInterpreterNone_h_
-#define liblldb_ScriptInterpreterNone_h_
-
-#include "lldb/Interpreter/ScriptInterpreter.h"
-
-namespace lldb_private {
-
-class ScriptInterpreterNone : public ScriptInterpreter
-{
-public:
-
- ScriptInterpreterNone (CommandInterpreter &interpreter);
-
- ~ScriptInterpreterNone ();
-
- bool
- ExecuteOneLine (const char *command, CommandReturnObject *result, const ExecuteScriptOptions &options = ExecuteScriptOptions());
-
- void
- ExecuteInterpreterLoop ();
-
-};
-
-} // namespace lldb_private
-
-#endif // #ifndef liblldb_ScriptInterpreterNone_h_
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h b/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
deleted file mode 100644
index 058058ecccb..00000000000
--- a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
+++ /dev/null
@@ -1,563 +0,0 @@
-//===-- ScriptInterpreterPython.h -------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-#ifndef liblldb_ScriptInterpreterPython_h_
-#define liblldb_ScriptInterpreterPython_h_
-
-#ifdef LLDB_DISABLE_PYTHON
-
-// Python is disabled in this build
-
-#else
-
-#include "lldb/lldb-python.h"
-#include "lldb/lldb-private.h"
-#include "lldb/Core/IOHandler.h"
-#include "lldb/Interpreter/ScriptInterpreter.h"
-#include "lldb/Interpreter/PythonDataObjects.h"
-#include "lldb/Host/Terminal.h"
-
-class IOHandlerPythonInterpreter;
-
-namespace lldb_private {
-
-class ScriptInterpreterPython :
- public ScriptInterpreter,
- public IOHandlerDelegateMultiline
-{
-public:
- typedef void (*SWIGInitCallback) (void);
-
- typedef bool (*SWIGBreakpointCallbackFunction) (const char *python_function_name,
- const char *session_dictionary_name,
- const lldb::StackFrameSP& frame_sp,
- const lldb::BreakpointLocationSP &bp_loc_sp);
-
- typedef bool (*SWIGWatchpointCallbackFunction) (const char *python_function_name,
- const char *session_dictionary_name,
- const lldb::StackFrameSP& frame_sp,
- const lldb::WatchpointSP &wp_sp);
-
- typedef bool (*SWIGPythonTypeScriptCallbackFunction) (const char *python_function_name,
- void *session_dictionary,
- const lldb::ValueObjectSP& valobj_sp,
- void** pyfunct_wrapper,
- const lldb::TypeSummaryOptionsSP& options,
- std::string& retval);
-
- typedef void* (*SWIGPythonCreateSyntheticProvider) (const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::ValueObjectSP& valobj_sp);
-
- typedef void* (*SWIGPythonCreateCommandObject) (const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::DebuggerSP debugger_sp);
-
- typedef void* (*SWIGPythonCreateScriptedThreadPlan) (const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::ThreadPlanSP& thread_plan_sp);
-
- typedef bool (*SWIGPythonCallThreadPlan) (void *implementor, const char *method_name, Event *event_sp, bool &got_error);
-
- typedef void* (*SWIGPythonCreateOSPlugin) (const char *python_class_name,
- const char *session_dictionary_name,
- const lldb::ProcessSP& process_sp);
-
- typedef size_t (*SWIGPythonCalculateNumChildren) (void *implementor);
- typedef void* (*SWIGPythonGetChildAtIndex) (void *implementor, uint32_t idx);
- typedef int (*SWIGPythonGetIndexOfChildWithName) (void *implementor, const char* child_name);
- typedef void* (*SWIGPythonCastPyObjectToSBValue) (void* data);
- typedef lldb::ValueObjectSP (*SWIGPythonGetValueObjectSPFromSBValue) (void* data);
- typedef bool (*SWIGPythonUpdateSynthProviderInstance) (void* data);
- typedef bool (*SWIGPythonMightHaveChildrenSynthProviderInstance) (void* data);
- typedef void* (*SWIGPythonGetValueSynthProviderInstance) (void *implementor);
-
- typedef bool (*SWIGPythonCallCommand) (const char *python_function_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger,
- const char* args,
- lldb_private::CommandReturnObject& cmd_retobj,
- lldb::ExecutionContextRefSP exe_ctx_ref_sp);
-
- typedef bool (*SWIGPythonCallCommandObject) (void *implementor,
- lldb::DebuggerSP& debugger,
- const char* args,
- lldb_private::CommandReturnObject& cmd_retobj,
- lldb::ExecutionContextRefSP exe_ctx_ref_sp);
-
-
- typedef bool (*SWIGPythonCallModuleInit) (const char *python_module_name,
- const char *session_dictionary_name,
- lldb::DebuggerSP& debugger);
-
- typedef bool (*SWIGPythonScriptKeyword_Process) (const char* python_function_name,
- const char* session_dictionary_name,
- lldb::ProcessSP& process,
- std::string& output);
- typedef bool (*SWIGPythonScriptKeyword_Thread) (const char* python_function_name,
- const char* session_dictionary_name,
- lldb::ThreadSP& thread,
- std::string& output);
-
- typedef bool (*SWIGPythonScriptKeyword_Target) (const char* python_function_name,
- const char* session_dictionary_name,
- lldb::TargetSP& target,
- std::string& output);
-
- typedef bool (*SWIGPythonScriptKeyword_Frame) (const char* python_function_name,
- const char* session_dictionary_name,
- lldb::StackFrameSP& frame,
- std::string& output);
-
- typedef bool (*SWIGPythonScriptKeyword_Value) (const char* python_function_name,
- const char* session_dictionary_name,
- lldb::ValueObjectSP& value,
- std::string& output);
-
- typedef void* (*SWIGPython_GetDynamicSetting) (void* module,
- const char* setting,
- const lldb::TargetSP& target_sp);
-
- friend class ::IOHandlerPythonInterpreter;
-
- ScriptInterpreterPython (CommandInterpreter &interpreter);
-
- ~ScriptInterpreterPython ();
-
- bool
- Interrupt() override;
-
- bool
- ExecuteOneLine (const char *command,
- CommandReturnObject *result,
- const ExecuteScriptOptions &options = ExecuteScriptOptions()) override;
-
- void
- ExecuteInterpreterLoop () override;
-
- bool
- ExecuteOneLineWithReturn (const char *in_string,
- ScriptInterpreter::ScriptReturnType return_type,
- void *ret_value,
- const ExecuteScriptOptions &options = ExecuteScriptOptions()) override;
-
- lldb_private::Error
- ExecuteMultipleLines (const char *in_string,
- const ExecuteScriptOptions &options = ExecuteScriptOptions()) override;
-
- Error
- ExportFunctionDefinitionToInterpreter (StringList &function_def) override;
-
- bool
- GenerateTypeScriptFunction (StringList &input, std::string& output, const void* name_token = NULL) override;
-
- bool
- GenerateTypeSynthClass (StringList &input, std::string& output, const void* name_token = NULL) override;
-
- bool
- GenerateTypeSynthClass (const char* oneliner, std::string& output, const void* name_token = NULL) override;
-
- // use this if the function code is just a one-liner script
- bool
- GenerateTypeScriptFunction (const char* oneliner, std::string& output, const void* name_token = NULL) override;
-
- bool
- GenerateScriptAliasFunction (StringList &input, std::string& output) override;
-
- StructuredData::ObjectSP CreateSyntheticScriptedProvider(const char *class_name, lldb::ValueObjectSP valobj) override;
-
- StructuredData::GenericSP CreateScriptCommandObject (const char *class_name) override;
-
- StructuredData::ObjectSP CreateScriptedThreadPlan(const char *class_name, lldb::ThreadPlanSP thread_plan) override;
-
- bool ScriptedThreadPlanExplainsStop(StructuredData::ObjectSP implementor_sp, Event *event, bool &script_error) override;
- bool ScriptedThreadPlanShouldStop(StructuredData::ObjectSP implementor_sp, Event *event, bool &script_error) override;
- lldb::StateType ScriptedThreadPlanGetRunState(StructuredData::ObjectSP implementor_sp, bool &script_error) override;
-
- StructuredData::GenericSP OSPlugin_CreatePluginObject(const char *class_name, lldb::ProcessSP process_sp) override;
-
- StructuredData::DictionarySP OSPlugin_RegisterInfo(StructuredData::ObjectSP os_plugin_object_sp) override;
-
- StructuredData::ArraySP OSPlugin_ThreadsInfo(StructuredData::ObjectSP os_plugin_object_sp) override;
-
- StructuredData::StringSP OSPlugin_RegisterContextData(StructuredData::ObjectSP os_plugin_object_sp, lldb::tid_t thread_id) override;
-
- StructuredData::DictionarySP OSPlugin_CreateThread(StructuredData::ObjectSP os_plugin_object_sp, lldb::tid_t tid,
- lldb::addr_t context) override;
-
- StructuredData::ObjectSP LoadPluginModule(const FileSpec &file_spec, lldb_private::Error &error) override;
-
- StructuredData::DictionarySP GetDynamicSettings(StructuredData::ObjectSP plugin_module_sp, Target *target, const char *setting_name,
- lldb_private::Error &error) override;
-
- size_t CalculateNumChildren(const StructuredData::ObjectSP &implementor) override;
-
- lldb::ValueObjectSP GetChildAtIndex(const StructuredData::ObjectSP &implementor, uint32_t idx) override;
-
- int GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor, const char *child_name) override;
-
- bool UpdateSynthProviderInstance(const StructuredData::ObjectSP &implementor) override;
-
- bool MightHaveChildrenSynthProviderInstance(const StructuredData::ObjectSP &implementor) override;
-
- lldb::ValueObjectSP GetSyntheticValue(const StructuredData::ObjectSP &implementor) override;
-
- bool
- RunScriptBasedCommand(const char* impl_function,
- const char* args,
- ScriptedCommandSynchronicity synchronicity,
- lldb_private::CommandReturnObject& cmd_retobj,
- Error& error,
- const lldb_private::ExecutionContext& exe_ctx) override;
-
- bool
- RunScriptBasedCommand (StructuredData::GenericSP impl_obj_sp,
- const char* args,
- ScriptedCommandSynchronicity synchronicity,
- lldb_private::CommandReturnObject& cmd_retobj,
- Error& error,
- const lldb_private::ExecutionContext& exe_ctx) override;
-
- Error
- GenerateFunction(const char *signature, const StringList &input) override;
-
- Error
- GenerateBreakpointCommandCallbackData (StringList &input, std::string& output) override;
-
- bool
- GenerateWatchpointCommandCallbackData (StringList &input, std::string& output) override;
-
-// static size_t
-// GenerateBreakpointOptionsCommandCallback (void *baton,
-// InputReader &reader,
-// lldb::InputReaderAction notification,
-// const char *bytes,
-// size_t bytes_len);
-//
-// static size_t
-// GenerateWatchpointOptionsCommandCallback (void *baton,
-// InputReader &reader,
-// lldb::InputReaderAction notification,
-// const char *bytes,
-// size_t bytes_len);
-
- static bool
- BreakpointCallbackFunction (void *baton,
- StoppointCallbackContext *context,
- lldb::user_id_t break_id,
- lldb::user_id_t break_loc_id);
-
- static bool
- WatchpointCallbackFunction (void *baton,
- StoppointCallbackContext *context,
- lldb::user_id_t watch_id);
-
- bool GetScriptedSummary(const char *function_name, lldb::ValueObjectSP valobj, StructuredData::ObjectSP &callee_wrapper_sp,
- const TypeSummaryOptions &options, std::string &retval) override;
-
- void
- Clear () override;
-
- bool
- GetDocumentationForItem (const char* item, std::string& dest) override;
-
- bool
- GetShortHelpForCommandObject(StructuredData::GenericSP cmd_obj_sp, std::string& dest) override;
-
- uint32_t
- GetFlagsForCommandObject (StructuredData::GenericSP cmd_obj_sp) override;
-
- bool
- GetLongHelpForCommandObject(StructuredData::GenericSP cmd_obj_sp, std::string& dest) override;
-
- bool
- CheckObjectExists (const char* name) override
- {
- if (!name || !name[0])
- return false;
- std::string temp;
- return GetDocumentationForItem (name,temp);
- }
-
- bool
- RunScriptFormatKeyword (const char* impl_function,
- Process* process,
- std::string& output,
- Error& error) override;
-
- bool
- RunScriptFormatKeyword (const char* impl_function,
- Thread* thread,
- std::string& output,
- Error& error) override;
-
- bool
- RunScriptFormatKeyword (const char* impl_function,
- Target* target,
- std::string& output,
- Error& error) override;
-
- bool
- RunScriptFormatKeyword (const char* impl_function,
- StackFrame* frame,
- std::string& output,
- Error& error) override;
-
- bool
- RunScriptFormatKeyword (const char* impl_function,
- ValueObject* value,
- std::string& output,
- Error& error) override;
-
- bool LoadScriptingModule(const char *filename, bool can_reload, bool init_session, lldb_private::Error &error,
- StructuredData::ObjectSP *module_sp = nullptr) override;
-
- bool
- IsReservedWord (const char* word) override;
-
- std::unique_ptr<ScriptInterpreterLocker>
- AcquireInterpreterLock () override;
-
- void
- CollectDataForBreakpointCommandCallback (std::vector<BreakpointOptions *> &bp_options_vec,
- CommandReturnObject &result) override;
-
- void
- CollectDataForWatchpointCommandCallback (WatchpointOptions *wp_options,
- CommandReturnObject &result) override;
-
- /// Set the callback body text into the callback for the breakpoint.
- Error
- SetBreakpointCommandCallback (BreakpointOptions *bp_options,
- const char *callback_body) override;
-
- void
- SetBreakpointCommandCallbackFunction (BreakpointOptions *bp_options,
- const char *function_name) override;
-
- /// Set a one-liner as the callback for the watchpoint.
- void
- SetWatchpointCommandCallback (WatchpointOptions *wp_options,
- const char *oneliner) override;
-
- StringList
- ReadCommandInputFromUser (FILE *in_file);
-
- void ResetOutputFileHandle(FILE *new_fh) override;
-
- static void
- InitializePrivate ();
-
- static void
- InitializeInterpreter (SWIGInitCallback python_swig_init_callback,
- SWIGBreakpointCallbackFunction swig_breakpoint_callback,
- SWIGWatchpointCallbackFunction swig_watchpoint_callback,
- SWIGPythonTypeScriptCallbackFunction swig_typescript_callback,
- SWIGPythonCreateSyntheticProvider swig_synthetic_script,
- SWIGPythonCreateCommandObject swig_create_cmd,
- SWIGPythonCalculateNumChildren swig_calc_children,
- SWIGPythonGetChildAtIndex swig_get_child_index,
- SWIGPythonGetIndexOfChildWithName swig_get_index_child,
- SWIGPythonCastPyObjectToSBValue swig_cast_to_sbvalue ,
- SWIGPythonGetValueObjectSPFromSBValue swig_get_valobj_sp_from_sbvalue,
- SWIGPythonUpdateSynthProviderInstance swig_update_provider,
- SWIGPythonMightHaveChildrenSynthProviderInstance swig_mighthavechildren_provider,
- SWIGPythonGetValueSynthProviderInstance swig_getvalue_provider,
- SWIGPythonCallCommand swig_call_command,
- SWIGPythonCallCommandObject swig_call_command_object,
- SWIGPythonCallModuleInit swig_call_module_init,
- SWIGPythonCreateOSPlugin swig_create_os_plugin,
- SWIGPythonScriptKeyword_Process swig_run_script_keyword_process,
- SWIGPythonScriptKeyword_Thread swig_run_script_keyword_thread,
- SWIGPythonScriptKeyword_Target swig_run_script_keyword_target,
- SWIGPythonScriptKeyword_Frame swig_run_script_keyword_frame,
- SWIGPythonScriptKeyword_Value swig_run_script_keyword_value,
- SWIGPython_GetDynamicSetting swig_plugin_get,
- SWIGPythonCreateScriptedThreadPlan swig_thread_plan_script,
- SWIGPythonCallThreadPlan swig_call_thread_plan);
-
- const char *
- GetDictionaryName ()
- {
- return m_dictionary_name.c_str();
- }
-
-
- PyThreadState *
- GetThreadState()
- {
- return m_command_thread_state;
- }
-
- void
- SetThreadState (PyThreadState *s)
- {
- if (s)
- m_command_thread_state = s;
- }
-
- //----------------------------------------------------------------------
- // IOHandlerDelegate
- //----------------------------------------------------------------------
- void
- IOHandlerActivated (IOHandler &io_handler) override;
-
- void
- IOHandlerInputComplete (IOHandler &io_handler, std::string &data) override;
-
-protected:
-
- bool
- EnterSession (uint16_t on_entry_flags,
- FILE *in,
- FILE *out,
- FILE *err);
-
- void
- LeaveSession ();
-
- void
- SaveTerminalState (int fd);
-
- void
- RestoreTerminalState ();
-
- class SynchronicityHandler
- {
- private:
- lldb::DebuggerSP m_debugger_sp;
- ScriptedCommandSynchronicity m_synch_wanted;
- bool m_old_asynch;
- public:
- SynchronicityHandler(lldb::DebuggerSP,
- ScriptedCommandSynchronicity);
- ~SynchronicityHandler();
- };
-
-public:
- class Locker : public ScriptInterpreterLocker
- {
- public:
-
- enum OnEntry
- {
- AcquireLock = 0x0001,
- InitSession = 0x0002,
- InitGlobals = 0x0004,
- NoSTDIN = 0x0008
- };
-
- enum OnLeave
- {
- FreeLock = 0x0001,
- FreeAcquiredLock = 0x0002, // do not free the lock if we already held it when calling constructor
- TearDownSession = 0x0004
- };
-
- Locker (ScriptInterpreterPython *py_interpreter = NULL,
- uint16_t on_entry = AcquireLock | InitSession,
- uint16_t on_leave = FreeLock | TearDownSession,
- FILE *in = NULL,
- FILE *out = NULL,
- FILE *err = NULL);
-
- ~Locker ();
-
- private:
-
- bool
- DoAcquireLock ();
-
- bool
- DoInitSession (uint16_t on_entry_flags, FILE *in, FILE *out, FILE *err);
-
- bool
- DoFreeLock ();
-
- bool
- DoTearDownSession ();
-
- static void
- ReleasePythonLock ();
-
- bool m_teardown_session;
- ScriptInterpreterPython *m_python_interpreter;
-// FILE* m_tmp_fh;
- PyGILState_STATE m_GILState;
- };
-protected:
- enum class AddLocation
- {
- Beginning,
- End
- };
-
- static void AddToSysPath(AddLocation location, std::string path);
-
- uint32_t
- IsExecutingPython () const
- {
- return m_lock_count > 0;
- }
-
- uint32_t
- IncrementLockCount()
- {
- return ++m_lock_count;
- }
-
- uint32_t
- DecrementLockCount()
- {
- if (m_lock_count > 0)
- --m_lock_count;
- return m_lock_count;
- }
-
- enum ActiveIOHandler {
- eIOHandlerNone,
- eIOHandlerBreakpoint,
- eIOHandlerWatchpoint
- };
- PythonObject &
- GetMainModule ();
-
- PythonDictionary &
- GetSessionDictionary ();
-
- PythonDictionary &
- GetSysModuleDictionary ();
-
- bool
- GetEmbeddedInterpreterModuleObjects ();
-
- PythonObject m_saved_stdin;
- PythonObject m_saved_stdout;
- PythonObject m_saved_stderr;
- PythonObject m_main_module;
- PythonObject m_lldb_module;
- PythonDictionary m_session_dict;
- PythonDictionary m_sys_module_dict;
- PythonObject m_run_one_line_function;
- PythonObject m_run_one_line_str_global;
- std::string m_dictionary_name;
- TerminalState m_terminal_state;
- ActiveIOHandler m_active_io_handler;
- bool m_session_is_active;
- bool m_pty_slave_is_open;
- bool m_valid_session;
- uint32_t m_lock_count;
- PyThreadState *m_command_thread_state;
-};
-} // namespace lldb_private
-
-#endif // #ifdef LLDB_DISABLE_PYTHON
-
-#endif // #ifndef liblldb_ScriptInterpreterPython_h_
diff --git a/lldb/include/lldb/Utility/PythonPointer.h b/lldb/include/lldb/Utility/PythonPointer.h
deleted file mode 100644
index fe90670fd2e..00000000000
--- a/lldb/include/lldb/Utility/PythonPointer.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//===---------------------PythonPointer.h ------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef utility_PythonPointer_h_
-#define utility_PythonPointer_h_
-
-#include <algorithm>
-
-#include "lldb/lldb-python.h"
-
-namespace lldb_private {
-
-template<class T>
-class PythonPointer
-{
-public:
- typedef PyObject* element_type;
-private:
- element_type* ptr_;
- bool my_ref;
-public:
-
- PythonPointer(element_type p, bool steal_ref = false) :
- ptr_(p),
- my_ref(!steal_ref)
- {
- if (my_ref)
- Py_INCREF(ptr_);
- }
-
- PythonPointer(const PythonPointer& r, bool steal_ref = false) :
- ptr_(r.ptr_),
- my_ref(!steal_ref)
- {
- if (my_ref)
- Py_INCREF(ptr_);
- }
-
- ~PythonPointer()
- {
- if (my_ref)
- Py_XDECREF(ptr_);
- }
-
- PythonPointer
- StealReference()
- {
- return PythonPointer(ptr_,true);
- }
-
- PythonPointer
- DuplicateReference()
- {
- return PythonPointer(ptr_, false);
- }
-
- element_type get() const {return ptr_;}
-
- bool IsNull() { return ptr_ == NULL; }
- bool IsNone() { return ptr_ == Py_None; }
-
- operator PyObject* () { return ptr_; }
-};
-
-} // namespace lldb
-
-#endif // utility_PythonPointer_h_
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index da90ac4775e..d0d63048b78 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -376,6 +376,8 @@ namespace lldb {
#ifndef LLDB_DISABLE_PYTHON
typedef std::shared_ptr<lldb_private::ScriptSummaryFormat> ScriptSummaryFormatSP;
#endif // #ifndef LLDB_DISABLE_PYTHON
+ typedef std::shared_ptr<lldb_private::ScriptInterpreter> ScriptInterpreterSP;
+ typedef std::unique_ptr<lldb_private::ScriptInterpreter> ScriptInterpreterUP;
typedef std::shared_ptr<lldb_private::Section> SectionSP;
typedef std::unique_ptr<lldb_private::SectionList> SectionListUP;
typedef std::weak_ptr<lldb_private::Section> SectionWP;
diff --git a/lldb/include/lldb/lldb-private-interfaces.h b/lldb/include/lldb/lldb-private-interfaces.h
index 7b5c1c9d2c0..c9a555a6eec 100644
--- a/lldb/include/lldb/lldb-private-interfaces.h
+++ b/lldb/include/lldb/lldb-private-interfaces.h
@@ -33,6 +33,7 @@ namespace lldb_private
typedef SystemRuntime *(*SystemRuntimeCreateInstance) (Process *process);
typedef lldb::PlatformSP (*PlatformCreateInstance) (bool force, const ArchSpec *arch);
typedef lldb::ProcessSP (*ProcessCreateInstance) (Target &target, Listener &listener, const FileSpec *crash_file_path);
+ typedef lldb::ScriptInterpreterSP (*ScriptInterpreterCreateInstance)(CommandInterpreter &interpreter);
typedef SymbolFile* (*SymbolFileCreateInstance) (ObjectFile* obj_file);
typedef SymbolVendor* (*SymbolVendorCreateInstance) (const lldb::ModuleSP &module_sp, lldb_private::Stream *feedback_strm); // Module can be NULL for default system symbol vendor
typedef bool (*BreakpointHitCallback) (void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id);
diff --git a/lldb/include/lldb/lldb-python.h b/lldb/include/lldb/lldb-python.h
deleted file mode 100644
index c8ef054f60e..00000000000
--- a/lldb/include/lldb/lldb-python.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//===-- lldb-python.h --------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_lldb_python_h_
-#define LLDB_lldb_python_h_
-
-// Python.h needs to be included before any system headers in order to avoid redefinition of macros
-
-#ifdef LLDB_DISABLE_PYTHON
-// Python is disabled in this build
-#else
- #if defined(__linux__)
- // features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined. This value
- // may be different from the value that Python defines it to be which results
- // in a warning. Undefine _POSIX_C_SOURCE before including Python.h The same
- // holds for _XOPEN_SOURCE.
- #undef _POSIX_C_SOURCE
- #undef _XOPEN_SOURCE
- #endif
-
- // Include python for non windows machines
- #include <Python.h>
-#endif // LLDB_DISABLE_PYTHON
-
-#endif // LLDB_lldb_python_h_
OpenPOWER on IntegriCloud