simplify optimization code
This commit is contained in:
parent
8f540dfff3
commit
662bddbaca
@ -32,10 +32,10 @@ var memberExpressionVisitor = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function optimizeMemberExpression(node, parent, offset) {
|
function optimizeMemberExpression(node, parent, offset, strictMode) {
|
||||||
var newExpr;
|
var newExpr;
|
||||||
|
|
||||||
var prop = parent.property;
|
var prop = parent.property;
|
||||||
|
|
||||||
if (t.isLiteral(prop)) {
|
if (t.isLiteral(prop)) {
|
||||||
node.name = 'arguments';
|
node.name = 'arguments';
|
||||||
prop.value += offset;
|
prop.value += offset;
|
||||||
@ -49,16 +49,11 @@ function optimizeMemberExpression(node, parent, offset) {
|
|||||||
newExpr = t.binaryExpression('+', prop, t.literal(offset));
|
newExpr = t.binaryExpression('+', prop, t.literal(offset));
|
||||||
parent.property = newExpr;
|
parent.property = newExpr;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function optimizeMemberExpressionStrict(node, parent, offset) {
|
if (strictMode && node.name !== 'arguments') {
|
||||||
// handle basic expressions specially (especially literals)
|
node.name = 'arguments';
|
||||||
optimizeMemberExpression(node, parent, offset);
|
parent.property = t.binaryExpression('+', prop, t.literal(offset));
|
||||||
if (node.name === 'arguments') return;
|
}
|
||||||
|
|
||||||
var prop = parent.property;
|
|
||||||
node.name = 'arguments';
|
|
||||||
parent.property = t.binaryExpression('+', prop, t.literal(offset));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasRest = function (node) {
|
var hasRest = function (node) {
|
||||||
@ -98,10 +93,9 @@ exports.Function = function (node, parent, scope, file) {
|
|||||||
scope.traverse(node, memberExpressionVisitor, state);
|
scope.traverse(node, memberExpressionVisitor, state);
|
||||||
|
|
||||||
if (state.isOptimizable) {
|
if (state.isOptimizable) {
|
||||||
var optimize = state.strictMode ? optimizeMemberExpressionStrict : optimizeMemberExpression;
|
|
||||||
for (var i = 0, count = state.candidates.length; i < count; ++i) {
|
for (var i = 0, count = state.candidates.length; i < count; ++i) {
|
||||||
var candidate = state.candidates[i];
|
var candidate = state.candidates[i];
|
||||||
optimize(candidate.node, candidate.parent, node.params.length);
|
optimizeMemberExpression(candidate.node, candidate.parent, node.params.length, state.strictMode);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user