[pypy-commit] pypy reflex-support: allow typed pointer null creation and setting
wlav
noreply at buildbot.pypy.org
Fri Jul 20 01:31:31 CEST 2012
Author: Wim Lavrijsen <WLavrijsen at 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"""
More information about the pypy-commit
mailing list