• Tim Peters's avatar
    Change the semantics of "return" in generators, as discussed on the · ad1a18b7
    Tim Peters authored
    Iterators list and Python-Dev; e.g., these all pass now:
    
    def g1():
        try:
            return
        except:
            yield 1
    assert list(g1()) == []
    
    def g2():
        try:
            return
        finally:
            yield 1
    assert list(g2()) == [1]
    
    def g3():
        for i in range(3):
            yield None
        yield None
    assert list(g3()) == [None] * 4
    
    compile.c:  compile_funcdef and com_return_stmt:  Just van Rossum's patch
    to compile the same code for "return" regardless of function type (this
    goes back to the previous scheme of returning Py_None).
    
    ceval.c:  gen_iternext:  take a return (but not a yield) of Py_None as
    meaning the generator is exhausted.
    ad1a18b7
compile.c 121 KB