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

class C extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
}
class D extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
}
class E extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
}
static method test(() → void f) → void {
  try
    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;
    }
  finally {
    core::int x = 0;
  }
}
static method main() → dynamic {}
