[pypy-commit] pypy stm: transform.py should not touch immutable getfields
arigo
noreply at buildbot.pypy.org
Thu Oct 27 19:36:48 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: stm
Changeset: r48530:df4fdd533f50
Date: 2011-10-27 17:14 +0200
http://bitbucket.org/pypy/pypy/changeset/df4fdd533f50/
Log: transform.py should not touch immutable getfields
diff --git a/pypy/translator/stm/test/test_transform.py b/pypy/translator/stm/test/test_transform.py
--- a/pypy/translator/stm/test/test_transform.py
+++ b/pypy/translator/stm/test/test_transform.py
@@ -1,5 +1,6 @@
from pypy.rpython.lltypesystem import lltype
from pypy.rpython.test.test_llinterp import get_interpreter
+from pypy.objspace.flow.model import summary
from pypy.translator.stm.llstminterp import eval_stm_graph
from pypy.translator.stm.transform import transform_graph
@@ -12,5 +13,18 @@
return p.x
interp, graph = get_interpreter(func, [p])
transform_graph(graph)
+ assert summary(graph) == {'stm_getfield': 1}
res = eval_stm_graph(interp, graph, [p], stm_mode="regular_transaction")
assert res == 42
+
+def test_immutable_field():
+ S = lltype.GcStruct('S', ('x', lltype.Signed), hints = {'immutable': True})
+ p = lltype.malloc(S, immortal=True)
+ p.x = 42
+ def func(p):
+ return p.x
+ interp, graph = get_interpreter(func, [p])
+ transform_graph(graph)
+ assert summary(graph) == {'getfield': 1}
+ res = eval_stm_graph(interp, graph, [p], stm_mode="regular_transaction")
+ assert res == 42
diff --git a/pypy/translator/stm/transform.py b/pypy/translator/stm/transform.py
--- a/pypy/translator/stm/transform.py
+++ b/pypy/translator/stm/transform.py
@@ -17,7 +17,11 @@
self.transform_block(block)
def stt_getfield(self, newoperations, op):
- op1 = SpaceOperation('stm_getfield', op.args, op.result)
+ STRUCT = op.args[0].concretetype.TO
+ if STRUCT._immutable_field(op.args[1].value):
+ op1 = op
+ else:
+ op1 = SpaceOperation('stm_getfield', op.args, op.result)
newoperations.append(op1)
def stt_setfield(self, newoperations, op):
More information about the pypy-commit
mailing list