[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