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) {
    dynamic x1 = x;
    dynamic y1 = y;
    if(x is self::D*) {
      dynamic x2 = x;
    }
    if(y is self::E*) {
      dynamic y2 = y;
    }
  }
}
static method main() → dynamic {}
