OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // TODO(srdjan): fix limitations. | 5 // TODO(srdjan): fix limitations. |
6 // - shift amount must be a Smi. | 6 // - shift amount must be a Smi. |
7 class _IntegerImplementation { | 7 class _IntegerImplementation { |
8 factory _IntegerImplementation._uninstantiable() { | 8 factory _IntegerImplementation._uninstantiable() { |
9 throw new UnsupportedError( | 9 throw new UnsupportedError( |
10 "_IntegerImplementation can only be allocated by the VM"); | 10 "_IntegerImplementation can only be allocated by the VM"); |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 } | 215 } |
216 | 216 |
217 _leftShiftWithMask32(count, mask) native "Integer_leftShiftWithMask32"; | 217 _leftShiftWithMask32(count, mask) native "Integer_leftShiftWithMask32"; |
218 } | 218 } |
219 | 219 |
220 class _Smi extends _IntegerImplementation implements int { | 220 class _Smi extends _IntegerImplementation implements int { |
221 factory _Smi._uninstantiable() { | 221 factory _Smi._uninstantiable() { |
222 throw new UnsupportedError( | 222 throw new UnsupportedError( |
223 "_Smi can only be allocated by the VM"); | 223 "_Smi can only be allocated by the VM"); |
224 } | 224 } |
225 int get hashCode { | 225 int get _identityHashCode { |
226 return this; | 226 return this; |
227 } | 227 } |
228 int operator ~() native "Smi_bitNegate"; | 228 int operator ~() native "Smi_bitNegate"; |
229 int get bitLength native "Smi_bitLength"; | 229 int get bitLength native "Smi_bitLength"; |
230 | 230 |
231 int _shrFromInt(int other) native "Smi_shrFromInt"; | 231 int _shrFromInt(int other) native "Smi_shrFromInt"; |
232 int _shlFromInt(int other) native "Smi_shlFromInt"; | 232 int _shlFromInt(int other) native "Smi_shlFromInt"; |
233 | 233 |
234 String toString() { | 234 String toString() { |
235 if (this == 0) return "0"; | 235 if (this == 0) return "0"; |
(...skipping 28 matching lines...) Expand all Loading... |
264 | 264 |
265 // Reusable buffer used by smi.toString. | 265 // Reusable buffer used by smi.toString. |
266 List _toStringBuffer = new Uint8List(20); | 266 List _toStringBuffer = new Uint8List(20); |
267 | 267 |
268 // Represents integers that cannot be represented by Smi but fit into 64bits. | 268 // Represents integers that cannot be represented by Smi but fit into 64bits. |
269 class _Mint extends _IntegerImplementation implements int { | 269 class _Mint extends _IntegerImplementation implements int { |
270 factory _Mint._uninstantiable() { | 270 factory _Mint._uninstantiable() { |
271 throw new UnsupportedError( | 271 throw new UnsupportedError( |
272 "_Mint can only be allocated by the VM"); | 272 "_Mint can only be allocated by the VM"); |
273 } | 273 } |
274 int get hashCode { | 274 int get _identityHashCode { |
275 return this; | 275 return this; |
276 } | 276 } |
277 int operator ~() native "Mint_bitNegate"; | 277 int operator ~() native "Mint_bitNegate"; |
278 int get bitLength native "Mint_bitLength"; | 278 int get bitLength native "Mint_bitLength"; |
279 | 279 |
280 // Shift by mint exceeds range that can be handled by the VM. | 280 // Shift by mint exceeds range that can be handled by the VM. |
281 int _shrFromInt(int other) { | 281 int _shrFromInt(int other) { |
282 if (other < 0) { | 282 if (other < 0) { |
283 return -1; | 283 return -1; |
284 } else { | 284 } else { |
285 return 0; | 285 return 0; |
286 } | 286 } |
287 } | 287 } |
288 int _shlFromInt(int other) native "Mint_shlFromInt"; | 288 int _shlFromInt(int other) native "Mint_shlFromInt"; |
289 } | 289 } |
290 | 290 |
291 // A number that can be represented as Smi or Mint will never be represented as | 291 // A number that can be represented as Smi or Mint will never be represented as |
292 // Bigint. | 292 // Bigint. |
293 class _Bigint extends _IntegerImplementation implements int { | 293 class _Bigint extends _IntegerImplementation implements int { |
294 factory _Bigint._uninstantiable() { | 294 factory _Bigint._uninstantiable() { |
295 throw new UnsupportedError( | 295 throw new UnsupportedError( |
296 "_Bigint can only be allocated by the VM"); | 296 "_Bigint can only be allocated by the VM"); |
297 } | 297 } |
298 int get hashCode { | 298 int get _identityHashCode { |
299 return this; | 299 return this; |
300 } | 300 } |
301 int operator ~() native "Bigint_bitNegate"; | 301 int operator ~() native "Bigint_bitNegate"; |
302 int get bitLength native "Bigint_bitLength"; | 302 int get bitLength native "Bigint_bitLength"; |
303 | 303 |
304 // Shift by bigint exceeds range that can be handled by the VM. | 304 // Shift by bigint exceeds range that can be handled by the VM. |
305 int _shrFromInt(int other) { | 305 int _shrFromInt(int other) { |
306 if (other < 0) { | 306 if (other < 0) { |
307 return -1; | 307 return -1; |
308 } else { | 308 } else { |
309 return 0; | 309 return 0; |
310 } | 310 } |
311 } | 311 } |
312 int _shlFromInt(int other) native "Bigint_shlFromInt"; | 312 int _shlFromInt(int other) native "Bigint_shlFromInt"; |
313 | 313 |
314 int pow(int exponent) { | 314 int pow(int exponent) { |
315 throw "Bigint.pow not implemented"; | 315 throw "Bigint.pow not implemented"; |
316 } | 316 } |
317 } | 317 } |
OLD | NEW |