Completely allow evaluating -0

This commit is contained in:
Richard van Velzen
2016-05-18 18:49:55 +02:00
parent 27eedbc302
commit bc49dfd27a
2 changed files with 45 additions and 9 deletions

View File

@@ -183,9 +183,18 @@ merge(Compressor.prototype, {
value: val
}).optimize(compressor);
case "number":
return make_node(isNaN(val) ? AST_NaN : AST_Number, orig, {
value: val
}).optimize(compressor);
if (isNaN(val)) {
return make_node(AST_NaN, orig);
}
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":
return make_node(val ? AST_True : AST_False, orig).optimize(compressor);
case "undefined":
@@ -1028,10 +1037,7 @@ merge(Compressor.prototype, {
return typeof e;
case "void": return void ev(e, compressor);
case "~": return ~ev(e, compressor);
case "-":
e = -ev(e, compressor);
if (e === -0) throw def;
return e;
case "-": return -ev(e, compressor);
case "+": return +ev(e, compressor);
}
throw def;

View File

@@ -1,9 +1,39 @@
negative_zero: {
options = { evaluate: true }
input: {
assert.sameValue(-"", -0, '-""');
console.log(
-"",
- -"",
1 / (-0),
1 / (-"")
);
}
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)
);
}
}