[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