Merge branch 'master' into harmony-v2.8.6

This commit is contained in:
alexlamsl
2017-03-05 21:42:34 +08:00
3 changed files with 23 additions and 5 deletions

View File

@@ -2970,7 +2970,7 @@ merge(Compressor.prototype, {
if (self.car instanceof AST_Assign if (self.car instanceof AST_Assign
&& !self.car.left.has_side_effects(compressor)) { && !self.car.left.has_side_effects(compressor)) {
left = self.car.left; left = self.car.left;
} else if (self.car instanceof AST_UnaryPostfix } else if (self.car instanceof AST_Unary
&& (self.car.operator == "++" || self.car.operator == "--")) { && (self.car.operator == "++" || self.car.operator == "--")) {
left = self.car.expression; left = self.car.expression;
} }
@@ -2979,11 +2979,15 @@ merge(Compressor.prototype, {
var cdr = self.cdr; var cdr = self.cdr;
while (true) { while (true) {
if (cdr.equivalent_to(left)) { 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) { if (parent) {
parent[field] = self.car; parent[field] = car;
return self.cdr; return self.cdr;
} }
return self.car; return car;
} }
if (cdr instanceof AST_Binary && !(cdr instanceof AST_Assign)) { if (cdr instanceof AST_Binary && !(cdr instanceof AST_Assign)) {
field = cdr.left.is_constant() ? "right" : "left"; field = cdr.left.is_constant() ? "right" : "left";

View File

@@ -4,7 +4,7 @@
"homepage": "http://lisperator.net/uglifyjs", "homepage": "http://lisperator.net/uglifyjs",
"author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)", "author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"version": "2.8.6", "version": "2.8.7",
"engines": { "engines": {
"node": ">=0.8.0" "node": ">=0.8.0"
}, },

View File

@@ -21,6 +21,16 @@ collapse: {
var a; var a;
a = b(a / 2); a = b(a / 2);
if (a < 0) { if (a < 0) {
a++;
++c;
return c / 2;
}
}
function f4(c) {
var a;
a = b(a / 2);
if (a < 0) {
a++;
c++; c++;
return c / 2; return c / 2;
} }
@@ -35,7 +45,11 @@ collapse: {
} }
function f3(c) { function f3(c) {
var a; 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;
} }
} }
} }