library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
//   C5([int super.x]); // Error.
//           ^^^^^
//
// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
//   C6([int? super.x]); // Ok.
//          ^
//
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 •([dynamic int = #C4]) → self::C5
    : super self::S5::•()
    ;
}
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 •([dynamic int = #C4]) → self::C6
    : super self::S6::•()
    ;
}
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::•()
    ;
}
static method main() → dynamic {}

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