[es6.tailCall] Move '<arg> = undefined' to the place in front of Continue statement

This commit is contained in:
Jhen 2015-09-20 04:01:10 +08:00
parent 75cd1a5531
commit 3e0b9b6b4e

View File

@ -240,20 +240,6 @@ class TailCallTransformer {
bodyNode._blockHoist = 2;
}
if (this.vars.length > 0) {
var declarations = flatten(map(this.vars, function (decl) {
return decl.declarations;
}));
var assignment = reduceRight(declarations, function (expr, decl) {
return t.assignmentExpression("=", decl.id, expr);
}, t.identifier("undefined"));
var statement = t.expressionStatement(assignment);
statement._blockHoist = Infinity;
body.unshift(statement);
}
var paramDecls = this.paramDecls;
if (paramDecls.length > 0) {
var paramDecl = t.variableDeclaration("var", paramDecls);
@ -492,6 +478,19 @@ class TailCallTransformer {
t.assignmentExpression("=", this.getAgainId(), t.literal(true))
));
if (this.vars.length > 0) {
var declarations = flatten(map(this.vars, function (decl) {
return decl.declarations;
}));
var assignment = reduceRight(declarations, function (expr, decl) {
return t.assignmentExpression("=", decl.id, expr);
}, t.identifier("undefined"));
var statement = t.expressionStatement(assignment);
body.push(statement);
}
body.push(t.continueStatement(this.getFunctionId()));
return body;