anchor.diff:      return false;
     }
   
  -  /// Check that [f1] is a subtype of [f2] for a member override.
  -  ///
  -  /// This is different from the normal function subtyping in two ways:
  -  /// - we know the function types are strict arrows,
  -  /// - it allows opt-in covariant parameters.
  -  bool isOverrideSubtypeOf(FunctionType f1, FunctionType f2);
  -
     @override
     bool isPotentiallyNonNullable(DartType type) => !isNullable(type);
   
  
positive.code:    */
    DartType normalize(DartType T) {
      return NormalizeHelper(this).normalize(T);
    }
  
    /// Return `true` if runtime types [T1] and [T2] are equal.
    ///
    /// nnbd/feature-specification.md#runtime-type-equality-operator
    bool runtimeTypesEqual(DartType T1, DartType T2) {
      return RuntimeTypeEqualityHelper(this).equal(T1, T2);
    }
  
    @override
  
negative.code:     }
      return super
          .refineBinaryExpressionType(leftType, operator, rightType, currentType);
    }
  
    /// Return `true` if runtime types [T1] and [T2] are equal.
    ///
    /// nnbd/feature-specification.md#runtime-type-equality-operator
    bool runtimeTypesEqual(DartType T1, DartType T2) {
      return RuntimeTypeEqualityHelper(this).equal(T1, T2);
    }
  
    DartType toLegacyType(DartType type) {
  