From 12985d86c2a7ae66adaf4a08fe44ac3be1f6ef14 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 23 Mar 2018 07:27:35 +0800 Subject: [PATCH] fix corner case in `hoist_props` (#3022) fixes #3021 --- lib/compress.js | 3 ++- test/compress/hoist_props.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index 972341bb..03ed9e8a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3624,8 +3624,9 @@ merge(Compressor.prototype, { var sym = node.name, def, value; if (sym.scope === self && (def = sym.definition()).escaped != 1 - && !def.single_use + && !def.assignments && !def.direct_access + && !def.single_use && !top_retain(def) && (value = sym.fixed_value()) === node.value && value instanceof AST_Object) { diff --git a/test/compress/hoist_props.js b/test/compress/hoist_props.js index 26887af2..90a7f1d8 100644 --- a/test/compress/hoist_props.js +++ b/test/compress/hoist_props.js @@ -686,3 +686,33 @@ undefined_key: { } expect_stdout: "3" } + +issue_3021: { + options = { + hoist_props: true, + reduce_vars: true, + } + input: { + var a = 1, b = 2; + (function() { + b = a; + if (a++ + b--) + return 1; + return; + var b = {}; + })(); + console.log(a, b); + } + expect: { + var a = 1, b = 2; + (function() { + b = a; + if (a++ + b--) + return 1; + return; + var b = {}; + })(); + console.log(a, b); + } + expect_stdout: "2 2" +} -- 2.34.1