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

class C extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class E extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
static method test(() → void f) → void {
  try {
    core::int x = 0;
    f.call();
  }
  on self::C catch(no-exception-var) {
    core::int x = 0;
  }
  on self::D catch(final self::D x) {
    self::D x2 = x;
  }
  on self::E catch(final self::E x, final core::StackTrace y) {
    self::E x2 = x;
    core::StackTrace y2 = y;
  }
  on dynamic catch(final dynamic x, final core::StackTrace y) {
    dynamic x2 = x;
    core::StackTrace y2 = y;
  }
}
static method main() → dynamic {}
