remove constant replacement
- let `reduce_vars` take care of that
This commit is contained in:
parent
761792e2e5
commit
5037c186e3
|
|
@ -676,14 +676,18 @@ merge(Compressor.prototype, {
|
|||
|
||||
function collapse(stat) {
|
||||
var var_decl = var_defs[var_defs_index];
|
||||
// `drop_unused()` shuffles variables without values to the top,
|
||||
// so we can terminate upon first sighting as an optimization.
|
||||
if (var_decl.value == null) return true;
|
||||
var var_name = var_decl.name.name;
|
||||
if (!var_name || !var_name.length) return true;
|
||||
|
||||
// Bail if we've seen a var definition of same name before.
|
||||
if (var_name in var_names_seen) return true;
|
||||
var_names_seen[var_name] = true;
|
||||
|
||||
// Only interested in non-constant values.
|
||||
if (var_decl.value.is_constant()) return;
|
||||
|
||||
// Only interested in cases with just one reference to the variable.
|
||||
var def = var_decl.name.definition();
|
||||
if (def.references.length !== 1
|
||||
|
|
@ -696,21 +700,6 @@ merge(Compressor.prototype, {
|
|||
// Don't replace ref if eval() or with statement in scope.
|
||||
if (ref.scope.uses_eval || ref.scope.uses_with) return true;
|
||||
|
||||
// Constant single use vars can be replaced in any scope.
|
||||
if (var_decl.value.is_constant()) {
|
||||
var ctt = new TreeTransformer(function(node) {
|
||||
var parent = ctt.parent();
|
||||
if (parent instanceof AST_IterationStatement
|
||||
&& (parent.condition === node || parent.init === node)) {
|
||||
return node;
|
||||
}
|
||||
if (node === ref)
|
||||
return replace_var(var_decl, node, parent, true);
|
||||
});
|
||||
stat.transform(ctt);
|
||||
return;
|
||||
}
|
||||
|
||||
// Restrict var replacement to constants if side effects encountered.
|
||||
if (side_effects_encountered |= lvalues_encountered) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ collapse_vars_side_effects_1: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1() {
|
||||
|
|
@ -151,7 +151,7 @@ collapse_vars_issue_721: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
define(["require", "exports", 'handlebars'], function (require, exports, hb) {
|
||||
|
|
@ -217,7 +217,7 @@ collapse_vars_properties: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1(obj) {
|
||||
|
|
@ -244,7 +244,7 @@ collapse_vars_if: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1() {
|
||||
|
|
@ -282,7 +282,10 @@ collapse_vars_if: {
|
|||
return "x" != "Bar" + x / 4 ? g9 : g5;
|
||||
}
|
||||
function f3(x) {
|
||||
return x ? 1 : 2;
|
||||
if (x) {
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -291,7 +294,7 @@ collapse_vars_while: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, properties:true, dead_code:true, conditionals:true,
|
||||
comparisons:true, evaluate:true, booleans:true, loops:false, unused:true, hoist_funs:true,
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1(y) {
|
||||
|
|
@ -390,9 +393,9 @@ collapse_vars_do_while: {
|
|||
}
|
||||
function f3(y) {
|
||||
function fn(n) { console.log(n); }
|
||||
var a = 2;
|
||||
var a = 2, x = 7;
|
||||
do {
|
||||
fn(a = 7);
|
||||
fn(a = x);
|
||||
break;
|
||||
} while (y);
|
||||
}
|
||||
|
|
@ -465,8 +468,9 @@ collapse_vars_do_while_drop_assign: {
|
|||
}
|
||||
function f3(y) {
|
||||
function fn(n) { console.log(n); }
|
||||
var x = 7;
|
||||
do {
|
||||
fn(7);
|
||||
fn(x);
|
||||
break;
|
||||
} while (y);
|
||||
}
|
||||
|
|
@ -709,7 +713,7 @@ collapse_vars_misc1: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f0(o, a, h) {
|
||||
|
|
@ -786,7 +790,7 @@ collapse_vars_repeated: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1() {
|
||||
|
|
@ -809,19 +813,17 @@ collapse_vars_repeated: {
|
|||
}
|
||||
expect: {
|
||||
function f1() {
|
||||
return -3
|
||||
return -3;
|
||||
}
|
||||
function f2(x) {
|
||||
return x
|
||||
return x;
|
||||
}
|
||||
(function(x){
|
||||
var a = "GOOD" + x, e = "BAD", e = a;
|
||||
console.log(e + "!");
|
||||
})("!"),
|
||||
console.log("GOOD!!");
|
||||
})(),
|
||||
(function(x){
|
||||
var a = "GOOD" + x, e = "BAD" + x, e = a;
|
||||
console.log(e + "!");
|
||||
})("!");
|
||||
console.log("GOOD!!");
|
||||
})();
|
||||
}
|
||||
expect_stdout: true
|
||||
}
|
||||
|
|
@ -830,7 +832,7 @@ collapse_vars_closures: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function constant_vars_can_be_replaced_in_any_scope() {
|
||||
|
|
@ -920,7 +922,7 @@ collapse_vars_try: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1() {
|
||||
|
|
@ -1118,7 +1120,7 @@ collapse_vars_constants: {
|
|||
options = {
|
||||
collapse_vars:true, sequences:true, 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
|
||||
keep_fargs:true, if_return:true, join_vars:true, cascade:true, side_effects:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
function f1(x) {
|
||||
|
|
@ -1156,7 +1158,7 @@ collapse_vars_arguments: {
|
|||
collapse_vars:true, sequences:true, 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,
|
||||
toplevel:true
|
||||
toplevel:true, reduce_vars:true
|
||||
}
|
||||
input: {
|
||||
var outer = function() {
|
||||
|
|
@ -1283,6 +1285,7 @@ collapse_vars_regexp: {
|
|||
join_vars: true,
|
||||
cascade: true,
|
||||
side_effects: true,
|
||||
reduce_vars: true,
|
||||
}
|
||||
input: {
|
||||
function f1() {
|
||||
|
|
@ -1316,8 +1319,8 @@ collapse_vars_regexp: {
|
|||
};
|
||||
}
|
||||
(function(){
|
||||
var result, s = "acdabcdeabbb", rx = /ab*/g;
|
||||
while (result = rx.exec(s))
|
||||
var result, rx = /ab*/g;
|
||||
while (result = rx.exec("acdabcdeabbb"))
|
||||
console.log(result[0]);
|
||||
})();
|
||||
}
|
||||
|
|
@ -1341,7 +1344,10 @@ issue_1537: {
|
|||
issue_1562: {
|
||||
options = {
|
||||
collapse_vars: true,
|
||||
evaluate: true,
|
||||
reduce_vars: true,
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
var v = 1, B = 2;
|
||||
|
|
@ -1360,14 +1366,11 @@ issue_1562: {
|
|||
var v = 1;
|
||||
for (v in objs) f(2);
|
||||
|
||||
var x = 3;
|
||||
while(x + 2) bar(10);
|
||||
while(5) bar(10);
|
||||
|
||||
var y = 4;
|
||||
do bar(20); while(y + 2);
|
||||
do bar(20); while(6);
|
||||
|
||||
var z = 5;
|
||||
for (; f(z + 2) ;) bar(30);
|
||||
for (; f(7) ;) bar(30);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user