Author: Antonio Cuni <anto.c...@gmail.com> Branch: jitypes2 Changeset: r44616:3b67787ff314 Date: 2011-06-01 12:27 +0200 http://bitbucket.org/pypy/pypy/changeset/3b67787ff314/
Log: make sure that pointer types can be compared by identity diff --git a/pypy/module/_ffi/interp_ffi.py b/pypy/module/_ffi/interp_ffi.py --- a/pypy/module/_ffi/interp_ffi.py +++ b/pypy/module/_ffi/interp_ffi.py @@ -124,9 +124,15 @@ app_types.__dict__ = build_ffi_types() def descr_new_pointer(space, w_cls, w_pointer_to): - w_pointer_to = space.interp_w(W_FFIType, w_pointer_to) - name = '(pointer to %s)' % w_pointer_to.name - return W_FFIType(name, libffi.types.pointer, w_pointer_to = w_pointer_to) + try: + return descr_new_pointer.cache[w_pointer_to] + except KeyError: + w_pointer_to = space.interp_w(W_FFIType, w_pointer_to) + name = '(pointer to %s)' % w_pointer_to.name + w_result = W_FFIType(name, libffi.types.pointer, w_pointer_to = w_pointer_to) + descr_new_pointer.cache[w_pointer_to] = w_result + return w_result +descr_new_pointer.cache = {} class W_types(Wrappable): pass diff --git a/pypy/module/_ffi/test/test__ffi.py b/pypy/module/_ffi/test/test__ffi.py --- a/pypy/module/_ffi/test/test__ffi.py +++ b/pypy/module/_ffi/test/test__ffi.py @@ -195,6 +195,14 @@ assert types.sint.deref_pointer() is None raises(TypeError, "types.Pointer(42)") + def test_pointer_identity(self): + from _ffi import types + x = types.Pointer(types.slong) + y = types.Pointer(types.slong) + z = types.Pointer(types.char) + assert x is y + assert x is not z + def test_typed_pointer_args(self): """ extern int dummy; // defined in test_void_result _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit