anchor.diff:    /// wrapping this type in `Stream` or `Iterator`, as appropriate.
     DartType _inferredUnwrappedReturnOrYieldType;
   
  -  factory ClosureContext(
  -      TypeInferrerImpl inferrer,
  -      AsyncMarker asyncMarker,
  -      DartType returnContext,
  -      bool needToInferReturnType,
  -      bool needImplicitDowncasts) {
  +  factory ClosureContext(TypeInferrerImpl inferrer, AsyncMarker asyncMarker,
  +      DartType returnContext, bool needToInferReturnType) {
  +    assert(returnContext != null);
       DartType declaredReturnType = returnContext;
       bool isAsync = asyncMarker == AsyncMarker.Async ||
           asyncMarker == AsyncMarker.AsyncStar;
  
positive.code:     // to `xi` in `B` having type `Pi`.  This produces `B’`.
      bool needToSetReturnType = hasImplicitReturnType && strongMode;
      ClosureContext oldClosureContext = this.closureContext;
      bool needImplicitDowncasts = returnContext != null;
      ClosureContext closureContext = new ClosureContext(
          this,
          function.asyncMarker,
          returnContext,
          needToSetReturnType,
          needImplicitDowncasts);
      this.closureContext = closureContext;
      inferStatement(function.body);
  
  
negative.code:           inferrer.typeSchemaEnvironment.unfutureType(returnContext));
      }
      return new ClosureContext._(isAsync, isGenerator, returnContext,
          declaredReturnType, needToInferReturnType);
    }
  
    ClosureContext._(this.isAsync, this.isGenerator, this.returnOrYieldContext,
        this.declaredReturnType, this._needToInferReturnType) {}
  
    /// Updates the inferred return type based on the presence of a return
    /// statement returning the given [type].
  