Author: Armin Rigo <ar...@tunes.org>
Branch: ffi-backend
Changeset: r55962:163336f37c59
Date: 2012-07-07 13:09 +0200
http://bitbucket.org/pypy/pypy/changeset/163336f37c59/

Log:    Test and fix

diff --git a/pypy/module/_cffi_backend/ccallback.py 
b/pypy/module/_cffi_backend/ccallback.py
--- a/pypy/module/_cffi_backend/ccallback.py
+++ b/pypy/module/_cffi_backend/ccallback.py
@@ -59,6 +59,10 @@
         if self.ll_error:
             lltype.free(self.ll_error, flavor='raw')
 
+    def _repr_extra(self):
+        space = self.space
+        return 'calling ' + space.str_w(space.repr(self.w_callable))
+
     def invoke(self, ll_args, ll_res):
         space = self.space
         ctype = self.ctype
diff --git a/pypy/module/_cffi_backend/cdataobj.py 
b/pypy/module/_cffi_backend/cdataobj.py
--- a/pypy/module/_cffi_backend/cdataobj.py
+++ b/pypy/module/_cffi_backend/cdataobj.py
@@ -22,9 +22,13 @@
         self._cdata = cdata    # don't forget keepalive_until_here!
         self.ctype = ctype
 
-    def repr(self):
+    def _repr_extra(self):
         extra = self.ctype.extra_repr(self._cdata)
         keepalive_until_here(self)
+        return extra
+
+    def repr(self):
+        extra = self._repr_extra()
         return self.space.wrap("<cdata '%s' %s>" % (self.ctype.name, extra))
 
     def nonzero(self):
@@ -193,9 +197,8 @@
     def _owning_num_bytes(self):
         return self.ctype.size
 
-    def repr(self):
-        return self.space.wrap("<cdata '%s' owning %d bytes>" % (
-            self.ctype.name, self._owning_num_bytes()))
+    def _repr_extra(self):
+        return 'owning %d bytes' % self._owning_num_bytes()
 
 
 class W_CDataNewOwning(W_CDataApplevelOwning):
@@ -296,7 +299,6 @@
 W_CDataApplevelOwning.typedef = TypeDef(
     '_cffi_backend.CDataOwn',
     W_CData.typedef,    # base typedef
-    __repr__ = interp2app(W_CDataApplevelOwning.repr),
     __weakref__ = make_weakref_descr(W_CDataApplevelOwning),
     )
 W_CDataApplevelOwning.typedef.acceptable_as_base_class = False
diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py 
b/pypy/module/_cffi_backend/test/_backend_test_c.py
--- a/pypy/module/_cffi_backend/test/_backend_test_c.py
+++ b/pypy/module/_cffi_backend/test/_backend_test_c.py
@@ -835,6 +835,8 @@
         return callback(BFunc, cb, 42)    # 'cb' and 'BFunc' go out of scope
     f = make_callback()
     assert f(-142) == -141
+    assert repr(f).startswith(
+        "<cdata 'int(*)(int)' calling <function cb at 0x")
 
 def test_callback_return_type():
     for rettype in ["signed char", "short", "int", "long", "long long",
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to