fix rest optimization in arrow functions and add advanced test
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user