Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1133)

Unified Diff: sdk/lib/_internal/js_runtime/lib/js_number.dart

Issue 1209523002: Make modInv throw Exception on incompatible operands. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Merge to head, make tests run. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/integers.dart ('k') | sdk/lib/core/exceptions.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/js_runtime/lib/js_number.dart
diff --git a/sdk/lib/_internal/js_runtime/lib/js_number.dart b/sdk/lib/_internal/js_runtime/lib/js_number.dart
index b340247a59fa3f338ba2c5bc115c51b4574db8df..fc8b21443007d641ef885d3dbb86d2c7cff2be15 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_number.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_number.dart
@@ -132,7 +132,7 @@ class JSNumber extends Interceptor implements num {
String toStringAsFixed(int fractionDigits) {
checkInt(fractionDigits);
if (fractionDigits < 0 || fractionDigits > 20) {
- throw new RangeError(fractionDigits);
+ throw new RangeError.range(fractionDigits, 0, 20, "fractionDigits");
}
String result = JS('String', r'#.toFixed(#)', this, fractionDigits);
if (this == 0 && isNegative) return "-$result";
@@ -144,7 +144,7 @@ class JSNumber extends Interceptor implements num {
if (fractionDigits != null) {
checkInt(fractionDigits);
if (fractionDigits < 0 || fractionDigits > 20) {
- throw new RangeError(fractionDigits);
+ throw new RangeError.range(fractionDigits, 0, 20, "fractionDigits");
}
result = JS('String', r'#.toExponential(#)', this, fractionDigits);
} else {
@@ -157,7 +157,7 @@ class JSNumber extends Interceptor implements num {
String toStringAsPrecision(int precision) {
checkInt(precision);
if (precision < 1 || precision > 21) {
- throw new RangeError(precision);
+ throw new RangeError.range(precision, 1, 21, "precision");
}
String result = JS('String', r'#.toPrecision(#)',
this, precision);
@@ -390,10 +390,14 @@ class JSInt extends JSNumber implements int, double {
// Returns pow(this, e) % m.
int modPow(int e, int m) {
- if (e is! int) throw argumentErrorValue(e);
- if (m is! int) throw argumentErrorValue(m);
- if (e < 0) throw new RangeError(e);
- if (m <= 0) throw new RangeError(m);
+ if (e is! int) {
+ throw new ArgumentError.value(e, "exponent", "not an integer");
+ }
+ if (m is! int) {
+ throw new ArgumentError.value(m, "modulus", "not an integer");
+ }
+ if (e < 0) throw new RangeError.range(e, 0, null, "exponent");
+ if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
if (e == 0) return 1;
int b = this;
if (b < 0 || b > m) {
@@ -412,7 +416,7 @@ class JSInt extends JSNumber implements int, double {
// If inv is false, returns gcd(x, y).
// If inv is true and gcd(x, y) = 1, returns d, so that c*x + d*y = 1.
- // If inv is true and gcd(x, y) != 1, throws RangeError("Not coprime").
+ // If inv is true and gcd(x, y) != 1, throws Exception("Not coprime").
static int _binaryGcd(int x, int y, bool inv) {
int s = 1;
if (!inv) {
@@ -472,7 +476,7 @@ class JSInt extends JSNumber implements int, double {
}
} while (u != 0);
if (!inv) return s*v;
- if (v != 1) throw new RangeError("Not coprime");
+ if (v != 1) throw new Exception("Not coprime");
if (d < 0) {
d += x;
if (d < 0) d += x;
@@ -485,20 +489,31 @@ class JSInt extends JSNumber implements int, double {
// Returns 1/this % m, with m > 0.
int modInverse(int m) {
- if (m is! int) throw new ArgumentError(m);
- if (m <= 0) throw new RangeError(m);
+ if (m is! int) {
+ throw new ArgumentError.value(m, "modulus", "not an integer");
+ }
+ if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
if (m == 1) return 0;
int t = this;
if ((t < 0) || (t >= m)) t %= m;
if (t == 1) return 1;
- if ((t == 0) || (t.isEven && m.isEven)) throw new RangeError("Not coprime");
+ if ((t == 0) || (t.isEven && m.isEven)) {
+ throw new Exception("Not coprime");
+ }
return _binaryGcd(m, t, true);
}
// Returns gcd of abs(this) and abs(other), with this != 0 and other !=0.
int gcd(int other) {
- if (other is! int) throw new ArgumentError(other);
- if ((this == 0) || (other == 0)) throw new RangeError(0);
+ if (other is! int) {
+ throw new ArgumentError.value(other, "other", "not an integer");
+ }
+ if (this == 0) {
+ throw new ArgumentError.value(this, "first operand", "must not be zero");
regis 2015/06/30 16:56:54 'this'
+ }
+ if (other == 0) {
+ throw new ArgumentError.value(this, "second operand", "must not be zero");
regis 2015/06/30 16:56:53 'other'
+ }
int x = this.abs();
int y = other.abs();
if ((x == 1) || (y == 1)) return 1;
« no previous file with comments | « runtime/lib/integers.dart ('k') | sdk/lib/core/exceptions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698