Fix for covariant

We've been silently failing to rebuild the SDK since covariant was added.
Looking at making SDK build break fail the presubmit!

TBR=leafp@google.com,jacobr@google.com

Review-Url: https://codereview.chromium.org/2648863002 .
This commit is contained in:
Vijay Menon 2017-01-20 15:20:44 -08:00
parent c40ec27266
commit a7f7a311c0
7 changed files with 92 additions and 91 deletions

View file

@ -1510,12 +1510,12 @@ define([], function() {
dart.isFunctionType = function(type) {
return type instanceof dart.AbstractFunctionType || type === core.Function;
};
dart.isLazyJSSubtype = function(t1, t2, covariant) {
dart.isLazyJSSubtype = function(t1, t2, isCovariant) {
if (dart.equals(t1, t2)) return true;
if (t1[_jsTypeCallback] == null || t2[_jsTypeCallback] == null) return true;
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], covariant);
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], isCovariant);
};
dart.isFunctionSubtype = function(ft1, ft2, covariant) {
dart.isFunctionSubtype = function(ft1, ft2, isCovariant) {
if (ft2 === core.Function) {
return true;
}
@ -1527,26 +1527,26 @@ define([], function() {
let args1 = ft1.args;
let args2 = ft2.args;
if (args1.length > args2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
for (let i = 0; i < args1.length; ++i) {
if (!dart._isSubtype(args2[i], args1[i], !covariant)) {
if (!dart._isSubtype(args2[i], args1[i], !isCovariant)) {
return null;
}
}
let optionals1 = ft1.optionals;
let optionals2 = ft2.optionals;
if (args1.length + optionals1.length < args2.length + optionals2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
let j = 0;
for (let i = args1.length; i < args2.length; ++i, ++j) {
if (!dart._isSubtype(args2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(args2[i], optionals1[j], !isCovariant)) {
return null;
}
}
for (let i = 0; i < optionals2.length; ++i, ++j) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !isCovariant)) {
return null;
}
}
@ -1558,15 +1558,15 @@ define([], function() {
let n1 = named1[name];
let n2 = named2[name];
if (n1 === void 0) {
return covariant ? false : null;
return isCovariant ? false : null;
}
if (!dart._isSubtype(n2, n1, !covariant)) {
if (!dart._isSubtype(n2, n1, !isCovariant)) {
return null;
}
}
if (ret2 === dart.void) return true;
if (ret1 === dart.void) return ret2 === dart.dynamic;
if (!dart._isSubtype(ret1, ret2, covariant)) return null;
if (!dart._isSubtype(ret1, ret2, isCovariant)) return null;
return true;
};
dart._subtypeMemo = function(f) {
@ -1591,7 +1591,7 @@ define([], function() {
dart._isTop = function(type) {
return type == core.Object || type == dart.dynamic;
};
dart._isSubtype = function(t1, t2, covariant) {
dart._isSubtype = function(t1, t2, isCovariant) {
if (t1 === t2) return true;
if (dart._isTop(t2) || dart._isBottom(t1)) {
return true;
@ -1602,20 +1602,20 @@ define([], function() {
return false;
}
if (!(t1 instanceof dart.AbstractFunctionType) && !(t2 instanceof dart.AbstractFunctionType)) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result === true || result === null) return result;
}
t1 = dart.getImplicitFunctionType(t1);
if (!t1) return false;
if (dart.isFunctionType(t1) && dart.isFunctionType(t2)) {
return dart.isFunctionSubtype(t1, t2, covariant);
return dart.isFunctionSubtype(t1, t2, isCovariant);
}
if (t1 instanceof dart.LazyJSType && t2 instanceof dart.LazyJSType) {
return dart.isLazyJSSubtype(t1, t2, covariant);
return dart.isLazyJSSubtype(t1, t2, isCovariant);
}
return false;
};
dart.isClassSubType = function(t1, t2, covariant) {
dart.isClassSubType = function(t1, t2, isCovariant) {
if (t1 == t2) return true;
if (t1 == core.Object) return false;
if (t1 == null) return t2 == core.Object || t2 == dart.dynamic;
@ -1633,7 +1633,7 @@ define([], function() {
}
dart.assert(length == typeArguments2.length);
for (let i = 0; i < length; ++i) {
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], covariant);
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], isCovariant);
if (!result) {
return result;
}
@ -1642,7 +1642,7 @@ define([], function() {
}
let indefinite = false;
function definitive(t1, t2) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result == null) {
indefinite = true;
return false;

View file

@ -1510,12 +1510,12 @@
dart.isFunctionType = function(type) {
return type instanceof dart.AbstractFunctionType || type === core.Function;
};
dart.isLazyJSSubtype = function(t1, t2, covariant) {
dart.isLazyJSSubtype = function(t1, t2, isCovariant) {
if (dart.equals(t1, t2)) return true;
if (t1[_jsTypeCallback] == null || t2[_jsTypeCallback] == null) return true;
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], covariant);
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], isCovariant);
};
dart.isFunctionSubtype = function(ft1, ft2, covariant) {
dart.isFunctionSubtype = function(ft1, ft2, isCovariant) {
if (ft2 === core.Function) {
return true;
}
@ -1527,26 +1527,26 @@
let args1 = ft1.args;
let args2 = ft2.args;
if (args1.length > args2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
for (let i = 0; i < args1.length; ++i) {
if (!dart._isSubtype(args2[i], args1[i], !covariant)) {
if (!dart._isSubtype(args2[i], args1[i], !isCovariant)) {
return null;
}
}
let optionals1 = ft1.optionals;
let optionals2 = ft2.optionals;
if (args1.length + optionals1.length < args2.length + optionals2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
let j = 0;
for (let i = args1.length; i < args2.length; ++i, ++j) {
if (!dart._isSubtype(args2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(args2[i], optionals1[j], !isCovariant)) {
return null;
}
}
for (let i = 0; i < optionals2.length; ++i, ++j) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !isCovariant)) {
return null;
}
}
@ -1558,15 +1558,15 @@
let n1 = named1[name];
let n2 = named2[name];
if (n1 === void 0) {
return covariant ? false : null;
return isCovariant ? false : null;
}
if (!dart._isSubtype(n2, n1, !covariant)) {
if (!dart._isSubtype(n2, n1, !isCovariant)) {
return null;
}
}
if (ret2 === dart.void) return true;
if (ret1 === dart.void) return ret2 === dart.dynamic;
if (!dart._isSubtype(ret1, ret2, covariant)) return null;
if (!dart._isSubtype(ret1, ret2, isCovariant)) return null;
return true;
};
dart._subtypeMemo = function(f) {
@ -1591,7 +1591,7 @@
dart._isTop = function(type) {
return type == core.Object || type == dart.dynamic;
};
dart._isSubtype = function(t1, t2, covariant) {
dart._isSubtype = function(t1, t2, isCovariant) {
if (t1 === t2) return true;
if (dart._isTop(t2) || dart._isBottom(t1)) {
return true;
@ -1602,20 +1602,20 @@
return false;
}
if (!(t1 instanceof dart.AbstractFunctionType) && !(t2 instanceof dart.AbstractFunctionType)) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result === true || result === null) return result;
}
t1 = dart.getImplicitFunctionType(t1);
if (!t1) return false;
if (dart.isFunctionType(t1) && dart.isFunctionType(t2)) {
return dart.isFunctionSubtype(t1, t2, covariant);
return dart.isFunctionSubtype(t1, t2, isCovariant);
}
if (t1 instanceof dart.LazyJSType && t2 instanceof dart.LazyJSType) {
return dart.isLazyJSSubtype(t1, t2, covariant);
return dart.isLazyJSSubtype(t1, t2, isCovariant);
}
return false;
};
dart.isClassSubType = function(t1, t2, covariant) {
dart.isClassSubType = function(t1, t2, isCovariant) {
if (t1 == t2) return true;
if (t1 == core.Object) return false;
if (t1 == null) return t2 == core.Object || t2 == dart.dynamic;
@ -1633,7 +1633,7 @@
}
dart.assert(length == typeArguments2.length);
for (let i = 0; i < length; ++i) {
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], covariant);
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], isCovariant);
if (!result) {
return result;
}
@ -1642,7 +1642,7 @@
}
let indefinite = false;
function definitive(t1, t2) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result == null) {
indefinite = true;
return false;

View file

@ -1508,12 +1508,12 @@ dart.getImplicitFunctionType = function(type) {
dart.isFunctionType = function(type) {
return type instanceof dart.AbstractFunctionType || type === core.Function;
};
dart.isLazyJSSubtype = function(t1, t2, covariant) {
dart.isLazyJSSubtype = function(t1, t2, isCovariant) {
if (dart.equals(t1, t2)) return true;
if (t1[_jsTypeCallback] == null || t2[_jsTypeCallback] == null) return true;
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], covariant);
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], isCovariant);
};
dart.isFunctionSubtype = function(ft1, ft2, covariant) {
dart.isFunctionSubtype = function(ft1, ft2, isCovariant) {
if (ft2 === core.Function) {
return true;
}
@ -1525,26 +1525,26 @@ dart.isFunctionSubtype = function(ft1, ft2, covariant) {
let args1 = ft1.args;
let args2 = ft2.args;
if (args1.length > args2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
for (let i = 0; i < args1.length; ++i) {
if (!dart._isSubtype(args2[i], args1[i], !covariant)) {
if (!dart._isSubtype(args2[i], args1[i], !isCovariant)) {
return null;
}
}
let optionals1 = ft1.optionals;
let optionals2 = ft2.optionals;
if (args1.length + optionals1.length < args2.length + optionals2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
let j = 0;
for (let i = args1.length; i < args2.length; ++i, ++j) {
if (!dart._isSubtype(args2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(args2[i], optionals1[j], !isCovariant)) {
return null;
}
}
for (let i = 0; i < optionals2.length; ++i, ++j) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !isCovariant)) {
return null;
}
}
@ -1556,15 +1556,15 @@ dart.isFunctionSubtype = function(ft1, ft2, covariant) {
let n1 = named1[name];
let n2 = named2[name];
if (n1 === void 0) {
return covariant ? false : null;
return isCovariant ? false : null;
}
if (!dart._isSubtype(n2, n1, !covariant)) {
if (!dart._isSubtype(n2, n1, !isCovariant)) {
return null;
}
}
if (ret2 === dart.void) return true;
if (ret1 === dart.void) return ret2 === dart.dynamic;
if (!dart._isSubtype(ret1, ret2, covariant)) return null;
if (!dart._isSubtype(ret1, ret2, isCovariant)) return null;
return true;
};
dart._subtypeMemo = function(f) {
@ -1589,7 +1589,7 @@ dart._isBottom = function(type) {
dart._isTop = function(type) {
return type == core.Object || type == dart.dynamic;
};
dart._isSubtype = function(t1, t2, covariant) {
dart._isSubtype = function(t1, t2, isCovariant) {
if (t1 === t2) return true;
if (dart._isTop(t2) || dart._isBottom(t1)) {
return true;
@ -1600,20 +1600,20 @@ dart._isSubtype = function(t1, t2, covariant) {
return false;
}
if (!(t1 instanceof dart.AbstractFunctionType) && !(t2 instanceof dart.AbstractFunctionType)) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result === true || result === null) return result;
}
t1 = dart.getImplicitFunctionType(t1);
if (!t1) return false;
if (dart.isFunctionType(t1) && dart.isFunctionType(t2)) {
return dart.isFunctionSubtype(t1, t2, covariant);
return dart.isFunctionSubtype(t1, t2, isCovariant);
}
if (t1 instanceof dart.LazyJSType && t2 instanceof dart.LazyJSType) {
return dart.isLazyJSSubtype(t1, t2, covariant);
return dart.isLazyJSSubtype(t1, t2, isCovariant);
}
return false;
};
dart.isClassSubType = function(t1, t2, covariant) {
dart.isClassSubType = function(t1, t2, isCovariant) {
if (t1 == t2) return true;
if (t1 == core.Object) return false;
if (t1 == null) return t2 == core.Object || t2 == dart.dynamic;
@ -1631,7 +1631,7 @@ dart.isClassSubType = function(t1, t2, covariant) {
}
dart.assert(length == typeArguments2.length);
for (let i = 0; i < length; ++i) {
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], covariant);
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], isCovariant);
if (!result) {
return result;
}
@ -1640,7 +1640,7 @@ dart.isClassSubType = function(t1, t2, covariant) {
}
let indefinite = false;
function definitive(t1, t2) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result == null) {
indefinite = true;
return false;

View file

@ -1511,12 +1511,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.isFunctionType = function(type) {
return type instanceof dart.AbstractFunctionType || type === core.Function;
};
dart.isLazyJSSubtype = function(t1, t2, covariant) {
dart.isLazyJSSubtype = function(t1, t2, isCovariant) {
if (dart.equals(t1, t2)) return true;
if (t1[_jsTypeCallback] == null || t2[_jsTypeCallback] == null) return true;
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], covariant);
return dart.isClassSubType(t1[_rawJSType], t2[_rawJSType], isCovariant);
};
dart.isFunctionSubtype = function(ft1, ft2, covariant) {
dart.isFunctionSubtype = function(ft1, ft2, isCovariant) {
if (ft2 === core.Function) {
return true;
}
@ -1528,26 +1528,26 @@ dart_library.library('dart_sdk', null, /* Imports */[
let args1 = ft1.args;
let args2 = ft2.args;
if (args1.length > args2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
for (let i = 0; i < args1.length; ++i) {
if (!dart._isSubtype(args2[i], args1[i], !covariant)) {
if (!dart._isSubtype(args2[i], args1[i], !isCovariant)) {
return null;
}
}
let optionals1 = ft1.optionals;
let optionals2 = ft2.optionals;
if (args1.length + optionals1.length < args2.length + optionals2.length) {
return covariant ? false : null;
return isCovariant ? false : null;
}
let j = 0;
for (let i = args1.length; i < args2.length; ++i, ++j) {
if (!dart._isSubtype(args2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(args2[i], optionals1[j], !isCovariant)) {
return null;
}
}
for (let i = 0; i < optionals2.length; ++i, ++j) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !covariant)) {
if (!dart._isSubtype(optionals2[i], optionals1[j], !isCovariant)) {
return null;
}
}
@ -1559,15 +1559,15 @@ dart_library.library('dart_sdk', null, /* Imports */[
let n1 = named1[name];
let n2 = named2[name];
if (n1 === void 0) {
return covariant ? false : null;
return isCovariant ? false : null;
}
if (!dart._isSubtype(n2, n1, !covariant)) {
if (!dart._isSubtype(n2, n1, !isCovariant)) {
return null;
}
}
if (ret2 === dart.void) return true;
if (ret1 === dart.void) return ret2 === dart.dynamic;
if (!dart._isSubtype(ret1, ret2, covariant)) return null;
if (!dart._isSubtype(ret1, ret2, isCovariant)) return null;
return true;
};
dart._subtypeMemo = function(f) {
@ -1592,7 +1592,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart._isTop = function(type) {
return type == core.Object || type == dart.dynamic;
};
dart._isSubtype = function(t1, t2, covariant) {
dart._isSubtype = function(t1, t2, isCovariant) {
if (t1 === t2) return true;
if (dart._isTop(t2) || dart._isBottom(t1)) {
return true;
@ -1603,20 +1603,20 @@ dart_library.library('dart_sdk', null, /* Imports */[
return false;
}
if (!(t1 instanceof dart.AbstractFunctionType) && !(t2 instanceof dart.AbstractFunctionType)) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result === true || result === null) return result;
}
t1 = dart.getImplicitFunctionType(t1);
if (!t1) return false;
if (dart.isFunctionType(t1) && dart.isFunctionType(t2)) {
return dart.isFunctionSubtype(t1, t2, covariant);
return dart.isFunctionSubtype(t1, t2, isCovariant);
}
if (t1 instanceof dart.LazyJSType && t2 instanceof dart.LazyJSType) {
return dart.isLazyJSSubtype(t1, t2, covariant);
return dart.isLazyJSSubtype(t1, t2, isCovariant);
}
return false;
};
dart.isClassSubType = function(t1, t2, covariant) {
dart.isClassSubType = function(t1, t2, isCovariant) {
if (t1 == t2) return true;
if (t1 == core.Object) return false;
if (t1 == null) return t2 == core.Object || t2 == dart.dynamic;
@ -1634,7 +1634,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
dart.assert(length == typeArguments2.length);
for (let i = 0; i < length; ++i) {
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], covariant);
let result = dart._isSubtype(typeArguments1[i], typeArguments2[i], isCovariant);
if (!result) {
return result;
}
@ -1643,7 +1643,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
let indefinite = false;
function definitive(t1, t2) {
let result = dart.isClassSubType(t1, t2, covariant);
let result = dart.isClassSubType(t1, t2, isCovariant);
if (result == null) {
indefinite = true;
return false;

Binary file not shown.

View file

@ -560,22 +560,22 @@ getImplicitFunctionType(type) {
bool isFunctionType(type) => JS('bool', '# instanceof # || # === #', type,
AbstractFunctionType, type, Function);
isLazyJSSubtype(LazyJSType t1, LazyJSType t2, covariant) {
isLazyJSSubtype(LazyJSType t1, LazyJSType t2, isCovariant) {
if (t1 == t2) return true;
// All anonymous JS types are subtypes of each other.
if (t1._jsTypeCallback == null || t2._jsTypeCallback == null) return true;
return isClassSubType(t1._rawJSType, t2._rawJSType, covariant);
return isClassSubType(t1._rawJSType, t2._rawJSType, isCovariant);
}
/// Returns true if [ft1] <: [ft2].
/// Returns false if [ft1] </: [ft2] in both spec and strong mode
/// Returns null if [ft1] </: [ft2] in strong mode, but spec mode
/// may differ
/// If [covariant] is true, then we are checking subtyping in a covariant
/// If [isCovariant] is true, then we are checking subtyping in a covariant
/// position, and hence the direction of the check for function types
/// corresponds to the direction of the check according to the Dart spec.
isFunctionSubtype(ft1, ft2, covariant) => JS(
isFunctionSubtype(ft1, ft2, isCovariant) => JS(
'',
'''(() => {
if ($ft2 === $Function) {
@ -595,11 +595,11 @@ isFunctionSubtype(ft1, ft2, covariant) => JS(
if (args1.length > args2.length) {
// If we're in a covariant position, then Dart's arity rules
// agree with strong mode, otherwise we can't be sure.
return ($covariant) ? false : null;
return ($isCovariant) ? false : null;
}
for (let i = 0; i < args1.length; ++i) {
if (!$_isSubtype(args2[i], args1[i], !$covariant)) {
if (!$_isSubtype(args2[i], args1[i], !$isCovariant)) {
// Even if isSubtype returns false, assignability
// means that we can't be definitive
return null;
@ -610,18 +610,18 @@ isFunctionSubtype(ft1, ft2, covariant) => JS(
let optionals2 = $ft2.optionals;
if (args1.length + optionals1.length < args2.length + optionals2.length) {
return ($covariant) ? false : null;
return ($isCovariant) ? false : null;
}
let j = 0;
for (let i = args1.length; i < args2.length; ++i, ++j) {
if (!$_isSubtype(args2[i], optionals1[j], !$covariant)) {
if (!$_isSubtype(args2[i], optionals1[j], !$isCovariant)) {
return null;
}
}
for (let i = 0; i < optionals2.length; ++i, ++j) {
if (!$_isSubtype(optionals2[i], optionals1[j], !$covariant)) {
if (!$_isSubtype(optionals2[i], optionals1[j], !$isCovariant)) {
return null;
}
}
@ -635,9 +635,9 @@ isFunctionSubtype(ft1, ft2, covariant) => JS(
let n1 = named1[name];
let n2 = named2[name];
if (n1 === void 0) {
return ($covariant) ? false : null;
return ($isCovariant) ? false : null;
}
if (!$_isSubtype(n2, n1, !$covariant)) {
if (!$_isSubtype(n2, n1, !$isCovariant)) {
return null;
}
}
@ -650,7 +650,7 @@ isFunctionSubtype(ft1, ft2, covariant) => JS(
// Dart allows void functions to subtype dynamic functions, but not
// other functions.
if (ret1 === $_void) return (ret2 === $dynamic);
if (!$_isSubtype(ret1, ret2, $covariant)) return null;
if (!$_isSubtype(ret1, ret2, $isCovariant)) return null;
return true;
})()''');
@ -687,7 +687,7 @@ _isBottom(type) => JS('bool', '# == #', type, bottom);
_isTop(type) => JS('bool', '# == # || # == #', type, Object, type, dynamic);
_isSubtype(t1, t2, covariant) => JS(
_isSubtype(t1, t2, isCovariant) => JS(
'',
'''(() => {
if ($t1 === $t2) return true;
@ -709,7 +709,7 @@ _isSubtype(t1, t2, covariant) => JS(
// currently distinguish between generic typedefs and classes.
if (!($t1 instanceof $AbstractFunctionType) &&
!($t2 instanceof $AbstractFunctionType)) {
let result = $isClassSubType($t1, $t2, $covariant);
let result = $isClassSubType($t1, $t2, $isCovariant);
if (result === true || result === null) return result;
}
@ -721,17 +721,17 @@ _isSubtype(t1, t2, covariant) => JS(
if (!t1) return false;
if ($isFunctionType($t1) && $isFunctionType($t2)) {
return $isFunctionSubtype($t1, $t2, $covariant);
return $isFunctionSubtype($t1, $t2, $isCovariant);
}
if ($t1 instanceof $LazyJSType && $t2 instanceof $LazyJSType) {
return $isLazyJSSubtype($t1, $t2, $covariant);
return $isLazyJSSubtype($t1, $t2, $isCovariant);
}
return false;
})()''');
isClassSubType(t1, t2, covariant) => JS(
isClassSubType(t1, t2, isCovariant) => JS(
'',
'''(() => {
// We support Dart's covariant generics with the caveat that we do not
@ -765,7 +765,7 @@ isClassSubType(t1, t2, covariant) => JS(
$assert_(length == typeArguments2.length);
for (let i = 0; i < length; ++i) {
let result =
$_isSubtype(typeArguments1[i], typeArguments2[i], $covariant);
$_isSubtype(typeArguments1[i], typeArguments2[i], $isCovariant);
if (!result) {
return result;
}
@ -775,7 +775,7 @@ isClassSubType(t1, t2, covariant) => JS(
let indefinite = false;
function definitive(t1, t2) {
let result = $isClassSubType(t1, t2, $covariant);
let result = $isClassSubType(t1, t2, $isCovariant);
if (result == null) {
indefinite = true;
return false;

View file

@ -1,5 +1,6 @@
[error] Couldn't infer type parameter 'T'; '_ControllerEventSinkWrapper<dynamic>' must be of type 'EventSink<T>'. (dart:async/stream.dart, line 1346, col 16)
[error] The argument type '_ControllerEventSinkWrapper' can't be assigned to the parameter type 'EventSink<T>'. (dart:async/stream.dart, line 1346, col 53)
[error] Type parameter bound types must be instantiated. (dart:collection/queue.dart, line 99, col 29)
[error] Invalid override. The type of 'ChunkedConverter.bind' ('(dynamic) → dynamic') isn't a subtype of 'Converter<S, T>.bind' ('(Stream<S>) → Stream<T>'). (dart:convert/chunked_conversion.dart, line 14, col 3)
[error] Invalid override. The type of 'ChunkedConverter.bind' ('(dynamic) → dynamic') isn't a subtype of 'StreamTransformer<S, T>.bind' ('(Stream<S>) → Stream<T>'). (dart:convert/chunked_conversion.dart, line 14, col 3)
[error] Invalid override. The type of 'ChunkedConverter.startChunkedConversion' ('(dynamic) → dynamic') isn't a subtype of 'Converter<S, T>.startChunkedConversion' ('(Sink<T>) → Sink<S>'). (dart:convert/chunked_conversion.dart, line 15, col 3)