library;
//
// 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:119:18: 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.
//   C5b({int super.x}); // Error.
//                  ^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:133:18: 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.
//   D6b({int super.x}); // Error
//                  ^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:186: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:195: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 S5b extends core::Object {
  field core::num a;
  constructor •({core::num x = #C3}) → self::S5b
    : self::S5b::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
    ;
}
class C5b extends self::S5b {
  constructor •({core::int x = #C4}) → self::C5b
    : super self::S5b::•(x: x)
    ;
}
class S6b extends core::Object {
  field core::num? a;
  constructor •({core::num? x = #C3}) → self::S6b
    : self::S6b::a = x, super core::Object::•()
    ;
}
class C6b extends self::S6b {
  field core::int? b = null;
  constructor •({core::int? x = #C4}) → self::C6b
    : super self::S6b::•(x: x)
    ;
}
class D6b extends self::C6b {
  constructor •({core::int x = #C4}) → self::D6b
    : super self::C6b::•(x: x)
    ;
}
class S7b extends core::Object {
  field core::int s;
  constructor •({core::int x = #C1}) → self::S7b
    : self::S7b::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class C7b extends self::S7b {
  field core::int c;
  constructor •({core::int x = #C1}) → self::C7b
    : self::C7b::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7b::•(x: x)
    ;
}
class CC7b extends self::C7b {
  field core::int cc;
  constructor •({core::int x = #C1}) → self::CC7b
    : self::CC7b::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7b::•(x: x)
    ;
}
class S8b extends core::Object /*hasConstConstructor*/  {
  final field core::int s;
  const constructor •({core::int x = #C1}) → self::S8b
    : self::S8b::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
    ;
}
class CC8b extends self::C8b /*hasConstConstructor*/  {
  final field core::int cc;
  const constructor •({core::int x = #C1}) → self::CC8b
    : self::CC8b::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8b::•(x: x)
    ;
}
class C8b extends self::S8b /*hasConstConstructor*/  {
  final field core::int c;
  const constructor •({core::int x = #C1}) → self::C8b
    : self::C8b::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8b::•(x: x)
    ;
}
class CC9b extends self::C9b {
  field core::int cc;
  constructor •({core::int x = #C1}) → self::CC9b
    : self::CC9b::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9b::•(x: x)
    ;
}
class C9b extends self::S9b {
  field core::int c;
  constructor •({core::int x = #C1}) → self::C9b
    : self::C9b::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9b::•(x: x)
    ;
}
class S9b extends core::Object {
  field core::int s;
  constructor •({core::int x = #C1}) → self::S9b
    : self::S9b::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}) → self::Bn
    : super self::An::•(x: x)
    ;
}
static method main() → dynamic {}

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