[pypy-svn] r40790 - in pypy/dist/pypy/jit: . timeshifter timeshifter/test
pedronis at codespeak.net
pedronis at codespeak.net
Mon Mar 19 19:03:09 CET 2007
Author: pedronis
Date: Mon Mar 19 19:03:09 2007
New Revision: 40790
Modified:
pypy/dist/pypy/jit/TODO.txt
pypy/dist/pypy/jit/timeshifter/rcontainer.py
pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
Log:
this one is done
Modified: pypy/dist/pypy/jit/TODO.txt
==============================================================================
--- pypy/dist/pypy/jit/TODO.txt (original)
+++ pypy/dist/pypy/jit/TODO.txt Mon Mar 19 19:03:09 2007
@@ -6,8 +6,6 @@
- improve is_true()
-- some --jit option for translate.py
-
- basic docs and examples
- check that --jit works with --faassen; don't stop at
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 19:03:09 2007
@@ -200,12 +200,13 @@
VirtualStructCls = None # patched later with VirtualizableStruct
_attrs_ = """redirected_fielddescs
- base_desc rti_desc access_desc
- gv_access
- touch_update
- gv_access_is_null_ptr access_is_null_token
- get_rti set_rti
- """.split()
+ redirected
+ base_desc rti_desc access_desc
+ gv_access
+ touch_update
+ gv_access_is_null_ptr access_is_null_token
+ get_rti set_rti
+ """.split()
def __init__(self, hrtyper, TYPE):
RGenOp = hrtyper.RGenOp
@@ -213,10 +214,12 @@
ACCESS = self.TYPE.ACCESS
redirected_fields = ACCESS.redirected_fields
self.redirected_fielddescs = []
+ self.redirected = {}
i = 0
for fielddesc in self.fielddescs:
if fielddesc.fieldname in redirected_fields:
self.redirected_fielddescs.append((fielddesc, i))
+ self.redirected[i] = None
i += 1
self.base_desc = self.getfielddesc('vable_base')
self.rti_desc = self.getfielddesc('vable_rti')
@@ -804,6 +807,28 @@
continue
boxes[i] = fielddesc.generate_get(jitstate, gv_outside)
+ def op_getfield(self, jitstate, fielddesc):
+ typedesc = self.typedesc
+ assert isinstance(typedesc, VirtualizableStructTypeDesc)
+ fieldindex = fielddesc.fieldindex
+ if fieldindex in typedesc.redirected:
+ return self.content_boxes[fielddesc.fieldindex]
+ else:
+ gv_ptr = self.getgenvar(jitstate)
+ box = fielddesc.generate_get(jitstate, gv_ptr)
+ return box
+
+ def op_setfield(self, jitstate, fielddesc, valuebox):
+ typedesc = self.typedesc
+ assert isinstance(typedesc, VirtualizableStructTypeDesc)
+ fieldindex = fielddesc.fieldindex
+ if fieldindex in typedesc.redirected:
+ self.content_boxes[fielddesc.fieldindex] = valuebox
+ else:
+ gv_ptr = self.getgenvar(jitstate)
+ fielddesc.generate_set(jitstate, gv_ptr,
+ valuebox.getgenvar(jitstate))
+
# patching VirtualStructCls
StructTypeDesc.VirtualStructCls = VirtualStruct
Modified: pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py (original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py Mon Mar 19 19:03:09 2007
@@ -759,6 +759,43 @@
assert res == 42
self.check_insns(getfield=0)
+ def test_simple__class__(self):
+ class V(object):
+ _virtualizable_ = True
+ def __init__(self, a):
+ self.a = a
+
+ class V1(V):
+ def __init__(self, b):
+ V.__init__(self, 1)
+ self.b = b
+
+ class V2(V):
+ def __init__(self):
+ V.__init__(self, 2)
+
+ def f(v):
+ hint(None, global_merge_point=True)
+ #V1(0).b
+ return v.__class__
+
+ def main(x, y):
+ if x:
+ v = V1(42)
+ else:
+ v = V2()
+ if y:
+ c = None
+ else:
+ c = f(v)
+ V2()
+ return c is not None
+
+ res = self.timeshift_from_portal(main, f, [0, 1], policy=P_OOPSPEC)
+ assert not res
+ res = self.timeshift_from_portal(main, f, [1, 0], policy=P_OOPSPEC)
+ assert res
+
def test_simple_inheritance(self):
class X(object):
More information about the Pypy-commit
mailing list