[pypy-svn] r69859 - in pypy/branch/listcopyop/pypy/rpython: . lltypesystem memory memory/test
fijal at codespeak.net
fijal at codespeak.net
Thu Dec 3 11:45:03 CET 2009
Author: fijal
Date: Thu Dec 3 11:45:02 2009
New Revision: 69859
Modified:
pypy/branch/listcopyop/pypy/rpython/llinterp.py
pypy/branch/listcopyop/pypy/rpython/lltypesystem/opimpl.py
pypy/branch/listcopyop/pypy/rpython/memory/gcwrapper.py
pypy/branch/listcopyop/pypy/rpython/memory/test/test_gc.py
pypy/branch/listcopyop/pypy/rpython/memory/test/test_transformed_gc.py
Log:
shuffle stuff a bit, so we can now test on top of test_gc. Make test
explode in case we don't have write barrier
Modified: pypy/branch/listcopyop/pypy/rpython/llinterp.py
==============================================================================
--- pypy/branch/listcopyop/pypy/rpython/llinterp.py (original)
+++ pypy/branch/listcopyop/pypy/rpython/llinterp.py Thu Dec 3 11:45:02 2009
@@ -754,6 +754,9 @@
def op_zero_gc_pointers_inside(self, obj):
raise NotImplementedError("zero_gc_pointers_inside")
+ def op_listcopy(self, source, dest, source_start, dest_start, length):
+ self.heap.listcopy(source, dest, source_start, dest_start, length)
+
def op_getfield(self, obj, field):
checkptr(obj)
# check the difference between op_getfield and op_getsubstruct:
Modified: pypy/branch/listcopyop/pypy/rpython/lltypesystem/opimpl.py
==============================================================================
--- pypy/branch/listcopyop/pypy/rpython/lltypesystem/opimpl.py (original)
+++ pypy/branch/listcopyop/pypy/rpython/lltypesystem/opimpl.py Thu Dec 3 11:45:02 2009
@@ -394,12 +394,6 @@
checkadr(addr2)
return addr1 - addr2
-def op_listcopy(source, dest, source_start, dest_start, length):
- i = 0
- while i < length:
- dest[i + dest_start] = source[i + source_start]
- i += 1
-
def op_getfield(p, name):
checkptr(p)
TYPE = lltype.typeOf(p).TO
Modified: pypy/branch/listcopyop/pypy/rpython/memory/gcwrapper.py
==============================================================================
--- pypy/branch/listcopyop/pypy/rpython/memory/gcwrapper.py (original)
+++ pypy/branch/listcopyop/pypy/rpython/memory/gcwrapper.py Thu Dec 3 11:45:02 2009
@@ -128,6 +128,14 @@
ptr = lltype.cast_opaque_ptr(llmemory.GCREF, ptr)
return self.gc.id(ptr)
+ def listcopy(self, source, dest, source_start, dest_start, length):
+ if hasattr(self.gc, 'listcopy'):
+ return self.gc.listcopy.im_func(source, dest, source_start,
+ dest_start, length)
+ i = 0
+ while i < length:
+ dest[dest_start + i] = source[source_start + i]
+ i += 1
# ____________________________________________________________
Modified: pypy/branch/listcopyop/pypy/rpython/memory/test/test_gc.py
==============================================================================
--- pypy/branch/listcopyop/pypy/rpython/memory/test/test_gc.py (original)
+++ pypy/branch/listcopyop/pypy/rpython/memory/test/test_gc.py Thu Dec 3 11:45:02 2009
@@ -564,6 +564,26 @@
self.interpret(fn, [])
+ def test_listcopy_ptr(self):
+ S = lltype.GcStruct('S')
+ TP = lltype.GcArray(lltype.Ptr(S))
+ def fn():
+ l = lltype.malloc(TP, 100)
+ l2 = lltype.malloc(TP, 100)
+ for i in range(100):
+ l[i] = lltype.malloc(S)
+ llop.listcopy(lltype.Void, l, l2, 50, 0, 50)
+ x = []
+ # force minor collect
+ t = (1, lltype.malloc(S))
+ for i in range(20):
+ x.append(t)
+ for i in range(50):
+ assert l2[i]
+ return 0
+
+ self.interpret(fn, [])
+
from pypy.rlib.objectmodel import UnboxedValue
Modified: pypy/branch/listcopyop/pypy/rpython/memory/test/test_transformed_gc.py
==============================================================================
--- pypy/branch/listcopyop/pypy/rpython/memory/test/test_transformed_gc.py (original)
+++ pypy/branch/listcopyop/pypy/rpython/memory/test/test_transformed_gc.py Thu Dec 3 11:45:02 2009
@@ -868,13 +868,12 @@
TP = lltype.GcArray(lltype.Ptr(S))
def fn():
l = lltype.malloc(TP, 100)
+ l2 = lltype.malloc(TP, 100)
for i in range(100):
l[i] = lltype.malloc(S)
- l2 = lltype.malloc(TP, 50)
llop.listcopy(lltype.Void, l, l2, 50, 0, 50)
- llop.gc__collect(lltype.Void)
for i in range(50):
- assert l2[i] is l[i + 50]
+ assert l2[i]
return 0
return fn
More information about the Pypy-commit
mailing list