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

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
  method call() → core::int*
    return 0;
}
class B extends core::Object {
  synthetic constructor •() → self::B*
    : super core::Object::•()
    ;
  get call() → self::A*
    return new self::A::•();
}
class D extends core::Object {
  field self::A* fieldA = new self::A::•();
  field self::B* fieldB = new self::B::•();
  synthetic constructor •() → self::D*
    : super core::Object::•()
    ;
  get getA() → self::A*
    return new self::A::•();
  get getB() → self::B*
    return new self::B::•();
}
static method test() → dynamic {
  core::int* callA = new self::A::•().{self::A::call}();
  core::int* callFieldA = new self::D::•().{self::D::fieldA}.{self::A::call}();
  core::int* callGetA = new self::D::•().{self::D::getA}.{self::A::call}();
  core::int* callFieldB = new self::D::•().{self::D::fieldB}.{self::B::call}.{self::A::call}();
  core::int* callGetB = new self::D::•().{self::D::getB}.{self::B::call}.{self::A::call}();
}
static method main() → dynamic {}
