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

class C extends core::Object {
  field core::int* field = 0;
  synthetic constructor •() → self::C*
    : 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 core::int* field_ref = self::c.{self::C::field};
static field core::int* getter_ref = self::c.{self::C::getter};
static field () →* core::int* function_ref = self::c.{self::C::function};
static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}];
static field core::List<core::int*>* 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 {}
