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

abstract class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract method foo() → core::int;
}
class B extends self::A {
  synthetic constructor •() → void
    : super self::A::•()
    ;
  method foo() → core::int
    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int?] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::bar] [@vm.inferred-type.metadata=dart.core::_Smi] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar() as{TypeError} core::num) as{TypeError} core::int;
  method bar() → core::int
    return 3;
}
class TearOffInterfaceMethod extends core::Object {
  field dynamic bazz;
  constructor •([@vm.inferred-type.metadata=#lib::B] self::A arg) → void
    : self::TearOffInterfaceMethod::bazz = arg.{self::A::foo}, super core::Object::•()
    ;
}
static method knownResult() → dynamic
  return new self::B::•();
static method main(core::List<core::String> args) → dynamic {
  new self::TearOffInterfaceMethod::•(new self::B::•()).{self::TearOffInterfaceMethod::bazz}();
}
