fix corner case in unused (#5272)

fixes #5271
This commit is contained in:
Alex Lam S.L
2022-01-07 06:33:42 +00:00
committed by GitHub
parent 9aab1f3661
commit 58bea676ac
2 changed files with 31 additions and 7 deletions

View File

@@ -6577,7 +6577,6 @@ Compressor.prototype.compress = function(node) {
}
});
// pass 3: we should drop declarations not in_use
var trim_defns = [];
var unused_fn_names = [];
var calls_to_drop_args = [];
var fns_with_marked_args = [];
@@ -6822,14 +6821,16 @@ Compressor.prototype.compress = function(node) {
var sym = def.name.definition();
var drop_sym = is_var ? can_drop_symbol(def.name) : is_safe_lexical(sym);
if (!drop_sym || !drop_vars || sym.id in in_use_ids) {
if (value && (indexOf_assign(sym, def) < 0 || self_assign(value.tail_node()))) {
var index;
if (value && ((index = indexOf_assign(sym, def)) < 0 || self_assign(value.tail_node()))) {
value = value.drop_side_effect_free(compressor);
if (value) {
AST_Node.warn("Side effects in definition of variable {name} [{file}:{line},{col}]", template(def.name));
side_effects.push(value);
}
value = null;
trim_defns.push(def);
def = def.clone();
def.value = value = null;
if (index >= 0) assign_in_use[sym.id][index] = def;
}
var old_def, fn;
if (!value && !(node instanceof AST_Let)) {
@@ -7114,9 +7115,6 @@ Compressor.prototype.compress = function(node) {
&& self.body[0].value == "use strict") {
self.body.length = 0;
}
trim_defns.forEach(function(def) {
def.value = null;
});
unused_fn_names.forEach(function(fn) {
fn.name = null;
});

View File

@@ -3561,3 +3561,29 @@ issue_5224: {
}
expect_stdout: "Infinity"
}
issue_5271: {
options = {
evaluate: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
do {
var a = b = 0 ^ f, b = b;
} while (console.log(42 - b));
}
f();
}
expect: {
(function f() {
do {
var b;
b = 0 ^ f;
} while (console.log(42 - b));
})();
}
expect_stdout: "42"
}