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