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

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