Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r56243:63b2442414dd Date: 2012-07-19 14:19 -0700 http://bitbucket.org/pypy/pypy/changeset/63b2442414dd/
Log: allow typed pointer null creation and setting diff --git a/pypy/module/cppyy/converter.py b/pypy/module/cppyy/converter.py --- a/pypy/module/cppyy/converter.py +++ b/pypy/module/cppyy/converter.py @@ -396,15 +396,9 @@ except OperationError: pass # no set on buffer/array/None -class VoidPtrRefConverter(TypeConverter): +class VoidPtrRefConverter(VoidPtrPtrConverter): _immutable_ = True - - def convert_argument(self, space, w_obj, address, call_local): - x = rffi.cast(rffi.VOIDPP, address) - x[0] = rffi.cast(rffi.VOIDP, get_rawobject(space, w_obj)) - ba = rffi.cast(rffi.CCHARP, address) - ba[capi.c_function_arg_typeoffset()] = 'r' - + uses_local = True class InstancePtrConverter(TypeConverter): _immutable_ = True diff --git a/pypy/module/cppyy/test/advancedcpp.h b/pypy/module/cppyy/test/advancedcpp.h --- a/pypy/module/cppyy/test/advancedcpp.h +++ b/pypy/module/cppyy/test/advancedcpp.h @@ -314,6 +314,16 @@ long gime_address_ptr_ref(void*& obj) { return (long)obj; } + + static long set_address_ptr_ptr(void** obj) { + (*(long**)obj) = (long*)0x4321; + return 42; + } + + static long set_address_ptr_ref(void*& obj) { + obj = (void*)0x1234; + return 21; + } }; diff --git a/pypy/module/cppyy/test/test_advancedcpp.py b/pypy/module/cppyy/test/test_advancedcpp.py --- a/pypy/module/cppyy/test/test_advancedcpp.py +++ b/pypy/module/cppyy/test/test_advancedcpp.py @@ -390,6 +390,13 @@ assert 0 == pp.gime_address_ptr(0) assert 0 == pp.gime_address_ptr(None) + ptr = cppyy.bind_object(0, some_concrete_class) + assert cppyy.addressof(ptr) == 0 + pp.set_address_ptr_ref(ptr) + assert cppyy.addressof(ptr) == 0x1234 + pp.set_address_ptr_ptr(ptr) + assert cppyy.addressof(ptr) == 0x4321 + def test09_opaque_pointer_assing(self): """Test passing around of opaque pointers""" _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit