fix up duplicate variables in regenerator

This commit is contained in:
Sebastian McKenzie
2014-11-17 12:48:35 +11:00
parent 9d3a3a57f2
commit c54f530b10
2 changed files with 18 additions and 17 deletions

View File

@@ -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"), [

View File

@@ -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
};