blob: 130bce3377cf04e24d8615397df0a5127ad18836 [file] [log] [blame]
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
// - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
// F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
// ^
//
// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
// ^
// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
// ^
// pkg/front_end/testcases/general/nested_variance2.dart:177:3: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
// - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
// - 'Object' is from 'dart:core'.
// AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
// ^
//
// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Error: Inferred type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
// Try specifying type arguments explicitly so that they conform to the bounds.
// B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
// ^
// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
// ^
// pkg/front_end/testcases/general/nested_variance2.dart:236:5: Context: If you want 'AinvCyclicCoBound<FinvCyclicCoBound<dynamic Function(Never)>, dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
// - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
// - 'Object' is from 'dart:core'.
// B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
// ^
//
import self as self;
import "dart:core" as core;
typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() void;
typedef Fcov<X extends core::Object? = dynamic> = () X%;
typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) dynamic;
typedef Finv<invariant X extends core::Object? = dynamic> = (X%) X%;
typedef FcovBound<X extends core::num> = () X;
typedef FconBound<contravariant X extends core::num> = (X) dynamic;
typedef FinvBound<invariant X extends core::num> = (X) X;
typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () X;
typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) dynamic;
typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) X;
typedef FcovCyclicCoBound<X extends (X) dynamic = (Never) dynamic> = () X;
typedef FconCyclicCoBound<contravariant X extends (X) dynamic = (dynamic) dynamic> = (X) dynamic;
typedef FinvCyclicCoBound<invariant X extends (X) dynamic = (dynamic) dynamic> = (X) X;
class Acov<X extends () self::Acov::Y% = () dynamic, Y extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() self::Acov<self::Acov::X, self::Acov::Y%>
: super core::Object::•()
;
}
class Acon<X extends (self::Acon::Y%) dynamic = (Never) dynamic, Y extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() self::Acon<self::Acon::X, self::Acon::Y%>
: super core::Object::•()
;
}
class Ainv<X extends (self::Ainv::Y%) self::Ainv::Y% = (dynamic) dynamic, Y extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() self::Ainv<self::Ainv::X, self::Ainv::Y%>
: super core::Object::•()
;
}
class AcovBound<X extends () self::AcovBound::Y = () core::num, Y extends core::num> extends core::Object {
synthetic constructor •() self::AcovBound<self::AcovBound::X, self::AcovBound::Y>
: super core::Object::•()
;
}
class AconBound<X extends (self::AconBound::Y) dynamic = (Never) dynamic, Y extends core::num> extends core::Object {
synthetic constructor •() self::AconBound<self::AconBound::X, self::AconBound::Y>
: super core::Object::•()
;
}
class AinvBound<X extends (self::AinvBound::Y) self::AinvBound::Y = (core::num) core::num, Y extends core::num> extends core::Object {
synthetic constructor •() self::AinvBound<self::AinvBound::X, self::AinvBound::Y>
: super core::Object::•()
;
}
class A<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() self::A<self::A::X%>
: super core::Object::•()
;
}
class AcovCyclicBound<X extends () self::AcovCyclicBound::Y = () self::A<dynamic>, Y extends self::A<self::AcovCyclicBound::Y> = self::A<dynamic>> extends core::Object {
synthetic constructor •() self::AcovCyclicBound<self::AcovCyclicBound::X, self::AcovCyclicBound::Y>
: super core::Object::•()
;
}
class AconCyclicBound<X extends (self::AconCyclicBound::Y) dynamic = (Never) dynamic, Y extends self::A<self::AconCyclicBound::Y> = self::A<dynamic>> extends core::Object {
synthetic constructor •() self::AconCyclicBound<self::AconCyclicBound::X, self::AconCyclicBound::Y>
: super core::Object::•()
;
}
class AinvCyclicBound<X extends (self::AinvCyclicBound::Y) self::AinvCyclicBound::Y = (self::A<dynamic>) self::A<dynamic>, Y extends self::A<self::AinvCyclicBound::Y> = self::A<dynamic>> extends core::Object {
synthetic constructor •() self::AinvCyclicBound<self::AinvCyclicBound::X, self::AinvCyclicBound::Y>
: super core::Object::•()
;
}
class AcovCyclicCoBound<X extends () self::AcovCyclicCoBound::Y = () (Never) dynamic, Y extends (self::AcovCyclicCoBound::Y) dynamic = (Never) dynamic> extends core::Object {
synthetic constructor •() self::AcovCyclicCoBound<self::AcovCyclicCoBound::X, self::AcovCyclicCoBound::Y>
: super core::Object::•()
;
}
class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y) dynamic = (Never) dynamic, Y extends (self::AconCyclicCoBound::Y) dynamic = (Never) dynamic> extends core::Object {
synthetic constructor •() self::AconCyclicCoBound<self::AconCyclicCoBound::X, self::AconCyclicCoBound::Y>
: super core::Object::•()
;
}
class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y) self::AinvCyclicCoBound::Y = ((Never) dynamic) (Never) dynamic, Y extends (self::AinvCyclicCoBound::Y) dynamic = (Never) dynamic> extends core::Object {
synthetic constructor •() self::AinvCyclicCoBound<self::AinvCyclicCoBound::X, self::AinvCyclicCoBound::Y>
: super core::Object::•()
;
}
class B<X extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() self::B<self::B::X%>
: super core::Object::•()
;
}
static method toF<X extends core::Object? = dynamic>(self::toF::X% x) <Y extends self::toF::X% = dynamic>() void
return throw "";
static method testTypeAliasAsTypeArgument(self::Acov<() dynamic, dynamic> source1, self::Acon<(Never) dynamic, dynamic> source2, self::Ainv<(dynamic) dynamic, dynamic> source3, self::AcovBound<() core::num, core::num> source4, self::AconBound<(Never) dynamic, core::num> source5, self::AinvBound<(core::num) core::num, core::num> source6, self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>> source7, self::AconCyclicBound<(Never) dynamic, self::A<dynamic>> source8, self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic> source10, self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic> source11) void {
<Y extends self::Acov<() dynamic, dynamic> = dynamic>() void fsource1 = self::toF<self::Acov<() dynamic, dynamic>>(source1);
<Y extends self::Acov<() dynamic, dynamic> = dynamic>() void target1 = fsource1;
<Y extends self::Acon<(Never) dynamic, dynamic> = dynamic>() void fsource2 = self::toF<self::Acon<(Never) dynamic, dynamic>>(source2);
<Y extends self::Acon<(Null) dynamic, dynamic> = dynamic>() void target2 = invalid-expression "pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
- 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
^" in fsource2 as{TypeError,ForNonNullableByDefault} <Y extends self::Acon<(Null) dynamic, dynamic> = dynamic>() void;
<Y extends self::Ainv<(dynamic) dynamic, dynamic> = dynamic>() void fsource3 = self::toF<self::Ainv<(dynamic) dynamic, dynamic>>(source3);
<Y extends self::Ainv<(dynamic) dynamic, dynamic> = dynamic>() void target3 = fsource3;
<Y extends self::AcovBound<() core::num, core::num> = dynamic>() void fsource4 = self::toF<self::AcovBound<() core::num, core::num>>(source4);
<Y extends self::AcovBound<() core::num, core::num> = dynamic>() void target4 = fsource4;
<Y extends self::AconBound<(Never) dynamic, core::num> = dynamic>() void fsource5 = self::toF<self::AconBound<(Never) dynamic, core::num>>(source5);
<Y extends self::AconBound<(Never) dynamic, core::num> = dynamic>() void target5 = fsource5;
<Y extends self::AinvBound<(core::num) core::num, core::num> = dynamic>() void fsource6 = self::toF<self::AinvBound<(core::num) core::num, core::num>>(source6);
<Y extends self::AinvBound<(core::num) core::num, core::num> = dynamic>() void target6 = fsource6;
<Y extends self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>> = dynamic>() void fsource7 = self::toF<self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>>>(source7);
<Y extends self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>> = dynamic>() void target7 = fsource7;
<Y extends self::AconCyclicBound<(Never) dynamic, self::A<dynamic>> = dynamic>() void fsource8 = self::toF<self::AconCyclicBound<(Never) dynamic, self::A<dynamic>>>(source8);
<Y extends self::AconCyclicBound<(Never) dynamic, self::A<dynamic>> = dynamic>() void target8 = fsource8;
self::AinvCyclicBound<(self::A<dynamic>) self::A<dynamic>, self::A<dynamic>> source9 = throw "";
<Y extends self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic> = dynamic>() void fsource10 = self::toF<self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic>>(source10);
<Y extends self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic> = dynamic>() void target10 = fsource10;
<Y extends self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic> = dynamic>() void fsource11 = self::toF<self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic>>(source11);
<Y extends self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic> = dynamic>() void target11 = fsource11;
self::AinvCyclicCoBound<((Never) dynamic) (Never) dynamic, (Never) dynamic> source12 = throw "";
}
static method testNested(self::B<self::Acov<() dynamic, dynamic>> source1, self::B<self::Acon<(Never) dynamic, dynamic>> source2, self::B<self::Ainv<(dynamic) dynamic, dynamic>> source3, self::B<self::AcovBound<() core::num, core::num>> source4, self::B<self::AconBound<(Never) dynamic, core::num>> source5, self::B<self::AinvBound<(core::num) core::num, core::num>> source6, self::B<self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>>> source7, self::B<self::AconCyclicBound<(Never) dynamic, self::A<dynamic>>> source8, self::B<self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic>> source10, self::B<self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic>> source11) void {
<Y extends self::B<self::Acov<() dynamic, dynamic>> = dynamic>() void fsource1 = self::toF<self::B<self::Acov<() dynamic, dynamic>>>(source1);
<Y extends self::B<self::Acov<() dynamic, dynamic>> = dynamic>() void target1 = fsource1;
<Y extends self::B<self::Acon<(Never) dynamic, dynamic>> = dynamic>() void fsource2 = self::toF<self::B<self::Acon<(Never) dynamic, dynamic>>>(source2);
<Y extends self::B<self::Acon<(Never) dynamic, dynamic>> = dynamic>() void target2 = fsource2;
<Y extends self::B<self::Ainv<(dynamic) dynamic, dynamic>> = dynamic>() void fsource3 = self::toF<self::B<self::Ainv<(dynamic) dynamic, dynamic>>>(source3);
<Y extends self::B<self::Ainv<(dynamic) dynamic, dynamic>> = dynamic>() void target3 = fsource3;
<Y extends self::B<self::AcovBound<() core::num, core::num>> = dynamic>() void fsource4 = self::toF<self::B<self::AcovBound<() core::num, core::num>>>(source4);
<Y extends self::B<self::AcovBound<() core::num, core::num>> = dynamic>() void target4 = fsource4;
<Y extends self::B<self::AconBound<(Never) dynamic, core::num>> = dynamic>() void fsource5 = self::toF<self::B<self::AconBound<(Never) dynamic, core::num>>>(source5);
<Y extends self::B<self::AconBound<(Never) dynamic, core::num>> = dynamic>() void target5 = fsource5;
<Y extends self::B<self::AinvBound<(core::num) core::num, core::num>> = dynamic>() void fsource6 = self::toF<self::B<self::AinvBound<(core::num) core::num, core::num>>>(source6);
<Y extends self::B<self::AinvBound<(core::num) core::num, core::num>> = dynamic>() void target6 = fsource6;
<Y extends self::B<self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>>> = dynamic>() void fsource7 = self::toF<self::B<self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>>>>(source7);
<Y extends self::B<self::AcovCyclicBound<() self::A<dynamic>, self::A<dynamic>>> = dynamic>() void target7 = fsource7;
<Y extends self::B<self::AconCyclicBound<(Never) dynamic, self::A<dynamic>>> = dynamic>() void fsource8 = self::toF<self::B<self::AconCyclicBound<(Never) dynamic, self::A<dynamic>>>>(source8);
<Y extends self::B<self::AconCyclicBound<(Never) dynamic, self::A<dynamic>>> = dynamic>() void target8 = fsource8;
self::B<self::AinvCyclicBound<(self::A<dynamic>) self::A<dynamic>, self::A<dynamic>>> source9 = throw "";
<Y extends self::B<self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic>> = dynamic>() void fsource10 = self::toF<self::B<self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic>>>(source10);
<Y extends self::B<self::AcovCyclicCoBound<() (Never) dynamic, (Never) dynamic>> = dynamic>() void target10 = fsource10;
<Y extends self::B<self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic>> = dynamic>() void fsource11 = self::toF<self::B<self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic>>>(source11);
<Y extends self::B<self::AconCyclicCoBound<(Never) dynamic, (Never) dynamic>> = dynamic>() void target11 = fsource11;
self::B<self::AinvCyclicCoBound<((Never) dynamic) (Never) dynamic, (Never) dynamic>> source12 = throw "";
}
static method main() dynamic {}