[pypy-commit] pypy resume-refactor: (fijal, antocuni) write a resumereader that can put things in faillocs

fijal noreply at buildbot.pypy.org
Fri Aug 30 15:03:00 CEST 2013


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r66462:c36753f12659
Date: 2013-08-30 14:02 +0100
http://bitbucket.org/pypy/pypy/changeset/c36753f12659/

Log:	(fijal, antocuni) write a resumereader that can put things in
	faillocs

diff --git a/rpython/jit/metainterp/resume2.py b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -71,10 +71,29 @@
 
 class ReconstructingResumeReader(AbstractResumeReader):
     def __init__(self):
-        pass
+        self.framestack = []
+
+    def enter_frame(self, pc, jitcode):
+        self.framestack.append([-1] * jitcode.num_regs())
+
+    def put(self, jitframe_index, depth, frontend_position):
+        self.framestack[- depth - 1][frontend_position] = jitframe_index
+
+    def leave_frame(self):
+        self.framestack.pop()
 
 def rebuild_from_resumedata(metainterp, deadframe, faildescr):
     BoxResumeReader(metainterp, deadframe).rebuild(faildescr)
 
 def rebuild_locs_from_resumedata(faildescr):
-    ReconstructingResumeReader().rebuild(faildescr)
+    reader = ReconstructingResumeReader()
+    reader.rebuild(faildescr)
+    size = 0
+    for frame in reader.framestack:
+        size += len(frame)
+    res = [-1] * size
+    i = 0
+    for frame in reader.framestack:
+        res[i : i + len(frame)] = frame
+        i += len(frame)
+    return res
diff --git a/rpython/jit/metainterp/test/test_resume2.py b/rpython/jit/metainterp/test/test_resume2.py
--- a/rpython/jit/metainterp/test/test_resume2.py
+++ b/rpython/jit/metainterp/test/test_resume2.py
@@ -126,20 +126,23 @@
 
     def test_reconstructing_resume_reader(self):
         jitcode1 = JitCode("jitcode")
-        jitcode1.setup(num_regs_i=13)
+        jitcode1.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
         jitcode2 = JitCode("jitcode2")
-        jitcode2.setup(num_regs_i=9)
+        jitcode2.setup(num_regs_i=3, num_regs_f=0, num_regs_r=0)
         resume_loop = parse("""
         []
         enter_frame(-1, descr=jitcode1)
-        backend_put(11, 0, 2)
+        backend_put(11, 0, 1)
         enter_frame(12, descr=jitcode2)
-        backend_put(12, 0, 3)
-        backend_put(8, 1, 4)
+        backend_put(12, 0, 2)
+        backend_put(8, 1, 0)
         leave_frame()
-        backend_put(10, 0, 1)
+        backend_put(10, 0, 0)
         leave_frame()
         """, namespace={'jitcode1': jitcode1,
                         'jitcode2': jitcode2})
         descr = Descr()
-        #rebuild_locs_from_resumedata(descr)
+        descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
+        descr.rd_bytecode_position = 5
+        locs = rebuild_locs_from_resumedata(descr)
+        assert locs == [8, 11, -1, -1, -1, 12]


More information about the pypy-commit mailing list