library /*isNonNullableByDefault*/;
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::•()
    ;
}
class B1 extends core::Object {
  synthetic constructor •() → self::B1
    : super core::Object::•()
    ;
}
class C1 extends self::A1 implements self::B1 /*isEliminatedMixin*/  {
  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::•()
    ;
}
class B2 extends core::Object {
  synthetic constructor •() → self::B2
    : super core::Object::•()
    ;
}
class C2 extends self::A2 implements self::B2 /*isEliminatedMixin*/  {
  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::•()
    ;
}
class B3 extends core::Object {
  synthetic constructor •() → self::B3
    : super core::Object::•()
    ;
}
class C3 extends self::A3 implements self::B3 /*isEliminatedMixin*/  {
  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 extends self::A4 implements self::B4 /*isEliminatedMixin*/  {
  synthetic constructor •([core::int foo = #C2]) → self::C4
    : super self::A4::•(foo)
    ;
}
class B4 extends core::Object {
  synthetic constructor •() → self::B4
    : super core::Object::•()
    ;
}
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 extends self::C5b implements self::B5 /*isEliminatedMixin*/  {
  synthetic constructor •([core::int foo = #C2]) → self::C5c
    : super self::C5b::•(foo)
    ;
}
class C5b extends self::C5a implements self::B5 /*isEliminatedMixin*/  {
  synthetic constructor •([core::int foo = #C2]) → self::C5b
    : super self::C5a::•(foo)
    ;
}
class C5a extends self::A5 implements self::B5 /*isEliminatedMixin*/  {
  synthetic constructor •([core::int foo = #C2]) → self::C5a
    : super self::A5::•(foo)
    ;
}
class B5 extends core::Object {
  synthetic constructor •() → self::B5
    : super core::Object::•()
    ;
}
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)
    ;
}
class B7 extends core::Object {
  synthetic constructor •() → self::B7
    : super core::Object::•()
    ;
}
class C7 extends syn::A7 implements self::B7 /*isEliminatedMixin*/  {
  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)
    ;
}
class B9 extends core::Object {
  synthetic constructor •() → self::B9
    : super core::Object::•()
    ;
}
class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
  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 /*isNonNullableByDefault*/;
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::•()
    ;
}
class B6 extends core::Object {
  synthetic constructor •() → syn::B6
    : super core::Object::•()
    ;
}
class C6 extends syn::A6 implements syn::B6 /*isEliminatedMixin*/  {
  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::•()
    ;
}
class B8 extends core::Object {
  synthetic constructor •() → syn::B8
    : super core::Object::•()
    ;
}
class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
  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
}
