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

abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
  field dynamic field = null;
  method foo() → dynamic
    return 87;
}
class Foo extends self::_Foo&Object&Mixin {
  synthetic constructor •() → self::Foo
    : super self::_Foo&Object&Mixin::•()
    ;
  method foo() → dynamic
    return super.{self::_Foo&Object&Mixin::foo}();
  method bar() → dynamic
    return super.{self::_Foo&Object&Mixin::field};
}
abstract class _Foo&Object&Mixin extends core::Object implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
  field dynamic field = null;
  synthetic constructor •() → self::_Foo&Object&Mixin
    : super core::Object::•()
    ;
  method foo() → dynamic
    return 87;
}
static method main() → dynamic {
  self::Foo f = new self::Foo::•();
  f.{self::_Foo&Object&Mixin::field} = 42;
  core::print(f.{self::Foo::bar}(){() → dynamic});
}
