From ba7069d52b8e3eb6eca0fd5b88a20361868bb42c Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Wed, 11 Apr 2018 05:19:16 +0800 Subject: suppress `hoist_props` for embedded assignments (#3074) --- lib/compress.js | 5 ++++- test/compress/hoist_props.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index 66dc10cf..454ce945 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3639,7 +3639,10 @@ merge(Compressor.prototype, { var top_retain = self instanceof AST_Toplevel && compressor.top_retain || return_false; var defs_by_id = Object.create(null); return self.transform(new TreeTransformer(function(node, descend) { - if (node instanceof AST_Assign && node.operator == "=" && can_hoist(node.left, node.right, 1)) { + if (node instanceof AST_Assign + && node.operator == "=" + && node.write_only + && can_hoist(node.left, node.right, 1)) { descend(node, this); var defs = new Dictionary(); var assignments = []; diff --git a/test/compress/hoist_props.js b/test/compress/hoist_props.js index 0e399167..46af9d72 100644 --- a/test/compress/hoist_props.js +++ b/test/compress/hoist_props.js @@ -824,3 +824,35 @@ issue_3071_2_toplevel: { } expect_stdout: "1" } + +issue_3071_3: { + options = { + hoist_props: true, + reduce_vars: true, + } + input: { + var c = 0; + (function(a, b) { + (function f(o) { + var n = 2; + while (--b + (o = { + p: c++, + }) && --n > 0); + })(); + })(); + console.log(c); + } + expect: { + var c = 0; + (function(a, b) { + (function f(o) { + var n = 2; + while (--b + (o = { + p: c++, + }) && --n > 0); + })(); + })(); + console.log(c); + } + expect_stdout: "2" +} -- cgit v1.2.3