library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

class B extends core::Object {
  final field core::int x;
  constructor •(core::int x) → self::B
    : self::B::x = x, super core::Object::•()
    ;
}
class C extends self::B {
  field core::int? _#C#y = null;
  field core::bool _#C#y#isSet = false;
  constructor •(core::int x) → self::C
    : super self::B::•(x)
    ;
  get y() → core::int
    return let final core::int? #t1 = this.{self::C::_#C#y} in #t1.==(null) ?{core::int} let final core::int #t2 = this.{self::B::x}.{core::num::+}(1) in this.{self::C::_#C#y}.==(null) ?{core::int} this.{self::C::_#C#y} = #t2 : throw new _in::LateError::fieldADI("y") : #t1{core::int};
  method method() → dynamic
    return this.{self::B::x};
}
class Class<T extends core::Object? = dynamic> extends core::Object {
  static field core::int? lateStaticField1Init = null;
  static field core::int? _#lateStaticField1 = null;
  static field core::int? lateStaticField2Init = null;
  static field core::int? _#lateStaticField2 = null;
  field core::int? lateInstanceFieldInit = null;
  field core::int? _#Class#lateInstanceField = null;
  generic-covariant-impl field self::Class::T? lateGenericFieldInit = null;
  final field self::Class::T% field;
  field self::Class::T? _#Class#lateGenericField = null;
  field core::bool _#Class#lateGenericField#isSet = false;
  constructor •(self::Class::T% field) → self::Class<self::Class::T%>
    : self::Class::field = field, super core::Object::•()
    ;
  static method initLateStaticField1(core::int value) → core::int {
    return self::Class::lateStaticField1Init = value;
  }
  static get lateStaticField1() → core::int
    return let final core::int? #t3 = self::Class::_#lateStaticField1 in #t3.==(null) ?{core::int} let final core::int #t4 = self::Class::initLateStaticField1(87) in self::Class::_#lateStaticField1.==(null) ?{core::int} self::Class::_#lateStaticField1 = #t4 : throw new _in::LateError::fieldADI("lateStaticField1") : #t3{core::int};
  static method initLateStaticField2(core::int value) → core::int {
    return self::Class::lateStaticField2Init = value;
  }
  static get lateStaticField2() → core::int
    return let final core::int? #t5 = self::Class::_#lateStaticField2 in #t5.==(null) ?{core::int} let final core::int #t6 = self::Class::initLateStaticField2(42) in self::Class::_#lateStaticField2.==(null) ?{core::int} self::Class::_#lateStaticField2 = #t6 : throw new _in::LateError::fieldADI("lateStaticField2") : #t5{core::int};
  static method staticMethod() → dynamic {
    self::expect(null, self::Class::lateStaticField2Init);
    self::expect(42, self::Class::lateStaticField2);
    self::expect(42, self::Class::lateStaticField2Init);
  }
  method initLateInstanceField(core::int value) → core::int {
    return this.{self::Class::lateInstanceFieldInit} = value;
  }
  get lateInstanceField() → core::int
    return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField} in #t7.==(null) ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16) in this.{self::Class::_#Class#lateInstanceField}.==(null) ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
    return this.{self::Class::lateGenericFieldInit} = value;
  }
  get lateGenericField() → self::Class::T% {
    if(!this.{self::Class::_#Class#lateGenericField#isSet}) {
      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field});
      if(this.{self::Class::_#Class#lateGenericField#isSet})
        throw new _in::LateError::fieldADI("lateGenericField");
      this.{self::Class::_#Class#lateGenericField} = #t9;
      this.{self::Class::_#Class#lateGenericField#isSet} = true;
    }
    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField} in #t10{self::Class::T%};
  }
  method instanceMethod() → dynamic {
    self::expect(null, this.{self::Class::lateInstanceFieldInit});
    self::expect(16, this.{self::Class::lateInstanceField});
    self::expect(16, this.{self::Class::lateInstanceFieldInit});
    self::expect(null, this.{self::Class::lateGenericFieldInit});
    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericField});
    self::expect(this.{self::Class::field}, this.{self::Class::lateGenericFieldInit});
  }
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static field lateExtensionField1Init = self::Extension|lateExtensionField1Init;
  static method initLateExtensionField1 = self::Extension|initLateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
  static field lateExtensionField2Init = self::Extension|lateExtensionField2Init;
  static method initLateExtensionField2 = self::Extension|initLateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
  static method staticMethod = self::Extension|staticMethod;
}
static field core::int? lateTopLevelField1Init;
static field core::int? _#lateTopLevelField1 = null;
static field core::int? Extension|lateExtensionField1Init;
static field core::int? _#Extension|lateExtensionField1 = null;
static field core::int? Extension|lateExtensionField2Init;
static field core::int? _#Extension|lateExtensionField2 = null;
static method initLateTopLevelField1(core::int value) → core::int {
  return self::lateTopLevelField1Init = value;
}
static get lateTopLevelField1() → core::int
  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11.==(null) ?{core::int} let final core::int #t12 = self::initLateTopLevelField1(123) in self::_#lateTopLevelField1.==(null) ?{core::int} self::_#lateTopLevelField1 = #t12 : throw new _in::LateError::fieldADI("lateTopLevelField1") : #t11{core::int};
static method Extension|initLateExtensionField1(core::int value) → core::int {
  return self::Extension|lateExtensionField1Init = value;
}
static get Extension|lateExtensionField1() → core::int
  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13.==(null) ?{core::int} let final core::int #t14 = self::Extension|initLateExtensionField1(87) in self::_#Extension|lateExtensionField1.==(null) ?{core::int} self::_#Extension|lateExtensionField1 = #t14 : throw new _in::LateError::fieldADI("lateExtensionField1") : #t13{core::int};
static method Extension|initLateExtensionField2(core::int value) → core::int {
  return self::Extension|lateExtensionField2Init = value;
}
static get Extension|lateExtensionField2() → core::int
  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15.==(null) ?{core::int} let final core::int #t16 = self::Extension|initLateExtensionField2(42) in self::_#Extension|lateExtensionField2.==(null) ?{core::int} self::_#Extension|lateExtensionField2 = #t16 : throw new _in::LateError::fieldADI("lateExtensionField2") : #t15{core::int};
static method Extension|staticMethod() → dynamic {
  self::expect(null, self::Extension|lateExtensionField2Init);
  self::expect(42, self::Extension|lateExtensionField2);
  self::expect(42, self::Extension|lateExtensionField2Init);
}
static method main() → dynamic {
  self::expect(null, self::lateTopLevelField1Init);
  self::expect(123, self::lateTopLevelField1);
  self::expect(123, self::lateTopLevelField1Init);
  self::expect(null, self::Class::lateStaticField1Init);
  self::expect(87, self::Class::lateStaticField1);
  self::expect(87, self::Class::lateStaticField1Init);
  self::Class::staticMethod();
  new self::Class::•<core::int>(0).{self::Class::instanceMethod}();
  self::expect(null, self::Extension|lateExtensionField1Init);
  self::expect(87, self::Extension|lateExtensionField1);
  self::expect(87, self::Extension|lateExtensionField1Init);
  self::Extension|staticMethod();
  self::expect(2, new self::C::•(1).{self::C::y});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
