[pypy-svn] r26927 - in pypy/dist/pypy/rpython: lltypesystem lltypesystem/test test
arigo at codespeak.net
arigo at codespeak.net
Sun May 7 12:40:33 CEST 2006
Author: arigo
Date: Sun May 7 12:40:32 2006
New Revision: 26927
Modified:
pypy/dist/pypy/rpython/lltypesystem/lltype.py
pypy/dist/pypy/rpython/lltypesystem/test/test_lltype.py
pypy/dist/pypy/rpython/test/test_rptr.py
Log:
(arigo, pedronis) support for casts from opaque to opaque, likely needed
for the stackless transform.
Modified: pypy/dist/pypy/rpython/lltypesystem/lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lltype.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/lltype.py Sun May 7 12:40:32 2006
@@ -646,9 +646,18 @@
and isinstance(PTRTYPE.TO, OpaqueType)):
return opaqueptr(PTRTYPE.TO, 'hidden', container = ptr._obj,
solid = ptr._solid)
+ elif (isinstance(CURTYPE.TO, OpaqueType)
+ and isinstance(PTRTYPE.TO, OpaqueType)):
+ try:
+ container = ptr._obj.container
+ except AttributeError:
+ raise RuntimeError("%r does not come from a container" % (ptr,))
+ return opaqueptr(PTRTYPE.TO, 'hidden',
+ container = container,
+ solid = ptr._obj.solid)
else:
- raise TypeError("cast_opaque_ptr(): only between Opaque and "
- "non-Opaque")
+ raise TypeError("invalid cast_opaque_ptr(): %r -> %r" %
+ (CURTYPE, PTRTYPE))
def direct_fieldptr(structptr, fieldname):
"""Get a pointer to a field in the struct. The resulting
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_lltype.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_lltype.py Sun May 7 12:40:32 2006
@@ -432,11 +432,14 @@
def test_cast_opaque_ptr():
O = GcOpaqueType('O')
+ Q = GcOpaqueType('Q')
S = GcStruct('S', ('x', Signed))
s = malloc(S)
o = cast_opaque_ptr(Ptr(O), s)
assert typeOf(o).TO == O
- p = cast_opaque_ptr(Ptr(S), o)
+ q = cast_opaque_ptr(Ptr(Q), o)
+ assert typeOf(q).TO == Q
+ p = cast_opaque_ptr(Ptr(S), q)
assert typeOf(p).TO == S
assert p == s
O1 = OpaqueType('O')
Modified: pypy/dist/pypy/rpython/test/test_rptr.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rptr.py (original)
+++ pypy/dist/pypy/rpython/test/test_rptr.py Sun May 7 12:40:32 2006
@@ -121,11 +121,13 @@
def test_cast_opaque_ptr():
O = GcOpaqueType('O')
+ Q = GcOpaqueType('Q')
S = GcStruct('S', ('x', Signed))
def fn():
s = malloc(S)
o = cast_opaque_ptr(Ptr(O), s)
- p = cast_opaque_ptr(Ptr(S), o)
+ q = cast_opaque_ptr(Ptr(Q), o)
+ p = cast_opaque_ptr(Ptr(S), q)
return p == s
res = interpret(fn, [])
assert res is True
More information about the Pypy-commit
mailing list