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) → self::C<self::C::T*>*
    : super core::Object::•() {}
  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
    : super core::Object::•() {}
}
static method optional_toplevel([dynamic x = #C2]) → void {}
static method named_toplevel({dynamic x = #C2}) → void {}
static method main() → dynamic {
  function optional_local([dynamic x = #C2]) → void {}
  function named_local({dynamic x = #C2}) → void {}
  dynamic c_optional_toplevel = new self::C::optional<dynamic>(#C3);
  dynamic c_named_toplevel = new self::C::named<dynamic>(#C4);
  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 = #C2]) → dynamic {});
  dynamic c_named_closure = new self::C::named<dynamic>(({dynamic x = #C2}) → dynamic {});
}

constants  {
  #C1 = 0
  #C2 = <dynamic>[#C1]
  #C3 = tearoff self::optional_toplevel
  #C4 = tearoff self::named_toplevel
}
