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

class C extends core::Object {
  field core::int y = 42;
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method f() → self::D?
    return new self::D::•();
  method h() → self::C
    return this;
}
class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
  method g() → self::D
    return this;
  operator [](core::String s) → core::String {
    return "!${s}!";
  }
}
static method test(self::C x) → void {
  let final self::C #t1 = x in let final void #t2 = #t1.{self::C::f}()!.{self::D::g}().{self::D::[]}("Hi!")! in let final void #t3 = #t1.{self::C::h}()!.{self::C::y} = 2 in #t1;
}
static method main() → dynamic {
  self::test(new self::C::•());
}
