[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