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:65: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.
//   D6([int super.x]); // Error
//                 ^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:118: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:127: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 D6 extends self::C6 {
  constructor •([core::int x = #C4]) → self::D6
    : super self::C6::•(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
}
