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

class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
}
class E extends core::StackTrace {
  synthetic constructor •() → self::E
    : 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 {}
