[pypy-svn] r79736 - in pypy/branch/out-of-line-guards/pypy/jit: codewriter codewriter/test metainterp/test

fijal at codespeak.net fijal at codespeak.net
Thu Dec 2 10:53:12 CET 2010


Author: fijal
Date: Thu Dec  2 10:53:10 2010
New Revision: 79736

Modified:
   pypy/branch/out-of-line-guards/pypy/jit/codewriter/jtransform.py
   pypy/branch/out-of-line-guards/pypy/jit/codewriter/test/test_jtransform.py
   pypy/branch/out-of-line-guards/pypy/jit/metainterp/test/test_basic.py
Log:
test and a fix

Modified: pypy/branch/out-of-line-guards/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/out-of-line-guards/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/branch/out-of-line-guards/pypy/jit/codewriter/jtransform.py	Thu Dec  2 10:53:10 2010
@@ -539,7 +539,7 @@
                 self.immutable_arrays[op.result] = True
         else:
             jit_inv = v_inst.concretetype.TO._hints.get('jit_invariant_fields')
-            if jit_inv and op.args[1].value[len('inst_'):] in jit_inv.fields:
+            if jit_inv and op.args[1].value in jit_inv.fields:
                 pure = '_pure'
             else:
                 pure = ''
@@ -567,7 +567,7 @@
                     SpaceOperation('setfield_vable_%s' % kind,
                                    [v_inst, descr, v_value], None)]
         jit_inv = v_inst.concretetype.TO._hints.get('jit_invariant_fields')
-        if jit_inv and op.args[1].value[len('inst_'):] in jit_inv.fields:
+        if jit_inv and op.args[1].value in jit_inv.fields:
             raise JitInvariantError("setfield on jit invariant should not"
                                     " be ssen by jit")
         argname = getattr(v_inst.concretetype.TO, '_gckind', 'gc')

Modified: pypy/branch/out-of-line-guards/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/out-of-line-guards/pypy/jit/codewriter/test/test_jtransform.py	(original)
+++ pypy/branch/out-of-line-guards/pypy/jit/codewriter/test/test_jtransform.py	Thu Dec  2 10:53:10 2010
@@ -947,7 +947,7 @@
     from pypy.rpython.rclass import FieldListAccessor
     from pypy.rpython.lltypesystem.rclass import ASMCODE
     accessor = FieldListAccessor()
-    accessor.initialize(None, {'x': 'asmcodes_x'})
+    accessor.initialize(None, {'inst_x': 'asmcodes_x'})
     v2 = varoftype(lltype.Signed)
     STRUCT = lltype.GcStruct('struct', ('inst_x', lltype.Signed),
                              ('asmcodes_x', lltype.Ptr(ASMCODE)),
@@ -962,7 +962,7 @@
     from pypy.rpython.rclass import FieldListAccessor
     from pypy.rpython.lltypesystem.rclass import ASMCODE
     accessor = FieldListAccessor()
-    accessor.initialize(None, {'x': 'asmcodes_x'})
+    accessor.initialize(None, {'inst_x': 'asmcodes_x'})
     v1 = varoftype(lltype.Signed)
     STRUCT = lltype.GcStruct('struct', ('inst_x', lltype.Signed),
                              ('asmcodes_x', lltype.Ptr(ASMCODE)),

Modified: pypy/branch/out-of-line-guards/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/out-of-line-guards/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/branch/out-of-line-guards/pypy/jit/metainterp/test/test_basic.py	Thu Dec  2 10:53:10 2010
@@ -718,6 +718,24 @@
         assert res == 210
         self.check_operations_history(getfield_gc=0)
 
+    def test_getfield_jit_invariant(self):
+        class A(object):
+            _jit_invariant_fields_ = 'x'
+
+        a1 = A()
+        a1.x = 5
+        a2 = A()
+        a2.x = 8
+
+        def f(x):
+            if x:
+                a = a1
+            else:
+                a = a2
+            return a.x
+        res = self.interp_operations(f, [-3])
+        self.check_operations_history(getfield_gc = 0)
+
     def test_setfield_bool(self):
         class A:
             def __init__(self):



More information about the Pypy-commit mailing list