[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