[pypy-svn] r26951 - in pypy/dist/pypy/rpython/lltypesystem: . test
arigo at codespeak.net
arigo at codespeak.net
Sun May 7 21:20:21 CEST 2006
Author: arigo
Date: Sun May 7 21:20:20 2006
New Revision: 26951
Modified:
pypy/dist/pypy/rpython/lltypesystem/llmemory.py
pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
Log:
(pedronis, arigo)
Support for casting back from address to a pointer with a different "opaqueness".
Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py Sun May 7 21:20:20 2006
@@ -228,6 +228,9 @@
# special case that requires direct_fieldptr
return lltype.direct_fieldptr(ref.struct,
ref.fieldname)
+ elif (isinstance(EXPECTED_TYPE.TO, lltype.OpaqueType) or
+ isinstance(ref.type().TO, lltype.OpaqueType)):
+ return lltype.cast_opaque_ptr(EXPECTED_TYPE, ref.get())
else:
# regular case
return lltype.cast_pointer(EXPECTED_TYPE, ref.get())
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py Sun May 7 21:20:20 2006
@@ -182,3 +182,14 @@
subarray = cast_adr_to_ptr(adr, lltype.Ptr(SUBARRAY))
subarray[0] = 121
assert s.y == 121
+
+def test_opaque():
+ S = lltype.GcStruct('S', ('x', lltype.Signed), ('y', lltype.Signed))
+ O = lltype.GcOpaqueType('O')
+ s = lltype.malloc(S)
+ adr = cast_ptr_to_adr(s)
+ o = cast_adr_to_ptr(adr, lltype.Ptr(O))
+ assert lltype.cast_opaque_ptr(lltype.Ptr(S), o) == s
+ adr2 = cast_ptr_to_adr(o)
+ s2 = cast_adr_to_ptr(adr2, lltype.Ptr(S))
+ assert s2 == s
More information about the Pypy-commit
mailing list