[pypy-svn] r38093 - pypy/branch/jit-virtual-world/pypy/jit/timeshifter

pedronis at codespeak.net pedronis at codespeak.net
Wed Feb 7 19:27:31 CET 2007


Author: pedronis
Date: Wed Feb  7 19:27:28 2007
New Revision: 38093

Modified:
   pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rcontainer.py
   pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py
Log:
make the virtualizables code use the place interface as intended, absorb is value copy operation.



Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rcontainer.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rcontainer.py	(original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rcontainer.py	Wed Feb  7 19:27:28 2007
@@ -605,8 +605,9 @@
 
         builder = jitstate.curbuilder
         place = builder.alloc_frame_place(typedesc.ptrkind)
-        gv_forced = builder.genop_absorb_place(typedesc.ptrkind, place)
         vrti.forced_place = place
+        forced_box = rvalue.PtrRedBox(typedesc.ptrkind)
+        memo.forced_boxes.append((forced_box, place))
 
         vars_gv = memo.framevars_gv
         varindexes = vrti.varindexes
@@ -625,9 +626,8 @@
                 vrtis.append(content.make_rti(jitstate, memo))
                 j -= 1
 
-        self.content_boxes.append(rvalue.PtrRedBox(typedesc.ptrkind,
-                                                   gv_forced))
-                
+
+        self.content_boxes.append(forced_box)
         return vrti
 
     def reshape(self, jitstate, shapemask, memo):

Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py	(original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rtimeshift.py	Wed Feb  7 19:27:28 2007
@@ -933,6 +933,7 @@
                  next
                  virtualizables
                  shape_place
+                 forced_boxes
                  generated_oop_residual_can_raise
               """.split()
 
@@ -1009,9 +1010,12 @@
             memo.bitcount = 1
             memo.frameindex = 0
             memo.framevars_gv = []
+            memo.forced_boxes = forced_boxes = []
+            
             shape_kind = builder.rgenop.kindToken(lltype.Signed)
             gv_zero = builder.rgenop.genconst(0)
             self.shape_place = builder.alloc_frame_place(shape_kind, gv_zero)
+            self.forced_boxes = forced_boxes
             
             vable_rtis = []
             for virtualizable_box in virtualizables:
@@ -1041,9 +1045,16 @@
                 assert isinstance(content, rcontainer.VirtualizableStruct)
                 content.check_forced_after_residual_call(self)
             shape_kind = builder.rgenop.kindToken(lltype.Signed)
+
+            for forced_box, forced_place in self.forced_boxes:
+                gv_forced = builder.genop_absorb_place(forced_box.kind, forced_place)
+                forced_box.setgenvar(gv_forced)
+            self.forced_boxes = None
+
             gv_shape = builder.genop_absorb_place(shape_kind,
                                                   self.shape_place)
             self.shape_place = None
+            
             return gv_shape
         else:
             return None



More information about the Pypy-commit mailing list