fix uses_eval
add tests for unused, collapse_vars and mangle
This commit is contained in:
parent
2e354a3872
commit
b51a7b0079
|
|
@ -194,6 +194,11 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
||||||
}
|
}
|
||||||
if (node instanceof AST_SymbolRef) {
|
if (node instanceof AST_SymbolRef) {
|
||||||
var name = node.name;
|
var name = node.name;
|
||||||
|
if (name == "eval" && tw.parent() instanceof AST_Call) {
|
||||||
|
for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {
|
||||||
|
s.uses_eval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
var sym = node.scope.find_variable(name);
|
var sym = node.scope.find_variable(name);
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
var g;
|
var g;
|
||||||
|
|
@ -206,10 +211,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
||||||
globals.set(name, g);
|
globals.set(name, g);
|
||||||
}
|
}
|
||||||
node.thedef = g;
|
node.thedef = g;
|
||||||
if (name == "eval" && tw.parent() instanceof AST_Call) {
|
|
||||||
for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope)
|
|
||||||
s.uses_eval = true;
|
|
||||||
}
|
|
||||||
if (func && name == "arguments") {
|
if (func && name == "arguments") {
|
||||||
func.uses_arguments = true;
|
func.uses_arguments = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
88
test/compress/issue-976.js
Normal file
88
test/compress/issue-976.js
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
eval_collapse_vars: {
|
||||||
|
options = {
|
||||||
|
collapse_vars:true, sequences:false, properties:true, dead_code:true, conditionals:true,
|
||||||
|
comparisons:true, evaluate:true, booleans:true, loops:true, unused:true, hoist_funs:true,
|
||||||
|
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
|
||||||
|
};
|
||||||
|
input: {
|
||||||
|
function f1() {
|
||||||
|
var e = 7;
|
||||||
|
var s = "abcdef";
|
||||||
|
var i = 2;
|
||||||
|
var eval = console.log.bind(console);
|
||||||
|
var x = s.charAt(i++);
|
||||||
|
var y = s.charAt(i++);
|
||||||
|
var z = s.charAt(i++);
|
||||||
|
eval(x, y, z, e);
|
||||||
|
}
|
||||||
|
function p1() { var a = foo(), b = bar(), eval = baz(); return a + b + eval; }
|
||||||
|
function p2() { var a = foo(), b = bar(), eval = baz; return a + b + eval(); }
|
||||||
|
(function f2(eval) {
|
||||||
|
var a = 2;
|
||||||
|
console.log(a - 5);
|
||||||
|
eval("console.log(a);");
|
||||||
|
})(eval);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f1() {
|
||||||
|
var e = 7,
|
||||||
|
s = "abcdef",
|
||||||
|
i = 2,
|
||||||
|
eval = console.log.bind(console),
|
||||||
|
x = s.charAt(i++),
|
||||||
|
y = s.charAt(i++),
|
||||||
|
z = s.charAt(i++);
|
||||||
|
eval(x, y, z, e);
|
||||||
|
}
|
||||||
|
function p1() { return foo() + bar() + baz(); }
|
||||||
|
function p2() { var a = foo(), b = bar(), eval = baz; return a + b + eval(); }
|
||||||
|
(function f2(eval) {
|
||||||
|
var a = 2;
|
||||||
|
console.log(a - 5);
|
||||||
|
eval("console.log(a);");
|
||||||
|
})(eval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eval_unused: {
|
||||||
|
options = { unused: true, keep_fargs: false };
|
||||||
|
input: {
|
||||||
|
function f1(a, eval, c, d, e) {
|
||||||
|
return a('c') + eval;
|
||||||
|
}
|
||||||
|
function f2(a, b, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
function f3(a, eval, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f1(a, eval) {
|
||||||
|
return a('c') + eval;
|
||||||
|
}
|
||||||
|
function f2(a, b, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
function f3(a, eval, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eval_mangle: {
|
||||||
|
mangle = {
|
||||||
|
};
|
||||||
|
input: {
|
||||||
|
function f1(a, eval, c, d, e) {
|
||||||
|
return a('c') + eval;
|
||||||
|
}
|
||||||
|
function f2(a, b, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
function f3(a, eval, c, d, e) {
|
||||||
|
return a + eval('c');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect_exact: 'function f1(n,c,e,a,o){return n("c")+c}function f2(a,b,c,d,e){return a+eval("c")}function f3(a,eval,c,d,e){return a+eval("c")}'
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user