[pypy-svn] r24284 - pypy/dist/pypy/rpython/lltypesystem
pedronis at codespeak.net
pedronis at codespeak.net
Mon Mar 13 11:52:59 CET 2006
Author: pedronis
Date: Mon Mar 13 11:52:58 2006
New Revision: 24284
Modified:
pypy/dist/pypy/rpython/lltypesystem/lltype.py
Log:
preserve solidity
Modified: pypy/dist/pypy/rpython/lltypesystem/lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lltype.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/lltype.py Mon Mar 13 11:52:58 2006
@@ -574,11 +574,11 @@
raise TypeError, "can only cast pointers to other pointers"
return ptr._cast_to(PTRTYPE)
-def _expose(val):
+def _expose(val, solid=False):
"""XXX A nice docstring here"""
T = typeOf(val)
if isinstance(T, ContainerType):
- val = _ptr(Ptr(T), val)
+ val = _ptr(Ptr(T), val, solid=solid)
return val
def parentlink(container):
@@ -677,7 +677,7 @@
if isinstance(self._T, Struct):
if field_name in self._T._flds:
o = getattr(self._obj, field_name)
- return _expose(o)
+ return _expose(o, self._solid)
if isinstance(self._T, ContainerType):
adtmeth = self._T._adtmeths.get(field_name)
if adtmeth is not None:
@@ -719,7 +719,7 @@
if not (0 <= i < len(self._obj.items)):
raise IndexError("array index out of bounds")
o = self._obj.items[i]
- return _expose(o)
+ return _expose(o, self._solid)
raise TypeError("%r instance is not an array" % (self._T,))
def __setitem__(self, i, val):
@@ -782,7 +782,7 @@
while down_or_up:
p = getattr(p, typeOf(p).TO._names[0])
down_or_up -= 1
- return _ptr(PTRTYPE, p._obj)
+ return _ptr(PTRTYPE, p._obj, solid=self._solid)
u = -down_or_up
struc = self._obj
while u:
@@ -796,7 +796,7 @@
u -= 1
if PARENTTYPE != PTRTYPE.TO:
raise TypeError("widening %r inside %r instead of %r" % (CURTYPE, PARENTTYPE, PTRTYPE.TO))
- return _ptr(PTRTYPE, struc)
+ return _ptr(PTRTYPE, struc, solid=self._solid)
def _cast_to_int(self):
obj = self._obj
More information about the Pypy-commit
mailing list