From: Alex Lam S.L Date: Tue, 17 Oct 2017 14:59:15 +0000 (+0800) Subject: fix `AST_PropAccess` in `collapse_vars` (take 2) (#2372) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=0d2fe8e3efdb096af4044b011dd7e2e463581400;p=UglifyJS.git fix `AST_PropAccess` in `collapse_vars` (take 2) (#2372) fixes #2364 --- diff --git a/lib/compress.js b/lib/compress.js index 3909c65c..488cc6fc 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -839,8 +839,7 @@ merge(Compressor.prototype, { if (node instanceof AST_Call || node instanceof AST_Exit || node instanceof AST_PropAccess - && (node.has_side_effects(compressor) - || get_symbol(node).name in lvalues) + && (side_effects || node.has_side_effects(compressor)) || node instanceof AST_SymbolRef && (lvalues[node.name] || side_effects && !references_in_scope(node.definition())) diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index baa18ea1..c115763c 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -2711,3 +2711,75 @@ issue_2364_2: { } } } + +issue_2364_3: { + options = { + collapse_vars: true, + pure_getters: true, + } + input: { + function inc(obj) { + return obj.count++; + } + function foo(bar) { + var result = inc(bar); + return foo.amount = bar.count, result; + } + var data = { + count: 0, + }; + var answer = foo(data); + console.log(foo.amount, answer); + } + expect: { + function inc(obj) { + return obj.count++; + } + function foo(bar) { + var result = inc(bar); + return foo.amount = bar.count, result; + } + var data = { + count: 0, + }; + var answer = foo(data); + console.log(foo.amount, answer); + } + expect_stdout: "1 0" +} + +issue_2364_4: { + options = { + collapse_vars: true, + pure_getters: true, + } + input: { + function inc(obj) { + return obj.count++; + } + function foo(bar, baz) { + var result = inc(bar); + return foo.amount = baz.count, result; + } + var data = { + count: 0, + }; + var answer = foo(data, data); + console.log(foo.amount, answer); + } + expect: { + function inc(obj) { + return obj.count++; + } + function foo(bar, baz) { + var result = inc(bar); + return foo.amount = baz.count, result; + } + var data = { + count: 0, + }; + var answer = foo(data, data); + console.log(foo.amount, answer); + } + expect_stdout: "1 0" +}