library;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

class C<T extends core::Object = dynamic> extends core::Object {
  field core::String trace;
  constructor •({dynamic a = 0, dynamic b = self::C::T}) → self::C<self::C::T>
    : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
    ;
}
class M extends core::Object {
  synthetic constructor •() → self::M
    : super core::Object::•()
    ;
}
class D extends self::C<core::String> implements self::M {
  synthetic constructor •({dynamic a = 0, dynamic b = core::String}) → self::D
    : super self::C::•(a: a, b: b)
    ;
}
class E extends self::D {
  synthetic constructor •() → self::E
    : super self::C::•()
    ;
}
abstract class _F&C&M extends self::C<core::int> implements self::M {
  synthetic constructor •({dynamic a = 0, dynamic b = core::int}) → self::_F&C&M
    : super self::C::•(a: a, b: b)
    ;
}
class F extends self::_F&C&M {
  synthetic constructor •() → self::F
    : super self::C::•()
    ;
}
static method main() → dynamic {
  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object>().trace);
  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().trace);
  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().trace);
  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().trace);
  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().trace);
}
