anchor.diff:      assert(source is _Future);
   
       // Mark the target as chained (and as such half-completed).
  -    target._isChained = true;
  +    target._setChained();
       _FutureListener listener = new _FutureListener.chain(target);
       if (source._isComplete) {
         _propagateToListeners(source, listener);
  
positive.code:     _asyncCompleteError(error, stackTrace);
    }
  
    bool get _mayComplete => _state == _INCOMPLETE;
    bool get _isChained => _state == _CHAINED;
    bool get _isComplete => _state >= _VALUE;
    bool get _hasValue => _state == _VALUE;
    bool get _hasError => _state == _ERROR;
  
    set _isChained(bool value) {
      if (value) {
        assert(!_isComplete);
        _state = _CHAINED;
      } else {
        assert(_isChained);
        _state = _INCOMPLETE;
      }
    }
  
    Future then(f(T value), { Function onError }) {
  
negative.code:       }
        _Future result = listener.result;
        listeners = result._removeListeners();
        if (!listenerHasError) {
          result._setValue(listenerValueOrError);
        } else {
          AsyncError asyncError = listenerValueOrError;
  