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

abstract class M extends core::Object {
  field dynamic m = null;
  synthetic constructor •() → self::M
    : super core::Object::•()
    ;
}
abstract class N extends self::M {
  synthetic constructor •() → self::N
    : super self::M::•()
    ;
  set superM(dynamic value) → void {
    super.{self::M::m} = value;
  }
  get superM() → dynamic
    return super.{self::M::m};
}
class S extends core::Object {
  synthetic constructor •() → self::S
    : super core::Object::•()
    ;
}
abstract class _Named&S&M = self::S with self::M {
  synthetic constructor •() → self::_Named&S&M
    : super self::S::•()
    ;
}
abstract class _Named&S&M&N = self::_Named&S&M with self::N {
  synthetic constructor •() → self::_Named&S&M&N
    : super self::_Named&S&M::•()
    ;
}
class Named = self::_Named&S&M&N with self::M {
  synthetic constructor •() → self::Named
    : super self::_Named&S&M&N::•()
    ;
}
static method main() → dynamic {
  self::Named named = new self::Named::•();
  named.m = 42;
  named.superM = 87;
  if(!named.m.==(42)) {
    throw "Bad mixin translation of set:superM";
  }
  if(!named.superM.==(87)) {
    throw "Bad mixin translation of get:superM";
  }
}
