aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2016-11-08 10:58:00 +0100
committerArmin Rigo <arigo@tunes.org>2016-11-08 10:58:00 +0100
commit5e8f55dd9d7d04002d6105a46f5668a90284d500 (patch)
tree3e205ce51f20449f7af3e637fb730a9bd1bb2e85 /pypy/interpreter/pyframe.py
parentFix docstring (diff)
downloadpypy-5e8f55dd9d7d04002d6105a46f5668a90284d500.tar.gz
pypy-5e8f55dd9d7d04002d6105a46f5668a90284d500.tar.bz2
pypy-5e8f55dd9d7d04002d6105a46f5668a90284d500.zip
One more try at tweaking this code. Need to turn the RPython exception
into SystemError in gateway.py too, so that it can be caught and processed in the topmost frame (code like try: ... except SystemError: ... would miss it).
Diffstat (limited to 'pypy/interpreter/pyframe.py')
-rw-r--r--pypy/interpreter/pyframe.py26
1 files changed, 3 insertions, 23 deletions
diff --git a/pypy/interpreter/pyframe.py b/pypy/interpreter/pyframe.py
index 8b2bd555f9..b143d09226 100644
--- a/pypy/interpreter/pyframe.py
+++ b/pypy/interpreter/pyframe.py
@@ -889,30 +889,10 @@ class PyFrame(W_Root):
frame = frame.f_backref()
return None
- def _convert_unexpected_exception_extra(self, e):
- "NOT_RPYTHON"
- if e.__class__.__name__ in (
- 'Skipped', # list of exception class names that are ok
- ): # to get during ==untranslated tests== only
- raise
- # include the RPython-level traceback
- exc = sys.exc_info()
- import traceback, cStringIO
- f = cStringIO.StringIO()
- print >> f, "\nTraceback (interpreter-level):"
- traceback.print_tb(exc[2], file=f)
- return f.getvalue()
-
def _convert_unexpected_exception(self, e):
- if we_are_translated():
- from rpython.rlib.debug import debug_print_traceback
- debug_print_traceback()
- extra = '; internal traceback(s) were dumped to stderr'
- else:
- extra = self._convert_unexpected_exception_extra(e)
- operr = OperationError(self.space.w_SystemError, self.space.wrap(
- "unexpected internal exception (please report a bug): %r%s" %
- (e, extra)))
+ from pypy.interpreter import error
+
+ operr = error.get_converted_unexpected_exception(self.space, e)
pytraceback.record_application_traceback(
self.space, operr, self, self.last_instr)
raise operr