[pypy-svn] r69465 - in pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Fri Nov 20 14:41:54 CET 2009


Author: cfbolz
Date: Fri Nov 20 14:41:53 2009
New Revision: 69465

Modified:
   pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py
   pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py
Log:
(pedronis, cfbolz): fix the reader to deal with holes in the virtuals list


Modified: pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py	(original)
+++ pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py	Fri Nov 20 14:41:53 2009
@@ -450,11 +450,15 @@
 
     def _prepare_virtuals(self, metainterp, virtuals):
         if virtuals:
-            # xxx vinfo can be none, test and fix!
-            self.virtuals = [vinfo.allocate(metainterp) for vinfo in virtuals]
+            self.virtuals = [None] * len(virtuals)
             for i in range(len(virtuals)):
                 vinfo = virtuals[i]
-                vinfo.setfields(metainterp, self.virtuals[i], self._decode_box)
+                if vinfo is not None:
+                    self.virtuals[i] = vinfo.allocate(metainterp)
+            for i in range(len(virtuals)):
+                vinfo = virtuals[i]
+                if vinfo is not None:
+                    vinfo.setfields(metainterp, self.virtuals[i], self._decode_box)
 
     def consume_boxes(self):
         numb = self.cur_numb

Modified: pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py
==============================================================================
--- pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py	(original)
+++ pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py	Fri Nov 20 14:41:53 2009
@@ -112,6 +112,22 @@
     lst = reader.consume_boxes()
     assert lst == [b1s, b2s, b3s]
 
+
+def test_prepare_virtuals():
+    class FakeVinfo(object):
+        def allocate(self, metainterp):
+            return "allocated"
+        def setfields(self, metainterp, virtual, func):
+            assert virtual == "allocated"
+    class FakeStorage(object):
+        rd_virtuals = [FakeVinfo(), None]
+        rd_numb = []
+        rd_consts = []
+    class FakeMetainterp(object):
+        cpu = None
+    reader = ResumeDataReader(FakeStorage(), [], FakeMetainterp())
+    assert reader.virtuals == ["allocated", None]
+
 # ____________________________________________________________
 
 



More information about the Pypy-commit mailing list