1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Feb 16 20:36:47 2014 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Feb 16 22:22:22 2014 +0100
1.3 @@ -831,10 +831,16 @@
1.4 final Long lv = new Long(v);
1.5 final int low = (int)(lv.longValue() & 0xFFFFFFFF);
1.6 final int hi = (int)(lv.longValue() >> 32);
1.7 - emit(smapper, out, "var @1 = 0x@3.next32(0x@2);", smapper.pushL(),
1.8 - Integer.toHexString(low), Integer.toHexString(hi));
1.9 + if (hi == 0) {
1.10 + smapper.assign(out, VarType.LONG, "(0x" + Integer.toHexString(low) + ")");
1.11 + } else {
1.12 + smapper.assign(out, VarType.LONG,
1.13 + "0x" + Integer.toHexString(hi) + ".next32(0x" +
1.14 + Integer.toHexString(low) + ")"
1.15 + );
1.16 + }
1.17 } else {
1.18 - emit(smapper, out, "var @1 = @2;", smapper.pushT(type), v);
1.19 + smapper.assign(out, type, v);
1.20 }
1.21 break;
1.22 }
1.23 @@ -1198,13 +1204,13 @@
1.24 break;
1.25 }
1.26 case opc_bipush:
1.27 - emit(smapper, out, "var @1 = @2;",
1.28 - smapper.pushI(), Integer.toString(byteCodes[++i]));
1.29 + smapper.assign(out, VarType.INTEGER,
1.30 + "(" + Integer.toString(byteCodes[++i]) + ")");
1.31 break;
1.32 case opc_sipush:
1.33 - emit(smapper, out, "var @1 = @2;",
1.34 - smapper.pushI(),
1.35 - Integer.toString(readShortArg(byteCodes, i)));
1.36 + smapper.assign(out, VarType.INTEGER,
1.37 + "(" + Integer.toString(readShortArg(byteCodes, i)) + ")"
1.38 + );
1.39 i += 2;
1.40 break;
1.41 case opc_getfield: {
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Sun Feb 16 20:36:47 2014 +0100
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Sun Feb 16 22:22:22 2014 +0100
2.3 @@ -117,6 +117,12 @@
2.4 double f = 3.0;
2.5 assertExec("Should be the same", Numbers.class, "deserDouble__D", f);
2.6 }
2.7 +
2.8 + @Test public void bytesToLong() throws Exception {
2.9 + long exp = Numbers.bytesToLong((byte)30, (byte)20, 32);
2.10 + assertExec("Should be the same", Numbers.class, "bytesToLong__JBBI",
2.11 + Double.valueOf(exp), 30, 20, 32);
2.12 + }
2.13 /*
2.14 @Test public void serDouble() throws IOException {
2.15 double f = 3.0;
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Sun Feb 16 20:36:47 2014 +0100
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java Sun Feb 16 22:22:22 2014 +0100
3.3 @@ -64,6 +64,10 @@
3.4 DataInputStream dis = new DataInputStream(is);
3.5 return dis.readInt();
3.6 }
3.7 + static long bytesToLong(byte b1, byte b2, int shift) {
3.8 + return (((long)b1 << 56) +
3.9 + ((long)b2 & 255) << 48) >> shift;
3.10 + }
3.11
3.12 static String intToString() {
3.13 return new Integer(5).toString().toString();