From b89cc84c3a9cb7f250fbe218bc3e5ea3f7f80dae Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 19 Mar 2021 08:16:53 +0000 Subject: [PATCH] fix corner case in `pure_getters` (#4804) fixes #4803 --- lib/compress.js | 9 +-------- test/compress/pure_getters.js | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index d920bc119a..19806b9826 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3601,14 +3601,7 @@ merge(Compressor.prototype, { return true; }); def(AST_Binary, function(compressor) { - switch (this.operator) { - case "&&": - return this.left._dot_throw(compressor) || this.right._dot_throw(compressor); - case "||": - return this.right._dot_throw(compressor); - default: - return false; - } + return lazy_op[this.operator] && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor)); }); def(AST_Class, return_false); def(AST_Conditional, function(compressor) { diff --git a/test/compress/pure_getters.js b/test/compress/pure_getters.js index bf6f73efe5..d1dd07ee00 100644 --- a/test/compress/pure_getters.js +++ b/test/compress/pure_getters.js @@ -1320,11 +1320,10 @@ issue_2878: { issue_3427: { options = { - assignments: true, - collapse_vars: true, + evaluate: true, inline: true, - passes: 2, pure_getters: "strict", + reduce_vars: true, sequences: true, side_effects: true, toplevel: true, @@ -1536,3 +1535,32 @@ this_toString: { expect_stdout: "[object Object]" node_version: ">=4" } + +issue_4803: { + options = { + hoist_vars: true, + pure_getters: "strict", + reduce_vars: true, + side_effects: true, + toplevel: true, + } + input: { + var o = { + get f() { + console.log("PASS"); + }, + } || 42; + for (var k in o) + o[k]; + } + expect: { + var k, o = { + get f() { + console.log("PASS"); + }, + } || 42; + for (k in o) + o[k]; + } + expect_stdout: "PASS" +}