| Index: sdk/lib/_internal/compiler/implementation/lib/js_number.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
|
| index e8e57508c6e0d89c03385691bcbea9629118b4b9..c9f9dbfab2fe5e3caf39461b2d186381a5366580 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
|
| @@ -50,8 +50,8 @@ class JSNumber {
|
| num abs() => JS('num', r'Math.abs(#)', this);
|
|
|
| int toInt() {
|
| - if (isNaN) throw new FormatException('NaN');
|
| - if (isInfinite) throw new FormatException('Infinity');
|
| + if (isNaN) throw new UnsupportedError('NaN');
|
| + if (isInfinite) throw new UnsupportedError('Infinity');
|
| num truncated = truncate();
|
| return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
|
| }
|
| @@ -73,21 +73,40 @@ class JSNumber {
|
| }
|
| }
|
|
|
| + num clamp(lowerLimit, upperLimit) {
|
| + if (lowerLimit is! num) throw new ArgumentError(lowerLimit);
|
| + if (upperLimit is! num) throw new ArgumentError(upperLimit);
|
| + if (lowerLimit.compareTo(upperLimit) > 0) {
|
| + throw new ArgumentError(lowerLimit);
|
| + }
|
| + if (this.compareTo(lowerLimit) < 0) return lowerLimit;
|
| + if (this.compareTo(upperLimit) > 0) return upperLimit;
|
| + return this;
|
| + }
|
| +
|
| double toDouble() => this;
|
|
|
| num truncate() => this < 0 ? ceil() : floor();
|
|
|
| String toStringAsFixed(int fractionDigits) {
|
| checkNum(fractionDigits);
|
| + // TODO(floitsch): fractionDigits must be an integer.
|
| + if (fractionDigits < 0 || fractionDigits > 20) {
|
| + throw new RangeError(fractionDigits);
|
| + }
|
| String result = JS('String', r'#.toFixed(#)', this, fractionDigits);
|
| if (this == 0 && isNegative) return "-$result";
|
| return result;
|
| }
|
|
|
| - String toStringAsExponential(int fractionDigits) {
|
| + String toStringAsExponential([int fractionDigits]) {
|
| String result;
|
| if (fractionDigits != null) {
|
| + // TODO(floitsch): fractionDigits must be an integer.
|
| checkNum(fractionDigits);
|
| + if (fractionDigits < 0 || fractionDigits > 20) {
|
| + throw new RangeError(fractionDigits);
|
| + }
|
| result = JS('String', r'#.toExponential(#)', this, fractionDigits);
|
| } else {
|
| result = JS('String', r'#.toExponential()', this);
|
| @@ -96,17 +115,21 @@ class JSNumber {
|
| return result;
|
| }
|
|
|
| - String toStringAsPrecision(int fractionDigits) {
|
| - checkNum(fractionDigits);
|
| + String toStringAsPrecision(int precision) {
|
| + // TODO(floitsch): precision must be an integer.
|
| + checkNum(precision);
|
| + if (precision < 1 || precision > 21) {
|
| + throw new RangeError(precision);
|
| + }
|
| String result = JS('String', r'#.toPrecision(#)',
|
| - this, fractionDigits);
|
| + this, precision);
|
| if (this == 0 && isNegative) return "-$result";
|
| return result;
|
| }
|
|
|
| String toRadixString(int radix) {
|
| checkNum(radix);
|
| - if (radix < 2 || radix > 36) throw new ArgumentError(radix);
|
| + if (radix < 2 || radix > 36) throw new RangeError(radix);
|
| return JS('String', r'#.toString(#)', this, radix);
|
| }
|
|
|
|
|