[pypy-svn] r40795 - pypy/dist/pypy/jit/timeshifter
pedronis at codespeak.net
pedronis at codespeak.net
Mon Mar 19 22:42:06 CET 2007
Author: pedronis
Date: Mon Mar 19 22:42:05 2007
New Revision: 40795
Modified:
pypy/dist/pypy/jit/timeshifter/rcontainer.py
Log:
(arre, pedronis) see alos previous checkin
fixing issues related to access of non-redirected fields
of virtualizables
Modified: pypy/dist/pypy/jit/timeshifter/rcontainer.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rcontainer.py (original)
+++ pypy/dist/pypy/jit/timeshifter/rcontainer.py Mon Mar 19 22:42:05 2007
@@ -671,9 +671,19 @@
known_nonzero = True)
self.content_boxes[-1] = outsidebox
jitstate.add_virtualizable(self.ownbox)
- access_token = typedesc.access_desc.fieldtoken
- gv_access_null = typedesc.access_desc.gv_default
- builder.genop_setfield(access_token, gv_outside, gv_access_null)
+ #access_token = typedesc.access_desc.fieldtoken
+ #gv_access_null = typedesc.access_desc.gv_default
+ #builder.genop_setfield(access_token, gv_outside, gv_access_null)
+ # write all non-redirected fields
+ boxes = self.content_boxes
+ fielddescs = typedesc.fielddescs
+ redirected = typedesc.redirected
+ for i in range(len(fielddescs)):
+ if i not in redirected:
+ fielddesc = fielddescs[i]
+ box = boxes[i]
+ fielddesc.generate_set(jitstate, gv_outside,
+ box.getgenvar(jitstate))
return gv_outside
def store_back(self, jitstate):
@@ -809,10 +819,12 @@
def op_getfield(self, jitstate, fielddesc):
typedesc = self.typedesc
- assert isinstance(typedesc, VirtualizableStructTypeDesc)
+ assert isinstance(typedesc, VirtualizableStructTypeDesc)
+ gv_outside = self.content_boxes[-1].genvar
fieldindex = fielddesc.fieldindex
- if fieldindex in typedesc.redirected:
- return self.content_boxes[fielddesc.fieldindex]
+ if (gv_outside is typedesc.gv_null or
+ fieldindex in typedesc.redirected):
+ return self.content_boxes[fieldindex]
else:
gv_ptr = self.getgenvar(jitstate)
box = fielddesc.generate_get(jitstate, gv_ptr)
@@ -822,7 +834,9 @@
typedesc = self.typedesc
assert isinstance(typedesc, VirtualizableStructTypeDesc)
fieldindex = fielddesc.fieldindex
- if fieldindex in typedesc.redirected:
+ gv_outside = self.content_boxes[-1].genvar
+ if (gv_outside is typedesc.gv_null or
+ fieldindex in typedesc.redirected):
self.content_boxes[fielddesc.fieldindex] = valuebox
else:
gv_ptr = self.getgenvar(jitstate)
More information about the Pypy-commit
mailing list