fix up duplicate variables in regenerator
This commit is contained in:
@@ -412,6 +412,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
|
||||
var stmt = path.value;
|
||||
var self = this;
|
||||
var after, head;
|
||||
|
||||
n.Statement.assert(stmt);
|
||||
|
||||
@@ -451,7 +452,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
|
||||
case "WhileStatement":
|
||||
var before = loc();
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
self.mark(before);
|
||||
self.jumpIfNot(self.explodeExpression(path.get("test")), after);
|
||||
@@ -467,7 +468,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
case "DoWhileStatement":
|
||||
var first = loc();
|
||||
var test = loc();
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
self.mark(first);
|
||||
self.leapManager.withEntry(
|
||||
@@ -481,9 +482,9 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
break;
|
||||
|
||||
case "ForStatement":
|
||||
var head = loc();
|
||||
head = loc();
|
||||
var update = loc();
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
if (stmt.init) {
|
||||
// We pass true here to indicate that if stmt.init is an expression
|
||||
@@ -521,8 +522,8 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
case "ForInStatement":
|
||||
n.Identifier.assert(stmt.left);
|
||||
|
||||
var head = loc();
|
||||
var after = loc();
|
||||
head = loc();
|
||||
after = loc();
|
||||
|
||||
var keyIterNextFn = self.makeTempVar();
|
||||
self.emitAssign(
|
||||
@@ -593,7 +594,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
self.explodeExpression(path.get("discriminant"))
|
||||
);
|
||||
|
||||
var after = loc();
|
||||
after = loc();
|
||||
var defaultLoc = loc();
|
||||
var condition = defaultLoc;
|
||||
var caseLocs = [];
|
||||
@@ -646,7 +647,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
|
||||
case "IfStatement":
|
||||
var elseLoc = stmt.alternate && loc();
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
self.jumpIfNot(
|
||||
self.explodeExpression(path.get("test")),
|
||||
@@ -674,7 +675,7 @@ Ep.explodeStatement = function(path, labelId) {
|
||||
break;
|
||||
|
||||
case "TryStatement":
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
var handler = stmt.handler;
|
||||
if (!handler && stmt.handlers) {
|
||||
@@ -887,7 +888,7 @@ Ep.explodeExpression = function(path, ignoreResult) {
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var result; // Used optionally by several cases below.
|
||||
var result, after; // Used optionally by several cases below.
|
||||
|
||||
function finish(expr) {
|
||||
n.Expression.assert(expr);
|
||||
@@ -1033,7 +1034,7 @@ Ep.explodeExpression = function(path, ignoreResult) {
|
||||
return result;
|
||||
|
||||
case "LogicalExpression":
|
||||
var after = loc();
|
||||
after = loc();
|
||||
|
||||
if (!ignoreResult) {
|
||||
result = self.makeTempVar();
|
||||
@@ -1056,7 +1057,7 @@ Ep.explodeExpression = function(path, ignoreResult) {
|
||||
|
||||
case "ConditionalExpression":
|
||||
var elseLoc = loc();
|
||||
var after = loc();
|
||||
after = loc();
|
||||
var test = self.explodeExpression(path.get("test"));
|
||||
|
||||
self.jumpIfNot(test, elseLoc);
|
||||
@@ -1106,11 +1107,11 @@ Ep.explodeExpression = function(path, ignoreResult) {
|
||||
));
|
||||
|
||||
case "YieldExpression":
|
||||
var after = loc();
|
||||
after = loc();
|
||||
var arg = expr.argument && self.explodeExpression(path.get("argument"));
|
||||
|
||||
if (arg && expr.delegate) {
|
||||
var result = self.makeTempVar();
|
||||
result = self.makeTempVar();
|
||||
|
||||
self.emit(b.returnStatement(b.callExpression(
|
||||
self.contextProperty("delegateYield"), [
|
||||
|
||||
@@ -97,9 +97,9 @@ function Generator(innerFn, outerFn, self, tryList) {
|
||||
|
||||
while (true) {
|
||||
var delegate = context.delegate;
|
||||
if (delegate) {
|
||||
var info;
|
||||
var info;
|
||||
|
||||
if (delegate) {
|
||||
try {
|
||||
info = delegate.iterator[method](arg);
|
||||
|
||||
@@ -172,7 +172,7 @@ function Generator(innerFn, outerFn, self, tryList) {
|
||||
// GenStateExecuting and loop back for another invocation.
|
||||
state = context.done ? GenStateCompleted : GenStateSuspendedYield;
|
||||
|
||||
var info = {
|
||||
info = {
|
||||
value: value,
|
||||
done: context.done
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user