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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class Foo<T extends self::A? = self::A?> extends core::Object {
  synthetic constructor •() → self::Foo<self::Foo::T%>
    : super core::Object::•()
    ;
  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
    if(t is self::B?) {
      self::Foo::T% & self::B? /* '%' & '?' = '%' */ bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
        self::Foo::T% & self::C? /* '%' & '?' = '%' */ baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
      }
    }
  }
  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
    if(t is self::B) {
      self::Foo::T% & self::B /* '%' & '!' = '!' */ bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
        self::Foo::T & self::C /* '!' & '!' = '!' */ baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
      }
    }
  }
}
static method main() → dynamic {}
