Beispiel #1
0
Box* generatorClose(Box* s) {
    assert(s->cls == generator_cls);
    BoxedGenerator* self = static_cast<BoxedGenerator*>(s);

    // check if the generator already exited
    if (self->entryExited)
        return None;

    return generatorThrow(self, GeneratorExit, nullptr, nullptr);
}
Box* generatorClose(Box* s) {
    assert(s->cls == generator_cls);
    BoxedGenerator* self = static_cast<BoxedGenerator*>(s);

    // check if the generator already exited
    if (self->entryExited)
        return None;

    try {
        generatorThrow(self, GeneratorExit, nullptr, nullptr);
        raiseExcHelper(RuntimeError, "generator ignored GeneratorExit");
    } catch (ExcInfo e) {
        if (e.matches(StopIteration) || e.matches(GeneratorExit))
            return None;
        throw e;
    }
    assert(0); // unreachable
}