[pypy-svn] r30364 - pypy/dist/pypy/rpython/memory

arigo at codespeak.net arigo at codespeak.net
Sat Jul 22 19:21:16 CEST 2006


Author: arigo
Date: Sat Jul 22 19:21:14 2006
New Revision: 30364

Modified:
   pypy/dist/pypy/rpython/memory/gctransform.py
Log:
Oups!  We store far too many things in the static root tables!  Skip all
non-top-level containers.  The Struct inside GcStructs or GcArrays
accounted for up to 900kb of unnecessary stuff being put in the
static_roots_inside table just because.



Modified: pypy/dist/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform.py	(original)
+++ pypy/dist/pypy/rpython/memory/gctransform.py	Sat Jul 22 19:21:14 2006
@@ -1081,17 +1081,18 @@
         return fptr
 
     def consider_constant(self, TYPE, value):
+        value = lltype.top_container(value)
+
         if id(value) in self.seen_roots:
             return
         self.seen_roots[id(value)] = True
 
         if isinstance(TYPE, (lltype.GcStruct, lltype.GcArray)):
             typeid = self.get_type_id(TYPE)
-            if lltype.top_container(value) is value:
-                hdrbuilder = self.gcdata.gc.gcheaderbuilder
-                hdr = hdrbuilder.new_header(value)
-                adr = llmemory.cast_ptr_to_adr(hdr)
-                self.gcdata.gc.init_gc_object(adr, typeid)
+            hdrbuilder = self.gcdata.gc.gcheaderbuilder
+            hdr = hdrbuilder.new_header(value)
+            adr = llmemory.cast_ptr_to_adr(hdr)
+            self.gcdata.gc.init_gc_object(adr, typeid)
 
         if find_gc_ptrs_in_type(TYPE):
             adr = llmemory.cast_ptr_to_adr(value._as_ptr())



More information about the Pypy-commit mailing list