[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