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

abstract class Base extends core::Object {
  synthetic constructor •() → self::Base
    : super core::Object::•()
    ;
}
class Foo extends self::Base {
  synthetic constructor •() → self::Foo
    : super self::Base::•()
    ;
}
class Bar extends self::Base {
  synthetic constructor •() → self::Bar
    : super self::Base::•()
    ;
}
class Baz extends self::Base {
  synthetic constructor •() → self::Baz
    : super self::Base::•()
    ;
}
static method foo(dynamic x) → void {}
static method bar(dynamic x) → void {}
static method foo_escaped(dynamic x) → void {}
static method bar_escaped(dynamic x) → void {}
static method escape(dynamic fn) → void {
  fn.call(new self::Baz::•());
}
static method main() → dynamic {
  self::foo(new self::Foo::•());
  self::bar(new self::Bar::•());
  self::escape(self::foo_escaped);
  self::escape(self::bar_escaped);
}
