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 {}
