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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method call(core::int value) → core::num
    return 0;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  method call(core::num value) → core::int
    return 0;
}
class C extends core::Object {
  final field self::A _a;
  constructor •(self::A _a) → self::C
    : self::C::_a = _a, super core::Object::•()
    ;
}
static method test(self::C c, core::num n) → void {
  if(c.{self::C::_a}{self::A} is self::B) {
    let final self::C #t1 = c in let final core::num #t2 = n in (#t1.{self::C::_a}{self::A} as{Unchecked} self::B).{self::B::call}(#t2){(core::num) → core::int};
  }
}
static method main() → dynamic {}
