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 self::C {
  synthetic constructor •() → void
    : super self::C::•()
    ;
}
class E extends core::StackTrace {
  synthetic constructor •() → void
    : super core::StackTrace::•()
    ;
}
static method test(() → void f) → void {
  try {
    f.call();
  }
  on self::C catch(final self::C x, final core::StackTrace y) {
    self::C x1 = x;
    core::StackTrace y1 = y;
    if(x is self::D) {
      self::D x2 = x{self::D};
    }
    if(y is self::E) {
      self::E y2 = y{self::E};
    }
  }
}
static method main() → dynamic {}
