Remove regenerator finished generator error
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
};
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user