[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