Author: Armin Rigo <[email protected]>
Branch: continulet-jit-3
Changeset: r58316:9e8ff9145588
Date: 2012-10-21 15:38 +0200
http://bitbucket.org/pypy/pypy/changeset/9e8ff9145588/

Log:    Test and fix 2.

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -872,26 +872,26 @@
         return support.cast_result(descr.RESULT, result)
 
     def execute_call_assembler(self, descr, *args):
-        frame = self.cpu._execute_token(descr, *args)
-        if frame._execution_finished_normally:    # fast path
-            return frame.finish_value
-        #
         call_op = self.lltrace.operations[self.current_index]
         guard_op = self.lltrace.operations[self.current_index + 1]
         assert guard_op.getopnum() == rop.GUARD_NOT_FORCED
         self.latest_values = self._getfailargs(guard_op, skip=call_op.result)
         self.latest_descr = _getdescr(guard_op)
         #
-        jd = descr.outermost_jitdriver_sd
-        assembler_helper_ptr = jd.assembler_helper_adr.ptr  # fish
-        try:
-            result = assembler_helper_ptr(frame)
-        except LLException, lle:
-            assert self.last_exception is None, "exception left behind"
-            self.last_exception = lle
-            if self.current_op.result is not None:
-                return _example_res[self.current_op.result.type]
-            return None
+        frame = self.cpu._execute_token(descr, *args)
+        if frame._execution_finished_normally:    # fast path
+            result = frame.finish_value
+        else:
+            jd = descr.outermost_jitdriver_sd
+            assembler_helper_ptr = jd.assembler_helper_adr.ptr  # fish
+            try:
+                result = assembler_helper_ptr(frame)
+            except LLException, lle:
+                assert self.last_exception is None, "exception left behind"
+                self.last_exception = lle
+                if self.current_op.result is not None:
+                    return _example_res[self.current_op.result.type]
+                return None
         #
         del self.latest_descr
         del self.latest_values
diff --git a/pypy/jit/backend/test/runner_test.py 
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -2885,6 +2885,15 @@
 
         FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              llmemory.GCREF))
+
+        def func2(jitframe1):
+            called.append(self.cpu.get_latest_descr(jitframe1))
+        FPTR2 = lltype.Ptr(lltype.FuncType([llmemory.GCREF], lltype.Void))
+        fptr2 = llhelper(FPTR2, func2)
+        calldescr2 = self.cpu.calldescrof(FPTR2.TO, FPTR2.TO.ARGS,
+                                          FPTR2.TO.RESULT,
+                                          EffectInfo.MOST_GENERAL)
+
         class FakeJitDriverSD:
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
@@ -2892,8 +2901,9 @@
 
         ops = '''
         [p0]
+        call(ConstClass(fptr2), p0, descr=calldescr2)
         finish(p0) []'''
-        loop = parse(ops)
+        loop = parse(ops, namespace=locals())
         # not a fast_path finish!
         looptoken = JitCellToken()
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
@@ -2918,7 +2928,7 @@
 
         frame = self.cpu.execute_token(othertoken)
         assert not self.cpu.get_finish_value_ref(frame)
-        assert called == [foodescr]
+        assert called == [foodescr] * 2
 
     def test_raw_malloced_getarrayitem(self):
         ARRAY = rffi.CArray(lltype.Signed)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to