[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