Author: Remi Meier <[email protected]>
Branch: stmgc-c8
Changeset: r80889:1be321b9df2b
Date: 2015-11-24 15:59 +0100
http://bitbucket.org/pypy/pypy/changeset/1be321b9df2b/

Log:    support for explicit gc_writebarrier

diff --git a/rpython/memory/gctransform/framework.py 
b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -109,6 +109,8 @@
                 self.in_stm_ignored = True
             elif op.opname == "stm_ignored_stop":
                 self.in_stm_ignored = False
+            elif op.opname == "gc_writebarrier":
+                writeable[op.args[0]] = True
             elif op.opname == "malloc":
                 rtti = get_rtti(op.args[0].value)
                 if rtti is not None and hasattr(rtti._obj, 
'destructor_funcptr'):
diff --git a/rpython/memory/gctransform/test/test_framework.py 
b/rpython/memory/gctransform/test/test_framework.py
--- a/rpython/memory/gctransform/test/test_framework.py
+++ b/rpython/memory/gctransform/test/test_framework.py
@@ -300,17 +300,19 @@
     class A: pass
     glob = A()
     glob2 = A()
-    def f(n, g):
+    def f(n, g, g2):
         i = 0
-        g.a = n
+        llop.gc_writebarrier(lltype.Void, g2)
+        g.a = n # WB
         while i < n:
             g.a = i
+            g2.a = i
             i += 1
     def g(argv):
         if argv[1]:
-            f(int(argv[1]), glob)
+            f(int(argv[1]), glob, glob2)
         else:
-            f(int(argv[1]), glob2)
+            f(int(argv[1]), glob2, glob)
         return 0
 
     t = rtype(g, [s_list_of_strings])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to