1.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Wed Jan 27 21:37:10 2016 +0100
1.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js Wed Jan 27 22:46:04 2016 +0100
1.3 @@ -21,20 +21,23 @@
1.4 numberPrototype.high32 = function() {
1.5 return high32(this);
1.6 };
1.7 + function low32(x) {
1.8 + return x.lo ? x.lo : x;
1.9 + };
1.10 function high32(x) {
1.11 - return x.hi ? x.hi : (Math.floor(x / (__m32 + 1))) | 0;
1.12 + return x.hi ? x.hi : (Math.floor(low32(x) / (__m32 + 1))) | 0;
1.13 };
1.14 numberPrototype.toFP = function() {
1.15 - return this.hi ? this.hi * (__m32 + 1) + this : this;
1.16 + return this.hi ? this.hi * (__m32 + 1) + low32(this) : low32(this);
1.17 };
1.18 numberPrototype.toLong = function() {
1.19 - var hi = (this / (__m32 + 1)) | 0;
1.20 - var low = (this % (__m32 + 1)) | 0;
1.21 + var hi = (low32(this) / (__m32 + 1)) | 0;
1.22 + var low = (low32(this) % (__m32 + 1)) | 0;
1.23 if (low < 0) {
1.24 low += __m32 + 1;
1.25 }
1.26
1.27 - if (this < 0) {
1.28 + if (low32(this) < 0) {
1.29 hi -= 1;
1.30 }
1.31
1.32 @@ -44,7 +47,7 @@
1.33 numberPrototype.toExactString = function() {
1.34 if (this.hi) {
1.35 // check for Long.MIN_VALUE
1.36 - if ((this.hi == (0x80000000 | 0)) && (this == 0)) {
1.37 + if ((this.hi == (0x80000000 | 0)) && (low32(this) == 0)) {
1.38 return '-9223372036854775808';
1.39 }
1.40 var res = 0;
1.41 @@ -55,10 +58,10 @@
1.42 if (neg) {
1.43 var x = neg64(this);
1.44 var hi = x.hi;
1.45 - var low = x;
1.46 + var low = low32(x);
1.47 } else {
1.48 var hi = this.hi;
1.49 - var low = this;
1.50 + var low = low32(this);
1.51 }
1.52 for (var i = 0; i < a.length; i++) {
1.53 res += hi * a[i];
1.54 @@ -77,11 +80,11 @@
1.55 s = String(res).concat(s).replace(/^0+/, '');
1.56 return (neg ? '-' : '').concat(s);
1.57 }
1.58 - return String(this);
1.59 + return String(low32(this));
1.60 };
1.61
1.62 function add64(x, y) {
1.63 - var low = x + y;
1.64 + var low = low32(x) + low32(y);
1.65 carry = 0;
1.66 if (low > __m32) {
1.67 carry = 1;
1.68 @@ -92,7 +95,7 @@
1.69 };
1.70
1.71 function sub64(x, y) {
1.72 - var low = x - y;
1.73 + var low = low32(x) - low32(y);
1.74 carry = 0;
1.75 if (low < 0) {
1.76 carry = 1;
1.77 @@ -103,14 +106,14 @@
1.78 };
1.79
1.80 function mul64(x, y) {
1.81 - var low = mul32(x, y);
1.82 + var low = mul32(low32(x), low32(y));
1.83 low += (low < 0) ? (__m32 + 1) : 0;
1.84 // first count upper 32 bits of (x.low * x.low)
1.85 var hi_hi = 0;
1.86 var hi_low = 0;
1.87 var m = 1;
1.88 for (var i = 0; i < 32; i++) {
1.89 - if (y & m) {
1.90 + if (low32(y) & m) {
1.91 hi_hi += x >>> 16;
1.92 hi_low += x & 0xFFFF
1.93 }
1.94 @@ -121,15 +124,15 @@
1.95 }
1.96 var hi = (hi_hi << 16) + hi_low;
1.97
1.98 - var m1 = mul32(high32(x), y);
1.99 - var m2 = mul32(x, high32(y));
1.100 + var m1 = mul32(high32(x), low32(y));
1.101 + var m2 = mul32(low32(x), high32(y));
1.102 hi = add32(add32(hi, m1), m2);
1.103
1.104 return hi.next32(low);
1.105 };
1.106
1.107 function and64(x, y) {
1.108 - var low = x & y;
1.109 + var low = low32(x) & low32(y);
1.110 low += (low < 0) ? (__m32 + 1) : 0;
1.111 if (x.hi && y.hi) {
1.112 var hi = x.hi & y.hi;
1.113 @@ -140,7 +143,7 @@
1.114 };
1.115
1.116 function or64(x, y) {
1.117 - var low = x | y;
1.118 + var low = low32(x) | low32(y);
1.119 low += (low < 0) ? (__m32 + 1) : 0;
1.120 if (x.hi || y.hi) {
1.121 var hi = x.hi | y.hi;
1.122 @@ -150,7 +153,7 @@
1.123 };
1.124
1.125 function xor64(x, y) {
1.126 - var low = x ^ y;
1.127 + var low = low32(x) ^ low32(y);
1.128 low += (low < 0) ? (__m32 + 1) : 0;
1.129 if (x.hi || y.hi) {
1.130 var hi = x.hi ^ y.hi;
1.131 @@ -164,13 +167,13 @@
1.132 x &= 0x3f;
1.133 if (x === 0) return thiz;
1.134 if (x >= 32) {
1.135 - var hi = thiz << (x - 32);
1.136 + var hi = low32(thiz) << (x - 32);
1.137 return hi.next32(0);
1.138 } else {
1.139 var hi = high32(thiz) << x;
1.140 - var low_reminder = thiz >> (32 - x);
1.141 + var low_reminder = low32(thiz) >> (32 - x);
1.142 hi |= low_reminder;
1.143 - var low = thiz << x;
1.144 + var low = low32(thiz) << x;
1.145 low += (low < 0) ? (__m32 + 1) : 0;
1.146 return hi.next32(low);
1.147 }
1.148 @@ -184,7 +187,7 @@
1.149 low += (low < 0) ? (__m32 + 1) : 0;
1.150 return low;
1.151 } else {
1.152 - var low = thiz >>> x;
1.153 + var low = low32(thiz) >>> x;
1.154 var hi_reminder = high32(thiz) << (32 - x);
1.155 low |= hi_reminder;
1.156 low += (low < 0) ? (__m32 + 1) : 0;
1.157 @@ -201,7 +204,7 @@
1.158 low += (low < 0) ? (__m32 + 1) : 0;
1.159 return low;
1.160 } else {
1.161 - var low = thiz >>> x;
1.162 + var low = low32(thiz) >>> x;
1.163 var hi_reminder = high32(thiz) << (32 - x);
1.164 low |= hi_reminder;
1.165 low += (low < 0) ? (__m32 + 1) : 0;
1.166 @@ -212,14 +215,16 @@
1.167
1.168 function compare64(x, y) {
1.169 if (high32(x) === high32(y)) {
1.170 - return (x < y) ? -1 : ((x > y) ? 1 : 0);
1.171 + var lox = low32(x);
1.172 + var loy = low32(y);
1.173 + return (lox < loy) ? -1 : ((lox > loy) ? 1 : 0);
1.174 }
1.175 return (high32(x) < high32(y)) ? -1 : 1;
1.176 };
1.177
1.178 function neg64(x) {
1.179 var hi = high32(x);
1.180 - var low = x;
1.181 + var low = low32(x);
1.182 if ((hi === 0) && (low < 0)) {
1.183 return -low;
1.184 }
1.185 @@ -483,21 +488,21 @@
1.186 v = y;
1.187 }
1.188
1.189 - if ((v === 0) && (high32(v) === 0)) {
1.190 + if ((low32(v) === 0) && (high32(v) === 0)) {
1.191 __handleDivByZero();
1.192 }
1.193
1.194 if (high32(u) === 0) {
1.195 if (high32(v) === 0) {
1.196 - var result = (u / v) | 0;
1.197 + var result = (low32(u) / low32(v)) | 0;
1.198 return negateResult ? neg64(result) : result;
1.199 }
1.200
1.201 return 0;
1.202 }
1.203
1.204 - var u64 = new __Int64(high32(u), u);
1.205 - var v64 = new __Int64(high32(v), v);
1.206 + var u64 = new __Int64(high32(u), low32(u));
1.207 + var v64 = new __Int64(high32(v), low32(v));
1.208 var q64 = new __Int64(0, 0);
1.209 var r64 = new __Int64(0, 0);
1.210
1.211 @@ -524,17 +529,17 @@
1.212 v = y;
1.213 }
1.214
1.215 - if ((v === 0) && (high32(v) === 0)) {
1.216 + if ((low32(v) === 0) && (high32(v) === 0)) {
1.217 __handleDivByZero();
1.218 }
1.219
1.220 if (high32(u) === 0) {
1.221 - var result = (high32(v) === 0) ? (u % v) : u;
1.222 + var result = (high32(v) === 0) ? (low32(u) % low32(v)) : low32(u);
1.223 return negateResult ? neg64(result) : result;
1.224 }
1.225
1.226 - var u64 = new __Int64(high32(u), u);
1.227 - var v64 = new __Int64(high32(v), v);
1.228 + var u64 = new __Int64(high32(u), low32(u));
1.229 + var v64 = new __Int64(high32(v), low32(v));
1.230 var q64 = new __Int64(0, 0);
1.231 var r64 = new __Int64(0, 0);
1.232