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 }