[pypy-commit] pypy py3k: implement support for __traceback__ when raising exceptions. test_raise fully passes now :-)

antocuni noreply at buildbot.pypy.org
Wed Feb 15 11:14:49 CET 2012


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: py3k
Changeset: r52501:145994f7f8f9
Date: 2012-02-15 11:14 +0100
http://bitbucket.org/pypy/pypy/changeset/145994f7f8f9/

Log:	implement support for __traceback__ when raising exceptions.
	test_raise fully passes now :-)

diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -495,8 +495,17 @@
             w_type = space.type(w_value)
         operror = OperationError(w_type, w_value, w_cause=w_cause)
         operror.normalize_exception(space)
+        # XXX: we actually know that w_value is an instance of
+        # W_BaseException, so we could directly use w_value.w_traceback,
+        # however that class belongs to the std objspace, so for now we just
+        # go through all the getattr machinery (which is removed by the JIT
+        # anyway)
+        tb = space.getattr(w_value, space.wrap('__traceback__'))
+        if tb is not None:
+            operror.set_traceback(tb)
         raise operror
 
+
     def LOAD_LOCALS(self, oparg, next_instr):
         self.pushvalue(self.w_locals)
 


More information about the pypy-commit mailing list