Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r61711:9d6e4fcf6f60
Date: 2013-02-23 14:19 -0800
http://bitbucket.org/pypy/pypy/changeset/9d6e4fcf6f60/

Log:    cpython issue13188: generators now use value.__traceback__ when no
        traceback was specified

diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -107,6 +107,11 @@
 
         operr = OperationError(w_type, w_val, tb)
         operr.normalize_exception(space)
+        if tb is None:
+            tb = space.getattr(operr.get_w_value(space),
+                               space.wrap('__traceback__'))
+            if not space.is_w(tb, space.w_None):
+                operr.set_traceback(tb)
         return self.send_ex(space.w_None, operr)
 
     def descr_next(self):
diff --git a/pypy/interpreter/test/test_generator.py 
b/pypy/interpreter/test/test_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/test_generator.py
@@ -163,6 +163,26 @@
         raises(StopIteration, next, g)
         raises(NameError, g.throw, NameError)
 
+    def test_throw_tb(self):
+        def f():
+            try:
+                yield
+            except:
+                raise
+        g = f()
+        try:
+            1/0
+        except ZeroDivisionError as v:
+            try:
+                g.throw(v)
+            except Exception as w:
+                tb = w.__traceback__
+        levels = 0
+        while tb:
+            levels += 1
+            tb = tb.tb_next
+        assert levels == 3
+
     def test_close(self):
         def f():
             yield 1
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to