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

typedef Function2<S extends core::Object = dynamic, T extends core::Object = dynamic> = ([S]) → T;
class Foo extends core::Object {
  field core::List<core::int> x;
  constructor •([core::List<core::int> x = const <core::int>[1]]) → self::Foo
    : self::Foo::x = x, super core::Object::•()
    ;
  constructor named([core::List<core::int> x = const <core::int>[1]]) → self::Foo
    : self::Foo::x = null, super core::Object::•()
    ;
}
static field ([core::List<core::int>]) → core::String g = ([core::List<core::int> llll = const <core::int>[1]]) → core::String => "hello";
static method f([core::List<core::int> l = const <core::int>[1]]) → void {}
static method main() → dynamic {}
