diff options
-rw-r--r-- | lib/compress.js | 3 | ||||
-rw-r--r-- | test/compress/collapse_vars.js | 72 |
2 files changed, 73 insertions, 2 deletions
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" +} |