Completely allow evaluating -0
This commit is contained in:
@@ -183,9 +183,18 @@ merge(Compressor.prototype, {
|
|||||||
value: val
|
value: val
|
||||||
}).optimize(compressor);
|
}).optimize(compressor);
|
||||||
case "number":
|
case "number":
|
||||||
return make_node(isNaN(val) ? AST_NaN : AST_Number, orig, {
|
if (isNaN(val)) {
|
||||||
value: val
|
return make_node(AST_NaN, orig);
|
||||||
}).optimize(compressor);
|
}
|
||||||
|
|
||||||
|
if ((1 / val) < 0) {
|
||||||
|
return make_node(AST_UnaryPrefix, orig, {
|
||||||
|
operator: "-",
|
||||||
|
expression: make_node(AST_Number, null, { value: -val })
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return make_node(AST_Number, orig, { value: val }).optimize(compressor);
|
||||||
case "boolean":
|
case "boolean":
|
||||||
return make_node(val ? AST_True : AST_False, orig).optimize(compressor);
|
return make_node(val ? AST_True : AST_False, orig).optimize(compressor);
|
||||||
case "undefined":
|
case "undefined":
|
||||||
@@ -1028,10 +1037,7 @@ merge(Compressor.prototype, {
|
|||||||
return typeof e;
|
return typeof e;
|
||||||
case "void": return void ev(e, compressor);
|
case "void": return void ev(e, compressor);
|
||||||
case "~": return ~ev(e, compressor);
|
case "~": return ~ev(e, compressor);
|
||||||
case "-":
|
case "-": return -ev(e, compressor);
|
||||||
e = -ev(e, compressor);
|
|
||||||
if (e === -0) throw def;
|
|
||||||
return e;
|
|
||||||
case "+": return +ev(e, compressor);
|
case "+": return +ev(e, compressor);
|
||||||
}
|
}
|
||||||
throw def;
|
throw def;
|
||||||
|
|||||||
@@ -1,9 +1,39 @@
|
|||||||
negative_zero: {
|
negative_zero: {
|
||||||
options = { evaluate: true }
|
options = { evaluate: true }
|
||||||
input: {
|
input: {
|
||||||
assert.sameValue(-"", -0, '-""');
|
console.log(
|
||||||
|
-"",
|
||||||
|
- -"",
|
||||||
|
1 / (-0),
|
||||||
|
1 / (-"")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
assert.sameValue(-"", -0, '-""');
|
console.log(
|
||||||
|
-0,
|
||||||
|
0,
|
||||||
|
1 / (-0),
|
||||||
|
1 / (-0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
positive_zero: {
|
||||||
|
options = { evaluate: true }
|
||||||
|
input: {
|
||||||
|
console.log(
|
||||||
|
+"",
|
||||||
|
+ -"",
|
||||||
|
1 / (+0),
|
||||||
|
1 / (+"")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console.log(
|
||||||
|
0,
|
||||||
|
-0,
|
||||||
|
1 / (0),
|
||||||
|
1 / (0)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user