library;
//
// Problems in library:
//
// pkg/front_end/testcases/dart2js/mixin_constructor.dart:8:3: Error: Mixins can't declare constructors.
//   M.baz();
//   ^
//
// pkg/front_end/testcases/dart2js/mixin_constructor.dart:11:7: Error: Can't use 'M' as a mixin because it has constructors.
// class MA extends A with M {}
//       ^
// pkg/front_end/testcases/dart2js/mixin_constructor.dart:8:3: Context: This constructor prevents using 'M' as a mixin.
//   M.baz();
//   ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  static method _#new#tearOff() → self::A
    return new self::A::•();
}
abstract class M extends self::A /*isMixinDeclaration*/  {
  constructor baz() → self::M
    : super self::A::•()
    ;
}
abstract class _MA&A&M = self::A with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_MA&A&M
    : super self::A::•()
    ;
}
class MA extends self::_MA&A&M {
  synthetic constructor •() → self::MA
    : super self::_MA&A&M::•()
    ;
  static method _#new#tearOff() → self::MA
    return new self::MA::•();
}
static method test() → dynamic {
  new self::MA::•();
}
