[lldb/SWIG] Refactor extensions to be non Python-specific
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 8 Jan 2020 21:34:55 +0000 (13:34 -0800)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 8 Jan 2020 21:37:07 +0000 (13:37 -0800)
The current SWIG extensions for the string conversion operator is Python
specific because it uses the PythonObjects. This means that the code
cannot be reused for other SWIG supported languages such as Lua.

This reimplements the extensions in a more generic way that can be
reused.

Differential revision: https://reviews.llvm.org/D72377

lldb/scripts/Python/python-extensions.swig
lldb/scripts/interface/SBTarget.i
lldb/scripts/lldb.swig
lldb/scripts/lldb_lua.swig

index c10c32b..dbd4b1d 100644 (file)
@@ -1,4 +1,3 @@
-
 %extend lldb::SBAddress {
         %nothreadallow;
         PyObject *lldb::SBAddress::__str__ (){
 }
 
 %extend lldb::SBTarget {
-        %nothreadallow;
-        PyObject *lldb::SBTarget::__str__ (){
-                lldb::SBStream description;
-                $self->GetDescription (description, lldb::eDescriptionLevelBrief);
-                const char *desc = description.GetData();
-                size_t desc_len = description.GetSize();
-                if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
-                    --desc_len;
-                return PythonString(llvm::StringRef(desc, desc_len)).release();
-        }
-        %clearnothreadallow;
-
     %pythoncode %{
         def __eq__(self, rhs):
             if not isinstance(rhs, type(self)):
index b316228..02c70b6 100644 (file)
@@ -8,7 +8,6 @@
 
 namespace lldb {
 
-
 %feature("docstring",
 "Represents the target program running under the debugger.
 
@@ -968,6 +967,22 @@ public:
     lldb::SBValue
     EvaluateExpression (const char *expr, const lldb::SBExpressionOptions &options);
 
+  %extend {
+    %nothreadallow;
+    std::string lldb::SBTarget::__str__(){
+      lldb::SBStream stream;
+      $self->GetDescription (stream, lldb::eDescriptionLevelBrief);
+
+      const char *desc = stream.GetData();
+      size_t desc_len = stream.GetSize();
+      if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r'))
+        --desc_len;
+
+      return std::string(desc, desc_len);
+    }
+    %clearnothreadallow;
+  }
+
 #ifdef SWIGPYTHON
     %pythoncode %{
         class modules_access(object):
index f030116..c3b9083 100644 (file)
@@ -93,6 +93,7 @@ def lldb_iter(obj, getsize, getelem):
         yield elem(i)
 %}
 
+%include <std_string.i>
 %include "./Python/python-typemaps.swig"
 %include "./headers.swig"
 
index 85edeff..bf88090 100644 (file)
@@ -8,6 +8,7 @@
 
 %module lldb
 
+%include <std_string.i>
 %include "./headers.swig"
 
 %{