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

typedef Func = () → void;
class C<T extends core::Object> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method test() → dynamic {
    self::C<dynamic>;
    self::use(self::C<dynamic>);
    dynamic;
    self::use(dynamic);
    self::C::T;
    self::use(self::C::T);
    () → void;
    self::use(() → void);
    self::C<dynamic>.call();
    self::use(self::C<dynamic>.call());
    dynamic.call();
    self::use(dynamic.call());
    self::C::T.call();
    self::use(self::C::T.call());
    () → void.call();
    self::use(() → void.call());
    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{}));
    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})));
    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{}));
    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})));
    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{}));
    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})));
    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{}));
    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t1 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t1.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t2 = self::C<dynamic> in let final dynamic #t3 = #t2 in let final dynamic #t4 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t3.+(1)].toList(growable: false), <dynamic, dynamic>{})) in #t3);
    let final dynamic #t5 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t5.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t6 = dynamic in let final dynamic #t7 = #t6 in let final dynamic #t8 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t7.+(1)].toList(growable: false), <dynamic, dynamic>{})) in #t7);
    let final dynamic #t9 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t9.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t10 = self::C::T in let final dynamic #t11 = #t10 in let final dynamic #t12 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t11.+(1)].toList(growable: false), <dynamic, dynamic>{})) in #t11);
    let final dynamic #t13 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t13.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t14 = () → void in let final dynamic #t15 = #t14 in let final dynamic #t16 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t15.+(1)].toList(growable: false), <dynamic, dynamic>{})) in #t15);
    let final dynamic #t17 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t17.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t18 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t18.+(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t19 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t19.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t20 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t20.+(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t21 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t21.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t22 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t22.+(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t23 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t23.+(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t24 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t24.+(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t25 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t25.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t26 = self::C<dynamic> in let final dynamic #t27 = #t26 in let final dynamic #t28 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t27.-(1)].toList(growable: false), <dynamic, dynamic>{})) in #t27);
    let final dynamic #t29 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t29.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t30 = dynamic in let final dynamic #t31 = #t30 in let final dynamic #t32 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t31.-(1)].toList(growable: false), <dynamic, dynamic>{})) in #t31);
    let final dynamic #t33 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t33.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t34 = self::C::T in let final dynamic #t35 = #t34 in let final dynamic #t36 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t35.-(1)].toList(growable: false), <dynamic, dynamic>{})) in #t35);
    let final dynamic #t37 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t37.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t38 = () → void in let final dynamic #t39 = #t38 in let final dynamic #t40 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t39.-(1)].toList(growable: false), <dynamic, dynamic>{})) in #t39);
    let final dynamic #t41 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t41.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t42 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t42.-(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t43 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t43.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t44 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t44.-(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t45 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t45.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t46 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t46.-(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t47 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t47.-(1)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t48 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t48.-(1)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t49 = self::C<dynamic> in #t49.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : null;
    self::use(let final dynamic #t50 = self::C<dynamic> in let final dynamic #t51 = #t50 in #t51.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : #t51);
    let final dynamic #t52 = dynamic in #t52.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : null;
    self::use(let final dynamic #t53 = dynamic in let final dynamic #t54 = #t53 in #t54.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : #t54);
    let final dynamic #t55 = self::C::T in #t55.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : null;
    self::use(let final dynamic #t56 = self::C::T in let final dynamic #t57 = #t56 in #t57.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : #t57);
    let final dynamic #t58 = () → void in #t58.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : null;
    self::use(let final dynamic #t59 = () → void in let final dynamic #t60 = #t59 in #t60.==(null) ? throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[42].toList(growable: false), <dynamic, dynamic>{})) : #t60);
    let final dynamic #t61 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t61.+(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t62 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t62.+(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t63 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t63.+(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t64 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t64.+(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t65 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t65.+(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t66 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t66.+(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t67 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t67.+(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t68 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t68.+(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t69 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t69.-(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t70 = self::C<dynamic> in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C, 34, null, <dynamic>[#t70.-(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t71 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t71.-(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t72 = dynamic in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#dynamic, 34, null, <dynamic>[#t72.-(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t73 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t73.-(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t74 = self::C::T in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#T, 34, null, <dynamic>[#t74.-(42)].toList(growable: false), <dynamic, dynamic>{})));
    let final dynamic #t75 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t75.-(42)].toList(growable: false), <dynamic, dynamic>{}));
    self::use(let final dynamic #t76 = () → void in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Func, 34, null, <dynamic>[#t76.-(42)].toList(growable: false), <dynamic, dynamic>{})));
  }
}
static method use(dynamic x) → dynamic {
  if(x.==(new core::DateTime::now().millisecondsSinceEpoch))
    throw "Shouldn't happen";
}
static method main() → dynamic {
  new self::C::•<dynamic>().test();
}
