| 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 extends _Num { | 7 class _IntegerImplementation extends _Num { |
| 8 // The Dart class _Bigint extending _IntegerImplementation requires a | 8 // The Dart class _Bigint extending _IntegerImplementation requires a |
| 9 // default constructor. | 9 // default constructor. |
| 10 | 10 |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 var mask = radix - 1; | 258 var mask = radix - 1; |
| 259 do { | 259 do { |
| 260 string._setAt(--length, _digits.codeUnitAt(value & mask)); | 260 string._setAt(--length, _digits.codeUnitAt(value & mask)); |
| 261 value >>= bitsPerDigit; | 261 value >>= bitsPerDigit; |
| 262 } while (value > 0); | 262 } while (value > 0); |
| 263 return string; | 263 return string; |
| 264 } | 264 } |
| 265 | 265 |
| 266 _leftShiftWithMask32(count, mask) native "Integer_leftShiftWithMask32"; | 266 _leftShiftWithMask32(count, mask) native "Integer_leftShiftWithMask32"; |
| 267 | 267 |
| 268 // TODO(regis): Make this method private once the plumbing to invoke it from | |
| 269 // dart:math is in place. Move the argument checking to dart:math. | |
| 270 // Return pow(this, e) % m. | 268 // Return pow(this, e) % m. |
| 271 int modPow(int e, int m) { | 269 int modPow(int e, int m) { |
| 272 if (e is! int) throw new ArgumentError(e); | 270 if (e is! int || e < 0) throw new ArgumentError(e); |
| 273 if (m is! int) throw new ArgumentError(m); | 271 if (m is! int || m <= 0) throw new ArgumentError(m); |
| 274 if (e is _Bigint || m is _Bigint) { | 272 if (e is _Bigint || m is _Bigint) { |
| 275 return _toBigint().modPow(e, m); | 273 return _toBigint().modPow(e, m); |
| 276 } | 274 } |
| 277 if (e < 1) return 1; | 275 if (e < 1) return 1; |
| 278 int b = this; | 276 int b = this; |
| 279 if (b < 0 || b > m) { | 277 if (b < 0 || b > m) { |
| 280 b = b % m; | 278 b = b % m; |
| 281 } | 279 } |
| 282 int r = 1; | 280 int r = 1; |
| 283 while (e > 0) { | 281 while (e > 0) { |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 // Shift by mint exceeds range that can be handled by the VM. | 501 // Shift by mint exceeds range that can be handled by the VM. |
| 504 int _shrFromInt(int other) { | 502 int _shrFromInt(int other) { |
| 505 if (other < 0) { | 503 if (other < 0) { |
| 506 return -1; | 504 return -1; |
| 507 } else { | 505 } else { |
| 508 return 0; | 506 return 0; |
| 509 } | 507 } |
| 510 } | 508 } |
| 511 int _shlFromInt(int other) native "Mint_shlFromInt"; | 509 int _shlFromInt(int other) native "Mint_shlFromInt"; |
| 512 } | 510 } |
| OLD | NEW |