library /*isNonNullableByDefault*/;
import self as self;
import "b_lib.dart" as b_l;
import "a_lib.dart" as a_l;
import "dart:core" as core;

import "org-dartlang-testcase:///b_lib.dart";

static method main() → dynamic {
  b_l::B bInst = new b_l::B::•();
  self::expect(2.71, bInst.{a_l::A::d}{core::double});
  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}.";
}

library /*isNonNullableByDefault*/;
import self as b_l;
import "a_lib.dart" as a_l;
import "m_lib.dart" as m_l;
import "dart:core" as core;

import "org-dartlang-testcase:///a_lib.dart";
import "org-dartlang-testcase:///m_lib.dart";

abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
  synthetic constructor •({core::double d, (core::String) → core::String s}) → b_l::_B&A&M
    : super a_l::A::•(d: d, s: s)
    ;
  synthetic constructor factoryConstructor({core::double d, (core::String) → core::String s}) → b_l::_B&A&M
    : super a_l::A::factoryConstructor(d: d, s: s)
    ;
  mixin-super-stub method m1() → dynamic
    return super.{m_l::M::m1}();
}
class B extends b_l::_B&A&M {
  constructor •({core::double d = #C1}) → b_l::B
    : super b_l::_B&A&M::•(d: d)
    ;
  static method _#new#tearOff({core::double d = #C1}) → b_l::B
    return new b_l::B::•(d: d);
}

library /*isNonNullableByDefault*/;
import self as m_l;
import "a_lib.dart" as a_l;

import "org-dartlang-testcase:///a_lib.dart";

abstract class M extends a_l::A /*isMixinDeclaration*/  {
  method m1() → dynamic {}
}

constants  {
  #C1 = 2.71
}
