[pypy-svn] r54038 - pypy/dist/pypy/rpython/memory/gc

arigo at codespeak.net arigo at codespeak.net
Wed Apr 23 12:34:34 CEST 2008


Author: arigo
Date: Wed Apr 23 12:34:32 2008
New Revision: 54038

Modified:
   pypy/dist/pypy/rpython/memory/gc/base.py
   pypy/dist/pypy/rpython/memory/gc/generation.py
   pypy/dist/pypy/rpython/memory/gc/hybrid.py
   pypy/dist/pypy/rpython/memory/gc/marksweep.py
   pypy/dist/pypy/rpython/memory/gc/semispace.py
Log:
Move the translation parameters of each GC out of base.py
and into each GC class.


Modified: pypy/dist/pypy/rpython/memory/gc/base.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/base.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/base.py	Wed Apr 23 12:34:32 2008
@@ -269,31 +269,19 @@
     """
     if config.translation.gctransformer != "framework":   # for tests
         config.translation.gc = "marksweep"     # crash if inconsistent
-    if config.translation.gc == "marksweep":
-        GC_PARAMS = {'start_heap_size': 8*1024*1024} # XXX adjust
-        from pypy.rpython.memory.gc.marksweep import MarkSweepGC
-        return MarkSweepGC, GC_PARAMS
-    if config.translation.gc == "statistics":
-        GC_PARAMS = {'start_heap_size': 8*1024*1024} # XXX adjust
-        from pypy.rpython.memory.gc.marksweep import PrintingMarkSweepGC
-        return PrintingMarkSweepGC, GC_PARAMS
-    elif config.translation.gc == "semispace":
-        GC_PARAMS = {'space_size': 8*1024*1024} # XXX adjust
-        from pypy.rpython.memory.gc.semispace import SemiSpaceGC
-        return SemiSpaceGC, GC_PARAMS
-    elif config.translation.gc in ("generation", "hybrid"):
-        GC_PARAMS = {'space_size': 8*1024*1024, # XXX adjust
-                     'nursery_size': 896*1024,
-                     'min_nursery_size': 48*1024,
-                     'auto_nursery_size': True}
-        if config.translation.gc == "generation":
-            from pypy.rpython.memory.gc.generation import GenerationGC
-            return GenerationGC, GC_PARAMS
-        else:
-            GC_PARAMS['large_object'] = 1024    # XXX adjust
-            GC_PARAMS['large_object_gcptrs'] = 8192    # XXX adjust
-            from pypy.rpython.memory.gc.hybrid import HybridGC
-            return HybridGC, GC_PARAMS
-    else:
+
+    classes = {"marksweep": "marksweep.MarkSweepGC",
+               "statistics": "marksweep.PrintingMarkSweepGC",
+               "semispace": "semispace.SemiSpaceGC",
+               "generation": "generation.GenerationGC",
+               "hybrid": "hybrid.HybridGC",
+               }
+    try:
+        modulename, classname = classes[config.translation.gc].split('.')
+    except KeyError:
         raise ValueError("unknown value for translation.gc: %r" % (
             config.translation.gc,))
+    module = __import__("pypy.rpython.memory.gc." + modulename,
+                        globals(), locals(), [classname])
+    GCClass = getattr(module, classname)
+    return GCClass, GCClass.TRANSLATION_PARAMS

Modified: pypy/dist/pypy/rpython/memory/gc/generation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/generation.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/generation.py	Wed Apr 23 12:34:32 2008
@@ -33,6 +33,13 @@
     prebuilt_gc_objects_are_static_roots = False
     first_unused_gcflag = SemiSpaceGC.first_unused_gcflag << 2
 
+    # the following values override the default arguments of __init__ when
+    # translating to a real backend.
+    TRANSLATION_PARAMS = {'space_size': 8*1024*1024, # XXX adjust
+                          'nursery_size': 896*1024,
+                          'min_nursery_size': 48*1024,
+                          'auto_nursery_size': True}
+
     def __init__(self, chunk_size=DEFAULT_CHUNK_SIZE,
                  nursery_size=128,
                  min_nursery_size=128,

Modified: pypy/dist/pypy/rpython/memory/gc/hybrid.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/hybrid.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/hybrid.py	Wed Apr 23 12:34:32 2008
@@ -16,6 +16,12 @@
     """
     first_unused_gcflag = GenerationGC.first_unused_gcflag << 1
 
+    # the following values override the default arguments of __init__ when
+    # translating to a real backend.
+    TRANSLATION_PARAMS = GenerationGC.TRANSLATION_PARAMS.copy()
+    TRANSLATION_PARAMS['large_object'] = 1024    # XXX adjust
+    TRANSLATION_PARAMS['large_object_gcptrs'] = 8192    # XXX adjust
+
     def __init__(self, *args, **kwds):
         large_object = kwds.pop('large_object', 24)
         large_object_gcptrs = kwds.pop('large_object_gcptrs', 32)

Modified: pypy/dist/pypy/rpython/memory/gc/marksweep.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/marksweep.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/marksweep.py	Wed Apr 23 12:34:32 2008
@@ -39,6 +39,10 @@
     POOLNODE.become(lltype.Struct('gc_pool_node', ('linkedlist', HDRPTR),
                                                   ('nextnode', POOLNODEPTR)))
 
+    # the following values override the default arguments of __init__ when
+    # translating to a real backend.
+    TRANSLATION_PARAMS = {'start_heap_size': 8*1024*1024} # XXX adjust
+
     def __init__(self, chunk_size=DEFAULT_CHUNK_SIZE, start_heap_size=4096):
         self.heap_usage = 0          # at the end of the latest collection
         self.bytes_malloced = 0      # since the latest collection

Modified: pypy/dist/pypy/rpython/memory/gc/semispace.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/semispace.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/semispace.py	Wed Apr 23 12:34:32 2008
@@ -38,6 +38,10 @@
                                   ('forw', llmemory.Address))
     FORWARDSTUBPTR = lltype.Ptr(FORWARDSTUB)
 
+    # the following values override the default arguments of __init__ when
+    # translating to a real backend.
+    TRANSLATION_PARAMS = {'space_size': 8*1024*1024} # XXX adjust
+
     def __init__(self, chunk_size=DEFAULT_CHUNK_SIZE, space_size=4096,
                  max_space_size=sys.maxint//2+1):
         MovingGCBase.__init__(self)



More information about the Pypy-commit mailing list