Skip to content

Commit

Permalink
enhance unused (#3662)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlamsl committed Dec 31, 2019
1 parent 99ac73a commit d83d3d7
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 9 deletions.
15 changes: 12 additions & 3 deletions lib/compress.js
Expand Up @@ -3879,7 +3879,7 @@ merge(Compressor.prototype, {
});
return true;
}
return scan_ref_scoped(node, descend);
return scan_ref_scoped(node, descend, true);
});
self.walk(tw);
// pass 2: for every used symbol we need to walk its
Expand Down Expand Up @@ -3913,6 +3913,11 @@ merge(Compressor.prototype, {
if (node instanceof AST_Assign) {
if (!in_use || node.left === sym && def.id in fixed_ids && fixed_ids[def.id] !== node) {
value = get_rhs(node);
if (node.write_only) {
value = value.drop_side_effect_free(compressor) || make_node(AST_Number, node, {
value: 0
});
}
}
} else if (!in_use) {
value = make_node(AST_Number, node, {
Expand Down Expand Up @@ -4182,7 +4187,7 @@ merge(Compressor.prototype, {
return rhs.right.has_side_effects(compressor) ? rhs : rhs.right;
}

function scan_ref_scoped(node, descend) {
function scan_ref_scoped(node, descend, init) {
var node_def, props = [], sym = assign_as_unused(node, props);
if (sym && self.variables.get(sym.name) === (node_def = sym.definition())) {
props.forEach(function(prop) {
Expand All @@ -4191,7 +4196,11 @@ merge(Compressor.prototype, {
if (node instanceof AST_Assign) {
if (node.write_only === "p" && node.right.may_throw_on_access(compressor)) return;
var right = get_rhs(node);
right.walk(tw);
if (init && node.write_only && node_def.scope === self && !right.has_side_effects(compressor)) {
initializations.add(node_def.id, right);
} else {
right.walk(tw);
}
if (node.left === sym) {
if (!node_def.chained && sym.fixed_value(true) === right) {
fixed_ids[node_def.id] = node;
Expand Down
81 changes: 81 additions & 0 deletions test/compress/drop-unused.js
Expand Up @@ -2254,3 +2254,84 @@ issue_3598: {
}
expect_stdout: "PASS"
}

self_assign: {
options = {
passes: 2,
side_effects: true,
unused: true,
}
input: {
function d(a) {
a = a;
}
function e(a, b) {
a = b;
b = a;
}
function f(a, b, c) {
a = b;
b = c;
c = a;
}
function g(a, b, c) {
a = a * b + c;
}
}
expect: {
function d(a) {}
function e(a, b) {}
function f(a, b, c) {}
function g(a, b, c) {}
}
}

function_argument_reference: {
options = {
keep_fargs: false,
side_effects: true,
unused: true,
}
input: {
var a = 1, b = 42;
function f(a) {
b <<= a;
}
f();
console.log(a, b);
}
expect: {
var a = 1, b = 42;
function f(a) {
b <<= a;
}
f();
console.log(a, b);
}
expect_stdout: "1 42"
}

function_parameter_ie8: {
options = {
ie8: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var a;
function f() {
console.log("PASS");
}
f(a = 1 + a);
})();
}
expect: {
(function() {
(function f() {
console.log("PASS");
})(0);
})();
}
expect_stdout: "PASS"
}
7 changes: 1 addition & 6 deletions test/compress/functions.js
Expand Up @@ -266,12 +266,7 @@ issue_2084: {
}
expect: {
var c = 0;
!function() {
var c;
c = 1 + (c = -1),
c = 1 + (c = 0),
0 !== 23..toString() && (c = 1 + c);
}(),
23..toString(),
console.log(c);
}
expect_stdout: "0"
Expand Down

0 comments on commit d83d3d7

Please sign in to comment.