Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r68846:95626ec9e6bd
Date: 2014-01-17 18:48 +0100
http://bitbucket.org/pypy/pypy/changeset/95626ec9e6bd/

Log:    improve the test and fix

diff --git a/rpython/jit/resume/backend.py b/rpython/jit/resume/backend.py
--- a/rpython/jit/resume/backend.py
+++ b/rpython/jit/resume/backend.py
@@ -195,7 +195,8 @@
     all = {}
     for frame in inputframes:
         for x in frame:
-            if x is not None and not isinstance(x, Const) and x not in all:
+            if x is not None and x not in all:
+                assert not isinstance(x, Const)
                 count += 1
                 all[x] = None
     inputargs = [None] * count
@@ -203,8 +204,7 @@
     all = {}
     for frame in inputframes:
         for item in frame:
-            if (item is not None and not isinstance(item, Const) and
-                item not in all):
+            if item is not None and item not in all:
                 inputargs[pos] = item
                 all[item] = None
                 pos += 1
diff --git a/rpython/jit/resume/frontend.py b/rpython/jit/resume/frontend.py
--- a/rpython/jit/resume/frontend.py
+++ b/rpython/jit/resume/frontend.py
@@ -1,7 +1,7 @@
 
 from rpython.jit.metainterp.resoperation import rop
 from rpython.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat, ConstInt,\
-     INT, REF
+     INT, REF, Const
 from rpython.jit.metainterp import history
 from rpython.jit.resume.reader import AbstractResumeReader
 from rpython.jit.resume.rescode import TAGBOX, TAGCONST, TAGSMALLINT, 
TAGVIRTUAL
@@ -219,7 +219,8 @@
         if box is None:
             return
         miframe.registers_i[i] = box
-        res[-1][pos] = box
+        if not isinstance(box, Const):
+            res[-1][pos] = box
 
     def store_ref_box(self, res, pos, miframe, i, jitframe_pos):
         box = self.get_box_value(jitframe_pos, REF)
@@ -260,6 +261,12 @@
         self.cache[jitframe_pos] = box
         res[-1][pos] = box
 
+    def get_loc(self, p):
+        tag, pos = self.decode(p)
+        if tag == TAGBOX:
+            return pos
+        return -1
+
     def finish(self):
         res = []
         self.cache = {}
@@ -279,7 +286,8 @@
                 self.store_float_box(res, pos, miframe, i, 
frame.registers[pos])
                 pos += 1
         self.cache = None
-        return res, [f.registers for f in self.framestack]
+        return res, [[self.get_loc(r) for r in f.registers]
+                     for f in self.framestack]
 
 def rebuild_from_resumedata(metainterp, deadframe, faildescr):
     """ Reconstruct metainterp frames from the resumedata
diff --git a/rpython/jit/resume/test/test_frontend.py 
b/rpython/jit/resume/test/test_frontend.py
--- a/rpython/jit/resume/test/test_frontend.py
+++ b/rpython/jit/resume/test/test_frontend.py
@@ -84,7 +84,7 @@
     def test_box_resume_reader(self):
         jitcode = JitCode("jitcode")
         jitcode.global_index = 0
-        jitcode.setup(num_regs_i=13, num_regs_r=0, num_regs_f=0)
+        jitcode.setup(num_regs_i=4, num_regs_r=0, num_regs_f=0)
         builder = ResumeBytecodeBuilder()
         builder.enter_frame(-1, jitcode)
         builder.resume_put(TAGBOX | (100 << 2), 0, 1)
@@ -98,13 +98,15 @@
         metainterp = MockMetaInterp()
         metainterp.staticdata = MockStaticData([jitcode], [])
         metainterp.cpu = MockCPU()
-        rebuild_from_resumedata(metainterp, "myframe", descr)
+        inpframes, inplocs = rebuild_from_resumedata(metainterp, "myframe", 
descr)
         assert len(metainterp.framestack) == 1
         f = metainterp.framestack[-1]
         assert f.registers_i[1].getint() == 103
         assert isinstance(f.registers_i[2], Const)
         assert f.registers_i[2].getint() == 15
         assert f.registers_i[3].getint() == 13
+        assert inpframes == [[None, AnyBox(), None, None]]
+        assert inplocs == [[-1, 100, -1, -1]]
 
     def test_nested_call(self):
         jitcode1 = JitCode("jitcode")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to