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

class A1 extends core::Object {
  final field core::Object? a;
  constructor •({required core::Object? a}) → self::A1
    : self::A1::a = a, super core::Object::•()
    ;
  static method _#new#tearOff({required core::Object? a}) → self::A1
    return new self::A1::•(a: a);
}
class B1 extends self::A1 {
  constructor •({core::Object? a = #C1}) → self::B1
    : super self::A1::•(a: a) {}
  static method _#new#tearOff({core::Object? a = #C1}) → self::B1
    return new self::B1::•(a: a);
}
class A2 extends core::Object {
  final field core::Object? a;
  constructor •(core::Object? a) → self::A2
    : self::A2::a = a, super core::Object::•()
    ;
  static method _#new#tearOff(core::Object? a) → self::A2
    return new self::A2::•(a);
}
class B2 extends self::A2 {
  constructor •([core::Object? a = #C1]) → self::B2
    : super self::A2::•(a)
    ;
  static method _#new#tearOff([core::Object? a = #C1]) → self::B2
    return new self::B2::•(a);
}
static method main() → void {
  ({a: core::Object?}) → self::B1 f1 = #C2;
  ([core::Object?]) → self::B2 f2 = #C3;
}

constants  {
  #C1 = null
  #C2 = static-tearoff self::B1::_#new#tearOff
  #C3 = static-tearoff self::B2::_#new#tearOff
}
