[pypy-svn] r53630 - in pypy/branch/io-improvements/pypy/rpython/memory: gc gctransform test
fijal at codespeak.net
fijal at codespeak.net
Wed Apr 9 21:54:29 CEST 2008
Author: fijal
Date: Wed Apr 9 21:54:27 2008
New Revision: 53630
Modified:
pypy/branch/io-improvements/pypy/rpython/memory/gc/marksweep.py
pypy/branch/io-improvements/pypy/rpython/memory/gc/semispace.py
pypy/branch/io-improvements/pypy/rpython/memory/gctransform/framework.py
pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py
Log:
gc_can_move operation in gc transform
Modified: pypy/branch/io-improvements/pypy/rpython/memory/gc/marksweep.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/gc/marksweep.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/gc/marksweep.py Wed Apr 9 21:54:27 2008
@@ -38,7 +38,6 @@
POOLNODEPTR = lltype.Ptr(POOLNODE)
POOLNODE.become(lltype.Struct('gc_pool_node', ('linkedlist', HDRPTR),
('nextnode', POOLNODEPTR)))
-
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
@@ -693,6 +692,8 @@
# reinstall the pool that was current at the beginning of x_clone()
clonedata.pool = self.x_swap_pool(curpool)
+ def can_move(self, addr):
+ return False
class PrintingMarkSweepGC(MarkSweepGC):
_alloc_flavor_ = "raw"
Modified: pypy/branch/io-improvements/pypy/rpython/memory/gc/semispace.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/gc/semispace.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/gc/semispace.py Wed Apr 9 21:54:27 2008
@@ -537,5 +537,8 @@
finally:
self.finalizer_lock_count -= 1
+ def can_move(self, addr):
+ return True
+
STATISTICS_NUMBERS = 0
Modified: pypy/branch/io-improvements/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/gctransform/framework.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/gctransform/framework.py Wed Apr 9 21:54:27 2008
@@ -221,6 +221,9 @@
[s_gc], annmodel.s_None)
self.enable_finalizers_ptr = getfn(GCClass.enable_finalizers.im_func,
[s_gc], annmodel.s_None)
+ self.can_move_ptr = getfn(GCClass.can_move.im_func,
+ [s_gc, annmodel.SomeAddress()],
+ annmodel.SomeBool())
# in some GCs we can inline the common case of
# malloc_fixedsize(typeid, size, True, False, False)
@@ -530,6 +533,13 @@
resultvar=op.result)
self.pop_roots(hop, livevars)
+ def gct_gc_can_move(self, hop):
+ op = hop.spaceop
+ v_addr = hop.genop('cast_ptr_to_adr',
+ [op.args[0]], resulttype=llmemory.Address)
+ hop.genop("direct_call", [self.can_move_ptr, self.c_const_gc, v_addr],
+ resultvar=op.result)
+
def gct_gc__disable_finalizers(self, hop):
# cannot collect()
op = hop.spaceop
Modified: pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py Wed Apr 9 21:54:27 2008
@@ -37,6 +37,7 @@
class GCTest(object):
gcpolicy = None
stacklessgc = False
+ GC_CAN_MOVE = False
def runner(self, f, nbargs=0, statistics=False, transformer=False,
**extraconfigopts):
@@ -447,8 +448,18 @@
res = run([])
assert res == 0
+ def test_can_move(self):
+ TP = lltype.GcArray(lltype.Float)
+ def func():
+ from pypy.rlib import rgc
+ return rgc.can_move(lltype.malloc(TP, 1))
+ run = self.runner(func)
+ res = run([])
+ assert res == self.GC_CAN_MOVE
class GenericMovingGCTests(GenericGCTests):
+ GC_CAN_MOVE = True
+
def test_many_ids(self):
py.test.skip("fails for bad reasons in lltype.py :-(")
class A(object):
@@ -477,7 +488,6 @@
run = self.runner(f)
run([])
-
class TestMarkSweepGC(GenericGCTests):
gcname = "marksweep"
class gcpolicy(gc.FrameworkGcPolicy):
More information about the Pypy-commit
mailing list