anchor.diff:      return _onError != null;
     }
   
  -  dynamic/*T|Future<T>*/ handleValue(S sourceResult) {
  -    return _zone.runUnary<dynamic/*T|Future<T>*/, S>(
  +  FutureOr<T> handleValue(S sourceResult) {
  +    return _zone.runUnary<FutureOr<T>, S>(
           _onValue, sourceResult);
     }
   
  
positive.code:     return _zone.runUnary<bool, dynamic>(_errorTest, asyncError.error);
    }
  
    dynamic/*T|Future<T>*/ handleError(AsyncError asyncError) {
      assert(handlesError && hasErrorCallback);
      if (errorCallback is ZoneBinaryCallback) {
        var typedErrorCallback = errorCallback as Object
            /*=ZoneBinaryCallback<Object/*T|Future<T>*/, Object, StackTrace>*/;
        return _zone.runBinary(typedErrorCallback,
            asyncError.error,
            asyncError.stackTrace);
      } else {
        return _zone.runUnary<dynamic/*T|Future<T>*/, dynamic>(
            errorCallback, asyncError.error);
      }
    }
  
negative.code: part of dart.async;
  
  /** The onValue and onError handlers return either a value or a future */
  typedef FutureOr<T> _FutureOnValue<S, T>(S value);
  /** Test used by [Future.catchError] to handle skip some errors. */
  typedef bool _FutureErrorTest(var error);
  /** Used by [WhenFuture]. */
  