library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
//   C5([int super.x]); // Error.
//                 ^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
//   Bp([int super.x]); // Error.
//                 ^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
//   Bn({int super.x}); // Error.
//                 ^
//
import self as self;
import "dart:core" as core;

class S1 extends core::Object {
  field core::int s;
  constructor •([core::int x = #C1]) → self::S1
    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C1 extends self::S1 {
  field core::int c;
  constructor •([core::int x = #C1]) → self::C1
    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
    ;
}
class S2 extends core::Object {
  field core::int s;
  constructor •({core::int x = #C1}) → self::S2
    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C2 extends self::S2 {
  field core::int c;
  constructor •({core::int x = #C1}) → self::C2
    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
    ;
}
class S3 extends core::Object {
  field core::int s;
  constructor •([core::int x = #C1]) → self::S3
    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C3 extends self::S3 {
  field core::int c;
  constructor •([core::int x = #C2]) → self::C3
    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
    ;
}
class S4 extends core::Object {
  field core::int s;
  constructor •({core::int x = #C1}) → self::S4
    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C4 extends self::S4 {
  field core::int c;
  constructor •({core::int x = #C2}) → self::C4
    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
    ;
}
class S5 extends core::Object {
  field core::num a;
  constructor •([core::num x = #C3]) → self::S5
    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
    ;
}
class C5 extends self::S5 {
  constructor •([core::int x = #C4]) → self::C5
    : super self::S5::•(x)
    ;
}
class S6 extends core::Object {
  field core::num? a;
  constructor •([core::num? x = #C3]) → self::S6
    : self::S6::a = x, super core::Object::•()
    ;
}
class C6 extends self::S6 {
  field core::int? b = null;
  constructor •([core::int? x = #C4]) → self::C6
    : super self::S6::•(x)
    ;
}
class S7 extends core::Object {
  field core::int s;
  constructor •([core::int x = #C1]) → self::S7
    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C7 extends self::S7 {
  field core::int c;
  constructor •([core::int x = #C1]) → self::C7
    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
    ;
}
class CC7 extends self::C7 {
  field core::int cc;
  constructor •([core::int x = #C1]) → self::CC7
    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
    ;
}
class S8 extends core::Object {
  field core::int s;
  constructor •([core::int x = #C1]) → self::S8
    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class CC8 extends self::C8 {
  field core::int cc;
  constructor •([core::int x = #C1]) → self::CC8
    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
    ;
}
class C8 extends self::S8 {
  field core::int c;
  constructor •([core::int x = #C1]) → self::C8
    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
    ;
}
class CC9 extends self::C9 {
  field core::int cc;
  constructor •([core::int x = #C1]) → self::CC9
    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
    ;
}
class C9 extends self::S9 {
  field core::int c;
  constructor •([core::int x = #C1]) → self::C9
    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
    ;
}
class S9 extends core::Object {
  field core::int s;
  constructor •([core::int x = #C1]) → self::S9
    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class Ap extends core::Object {
  constructor •([core::num x = #C3]) → self::Ap
    : super core::Object::•()
    ;
}
class Bp extends self::Ap {
  constructor •([core::int x = #C4]) → self::Bp
    : super self::Ap::•(x)
    ;
  constructor req(core::int x) → self::Bp
    : super self::Ap::•(x)
    ;
}
class An extends core::Object {
  constructor •({core::num x = #C3}) → self::An
    : super core::Object::•()
    ;
}
class Bn extends self::An {
  constructor •({core::int x = #C4}) → self::Bn
    : super self::An::•(x: x)
    ;
  constructor req({required core::int x = #C4}) → self::Bn
    : super self::An::•(x: x)
    ;
}
static method main() → dynamic {}

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