mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
perform yield from delegation by repeating YIELD_FROM opcode (closes #14230)
This allows generators that are using yield from to be seen by debuggers. It also kills the f_yieldfrom field on frame objects. Patch mostly from Mark Shannon with a few tweaks by me.
This commit is contained in:
parent
3270d11d8a
commit
2afe6aeae8
9 changed files with 113 additions and 166 deletions
|
@ -10,7 +10,7 @@ see <http://www.cosc.canterbury.ac.nz/greg.ewing/python/yield-from/YieldFrom-Pyt
|
|||
import unittest
|
||||
import io
|
||||
import sys
|
||||
import traceback
|
||||
import inspect
|
||||
import parser
|
||||
|
||||
from test.support import captured_stderr
|
||||
|
@ -919,6 +919,27 @@ class TestPEP380Operation(unittest.TestCase):
|
|||
next(g1)
|
||||
g1.close()
|
||||
|
||||
def test_delegator_is_visible_to_debugger(self):
|
||||
def call_stack():
|
||||
return [f[3] for f in inspect.stack()]
|
||||
|
||||
def gen():
|
||||
yield call_stack()
|
||||
yield call_stack()
|
||||
yield call_stack()
|
||||
|
||||
def spam(g):
|
||||
yield from g
|
||||
|
||||
def eggs(g):
|
||||
yield from g
|
||||
|
||||
for stack in spam(gen()):
|
||||
self.assertTrue('spam' in stack)
|
||||
|
||||
for stack in spam(eggs(gen())):
|
||||
self.assertTrue('spam' in stack and 'eggs' in stack)
|
||||
|
||||
|
||||
def test_main():
|
||||
from test import support
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue