bb00125aaa
The MP_OBJ_STOP_ITERATION optimisation is a shortcut for creating a StopIteration() exception object, and means that heap memory does not need to be allocated for the exception (in cases where it can be used). This commit allows this optimised object to take an optional argument (before, it could only have no argument). The commit also adds some new tests to cover corner cases with StopIteration and generators that previously did not work. Signed-off-by: Damien George <damien@micropython.org>
31 lines
472 B
Python
31 lines
472 B
Python
# Yielding from stopped generator is ok and results in None
|
|
|
|
def gen():
|
|
return 1
|
|
# This yield is just to make this a generator
|
|
yield
|
|
|
|
f = gen()
|
|
|
|
def run():
|
|
print((yield from f))
|
|
print((yield from f))
|
|
print((yield from f))
|
|
|
|
try:
|
|
next(run())
|
|
except StopIteration:
|
|
print("StopIteration")
|
|
|
|
|
|
# Where "f" is a native generator
|
|
def run():
|
|
print((yield from f))
|
|
|
|
|
|
f = zip()
|
|
try:
|
|
next(run())
|
|
except StopIteration:
|
|
print("StopIteration")
|