library;
//
// Problems in library:
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// class B<TypeY extends A, TypeZ extends A> {}
//         ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:26: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// class B<TypeY extends A, TypeZ extends A> {}
//                          ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:13:13: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// extension C<TypeY extends A, TypeZ extends A> on int {}
//             ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:13:30: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// extension C<TypeY extends A, TypeZ extends A> on int {}
//                              ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:15:11: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// typedef D<TypeY extends A, TypeZ extends A> = int;
//           ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:15:28: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
// Try providing type arguments to 'A' here.
// typedef D<TypeY extends A, TypeZ extends A> = int;
//                            ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:9: Context: Bound of this variable references variable 'TypeX' from the same declaration.
// class A<TypeX extends A<TypeX>> {}
//         ^^^^^
//
import self as self;
import "dart:core" as core;

typedef D<unrelated TypeY extends self::A<self::A<dynamic>> = dynamic, unrelated TypeZ extends self::A<self::A<dynamic>> = dynamic> = core::int;
class A<TypeX extends self::A<self::A::TypeX> = self::A<dynamic>> extends core::Object {
  synthetic constructor •() → self::A<self::A::TypeX>
    : super core::Object::•()
    ;
}
class B<TypeY extends self::A<self::A<dynamic>> = dynamic, TypeZ extends self::A<self::A<dynamic>> = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::TypeY, self::B::TypeZ>
    : super core::Object::•()
    ;
}
extension C<TypeY extends self::A<self::A<dynamic>> = dynamic, TypeZ extends self::A<self::A<dynamic>> = dynamic> on core::int {
}
static method main() → dynamic {}
static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#D#fromEnvironment#tearOff<unrelated TypeY extends self::A<self::A<dynamic>> = dynamic, unrelated TypeZ extends self::A<self::A<dynamic>> = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
  return core::int::fromEnvironment(name, defaultValue: defaultValue);

constants  {
  #C1 = 0
}
