library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class Mixin extends core::Object {
  field dynamic field = null;
  synthetic constructor •() → self::Mixin
    : super core::Object::•()
    ;
  method foo() → dynamic
    return 87;
}
abstract class _Foo&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Foo&Object&Mixin
    : super core::Object::•()
    ;
  mixin-super-stub method foo() → dynamic
    return super.{self::Mixin::foo}();
  mixin-super-stub get field() → dynamic
    return super.{self::Mixin::field};
  mixin-super-stub set field(dynamic value) → void
    return super.{self::Mixin::field} = value;
}
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};
}
static method main() → dynamic {
  self::Foo f = new self::Foo::•();
  f.{self::_Foo&Object&Mixin::field} = 42;
  core::print(f.{self::Foo::bar}(){() → dynamic});
}
