[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