| Index: runtime/lib/integers_patch.dart
 | 
| diff --git a/runtime/lib/integers_patch.dart b/runtime/lib/integers_patch.dart
 | 
| index fb749d752185b8fe865c559c3e9b0ab923d0a1e6..fab603f03eca71b21c3b7fe088aeb40adcaa6f9e 100644
 | 
| --- a/runtime/lib/integers_patch.dart
 | 
| +++ b/runtime/lib/integers_patch.dart
 | 
| @@ -74,20 +74,21 @@ patch class int {
 | 
|    /* patch */ static int parse(String source,
 | 
|                                 { int radix,
 | 
|                                   int onError(String str) }) {
 | 
| -    if ((radix == null) && (onError == null)) return _parse(source);
 | 
| +    if (radix == null) {
 | 
| +      int result = _parse(source);
 | 
| +      if (result == null) {
 | 
| +        if (onError == null) {
 | 
| +          throw new FormatException(source);
 | 
| +        }
 | 
| +        return onError(source);
 | 
| +      }
 | 
| +      return result;
 | 
| +    }
 | 
|      return _slowParse(source, radix, onError);
 | 
|    }
 | 
|  
 | 
|    static int _slowParse(String source, int radix, int onError(String str)) {
 | 
|      if (source is! String) throw new ArgumentError(source);
 | 
| -    if (radix == null) {
 | 
| -      assert(onError != null);
 | 
| -      try {
 | 
| -        return _parse(source);
 | 
| -      } on FormatException {
 | 
| -        return onError(source);
 | 
| -      }
 | 
| -    }
 | 
|      if (radix is! int) throw new ArgumentError("Radix is not an integer");
 | 
|      if (radix < 2 || radix > 36) {
 | 
|        throw new RangeError("Radix $radix not in range 2..36");
 | 
| 
 |