From: Alex Lam S.L Date: Sun, 5 Mar 2017 09:15:37 +0000 (+0800) Subject: fixup for #1553 (#1555) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=067e5a5762cb5da8948ccb9bde4d020decb8d55b;p=UglifyJS.git fixup for #1553 (#1555) - `++a` is the one that is foldable - transform `a++` into `++a` for better optimisation --- diff --git a/lib/compress.js b/lib/compress.js index f1409d90..d9a67c16 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2833,7 +2833,7 @@ merge(Compressor.prototype, { if (self.car instanceof AST_Assign && !self.car.left.has_side_effects(compressor)) { left = self.car.left; - } else if (self.car instanceof AST_UnaryPostfix + } else if (self.car instanceof AST_Unary && (self.car.operator == "++" || self.car.operator == "--")) { left = self.car.expression; } @@ -2842,11 +2842,15 @@ merge(Compressor.prototype, { var cdr = self.cdr; while (true) { if (cdr.equivalent_to(left)) { + var car = self.car instanceof AST_UnaryPostfix ? make_node(AST_UnaryPrefix, self.car, { + operator: self.car.operator, + expression: left + }) : self.car; if (parent) { - parent[field] = self.car; + parent[field] = car; return self.cdr; } - return self.car; + return car; } if (cdr instanceof AST_Binary && !(cdr instanceof AST_Assign)) { field = cdr.left.is_constant() ? "right" : "left"; diff --git a/test/compress/issue-368.js b/test/compress/issue-368.js index 8c41a894..5960aa64 100644 --- a/test/compress/issue-368.js +++ b/test/compress/issue-368.js @@ -21,6 +21,16 @@ collapse: { var a; a = b(a / 2); if (a < 0) { + a++; + ++c; + return c / 2; + } + } + function f4(c) { + var a; + a = b(a / 2); + if (a < 0) { + a++; c++; return c / 2; } @@ -35,7 +45,11 @@ collapse: { } function f3(c) { var a; - if ((a = b(a / 2)) < 0) return c++ / 2; + if ((a = b(a / 2)) < 0) return a++, ++c / 2; + } + function f4(c) { + var a; + if ((a = b(a / 2)) < 0) return a++, ++c / 2; } } }