anchor.diff:      // no constraints.
       if (_isTop(supertype)) return true;
       // `Null` is a subtype match for any type `Q` under no constraints.
  +    // Note that nullable types will change this.
       if (_isNull(subtype)) return true;
       // `FutureOr<P>` is a subtype match for `FutureOr<Q>` with respect to `L`
       // under constraints `C`:
  
positive.code:     return true;
    }
  
    bool _isNull(DartType type) =>
        type is InterfaceType &&
        identical(type.classNode, environment.coreTypes.nullClass);
  
    bool _isTop(DartType type) =>
        type is DynamicType ||
  
negative.code:   }
  }
  
  /// Tracks a single constraint on a single type variable.
  ///
  /// This is called "_ProtoConstraint" to distinglish from [Constraint], which
  /// tracks the upper and lower bounds that are together implied by a set of
  /// [_ProtoConstraint]s.
  class _ProtoConstraint {
    final TypeParameter parameter;
  
  