From eda01c31757db23748a0efa1629442de5cd53282 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Fri, 16 Oct 2015 16:39:18 +0000 Subject: Update SWIG typemaps to use `PythonFile`. Using the Python native C API is non-portable across Python versions, so this patch changes them to use the `PythonFile` class which hides the version specific differences behind a single interface. llvm-svn: 250525 --- .../ScriptInterpreter/Python/PythonDataObjects.cpp | 22 ++++++++++++++++++++++ .../ScriptInterpreter/Python/PythonDataObjects.h | 5 ++++- 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'lldb/source/Plugins/ScriptInterpreter') diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp index 5c458bfd628..6a016e9e6aa 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp @@ -582,6 +582,14 @@ PythonFile::PythonFile(File &file, const char *mode) Reset(file, mode); } +PythonFile::PythonFile(const char *path, const char *mode) +{ + FILE *fp = nullptr; + fp = fopen(path, mode); + lldb_private::File file(fp, true); + Reset(file, mode); +} + PythonFile::PythonFile(PyRefType type, PyObject *o) { Reset(type, o); @@ -651,4 +659,18 @@ PythonFile::Reset(File &file, const char *mode) #endif } +bool +PythonFile::GetUnderlyingFile(File &file) const +{ + if (!IsValid()) + return false; + + file.Close(); + // We don't own the file descriptor returned by this function, make sure the + // File object knows about that. + file.SetDescriptor(PyObject_AsFileDescriptor(m_py_obj), false); + return file.IsValid(); +} + + #endif diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h index 34549d97f3d..93513473d30 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.h @@ -323,7 +323,8 @@ public: class PythonFile : public PythonObject { public: - explicit PythonFile(File &file, const char *mode); + PythonFile(File &file, const char *mode); + PythonFile(const char *path, const char *mode); PythonFile(PyRefType type, PyObject *o); ~PythonFile() override; @@ -333,6 +334,8 @@ class PythonFile : public PythonObject void Reset(PyRefType type, PyObject *py_obj) override; void Reset(File &file, const char *mode); + + bool GetUnderlyingFile(File &file) const; }; } // namespace lldb_private -- cgit v1.2.3