From 475f551f2f91d4a1244a1cd47d11887128e01e1e Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Tue, 2 May 2017 23:55:36 +0800 Subject: [PATCH] fix corner case with top-level singular reference --- lib/compress.js | 7 +++---- test/compress/collapse_vars.js | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index bb8a3c1f..884c2007 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -711,7 +711,8 @@ merge(Compressor.prototype, { return make_node(AST_UnaryPrefix, candidate, candidate); } if (candidate instanceof AST_VarDef) { - if (candidate.name.definition().references.length == 1) { + var def = candidate.name.definition(); + if (def.references.length == 1 && (!def.global || compressor.toplevel(def))) { return maintain_this_binding(parent, node, candidate.value); } return make_node(AST_Assign, candidate, { @@ -779,9 +780,7 @@ merge(Compressor.prototype, { expr.expressions.forEach(extract_candidates); } else if (expr instanceof AST_Definitions) { expr.definitions.forEach(function(var_def) { - if (var_def.value) { - candidates.push(var_def); - } + if (var_def.value) candidates.push(var_def); }); } else if (expr instanceof AST_SimpleStatement) { extract_candidates(expr.body); diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 75c65147..ef5c19ce 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -2059,3 +2059,21 @@ double_def: { (a = a && y)(); } } + +toplevel_single_reference: { + options = { + collapse_vars: true, + } + input: { + var a; + for (var b in x) { + var a = b; + b(a); + } + } + expect: { + var a; + for (var b in x) + b(a = b); + } +}