[pypy-svn] r47334 - in pypy/dist/pypy: config rpython/memory rpython/memory/gctransform

arigo at codespeak.net arigo at codespeak.net
Tue Oct 9 12:39:00 CEST 2007


Author: arigo
Date: Tue Oct  9 12:38:59 2007
New Revision: 47334

Modified:
   pypy/dist/pypy/config/translationoption.py
   pypy/dist/pypy/rpython/memory/gc.py
   pypy/dist/pypy/rpython/memory/gctransform/framework.py
Log:
Link the --frameworkgc option to logic that really chooses the gc.
Doesn't mean that the SemiSpaceGC translates yet.


Modified: pypy/dist/pypy/config/translationoption.py
==============================================================================
--- pypy/dist/pypy/config/translationoption.py	(original)
+++ pypy/dist/pypy/config/translationoption.py	Tue Oct  9 12:38:59 2007
@@ -53,7 +53,7 @@
                          ("translation.stackless", True)]),
     ChoiceOption("frameworkgc", "Select one of our custom GCs",
                  ["marksweep", "semispace"],
-                 "marksweep", requires={
+                 "marksweep", cmdline="--frameworkgc", requires={
                     "marksweep": [("translation.gc", "framework")],
                     "semispace": [("translation.gc", "framework")],
                  }),

Modified: pypy/dist/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc.py	Tue Oct  9 12:38:59 2007
@@ -1282,3 +1282,18 @@
     def size_gc_header(self, typeid=0):
         XXX
 
+# ____________________________________________________________
+
+def choose_gc_from_config(config):
+    """Return a (GCClass, GC_PARAMS) from the given config object.
+    """
+    config.translation.gc = "framework"
+    if config.translation.frameworkgc == "marksweep":
+        GC_PARAMS = {'start_heap_size': 8*1024*1024} # XXX adjust
+        return MarkSweepGC, GC_PARAMS
+    elif config.translation.frameworkgc == "semispace":
+        GC_PARAMS = {'space_size': 32*1024*1024} # XXX fixed at 32MB
+        return SemiSpaceGC, GC_PARAMS
+    else:
+        raise ValueError("unknown value for frameworkgc: %r" % (
+            config.translation.frameworkgc,))

Modified: pypy/dist/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform/framework.py	(original)
+++ pypy/dist/pypy/rpython/memory/gctransform/framework.py	Tue Oct  9 12:38:59 2007
@@ -31,14 +31,12 @@
     extra_static_slots = 0
     root_stack_depth = 163840
 
-    from pypy.rpython.memory.gc import MarkSweepGC as GCClass
-    GC_PARAMS = {'start_heap_size': 8*1024*1024} # XXX adjust
-
     def __init__(self, translator):
         from pypy.rpython.memory.support import get_address_linked_list
+        from pypy.rpython.memory.gc import choose_gc_from_config
         super(FrameworkGCTransformer, self).__init__(translator, inline=True)
         AddressLinkedList = get_address_linked_list()
-        GCClass = self.GCClass
+        GCClass, GC_PARAMS = choose_gc_from_config(translator.config)
         self.FINALIZERTYPE = lltype.Ptr(ADDRESS_VOID_FUNC)
         class GCData(object):
             # types of the GC information tables
@@ -113,7 +111,7 @@
         sizeofaddr = llmemory.sizeof(llmemory.Address)
 
         StackRootIterator = self.build_stack_root_iterator()
-        gcdata.gc = GCClass(AddressLinkedList, get_roots=StackRootIterator, **self.GC_PARAMS)
+        gcdata.gc = GCClass(AddressLinkedList, get_roots=StackRootIterator, **GC_PARAMS)
 
         def frameworkgc_setup():
             # run-time initialization code



More information about the Pypy-commit mailing list