[pypy-commit] pypy default: Better fix for 47fa78e23bfb (in obscure cases like the 'return' trace
arigo
pypy.commits at gmail.com
Fri Sep 16 10:52:34 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r87142:51f3a7987d0c
Date: 2016-09-16 16:51 +0200
http://bitbucket.org/pypy/pypy/changeset/51f3a7987d0c/
Log: Better fix for 47fa78e23bfb (in obscure cases like the 'return'
trace raising)
diff --git a/pypy/interpreter/pyframe.py b/pypy/interpreter/pyframe.py
--- a/pypy/interpreter/pyframe.py
+++ b/pypy/interpreter/pyframe.py
@@ -264,29 +264,27 @@
try:
executioncontext.call_trace(self)
#
- if operr is not None:
- ec = self.space.getexecutioncontext()
- next_instr = self.handle_operation_error(ec, operr)
- self.last_instr = intmask(next_instr - 1)
- else:
- # Execution starts just after the last_instr. Initially,
- # last_instr is -1. After a generator suspends it points to
- # the YIELD_VALUE instruction.
- next_instr = r_uint(self.last_instr + 1)
- if next_instr != 0:
- self.pushvalue(w_inputvalue)
- #
- w_exitvalue = self.dispatch(self.pycode, next_instr,
- executioncontext)
- executioncontext.return_trace(self, w_exitvalue)
+ try:
+ if operr is not None:
+ ec = self.space.getexecutioncontext()
+ next_instr = self.handle_operation_error(ec, operr)
+ self.last_instr = intmask(next_instr - 1)
+ else:
+ # Execution starts just after the last_instr. Initially,
+ # last_instr is -1. After a generator suspends it points to
+ # the YIELD_VALUE instruction.
+ next_instr = r_uint(self.last_instr + 1)
+ if next_instr != 0:
+ self.pushvalue(w_inputvalue)
+ w_exitvalue = self.dispatch(self.pycode, next_instr,
+ executioncontext)
+ finally:
+ executioncontext.return_trace(self, w_exitvalue)
# it used to say self.last_exception = None
# this is now done by the code in pypyjit module
# since we don't want to invalidate the virtualizable
# for no good reason
got_exception = False
- except Exception:
- executioncontext.return_trace(self, self.space.w_None)
- raise
finally:
executioncontext.leave(self, w_exitvalue, got_exception)
return w_exitvalue
More information about the pypy-commit
mailing list