From 1e9b576ee9938d6acb9dff277474e9a32f866690 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 1 Nov 2019 00:01:25 +0800 Subject: [PATCH] fix corner case in `evaluate` (#3559) fixes #3558 --- lib/compress.js | 8 ++++---- test/compress/evaluate.js | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index a6f5d20b12..65768c023a 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2862,10 +2862,10 @@ merge(Compressor.prototype, { case "+": return +v; case "++": case "--": - if (e instanceof AST_SymbolRef) { - var refs = e.definition().references; - if (refs[refs.length - 1] === e) return v; - } + if (!(e instanceof AST_SymbolRef)) return this; + var refs = e.definition().references; + if (refs[refs.length - 1] !== e) return this; + return HOP(e, "_eval") ? +(this.operator[0] + 1) + +v : v; } return this; }); diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 771bd4f6d6..6eadbe514c 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -1838,3 +1838,24 @@ recursive_function_2: { } expect_stdout: "120" } + +issue_3558: { + options = { + evaluate: true, + reduce_vars: true, + toplevel: true, + } + input: { + function f(a) { + return 1 + --a; + } + console.log(f(true), f(false)); + } + expect: { + function f(a) { + return 1 + --a; + } + console.log(1, 0); + } + expect_stdout: "1 0" +}