@@ -4389,9 +4389,6 @@ Compressor.prototype.compress = function(node) {
|
|||||||
"setUTCMonth",
|
"setUTCMonth",
|
||||||
"setUTCSeconds",
|
"setUTCSeconds",
|
||||||
"setYear",
|
"setYear",
|
||||||
"toExponential",
|
|
||||||
"toFixed",
|
|
||||||
"toPrecision",
|
|
||||||
]);
|
]);
|
||||||
def(AST_Call, function(compressor) {
|
def(AST_Call, function(compressor) {
|
||||||
if (!compressor.option("unsafe")) return false;
|
if (!compressor.option("unsafe")) return false;
|
||||||
@@ -4442,7 +4439,10 @@ Compressor.prototype.compress = function(node) {
|
|||||||
"charAt",
|
"charAt",
|
||||||
"substr",
|
"substr",
|
||||||
"substring",
|
"substring",
|
||||||
|
"toExponential",
|
||||||
|
"toFixed",
|
||||||
"toLowerCase",
|
"toLowerCase",
|
||||||
|
"toPrecision",
|
||||||
"toString",
|
"toString",
|
||||||
"toUpperCase",
|
"toUpperCase",
|
||||||
"trim",
|
"trim",
|
||||||
@@ -10771,6 +10771,9 @@ Compressor.prototype.compress = function(node) {
|
|||||||
if (seq !== self) return seq.optimize(compressor);
|
if (seq !== self) return seq.optimize(compressor);
|
||||||
}
|
}
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
case "+":
|
||||||
|
if (compressor.option("evaluate") && exp.is_number(compressor)) return exp;
|
||||||
|
break;
|
||||||
case "-":
|
case "-":
|
||||||
if (exp instanceof AST_Infinity) exp = exp.transform(compressor);
|
if (exp instanceof AST_Infinity) exp = exp.transform(compressor);
|
||||||
// avoids infinite recursion of numerals
|
// avoids infinite recursion of numerals
|
||||||
@@ -11477,19 +11480,17 @@ Compressor.prototype.compress = function(node) {
|
|||||||
if (self.left.value == 0) {
|
if (self.left.value == 0) {
|
||||||
if (self.right.is_boolean(compressor)) return make_node(AST_UnaryPrefix, self, {
|
if (self.right.is_boolean(compressor)) return make_node(AST_UnaryPrefix, self, {
|
||||||
operator: "+",
|
operator: "+",
|
||||||
expression: self.right
|
expression: self.right,
|
||||||
}).optimize(compressor);
|
}).optimize(compressor);
|
||||||
if (self.right.is_number(compressor) && !self.right.is_negative_zero()) return self.right;
|
if (self.right.is_number(compressor) && !self.right.is_negative_zero()) return self.right;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// 1 * n ---> n
|
// 1 * n ---> n
|
||||||
case "*":
|
case "*":
|
||||||
if (self.left.value == 1) {
|
if (self.left.value == 1) return make_node(AST_UnaryPrefix, self, {
|
||||||
return self.right.is_number(compressor) ? self.right : make_node(AST_UnaryPrefix, self, {
|
operator: "+",
|
||||||
operator: "+",
|
expression: self.right,
|
||||||
expression: self.right
|
}).optimize(compressor);
|
||||||
}).optimize(compressor);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (self.right instanceof AST_Number && !self.left.is_constant()) switch (self.operator) {
|
if (self.right instanceof AST_Number && !self.left.is_constant()) switch (self.operator) {
|
||||||
@@ -11498,28 +11499,24 @@ Compressor.prototype.compress = function(node) {
|
|||||||
if (self.right.value == 0) {
|
if (self.right.value == 0) {
|
||||||
if (self.left.is_boolean(compressor)) return make_node(AST_UnaryPrefix, self, {
|
if (self.left.is_boolean(compressor)) return make_node(AST_UnaryPrefix, self, {
|
||||||
operator: "+",
|
operator: "+",
|
||||||
expression: self.left
|
expression: self.left,
|
||||||
}).optimize(compressor);
|
}).optimize(compressor);
|
||||||
if (self.left.is_number(compressor) && !self.left.is_negative_zero()) return self.left;
|
if (self.left.is_number(compressor) && !self.left.is_negative_zero()) return self.left;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// n - 0 ---> n
|
// n - 0 ---> n
|
||||||
case "-":
|
case "-":
|
||||||
if (self.right.value == 0) {
|
if (self.right.value == 0) return make_node(AST_UnaryPrefix, self, {
|
||||||
return self.left.is_number(compressor) ? self.left : make_node(AST_UnaryPrefix, self, {
|
operator: "+",
|
||||||
operator: "+",
|
expression: self.left,
|
||||||
expression: self.left
|
}).optimize(compressor);
|
||||||
}).optimize(compressor);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
// n / 1 ---> n
|
// n / 1 ---> n
|
||||||
case "/":
|
case "/":
|
||||||
if (self.right.value == 1) {
|
if (self.right.value == 1) return make_node(AST_UnaryPrefix, self, {
|
||||||
return self.left.is_number(compressor) ? self.left : make_node(AST_UnaryPrefix, self, {
|
operator: "+",
|
||||||
operator: "+",
|
expression: self.left,
|
||||||
expression: self.left
|
}).optimize(compressor);
|
||||||
}).optimize(compressor);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -745,7 +745,7 @@ call_args: {
|
|||||||
expect: {
|
expect: {
|
||||||
var a = 1;
|
var a = 1;
|
||||||
console.log(1);
|
console.log(1);
|
||||||
+(1, 1);
|
1, 1;
|
||||||
}
|
}
|
||||||
expect_stdout: true
|
expect_stdout: true
|
||||||
}
|
}
|
||||||
@@ -769,7 +769,7 @@ call_args_drop_param: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(1);
|
console.log(1);
|
||||||
+(b, 1);
|
b, 1;
|
||||||
}
|
}
|
||||||
expect_stdout: true
|
expect_stdout: true
|
||||||
}
|
}
|
||||||
@@ -3241,3 +3241,35 @@ issue_4886_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "true"
|
expect_stdout: "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5354: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
unsafe: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function f(a) {
|
||||||
|
return +a.toExponential(1);
|
||||||
|
}
|
||||||
|
function g(b) {
|
||||||
|
return 0 + b.toFixed(2);
|
||||||
|
}
|
||||||
|
function h(c) {
|
||||||
|
return 1 * c.toPrecision(3);
|
||||||
|
}
|
||||||
|
console.log(typeof f(45), typeof g(67), typeof h(89));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f(a) {
|
||||||
|
return +a.toExponential(1);
|
||||||
|
}
|
||||||
|
function g(b) {
|
||||||
|
return 0 + b.toFixed(2);
|
||||||
|
}
|
||||||
|
function h(c) {
|
||||||
|
return +c.toPrecision(3);
|
||||||
|
}
|
||||||
|
console.log(typeof f(45), typeof g(67), typeof h(89));
|
||||||
|
}
|
||||||
|
expect_stdout: "number string number"
|
||||||
|
}
|
||||||
|
|||||||
@@ -842,9 +842,9 @@ unary_binary_parentheses: {
|
|||||||
v.forEach(function(x) {
|
v.forEach(function(x) {
|
||||||
v.forEach(function(y) {
|
v.forEach(function(y) {
|
||||||
console.log(
|
console.log(
|
||||||
+x*y,
|
x*y,
|
||||||
+x/y,
|
x/y,
|
||||||
+x%y,
|
x%y,
|
||||||
-x*y,
|
-x*y,
|
||||||
-x/y,
|
-x/y,
|
||||||
-x%y
|
-x%y
|
||||||
@@ -1397,7 +1397,7 @@ issue_3695: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var a = [];
|
var a = [];
|
||||||
console.log(+(a * (a[0] = false)));
|
console.log(a * (a[0] = false));
|
||||||
}
|
}
|
||||||
expect_stdout: "NaN"
|
expect_stdout: "NaN"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user