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