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

class A extends core::Object {
  field self::B b = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  get c() → self::C
    return null;
  set c(self::C value) → void {}
}
class C extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D extends self::C {
  synthetic constructor •() → void
    : super self::C::•()
    ;
}
static field dynamic a = new self::A::•();
static field dynamic x = self::a.b.c;
static field dynamic y = let final dynamic #t1 = self::a.b in let final dynamic #t2 = #t1.c in #t2.==(null) ? #t1.c = new self::D::•() : #t2;
static method main() → dynamic {}
