diff options
| author | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) | 
|---|---|---|
| committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) | 
| commit | 0d62a062066a4cbc8aabab9c305d60ebf7922c8c (patch) | |
| tree | 1232a8cb31283a4b4f2ae3a6840de9a57113eb51 /Lib/test/test_generators.py | |
| parent | 33c3e29fcec55d552eae9f684447d5f68ae019d7 (diff) | |
| download | cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.zip cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.gz cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.bz2  | |
Patch #1531113: Fix augmented assignment with yield expressions.
Also fix a SystemError when trying to assign to yield expressions.
Diffstat (limited to 'Lib/test/test_generators.py')
| -rw-r--r-- | Lib/test/test_generators.py | 39 | 
1 files changed, 36 insertions, 3 deletions
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index a184a8b..ee36413 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -1497,22 +1497,55 @@ And a more sane, but still weird usage:  <type 'generator'> +A yield expression with augmented assignment. + +>>> def coroutine(seq): +...     count = 0 +...     while count < 200: +...         count += yield +...         seq.append(count) +>>> seq = [] +>>> c = coroutine(seq) +>>> c.next() +>>> print seq +[] +>>> c.send(10) +>>> print seq +[10] +>>> c.send(10) +>>> print seq +[10, 20] +>>> c.send(10) +>>> print seq +[10, 20, 30] + +  Check some syntax errors for yield expressions:  >>> f=lambda: (yield 1),(yield 2)  Traceback (most recent call last):    ... -SyntaxError: 'yield' outside function (<doctest test.test_generators.__test__.coroutine[10]>, line 1) +SyntaxError: 'yield' outside function (<doctest test.test_generators.__test__.coroutine[21]>, line 1)  >>> def f(): return lambda x=(yield): 1  Traceback (most recent call last):    ... -SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[11]>, line 1) +SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[22]>, line 1)  >>> def f(): x = yield = y  Traceback (most recent call last):    ... -SyntaxError: assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[12]>, line 1) +SyntaxError: assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[23]>, line 1) + +>>> def f(): (yield bar) = y +Traceback (most recent call last): +  ... +SyntaxError: can't assign to yield expression (<doctest test.test_generators.__test__.coroutine[24]>, line 1) + +>>> def f(): (yield bar) += y +Traceback (most recent call last): +  ... +SyntaxError: augmented assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[25]>, line 1)  Now check some throw() conditions:  | 
