library;
import self as self;
import "dart:core" as core;
import "synthesized_super_constructor_with_parameters_lib.dart" as syn;

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

class A1 extends core::Object {
  final field core::int a;
  constructor •(core::int a) → self::A1
    : self::A1::a = a, super core::Object::•()
    ;
}
abstract class B1 extends core::Object /*isMixinDeclaration*/  {
}
class C1 = self::A1 with self::B1 {
  synthetic constructor •(core::int a) → self::C1
    : super self::A1::•(a)
    ;
}
class D1 extends self::C1 {
  constructor •(core::int a) → self::D1
    : super self::C1::•(a)
    ;
}
class A2 extends core::Object {
  final field core::int a;
  constructor •({core::int a = #C1}) → self::A2
    : self::A2::a = a, super core::Object::•()
    ;
}
abstract class B2 extends core::Object /*isMixinDeclaration*/  {
}
class C2 = self::A2 with self::B2 {
  synthetic constructor •({core::int a = #C1}) → self::C2
    : super self::A2::•(a: a)
    ;
}
class D2 extends self::C2 {
  constructor •({core::int a = #C1}) → self::D2
    : super self::C2::•(a: a)
    ;
}
class A3 extends core::Object {
  final field core::int a;
  constructor •([core::int a = #C1]) → self::A3
    : self::A3::a = a, super core::Object::•()
    ;
}
abstract class B3 extends core::Object /*isMixinDeclaration*/  {
}
class C3 = self::A3 with self::B3 {
  synthetic constructor •([core::int a = #C1]) → self::C3
    : super self::A3::•(a)
    ;
}
class D3 extends self::C3 {
  constructor •([core::int a = #C1]) → self::D3
    : super self::C3::•(a)
    ;
}
class D4 extends self::C4 {
  constructor •([core::int foo = #C2]) → self::D4
    : super self::C4::•(foo)
    ;
}
class C4 = self::A4 with self::B4 {
  synthetic constructor •([core::int foo = #C2]) → self::C4
    : super self::A4::•(foo)
    ;
}
abstract class B4 extends core::Object /*isMixinDeclaration*/  {
}
class A4 extends self::AA4 {
  constructor •([core::int foo = #C2]) → self::A4
    : super self::AA4::•(foo)
    ;
}
class AA4 extends core::Object {
  final field core::int foo;
  constructor •([core::int foo = #C2]) → self::AA4
    : self::AA4::foo = foo, super core::Object::•()
    ;
}
class D5 extends self::C5c {
  constructor •([core::int foo = #C2]) → self::D5
    : super self::C5c::•(foo)
    ;
}
class C5c = self::C5b with self::B5 {
  synthetic constructor •([core::int foo = #C2]) → self::C5c
    : super self::C5b::•(foo)
    ;
}
class C5b = self::C5a with self::B5 {
  synthetic constructor •([core::int foo = #C2]) → self::C5b
    : super self::C5a::•(foo)
    ;
}
class C5a = self::A5 with self::B5 {
  synthetic constructor •([core::int foo = #C2]) → self::C5a
    : super self::A5::•(foo)
    ;
}
abstract class B5 extends core::Object /*isMixinDeclaration*/  {
}
class A5 extends self::AA5 {
  constructor •([core::int foo = #C2]) → self::A5
    : super self::AA5::•(foo)
    ;
}
class AA5 extends core::Object {
  final field core::int foo;
  constructor •([core::int foo = #C2]) → self::AA5
    : self::AA5::foo = foo, super core::Object::•()
    ;
}
class D6 extends syn::C6 {
  constructor •({core::int a = #C1}) → self::D6
    : super syn::C6::•(a: a)
    ;
}
abstract class B7 extends core::Object /*isMixinDeclaration*/  {
}
class C7 = syn::A7 with self::B7 {
  synthetic constructor •([core::int a = #C1]) → self::C7
    : super syn::A7::•(a)
    ;
}
class D7 extends self::C7 {
  constructor •([core::int a = #C1]) → self::D7
    : super self::C7::•(a)
    ;
}
class D8 extends syn::C8 {
  constructor •({core::int? a = #C3}) → self::D8
    : super syn::C8::•(a: a)
    ;
}
abstract class B9 extends core::Object /*isMixinDeclaration*/  {
}
class C9 = syn::A9 with self::B9 {
  synthetic constructor •([core::int? a = #C3]) → self::C9
    : super syn::A9::•(a)
    ;
}
class D9 extends self::C9 {
  constructor •([core::int? a = #C3]) → self::D9
    : super self::C9::•(a)
    ;
}
static method main() → dynamic {}

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

class A6 extends core::Object {
  final field core::int a;
  constructor •({core::int a = #C1}) → syn::A6
    : syn::A6::a = a, super core::Object::•()
    ;
}
abstract class B6 extends core::Object /*isMixinDeclaration*/  {
}
class C6 = syn::A6 with syn::B6 {
  synthetic constructor •({core::int a = #C1}) → syn::C6
    : super syn::A6::•(a: a)
    ;
}
class A7 extends core::Object {
  final field core::int a;
  constructor •([core::int a = #C1]) → syn::A7
    : syn::A7::a = a, super core::Object::•()
    ;
}
class A8 extends core::Object {
  final field core::int? a;
  constructor •({core::int? a = #C3}) → syn::A8
    : syn::A8::a = a, super core::Object::•()
    ;
}
abstract class B8 extends core::Object /*isMixinDeclaration*/  {
}
class C8 = syn::A8 with syn::B8 {
  synthetic constructor •({core::int? a = #C3}) → syn::C8
    : super syn::A8::•(a: a)
    ;
}
class A9 extends core::Object {
  final field core::int? a;
  constructor •([core::int? a = #C3]) → syn::A9
    : syn::A9::a = a, super core::Object::•()
    ;
}

constants  {
  #C1 = 0
  #C2 = 42
  #C3 = null
}
