anchor.diff:            _Future result = listener.result;
             if (chainSource is _Future) {
               if (chainSource._isComplete) {
  -              // propagate the value (simulating a tail call).
  -              result._setChained();
  +              listeners = result._removeListeners();
  +              result._cloneResult(chainSource);
                 source = chainSource;
  -              listeners = new _FutureListener.chain(result);
                 continue;
               } else {
                 _chainCoreFuture(chainSource, result);
  
positive.code:   void _asyncCompleteError(error, StackTrace stackTrace) {
      assert(!_isComplete);
  
      _markPendingCompletion();
      _zone.scheduleMicrotask(() {
        _completeError(error, stackTrace);
      });
  
negative.code:   // Take the value (when completed) of source and complete target with that
    // value (or error). This function expects that source is a _Future.
    static void _chainCoreFuture(_Future source, _Future target) {
      assert(target._mayAddListener);  // Not completed, not already chained.
      while (source._isChained) {
        source = source._chainSource;
      }
      if (source._isComplete) {
        _FutureListener listeners = target._removeListeners();
        target._cloneResult(source);
        _propagateToListeners(target, listeners);
      } else {
        _FutureListener listeners = target._resultOrListeners;
        target._setChained(source);
        source._prependListeners(listeners);
      }
    }
  
  