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

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C*
    : super self::B::•()
    ;
}
abstract class D extends core::Object {
  synthetic constructor •() → self::D*
    : super core::Object::•()
    ;
  abstract method foo() → self::A*;
}
abstract class E extends core::Object {
  synthetic constructor •() → self::E*
    : super core::Object::•()
    ;
  abstract method foo() → self::B*;
}
abstract class F extends core::Object {
  synthetic constructor •() → self::F*
    : super core::Object::•()
    ;
  abstract method foo() → core::Object*;
}
abstract class G extends core::Object implements self::D, self::E, self::F {
  synthetic constructor •() → self::G*
    : super core::Object::•()
    ;
  abstract forwarding-stub method foo() → self::B*;
}
class H extends self::G {
  synthetic constructor •() → self::H*
    : super self::G::•()
    ;
  method foo() → self::C*
    return new self::C::•();
}
static field dynamic x = self::bar().foo();
static method bar() → self::G*
  return new self::H::•();
static method main() → dynamic {}
