Remove regenerator finished generator error

This commit is contained in:
Sebastian McKenzie
2014-12-10 21:10:59 +11:00
parent e6da342e8b
commit 187f7ba01e
3 changed files with 11 additions and 24 deletions

View File

@@ -87,9 +87,7 @@ function Generator(innerFn, outerFn, self, tryList) {
throw new Error("Generator is already running");
}
if (state === GenStateCompleted) {
throw new Error("Generator has already finished");
}
var alreadyFinished = state === GenStateCompleted;
while (true) {
var delegate = context.delegate;
@@ -162,7 +160,8 @@ function Generator(innerFn, outerFn, self, tryList) {
state = GenStateExecuting;
try {
var value = innerFn.call(self, context);
var value;
if (!alreadyFinished) value = innerFn.call(self, context);
// If an exception is thrown from innerFn, we leave state ===
// GenStateExecuting and loop back for another invocation.
@@ -267,6 +266,10 @@ runtime.keys = function (object) {
};
};
function isIn(key, obj) {
return typeof obj !== "string" && typeof obj !== "number" && key in obj;
}
function values(iterable) {
var iterator = iterable;
if (iteratorSymbol in iterable) {

View File

@@ -20,14 +20,6 @@ exports.raise = function raise(argument) {
};
exports.assertAlreadyFinished = function assertAlreadyFinished(generator) {
try {
generator.next();
assert.ok(false, "should have thrown an exception");
} catch (err) {
assert.ok(err instanceof Error);
assert.strictEqual(
err.message,
"Generator has already finished"
);
}
var item = generator.next();
assert.ok(item.done && item.value === undefined, "not finished");
};

View File

@@ -15,18 +15,10 @@ function *gen(n) {
function decrement(x) {
return x - 1;
}
} else {
// The behavior of function declarations nested inside conditional
// blocks is notoriously underspecified, and in V8 it appears the
// halve function is still defined when we take this branch, so
// "undefine" it for consistency with regenerator semantics.
halve = void 0;
}
yield typeof halve;
yield increment(increment(n));
}
genHelpers.check(gen(3), [4, 1, "function", 5]);
genHelpers.check(gen(4), [5, "undefined", 6]);
genHelpers.check(gen(3), [4, 1, 5]);
genHelpers.check(gen(4), [5, 6]);