py/vm: Don't add traceback info for exceptions that are re-raised.

With this patch exceptions that are re-raised have improved tracebacks
(less confusing, match CPython), and it makes re-raise slightly more
efficient (in time and RAM) because they no longer need to add a traceback.
Also general VM performance is not measurably affected.

Partially fixes issue #2928.
This commit is contained in:
Damien George
2019-08-21 16:08:43 +10:00
parent 16f6169c88
commit 08c1fe5569
2 changed files with 15 additions and 1 deletions

View File

@@ -57,6 +57,18 @@ except Exception as e:
print('caught')
print_exc(e)
# Test that re-raising an exception doesn't add traceback info
try:
try:
f()
except Exception as e:
print('reraise')
print_exc(e)
raise
except Exception as e:
print('caught')
print_exc(e)
# Here we have a function with lots of bytecode generated for a single source-line, and
# there is an error right at the end of the bytecode. It should report the correct line.
def f():