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

class A extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
  method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
    return t;
  method g(dynamic i) → core::int
    return 0;
}
static field self::A a = new self::A::•();
static field dynamic b = () → dynamic => self::a.{self::A::f}<dynamic>(self::c);
static field dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b);
static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
static method main() → dynamic {}
