remove strict-mode specific optimizations due to unsolvable ambiguities
This commit is contained in:
parent
c3f4091b6d
commit
a808742c19
@ -18,8 +18,7 @@ var memberExpressionVisitor = {
|
|||||||
|
|
||||||
if (t.isMemberExpression(parent)) {
|
if (t.isMemberExpression(parent)) {
|
||||||
var prop = parent.property;
|
var prop = parent.property;
|
||||||
if (state.strictMode ||
|
if (typeof prop.value === "number" ||
|
||||||
typeof prop.value === "number" ||
|
|
||||||
t.isUnaryExpression(prop) ||
|
t.isUnaryExpression(prop) ||
|
||||||
t.isBinaryExpression(prop)) {
|
t.isBinaryExpression(prop)) {
|
||||||
state.candidates.push({ node, parent });
|
state.candidates.push({ node, parent });
|
||||||
@ -32,7 +31,7 @@ var memberExpressionVisitor = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function optimizeMemberExpression(node, parent, offset, strictMode) {
|
function optimizeMemberExpression(node, parent, offset) {
|
||||||
var newExpr;
|
var newExpr;
|
||||||
var prop = parent.property;
|
var prop = parent.property;
|
||||||
|
|
||||||
@ -40,19 +39,10 @@ function optimizeMemberExpression(node, parent, offset, strictMode) {
|
|||||||
node.name = "arguments";
|
node.name = "arguments";
|
||||||
prop.value += offset;
|
prop.value += offset;
|
||||||
prop.raw = String(prop.value);
|
prop.raw = String(prop.value);
|
||||||
} else if (t.isUnaryExpression(prop)) {
|
} else {
|
||||||
node.name = "arguments";
|
node.name = "arguments";
|
||||||
newExpr = t.binaryExpression("+", prop, t.literal(offset));
|
newExpr = t.binaryExpression("+", prop, t.literal(offset));
|
||||||
parent.property = newExpr;
|
parent.property = newExpr;
|
||||||
} else if (t.isBinaryExpression(prop)) {
|
|
||||||
node.name = "arguments";
|
|
||||||
newExpr = t.binaryExpression("+", prop, t.literal(offset));
|
|
||||||
parent.property = newExpr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strictMode && node.name !== "arguments") {
|
|
||||||
node.name = "arguments";
|
|
||||||
parent.property = t.binaryExpression("+", prop, t.literal(offset));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,8 +77,7 @@ exports.Function = function (node, parent, scope, file) {
|
|||||||
name: rest.name,
|
name: rest.name,
|
||||||
outerDeclar: restOuterDeclar,
|
outerDeclar: restOuterDeclar,
|
||||||
isOptimizable: true,
|
isOptimizable: true,
|
||||||
candidates: [],
|
candidates: []
|
||||||
strictMode: file.transformers.useStrict.canRun()
|
|
||||||
};
|
};
|
||||||
scope.traverse(node, memberExpressionVisitor, state);
|
scope.traverse(node, memberExpressionVisitor, state);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user