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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method noSuchMethod(core::Invocation i) → dynamic {
    return null;
  }
}
abstract class _B&Object&A = core::Object with self::A {
  synthetic constructor •() → self::_B&Object&A
    : super core::Object::•()
    ;
}
class B extends self::_B&Object&A {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  no-such-method-forwarder method foo() → void
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
}
static method main() → dynamic {}
