[pypy-svn] r37692 - in pypy/branch/jit-virtual-world/pypy/jit/timeshifter: . test
ac at codespeak.net
ac at codespeak.net
Wed Jan 31 21:04:36 CET 2007
Author: ac
Date: Wed Jan 31 21:04:33 2007
New Revision: 37692
Modified:
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/rcontainer.py
pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_virtualizable.py
Log:
(pedronis, arre) Fix a problem with string in virtual in virtualizable.
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 Jan 31 21:04:33 2007
@@ -81,16 +81,22 @@
self.immutable = TYPE._hints.get('immutable', False)
self.noidentity = TYPE._hints.get('noidentity', False)
- if not TYPE._is_varsize():
- self.alloctoken = RGenOp.allocToken(TYPE)
+ fixsize = not TYPE._is_varsize()
+ if fixsize:
+ self.alloctoken = RGenOp.allocToken(TYPE)
+
self.null = self.PTRTYPE._defl()
self.gv_null = RGenOp.constPrebuiltGlobal(self.null)
self._compute_fielddescs(hrtyper)
- self._define_devirtualize()
+
if self.immutable and self.noidentity:
self._define_materialize()
+
+ if fixsize:
+ self._define_devirtualize()
+
def _compute_fielddescs(self, hrtyper):
RGenOp = hrtyper.RGenOp
Modified: pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_virtualizable.py
==============================================================================
--- pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_virtualizable.py (original)
+++ pypy/branch/jit-virtual-world/pypy/jit/timeshifter/test/test_virtualizable.py Wed Jan 31 21:04:33 2007
@@ -1256,3 +1256,30 @@
res = self.timeshift_from_portal(main, f, [20, 22], policy=P_OOPSPEC)
assert res == 20
+ def test_string_in_virtualizable(self):
+ class S(object):
+ def __init__(self, s):
+ self.s = s
+
+ class XY(object):
+ _virtualizable_ = True
+
+ def __init__(self, x, s):
+ self.x = x
+ self.s = s
+ def g(xy):
+ xy.x = 19 + len(xy.s.s)
+
+ def f(x, n):
+ hint(None, global_merge_point=True)
+ s = S('2'*n)
+ xy = XY(x, s)
+ g(xy)
+ return xy.s
+
+ def main(x, y):
+ return int(f(x, y).s)
+
+ res = self.timeshift_from_portal(main, f, [20, 3],
+ policy=StopAtXPolicy(g))
+ assert res == 222
More information about the Pypy-commit
mailing list