Probably faster to use the conditional operator than to call additional compact function
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 27 Feb 2015 19:28:07 +0100
changeset 180065cab8539582
parent 1799 7601b9d64be6
child 1801 a29572878b0e
Probably faster to use the conditional operator than to call additional compact function
rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/MathTest.java
     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