[pypy-svn] r25240 - pypy/branch/jit-timeshifter-refactoring/timeshifter

pedronis at codespeak.net pedronis at codespeak.net
Sun Apr 2 23:14:48 CEST 2006


Author: pedronis
Date: Sun Apr  2 23:14:47 2006
New Revision: 25240

Modified:
   pypy/branch/jit-timeshifter-refactoring/timeshifter/rcontainer.py
   pypy/branch/jit-timeshifter-refactoring/timeshifter/rvalue.py
Log:
(arre, pedronis)

fix ll_factory. op_getsubstruct for virtual structures. make sure that virtual structures are materialized exactly once.

apart from the skipped tests all tests in timeshifter/test pass again.



Modified: pypy/branch/jit-timeshifter-refactoring/timeshifter/rcontainer.py
==============================================================================
--- pypy/branch/jit-timeshifter-refactoring/timeshifter/rcontainer.py	(original)
+++ pypy/branch/jit-timeshifter-refactoring/timeshifter/rcontainer.py	Sun Apr  2 23:14:47 2006
@@ -55,7 +55,7 @@
         return self.fielddescs[index]
 
     def ll_factory(self):
-        return rvalue.PtrRedBox(self.gv_type, content=VirtualStruct(self))
+        return rvalue.PtrRedBox(self.gv_ptrtype, content=VirtualStruct(self))
 
     def _freeze_(self):
         return True
@@ -171,6 +171,7 @@
         self.content_boxes = [desc.redboxcls(desc.gv_resulttype,
                                              desc.gv_default)
                               for desc in typedesc.fielddescs]
+        self.genvar = rgenop.nullvar
 
     def enter_block(self, newblock, incoming, memo):
         contmemo = memo.containers
@@ -186,6 +187,8 @@
         self.content_boxes[fielddesc.fieldindex] = valuebox
 
     def build_runtime_container(self, jitstate):
+        if self.genvar:
+            return self.genvar
         typedesc = self.typedesc
         boxes = self.content_boxes
         self.content_boxes = None
@@ -193,6 +196,7 @@
         op_args[0] = typedesc.gv_type
         genvar = rgenop.genop(jitstate.curblock, 'malloc', op_args,
                               typedesc.gv_ptrtype)
+        self.genvar = genvar
         fielddescs = typedesc.fielddescs
         for i in range(len(fielddescs)):
             fielddesc = fielddescs[i]
@@ -223,3 +227,7 @@
                 boxcopies.append(box.copy(memo))
             result.content_boxes = boxcopies
             return result
+
+    def op_getsubstruct(self, jitstate, fielddesc):
+        #assert fielddesc.fieldindex == 0
+        return rvalue.PtrRedBox(fielddesc.gv_resulttype, content=self)

Modified: pypy/branch/jit-timeshifter-refactoring/timeshifter/rvalue.py
==============================================================================
--- pypy/branch/jit-timeshifter-refactoring/timeshifter/rvalue.py	(original)
+++ pypy/branch/jit-timeshifter-refactoring/timeshifter/rvalue.py	Sun Apr  2 23:14:47 2006
@@ -120,6 +120,7 @@
 class PtrRedBox(RedBox):
 
     def __init__(self, gv_type, genvar=rgenop.nullvar, content=None):
+        #assert rgenop.isptrtype(gv_type)
         RedBox.__init__(self, gv_type, genvar)
         self.content = content   # None or an AbstractContainer
 
@@ -160,7 +161,12 @@
     def getgenvar(self, jitstate):
         if not self.genvar:
             assert self.content
-            self.genvar = self.content.build_runtime_container(jitstate)
+            genvar = self.content.build_runtime_container(jitstate)
+            op_args = lltype.malloc(rgenop.VARLIST.TO, 1)
+            op_args[0] = genvar
+            genvar = rgenop.genop(jitstate.curblock, 'cast_pointer', op_args,
+                                  self.gv_type)
+            self.genvar = genvar
             self.content = None
         return self.genvar
 



More information about the Pypy-commit mailing list