[pypy-svn] r51279 - in pypy/branch/jit-refactoring/pypy/jit/rainbow: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Feb 5 00:03:08 CET 2008


Author: cfbolz
Date: Tue Feb  5 00:03:07 2008
New Revision: 51279

Modified:
   pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
   pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
   pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
Log:
setarrayitem works too


Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py	Tue Feb  5 00:03:07 2008
@@ -567,6 +567,22 @@
                   deepfrozen)
         self.register_redvar(op.result)
 
+    def serialize_op_setarrayitem(self, op):
+        args = op.args
+        PTRTYPE = args[0].concretetype
+        VALUETYPE = PTRTYPE.TO.OF
+        if VALUETYPE is lltype.Void:
+            return
+        destboxindex = self.serialize_oparg("red", args[0])
+        indexboxindex = self.serialize_oparg("red", args[1])
+        valboxindex = self.serialize_oparg("red", args[2])
+        fieldname = args[1].value
+        fielddescindex = self.arrayfielddesc_position(PTRTYPE.TO)
+        if fielddescindex == -1:   # Void field
+            return
+        self.emit("red_setarrayitem", destboxindex, fielddescindex,
+                  indexboxindex, valboxindex)
+
     # call handling
 
     def graphs_from(self, spaceop):

Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py	Tue Feb  5 00:03:07 2008
@@ -364,6 +364,15 @@
         resbox = rtimeshift.gengetarrayitem(self.jitstate, deepfrozen, fielddesc,
                                         arraybox, indexbox)
         self.red_result(resbox)
+
+
+    def opimpl_red_setarrayitem(self):
+        destbox = self.get_redarg()
+        fielddesc = self.frame.bytecode.arrayfielddescs[self.load_2byte()]
+        indexbox = self.get_redarg()
+        valuebox = self.get_redarg()
+        resbox = rtimeshift.gensetarrayitem(self.jitstate, fielddesc, destbox,
+                indexbox, valuebox)
     # ____________________________________________________________
     # construction-time interface
 

Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py	(original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py	Tue Feb  5 00:03:07 2008
@@ -546,8 +546,6 @@
         assert res == 24
         self.check_insns({})
 
-
-
     def test_simple_struct_malloc(self):
         py.test.skip("blue containers: to be reimplemented")
         S = lltype.GcStruct('helloworld', ('hello', lltype.Signed),
@@ -711,7 +709,6 @@
 
 
     def test_setarrayitem(self):
-        py.test.skip("arrays and structs are not working")
         A = lltype.GcArray(lltype.Signed)
         a = lltype.malloc(A, 2, immortal=True)
         def ll_function():
@@ -719,7 +716,7 @@
             a[1] = 2
             return a[0]+a[1]
         
-        res = self.interpret(ll_function, [], [], policy=P_NOVIRTUAL)
+        res = self.interpret(ll_function, [], [])
         assert res == 3
 
     def test_red_array(self):



More information about the Pypy-commit mailing list