[pypy-svn] r68298 - in pypy/branch/gc-compress/pypy: rpython/memory/gctransform translator/c
arigo at codespeak.net
arigo at codespeak.net
Sat Oct 10 14:09:27 CEST 2009
Author: arigo
Date: Sat Oct 10 14:09:26 2009
New Revision: 68298
Modified:
pypy/branch/gc-compress/pypy/rpython/memory/gctransform/framework.py
pypy/branch/gc-compress/pypy/translator/c/database.py
Log:
- don't generate any code for setfield('typeptr').
- tweak the dependency tracking...
Modified: pypy/branch/gc-compress/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/gc-compress/pypy/rpython/memory/gctransform/framework.py (original)
+++ pypy/branch/gc-compress/pypy/rpython/memory/gctransform/framework.py Sat Oct 10 14:09:26 2009
@@ -467,13 +467,15 @@
newgcdependencies = []
newgcdependencies.append(ll_static_roots_inside)
- # also add the type_info_group's members into newgcdependencies,
- # to make sure that they are all followed (only a part of them
- # might have been followed by a previous enum_dependencies()).
- newgcdependencies.extend(self.layoutbuilder.type_info_group.members)
self.write_typeid_list()
return newgcdependencies
+ def get_final_dependencies(self):
+ # returns an iterator enumerating the type_info_group's members,
+ # to make sure that they are all followed (only a part of them
+ # might have been followed by a previous enum_dependencies()).
+ return iter(self.layoutbuilder.type_info_group.members)
+
def write_typeid_list(self):
"""write out the list of type ids together with some info"""
from pypy.tool.udir import udir
@@ -791,17 +793,19 @@
def transform_setfield_typeptr(self, hop):
# replace such a setfield with an assertion that the typeptr is right
- v_new = hop.spaceop.args[2]
- v_old = hop.genop('gc_gettypeptr_group', [hop.spaceop.args[0],
- self.c_type_info_group,
- self.c_vtinfo_skip_offset,
- self.c_vtableinfo],
- resulttype = v_new.concretetype)
- v_eq = hop.genop("ptr_eq", [v_old, v_new],
- resulttype = lltype.Bool)
- c_errmsg = rmodel.inputconst(lltype.Void,
- "setfield_typeptr: wrong type")
- hop.genop('debug_assert', [v_eq, c_errmsg])
+ # (xxx not very useful right now, so disabled)
+ if 0:
+ v_new = hop.spaceop.args[2]
+ v_old = hop.genop('gc_gettypeptr_group', [hop.spaceop.args[0],
+ self.c_type_info_group,
+ self.c_vtinfo_skip_offset,
+ self.c_vtableinfo],
+ resulttype = v_new.concretetype)
+ v_eq = hop.genop("ptr_eq", [v_old, v_new],
+ resulttype = lltype.Bool)
+ c_errmsg = rmodel.inputconst(lltype.Void,
+ "setfield_typeptr: wrong type")
+ hop.genop('debug_assert', [v_eq, c_errmsg])
def gct_getfield(self, hop):
if (hop.spaceop.args[1].value == 'typeptr' and
Modified: pypy/branch/gc-compress/pypy/translator/c/database.py
==============================================================================
--- pypy/branch/gc-compress/pypy/translator/c/database.py (original)
+++ pypy/branch/gc-compress/pypy/translator/c/database.py Sat Oct 10 14:09:26 2009
@@ -288,6 +288,8 @@
finish_callbacks.append(('Stackless transformer: finished',
self.stacklesstransformer.finish))
if self.gctransformer:
+ finish_callbacks.append(('GC transformer: tracking vtables',
+ self.gctransformer.get_final_dependencies))
finish_callbacks.append(('GC transformer: finished tables',
self.gctransformer.finish_tables))
More information about the Pypy-commit
mailing list