library;
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 = dynamic> = () → X;
typedef FconBound<contravariant X extends core::num = dynamic> = (X) → dynamic;
typedef FinvBound<invariant X extends core::num = dynamic> = (X) → X;
typedef FcovCyclicBound<X extends self::A<X> = dynamic> = () → X;
typedef FconCyclicBound<contravariant X extends self::A<X> = dynamic> = (X) → dynamic;
typedef FinvCyclicBound<invariant X extends self::A<X> = dynamic> = (X) → X;
typedef FcovCyclicCoBound<X extends (X) → dynamic = dynamic> = () → X;
typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = dynamic> = (X) → dynamic;
typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = dynamic> = (X) → X;
class A<X extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::X>
    : 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 null;
static method testTopLevel() → void {
  () → dynamic source1;
  dynamic fsource1 = self::toF<dynamic>(source1);
  <Y extends () → dynamic = dynamic>() → void target1 = fsource1;
  (dynamic) → dynamic source2;
  dynamic fsource2 = self::toF<dynamic>(source2);
  <Y extends (dynamic) → dynamic = dynamic>() → void target2 = fsource2;
  (dynamic) → dynamic source3;
  dynamic fsource3 = self::toF<dynamic>(source3);
  <Y extends (dynamic) → dynamic = dynamic>() → void target3 = fsource3;
  () → dynamic source4;
  dynamic fsource4 = self::toF<dynamic>(source4);
  <Y extends () → core::num = dynamic>() → void target4 = fsource4;
  (dynamic) → dynamic source5;
  dynamic fsource5 = self::toF<dynamic>(source5);
  <Y extends (core::num) → dynamic = dynamic>() → void target5 = fsource5;
  (dynamic) → dynamic source6;
  dynamic fsource6 = self::toF<dynamic>(source6);
  <Y extends (core::num) → core::num = dynamic>() → void target6 = fsource6;
  () → dynamic source7;
  dynamic fsource7 = self::toF<dynamic>(source7);
  <Y extends () → self::A<dynamic> = dynamic>() → void target7 = fsource7;
  (dynamic) → dynamic source8;
  dynamic fsource8 = self::toF<dynamic>(source8);
  <Y extends (self::A<core::Null>) → dynamic = dynamic>() → void target8 = fsource8;
  (dynamic) → dynamic source9;
  () → dynamic source10;
  dynamic fsource10 = self::toF<dynamic>(source10);
  <Y extends () → (core::Null) → dynamic = dynamic>() → void target10 = fsource10;
  (dynamic) → dynamic source11;
  dynamic fsource11 = self::toF<dynamic>(source11);
  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void target11 = fsource11;
  (dynamic) → dynamic source12;
  dynamic fsource12 = self::toF<dynamic>(source12);
  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void target12 = fsource12;
}
static method testNested() → void {
  self::B<() → dynamic> source1;
  dynamic fsource1 = self::toF<dynamic>(source1);
  <Y extends self::B<() → dynamic> = dynamic>() → void target1 = fsource1;
  self::B<(dynamic) → dynamic> source2;
  dynamic fsource2 = self::toF<dynamic>(source2);
  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target2 = fsource2;
  self::B<(dynamic) → dynamic> source3;
  dynamic fsource3 = self::toF<dynamic>(source3);
  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target3 = fsource3;
  self::B<() → dynamic> source4;
  dynamic fsource4 = self::toF<dynamic>(source4);
  <Y extends self::B<() → core::num> = dynamic>() → void target4 = fsource4;
  self::B<(dynamic) → dynamic> source5;
  dynamic fsource5 = self::toF<dynamic>(source5);
  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void target5 = fsource5;
  self::B<(dynamic) → dynamic> source6;
  dynamic fsource6 = self::toF<dynamic>(source6);
  <Y extends self::B<(core::num) → core::num> = dynamic>() → void target6 = fsource6;
  self::B<() → dynamic> source7;
  dynamic fsource7 = self::toF<dynamic>(source7);
  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void target7 = fsource7;
  self::B<(dynamic) → dynamic> source8;
  dynamic fsource8 = self::toF<dynamic>(source8);
  <Y extends self::B<(self::A<core::Null>) → dynamic> = dynamic>() → void target8 = fsource8;
  self::B<(dynamic) → dynamic> source9;
  self::B<() → dynamic> source10;
  dynamic fsource10 = self::toF<dynamic>(source10);
  <Y extends self::B<() → (core::Null) → dynamic> = dynamic>() → void target10 = fsource10;
  self::B<(dynamic) → dynamic> source11;
  dynamic fsource11 = self::toF<dynamic>(source11);
  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void target11 = fsource11;
  self::B<(dynamic) → dynamic> source12;
  dynamic fsource12 = self::toF<dynamic>(source12);
  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void target12 = fsource12;
}
static method main() → dynamic {
  self::testTopLevel();
  self::testNested();
}
