# HG changeset patch # User Martin Soch # Date 1358166100 -3600 # Node ID 9e4f01dd6acb75e64a9295a4fdb4c6e2e48ccd2a # Parent 7569db829afa90c4c61fea130074d2759d976e70 Moving integer arithmetic expressions into Number.prototype diff -r 7569db829afa -r 9e4f01dd6acb emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_Number.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_Number.js Mon Jan 14 09:52:51 2013 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_Number.js Mon Jan 14 13:21:40 2013 +0100 @@ -1,9 +1,9 @@ // empty line needed here -__add32 = function(x,y) { return (x + y) | 0; }; -__sub32 = function(x,y) { return (x - y) | 0; }; -__mul32 = function(x,y) { - return (((x * (y >> 16)) << 16) + x * (y & 0xFFFF)) | 0; +Number.prototype.add32 = function(x) { return (this + x) | 0; }; +Number.prototype.sub32 = function(x) { return (this - x) | 0; }; +Number.prototype.mul32 = function(x) { + return (((this * (x >> 16)) << 16) + this * (x & 0xFFFF)) | 0; }; -__toInt8 = function(x) { return (x << 24) >> 24; }; -__toInt16 = function(x) { return (x << 16) >> 16; }; \ No newline at end of file +Number.prototype.toInt8 = function() { return (this << 24) >> 24; }; +Number.prototype.toInt16 = function() { return (this << 16) >> 16; }; \ No newline at end of file diff -r 7569db829afa -r 9e4f01dd6acb vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 09:52:51 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 13:21:40 2013 +0100 @@ -491,7 +491,7 @@ emit(out, "@1 = @2;", lmapper.setD(3), smapper.popD()); break; case opc_iadd: - emit(out, "@1 = __add32(@1,@2);", smapper.getI(1), smapper.popI()); + emit(out, "@1 = @1.add32(@2);", smapper.getI(1), smapper.popI()); break; case opc_ladd: emit(out, "@1 += @2;", smapper.getL(1), smapper.popL()); @@ -503,7 +503,7 @@ emit(out, "@1 += @2;", smapper.getD(1), smapper.popD()); break; case opc_isub: - emit(out, "@1 = __sub32(@1,@2);", smapper.getI(1), smapper.popI()); + emit(out, "@1 = @1.sub32(@2);", smapper.getI(1), smapper.popI()); break; case opc_lsub: emit(out, "@1 -= @2;", smapper.getL(1), smapper.popL()); @@ -515,7 +515,7 @@ emit(out, "@1 -= @2;", smapper.getD(1), smapper.popD()); break; case opc_imul: - emit(out, "@1 = __mul32(@1,@2);", smapper.getI(1), smapper.popI()); + emit(out, "@1 = @1.mul32(@2);", smapper.getI(1), smapper.popI()); break; case opc_lmul: emit(out, "@1 *= @2;", smapper.getL(1), smapper.popL()); @@ -672,13 +672,13 @@ smapper.popD(), smapper.pushL()); break; case opc_i2b: - emit(out, "@1 = __toInt8(@1);", smapper.getI(0)); + emit(out, "@1 = @1.toInt8();", smapper.getI(0)); break; case opc_i2c: out.append("{ /* number conversion */ }"); break; case opc_i2s: - emit(out, "@1 = __toInt16(@1);", smapper.getI(0)); + emit(out, "@1 = @1.toInt16();", smapper.getI(0)); break; case opc_aconst_null: emit(out, "@1 = null;", smapper.pushA());