blob: 3fb79bd3195d61b6834ae801e33ef256e525d0b7 [file] [log] [blame]
F<X> toF<X>(X x) => throw '';
class A<X> {}
class Acon<X extends Fcon<Y>, Y> {}
class AconBound<X extends FconBound<Y>, Y extends num> {}
class AconCyclicBound<X extends FconCyclicBound<Y>, Y extends A<Y>> {}
class AconCyclicCoBound<X extends FconCyclicCoBound<Y>,
Y extends Function(Y)> {}
class Acov<X extends Fcov<Y>, Y> {}
class AcovBound<X extends FcovBound<Y>, Y extends num> {}
class AcovCyclicBound<X extends FcovCyclicBound<Y>, Y extends A<Y>> {}
class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>,
Y extends Function(Y)> {}
class Ainv<X extends Finv<Y>, Y> {}
class AinvBound<X extends FinvBound<Y>, Y extends num> {}
class AinvCyclicBound<X extends FinvCyclicBound<Y>, Y extends A<Y>> {}
class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>,
Y extends Function(Y)> {}
class B<X> {}
main() {}
typedef F<X> = void Function<Y extends X>();
typedef Fcon<X> = Function(X);
typedef FconBound<X extends num> = Function(X);
typedef FconCyclicBound<X extends A<X>> = Function(X);
typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
typedef Fcov<X> = X Function();
typedef FcovBound<X extends num> = X Function();
typedef FcovCyclicBound<X extends A<X>> = X Function();
typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
typedef Finv<X> = X Function(X);
typedef FinvBound<X extends num> = X Function(X);
typedef FinvCyclicBound<X extends A<X>> = X Function(X);
typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
void testNested(
B<Acov> source1,
B<Acon> source2,
B<Ainv> source3,
B<AcovBound> source4,
B<AconBound> source5,
B<AinvBound> source6,
B<AcovCyclicBound> source7,
B<AconCyclicBound> source8,
B<AcovCyclicCoBound> source10,
B<AconCyclicCoBound> source11,
) {}
void testTypeAliasAsTypeArgument(
Acov source1,
Acon source2,
Ainv source3,
AcovBound source4,
AconBound source5,
AinvBound source6,
AcovCyclicBound source7,
AconCyclicBound source8,
AcovCyclicCoBound source10,
AconCyclicCoBound source11,
) {}