From 77974bc5346a340a1c4446fc4553363592f6d213 Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Thu, 4 May 2017 00:27:20 +0800 Subject: [PATCH] update `SymbolDef.orig` after `drop_unused()` --- lib/compress.js | 4 ++++ test/compress/collapse_vars.js | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index 884c2007..70fd03a8 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2075,6 +2075,7 @@ merge(Compressor.prototype, { 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); return; } } @@ -2107,6 +2108,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); } }); if (head.length == 0 && tail.length == 1 && tail[0].name instanceof AST_SymbolVar) { @@ -2115,6 +2117,8 @@ merge(Compressor.prototype, { 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); side_effects.unshift(make_node(AST_Assign, def, { operator: "=", left: make_node(AST_SymbolRef, def.name, def.name), diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index ef5c19ce..5af46606 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -2077,3 +2077,40 @@ toplevel_single_reference: { b(a = b); } } + +unused_orig: { + options = { + collapse_vars: true, + passes: 2, + reduce_vars: true, + unused: true, + } + input: { + var a = 1; + console.log(function(b) { + var a; + var c = b; + for (var d in c) { + var a = c[0]; + return --b + a; + } + try { + } catch (e) { + --b + a; + } + a && a.NaN; + }([2]), a); + } + expect: { + var a = 1; + console.log(function(b) { + var c = b; + for (var d in c) { + var a = c[0]; + return --b + a; + } + a && a.NaN; + }([2]), a); + } + expect_stdout: "3 1" +}