| Index: sdk/lib/core/num.dart
|
| diff --git a/sdk/lib/core/num.dart b/sdk/lib/core/num.dart
|
| index 674ab2a469f22d96f265a20fdece0016e3bc52a7..c6bb4f85288833b2f71cf606633eb773d0d1b702 100644
|
| --- a/sdk/lib/core/num.dart
|
| +++ b/sdk/lib/core/num.dart
|
| @@ -359,4 +359,33 @@ abstract class num implements Comparable<num> {
|
| *
|
| */
|
| String toString();
|
| +
|
| + /**
|
| + * Parses a string containing a number literal into a number.
|
| + *
|
| + * The method first tries to read the [input] as integer (similar to
|
| + * [int.parse] without a radix).
|
| + * If that fails, it tries to parse the [input] as a double (similar to
|
| + * [double.parse]).
|
| + * If that fails, too, it invokes [onError] with [input].
|
| + *
|
| + * If no [onError] is supplied, it defaults to a function that throws a
|
| + * [FormatException].
|
| + *
|
| + * For any number `n`, this function satisfies
|
| + * `identical(n, num.parse(n.toString()))`.
|
| + */
|
| + static num parse(String input, [num onError(String input)]) {
|
| + String source = input.trim();
|
| + // TODO(lrn): Optimize to detect format and result type in one check.
|
| + num result = int.parse(source, onError: _returnNull);
|
| + if (result != null) return result;
|
| + result = double.parse(source, _returnNull);
|
| + if (result != null) return result;
|
| + if (onError == null) throw new FormatException(input);
|
| + return onError(input);
|
| + }
|
| +
|
| + /** Helper function for [parse]. */
|
| + static _returnNull(_) => null;
|
| }
|
|
|