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

class X extends core::Object {
  synthetic constructor •() → self::X*
    : super core::Object::•()
    ;
}
class Foo<T extends self::X* = dynamic> extends core::Object {
  generic-covariant-impl field self::Foo::T* x;
  constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
    : this self::Foo::_internal(x: _init)
    ;
  constructor fromT(self::Foo::T* _init) → self::Foo<self::Foo::T*>*
    : this self::Foo::_internal(x: _init)
    ;
  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
    : self::Foo::x = x, super core::Object::•()
    ;
}
static method main() → void {}

constants  {
  #C1 = null
}
