fix rest optimization in arrow functions and add advanced test

This commit is contained in:
Ondrej Kraus
2015-02-28 23:08:07 +01:00
parent 4c77d04b56
commit 24f4b041c7
3 changed files with 40 additions and 7 deletions

View File

@@ -28,7 +28,8 @@ var memberExpressionOptimisationVisitor = {
// optimise it
var prop = parent.property;
if (isNumber(prop.value) || t.isUnaryExpression(prop) || t.isBinaryExpression(prop)) {
optimizeMemberExpression(node, parent, state.method.params.length);
this.node = state.argsId;
optimizeMemberExpression(parent, state.method.params.length);
state.hasShorthand = true;
return;
}
@@ -38,16 +39,14 @@ var memberExpressionOptimisationVisitor = {
}
};
function optimizeMemberExpression(node, parent, offset) {
function optimizeMemberExpression(parent, offset) {
var newExpr;
var prop = parent.property;
if (t.isLiteral(prop)) {
node.name = "arguments";
prop.value += offset;
prop.raw = String(prop.value);
} else { // // UnaryExpression, BinaryExpression
node.name = "arguments";
newExpr = t.binaryExpression("+", prop, t.literal(offset));
parent.property = newExpr;
}
@@ -86,6 +85,7 @@ exports.Function = function (node, parent, scope) {
longForm: false,
method: node,
name: rest.name,
argsId: argsId
};
scope.traverse(node, memberExpressionOptimisationVisitor, state);