Author: Armin Rigo <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit