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 core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
}
class C extends self::B implements self::A {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
static field core::List<self::A> list;
static method g<T extends self::A = dynamic>(self::g::T t) → core::List<self::g::T> {
  self::list = <self::g::T>[];
  core::print(self::list.runtimeType);
  return self::list;
}
static method f<S extends core::Object = dynamic>(self::f::S s) → core::List<self::f::S> {
  if(s is self::A) {
    dynamic list = self::g<dynamic>(s);
    return list;
  }
  return null;
}
static method main() → dynamic {
  self::f<self::B>(new self::C::•());
  core::print(self::list.runtimeType);
  core::List<self::A> aList;
  aList = self::list;
  core::Object o = aList;
  aList = o;
}
