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

class C extends core::Object {
  field core::int field = 0;
  constructor •() → void
    : super core::Object::•()
    ;
  get getter() → core::int
    return 0;
  method function() → core::int
    return 0;
}
static field self::C c = new self::C::•();
static field dynamic field_ref = self::c.{self::C::field};
static field dynamic getter_ref = self::c.{self::C::getter};
static field () → core::int function_ref = self::c.{self::C::function};
static field dynamic field_ref_list = <core::int>[self::c.{self::C::field}];
static field dynamic getter_ref_list = <core::int>[self::c.{self::C::getter}];
static field core::List<() → core::int> function_ref_list = <() → core::int>[self::c.{self::C::function}];
static method main() → dynamic {}
