[pypy-svn] r53997 - in pypy/branch/io-improvements/pypy/rpython: . lltypesystem memory test
arigo at codespeak.net
arigo at codespeak.net
Tue Apr 22 11:42:09 CEST 2008
Author: arigo
Date: Tue Apr 22 11:42:09 2008
New Revision: 53997
Modified:
pypy/branch/io-improvements/pypy/rpython/llinterp.py
pypy/branch/io-improvements/pypy/rpython/lltypesystem/llheap.py
pypy/branch/io-improvements/pypy/rpython/lltypesystem/lloperation.py
pypy/branch/io-improvements/pypy/rpython/memory/gcwrapper.py
pypy/branch/io-improvements/pypy/rpython/test/test_llinterp.py
Log:
Don't pass this as yet another flag. The way it's supposed to be done
is by delegating to the 'heap' object, which can itself delegate to
the gc (or use a default impl in llheap.py).
Note that gc_can_move cannot easily be marked as 'can_fold' because
it can only be folded if a specific GC was choosen and is accessible.
Modified: pypy/branch/io-improvements/pypy/rpython/llinterp.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/llinterp.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/llinterp.py Tue Apr 22 11:42:09 2008
@@ -43,7 +43,7 @@
""" low level interpreter working with concrete values. """
def __init__(self, typer, tracing=True, exc_data_ptr=None,
- malloc_check=True, moving_gc=True):
+ malloc_check=True):
self.bindings = {}
self.typer = typer
# 'heap' is module or object that provides malloc, etc for lltype ops
@@ -54,7 +54,6 @@
self.malloc_check = malloc_check
self.frame_class = LLFrame
self.mallocs = {}
- self.moving_gc = moving_gc
if tracing:
self.tracer = Tracer()
@@ -754,15 +753,15 @@
def op_gc__collect(self):
self.heap.collect()
- def op_gc_can_move(self, p):
- return self.llinterpreter.moving_gc
-
def op_gc__disable_finalizers(self):
self.heap.disable_finalizers()
def op_gc__enable_finalizers(self):
self.heap.enable_finalizers()
+ def op_gc_can_move(self, addr):
+ return self.heap.can_move(addr)
+
def op_gc_free(self, addr):
# what can you do?
pass
Modified: pypy/branch/io-improvements/pypy/rpython/lltypesystem/llheap.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/lltypesystem/llheap.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/lltypesystem/llheap.py Tue Apr 22 11:42:09 2008
@@ -6,6 +6,7 @@
setfield = setattr
from operator import setitem as setarrayitem
from pypy.rlib.rgc import collect, disable_finalizers, enable_finalizers
+from pypy.rlib.rgc import can_move
def setinterior(toplevelcontainer, inneraddr, INNERTYPE, newvalue):
assert typeOf(newvalue) == INNERTYPE
Modified: pypy/branch/io-improvements/pypy/rpython/lltypesystem/lloperation.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/lltypesystem/lloperation.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/lltypesystem/lloperation.py Tue Apr 22 11:42:09 2008
@@ -399,7 +399,7 @@
'gc_reload_possibly_moved': LLOp(),
'gc_id': LLOp(canraise=(MemoryError,), sideeffects=False),
'gc_set_max_heap_size': LLOp(),
- 'gc_can_move' : LLOp(canfold=True, sideeffects=False),
+ 'gc_can_move' : LLOp(sideeffects=False),
# experimental operations in support of thread cloning, only
# implemented by the Mark&Sweep GC
'gc_x_swap_pool': LLOp(canraise=(MemoryError,), canunwindgc=True),
Modified: pypy/branch/io-improvements/pypy/rpython/memory/gcwrapper.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/gcwrapper.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/gcwrapper.py Tue Apr 22 11:42:09 2008
@@ -87,6 +87,9 @@
def enable_finalizers(self):
self.gc.enable_finalizers()
+ def can_move(self, addr):
+ return self.gc.can_move(addr)
+
def weakref_create_getlazy(self, objgetter):
# we have to be lazy in reading the llinterp variable containing
# the 'obj' pointer, because the gc.malloc() call below could
Modified: pypy/branch/io-improvements/pypy/rpython/test/test_llinterp.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/test/test_llinterp.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/test/test_llinterp.py Tue Apr 22 11:42:09 2008
@@ -72,8 +72,7 @@
def get_interpreter(func, values, view='auto', viewbefore='auto', policy=None,
someobjects=False, type_system="lltype", backendopt=False,
- config=None, malloc_check=True,
- moving_gc=True, **extraconfigopts):
+ config=None, malloc_check=True, **extraconfigopts):
extra_key = [(key, value) for key, value in extraconfigopts.iteritems()]
extra_key.sort()
extra_key = tuple(extra_key)
@@ -98,8 +97,7 @@
viewbefore, policy, type_system=type_system,
backendopt=backendopt, config=config,
**extraconfigopts)
- interp = LLInterpreter(typer, malloc_check=malloc_check,
- moving_gc=moving_gc)
+ interp = LLInterpreter(typer, malloc_check=malloc_check)
_tcache[key] = (t, interp, graph)
# keep the cache small
_lastinterpreted.append(key)
@@ -113,12 +111,11 @@
def interpret(func, values, view='auto', viewbefore='auto', policy=None,
someobjects=False, type_system="lltype", backendopt=False,
- config=None, malloc_check=True, moving_gc=True):
+ config=None, malloc_check=True):
interp, graph = get_interpreter(func, values, view, viewbefore, policy,
someobjects, type_system=type_system,
backendopt=backendopt, config=config,
- malloc_check=malloc_check,
- moving_gc=moving_gc)
+ malloc_check=malloc_check)
result = interp.eval_graph(graph, values)
if malloc_check and interp.mallocs:
raise MallocMismatch(interp.mallocs)
@@ -126,11 +123,10 @@
def interpret_raises(exc, func, values, view='auto', viewbefore='auto',
policy=None, someobjects=False, type_system="lltype",
- backendopt=False, moving_gc=True):
+ backendopt=False):
interp, graph = get_interpreter(func, values, view, viewbefore, policy,
someobjects, type_system=type_system,
- backendopt=backendopt,
- moving_gc=moving_gc)
+ backendopt=backendopt)
info = py.test.raises(LLException, "interp.eval_graph(graph, values)")
try:
got = interp.find_exception(info.value)
More information about the Pypy-commit
mailing list