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

class late extends core::Object {
  synthetic constructor •() → self::late*
    : super core::Object::•()
    ;
  get g() → core::int*
    return 1;
}
class required extends core::Object {
  synthetic constructor •() → self::required*
    : super core::Object::•()
    ;
  get g() → core::int*
    return 2;
}
class C extends core::Object {
  field self::late* l = new self::late::•();
  field self::required* r = new self::required::•();
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  if(!new self::C::•().{self::C::l}.{self::late::g}.{core::num::==}(1))
    throw "Expected 1";
  if(!new self::C::•().{self::C::r}.{self::required::g}.{core::num::==}(2))
    throw "Expected 2";
}
