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

class C<T extends core::Object = dynamic> extends core::Object {
  constructor optional(([self::C::T]) → void func) → void
    : super core::Object::•() {}
  constructor named(({x: self::C::T}) → void func) → void
    : super core::Object::•() {}
}
static method optional_toplevel([dynamic x = const <dynamic>[0]]) → void {}
static method named_toplevel({dynamic x = const <dynamic>[0]}) → void {}
static method main() → dynamic {
  function optional_local([dynamic x = const <dynamic>[0]]) → void {}
  function named_local({dynamic x = const <dynamic>[0]}) → void {}
  dynamic c_optional_toplevel = new self::C::optional<dynamic>(self::optional_toplevel);
  dynamic c_named_toplevel = new self::C::named<dynamic>(self::named_toplevel);
  dynamic c_optional_local = new self::C::optional<dynamic>(optional_local);
  dynamic c_named_local = new self::C::named<dynamic>(named_local);
  dynamic c_optional_closure = new self::C::optional<dynamic>(([dynamic x = const <dynamic>[0]]) → dynamic {});
  dynamic c_named_closure = new self::C::named<dynamic>(({dynamic x = const <dynamic>[0]}) → dynamic {});
}
