diff --git a/lib/compress.js b/lib/compress.js index 11f3311f..f6fe538d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -823,8 +823,7 @@ merge(Compressor.prototype, { if (node === expr) { found = true; if (node instanceof AST_VarDef) { - var orig = node.name.definition().orig; - orig.splice(orig.indexOf(node.name), 1); + remove(node.name.definition().orig, node.name); } return in_list ? MAP.skip : null; } @@ -2062,8 +2061,8 @@ merge(Compressor.prototype, { var var_defs = var_defs_by_id.get(sym.id); if (var_defs.length > 1 && !def.value) { compressor.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name)); - var_defs.splice(var_defs.indexOf(def), 1); - sym.orig.splice(sym.orig.indexOf(def.name), 1); + remove(var_defs, def); + remove(sym.orig, def.name); return; } } @@ -2096,7 +2095,7 @@ merge(Compressor.prototype, { } else { compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", template(def.name)); } - sym.orig.splice(sym.orig.indexOf(def.name), 1); + remove(sym.orig, def.name); } }); if (head.length == 0 && tail.length == 1 && tail[0].name instanceof AST_SymbolVar) { @@ -2104,9 +2103,8 @@ merge(Compressor.prototype, { if (var_defs.length > 1) { var def = tail.pop(); compressor.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]", template(def.name)); - var_defs.splice(var_defs.indexOf(def), 1); - var orig = def.name.definition().orig; - orig.splice(orig.indexOf(def.name), 1); + remove(var_defs, def); + remove(def.name.definition().orig, def.name); side_effects.unshift(make_node(AST_Assign, def, { operator: "=", left: make_node(AST_SymbolRef, def.name, def.name), diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js index c702cfaf..ddf90bfa 100644 --- a/test/compress/drop-unused.js +++ b/test/compress/drop-unused.js @@ -1114,3 +1114,36 @@ issue_1838: { "}", ] } + +var_catch_toplevel: { + options = { + conditionals: true, + negate_iife: true, + reduce_vars: true, + side_effects: true, + toplevel: true, + unused: true, + } + input: { + function f() { + a--; + try { + a++; + } catch(a) { + if (a) var a; + var a = 10; + } + } + f(); + } + expect: { + !function() { + a--; + try { + a++; + } catch(a) { + var a; + } + }(); + } +}