library;
import self as self;
import "dart:core" as core;

class A<T extends core::num* = core::num*> extends core::Object {
  synthetic constructor •() → self::A<self::A::T*>*
    : super core::Object::•()
    ;
  method foo() → <S extends self::A::T* = dynamic>(S*) →* void {
    core::print("foo: T = ${self::A::T*}");
    return <S extends self::A::T* = self::A::T*>(S* a) → core::Null? {};
  }
}
class B<T extends core::num* = core::num*> extends core::Object {
  synthetic constructor •() → self::B<self::B::T*>*
    : super core::Object::•()
    ;
  method foo() → (self::B::T*) →* void {
    core::print("foo: T = ${self::B::T*}");
    return (self::B::T* a) → core::Null? {};
  }
}
static field self::A<core::num*>* a = new self::A::•<core::int*>();
static field self::B<core::num*>* b = new self::B::•<core::int*>();
static method main() → dynamic {
  try {
    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
    throw "Expected TypeError";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
    throw "Expected TypeError";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
}
