library;
//
// Problems in library:
//
// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12: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> {}
//         ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10: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_variables_from_same.dart:14: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> on int {}
//             ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10: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_variables_from_same.dart:16: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> = int;
//           ^^^^^
// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10: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> = 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> extends core::Object {
  synthetic constructor •() → self::B<self::B::TypeY>
    : super core::Object::•()
    ;
}
extension C<TypeY 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>(core::String name, {core::int defaultValue = #C1}) → core::int
  return core::int::fromEnvironment(name, defaultValue: defaultValue);

constants  {
  #C1 = 0
}
