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

abstract class B extends core::Object {
  synthetic constructor •() → self::B
    ;
  abstract method call<T extends core::Object? = dynamic>() → dynamic;
}
class C extends core::Object implements self::B {
  synthetic constructor •() → self::C
    ;
  method call<T extends core::Object? = dynamic>() → dynamic
    ;
  static synthetic method _#new#tearOff() → self::C
    return new self::C::•();
}
abstract class A extends core::Object {
  synthetic constructor •() → self::A
    ;
}
class Wrapper extends core::Object {
  final field self::B b;
  final field self::B call;
  constructor •(self::B b, self::B call) → self::Wrapper
    ;
  static synthetic method _#new#tearOff(self::B b, self::B call) → self::Wrapper
    return new self::Wrapper::•(b, call);
}
static method main() → void
  ;
