[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