Probably faster to use the conditional operator than to call additional compact function
1.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Fri Feb 27 18:55:06 2015 +0100
1.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Fri Feb 27 19:28:07 2015 +0100
1.3 @@ -224,7 +224,9 @@
1.4 return hi.next32(low);
1.5 }
1.6 };
1.7 -
1.8 +
1.9 + // keeping for compatibility with generated bck2brwsr.js library files
1.10 + // not used since 0.14
1.11 numberPrototype.compare = function(x) {
1.12 if (this == x) {
1.13 return 0;
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 18:55:06 2015 +0100
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 19:28:07 2015 +0100
2.3 @@ -975,11 +975,13 @@
2.4 break;
2.5 case opc_fcmpl:
2.6 case opc_fcmpg:
2.7 - smapper.replace(this, VarType.INTEGER, "(@2).compare(@1)", smapper.popF(), smapper.getF(0));
2.8 + emit(smapper, this, "var @3 = (@2 == @1) ? 0 : ((@2 < @1) ? -1 : 1);",
2.9 + smapper.popF(), smapper.popF(), smapper.pushI());
2.10 break;
2.11 case opc_dcmpl:
2.12 case opc_dcmpg:
2.13 - smapper.replace(this, VarType.INTEGER, "(@2).compare(@1)", smapper.popD(), smapper.getD(0));
2.14 + emit(smapper, this, "var @3 = (@2 == @1) ? 0 : ((@2 < @1) ? -1 : 1);",
2.15 + smapper.popD(), smapper.popD(), smapper.pushI());
2.16 break;
2.17 case opc_if_acmpeq:
2.18 i = generateIf(smapper, byteCodes, i, smapper.popA(), smapper.popA(),
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/MathTest.java Fri Feb 27 18:55:06 2015 +0100
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/MathTest.java Fri Feb 27 19:28:07 2015 +0100
3.3 @@ -92,6 +92,26 @@
3.4 Math.IEEEremainder(Integer.MAX_VALUE, -4.5), Integer.MAX_VALUE, -4.5
3.5 );
3.6 }
3.7 +
3.8 + @Test public void isNaN() throws Exception {
3.9 + boolean nan = Double.isNaN(Double.NaN);
3.10 + assertExec("Same result 1", Double.class, "isNaN__ZD",
3.11 + 1.0, Double.NaN
3.12 + );
3.13 + }
3.14 +
3.15 + @Test public void isInfinite() throws Exception {
3.16 + assertExec("Same result 1", Double.class, "isInfinite__ZD",
3.17 + 1.0, Double.POSITIVE_INFINITY
3.18 + );
3.19 + }
3.20 +
3.21 + @Test public void isNegInfinite() throws Exception {
3.22 + assertExec("Same result 1", Double.class, "isInfinite__ZD",
3.23 + 1.0, Double.NEGATIVE_INFINITY
3.24 + );
3.25 + }
3.26 +
3.27
3.28 private static TestVM code;
3.29