[pypy-svn] r32216 - pypy/branch/more-gckinds/pypy/rpython/memory

mwh at codespeak.net mwh at codespeak.net
Tue Sep 12 15:21:08 CEST 2006


Author: mwh
Date: Tue Sep 12 15:21:06 2006
New Revision: 32216

Modified:
   pypy/branch/more-gckinds/pypy/rpython/memory/gctransform.py
Log:
inadequate fix for zeroing gc pointers inside embedded structs.


Modified: pypy/branch/more-gckinds/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/branch/more-gckinds/pypy/rpython/memory/gctransform.py	(original)
+++ pypy/branch/more-gckinds/pypy/rpython/memory/gctransform.py	Tue Sep 12 15:21:06 2006
@@ -1349,10 +1349,15 @@
             c_null = Constant(lltype.nullptr(FIELD.TO), FIELD)
             llops.genop('bare_setfield', [v, c_name, c_null])
         elif isinstance(FIELD, lltype.Struct):
-            c_name = Constant(name, lltype.Void)
-            v1 = llops.genop('getsubstruct', [v, c_name],
-                             resulttype = lltype.Ptr(FIELD))
-            gen_zero_gc_pointers(FIELD, v1, llops)
+            # XXX this is insufficient!
+            for name2 in FIELD._names:
+                FIELD_TYPE = getattr(FIELD, name2)
+                if isinstance(FIELD_TYPE, lltype.Ptr) and FIELD_TYPE._needsgc():
+                    c_name = Constant(name, lltype.Void)
+                    v1 = llops.genop('getsubstruct', [v, c_name],
+                                     resulttype = lltype.Ptr(FIELD))
+                    gen_zero_gc_pointers(FIELD, v1, llops)
+                    break
 
 
 # ____________________________________________________________



More information about the Pypy-commit mailing list