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

class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field self::Fisk::T* x;
  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
    : self::Fisk::x = x, super core::Object::•()
    ;
}
class Foo extends core::Object /*isEnum*/  {
  final field core::int* index;
  final field core::String* _name;
  static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
  @self::hest
  static const field self::Foo* bar = const self::Foo::•(0, "Foo.bar");
  @self::Fisk::fisk<core::int*>(self::hest)
  static const field self::Foo* baz = const self::Foo::•(1, "Foo.baz");
  static const field self::Foo* cafebabe = const self::Foo::•(2, "Foo.cafebabe");
  const constructor •(core::int* index, core::String* _name) → self::Foo*
    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
    ;
  method toString() → core::String*
    return this.{=self::Foo::_name};
}
static const field core::int* hest = 42;
static method main() → dynamic
  ;
