[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