library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
//         this.x = 42 {}
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
//         this.x = 42 {}
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:22:16: Error: 'x' is a final instance variable that was initialized at the declaration.
//       : this.x = 41,
//                ^
// pkg/front_end/testcases/general/initialzation_errors.dart:20:13: Context: 'x' was initialized here.
//   final int x = 2;
//             ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
//         this.x = 42 {}
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
//       : this.x = 41,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
//         this.y = 42 {}
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
//         this.x = 1,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
//         this.y = 2 {}
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
//       : this.x = 1,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
//         this.y = 2;
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
//       : super(),
//         ^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
//         this.x = 1,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:56:16: Error: Can't have initializers after 'super'.
//         this.y = 2;
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
//       : this.x = 1,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
//         this.y = 2,
//                ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
//       : assert(true),
//         ^^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
//         assert(true);
//         ^^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
//         super() {}
//         ^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
//       : super(),
//         ^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
//         super() {}
//         ^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
//         this.named();
//              ^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
//         super() {}
//         ^^^^^
//
// pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
//         this.x = 42 {}
//                ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  field core::int x;
  constructor •() → self::A
    : self::A::x = 41, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
        this.x = 42 {}
               ^", super core::Object::•() {}
}
class B extends core::Object {
  final field core::int x;
  constructor •() → self::B
    : self::B::x = 41, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
        this.x = 42 {}
               ^", super core::Object::•() {}
}
class C extends core::Object {
  final field core::int x = 2;
  constructor •() → self::C
    : final dynamic #t3 = throw new core::_DuplicatedFieldInitializerError::•("x"), final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
        this.x = 42 {}
               ^", super core::Object::•() {}
}
class D extends core::Object {
  final field core::int x;
  final field core::int y;
  constructor •() → self::D
    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
      : this.x = 41,
               ^", final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
        this.y = 42 {}
               ^", this self::D::named() {}
  constructor named() → self::D
    : self::D::x = 41, self::D::y = 42, super core::Object::•() {}
}
class E extends core::Object {
  final field core::int x;
  final field core::int y;
  constructor •() → self::E
    : final dynamic #t7 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
        this.x = 1,
               ^", final dynamic #t8 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
        this.y = 2 {}
               ^", this self::E::named() {}
  constructor named() → self::E
    : self::E::x = 41, self::E::y = 42, super core::Object::•() {}
  constructor named2() → self::E
    : final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
      : this.x = 1,
               ^", final dynamic #t10 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
        this.y = 2;
               ^", this self::E::named()
    ;
  constructor named3() → self::E
    : final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
      : super(),
        ^^^^^", final dynamic #t12 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
        this.x = 1,
               ^", final dynamic #t13 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:56:16: Error: Can't have initializers after 'super'.
        this.y = 2;
               ^", super core::Object::•()
    ;
  constructor named4() → self::E
    : final dynamic #t14 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
      : this.x = 1,
               ^", final dynamic #t15 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
        this.y = 2,
               ^", this self::E::named()
    ;
  constructor named5() → self::E
    : final dynamic #t16 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
      : assert(true),
        ^^^^^^", this self::E::named()
    ;
  constructor named6() → self::E
    : final dynamic #t17 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
        assert(true);
        ^^^^^^", this self::E::named()
    ;
}
class F extends core::Object {
  constructor •() → self::F
    : final dynamic #t18 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
        super() {}
        ^^^^^", this self::F::named() {}
  constructor named() → self::F
    : super core::Object::•() {}
}
class G extends core::Object {
  constructor •() → self::G
    : final dynamic #t19 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
      : super(),
        ^^^^^", final dynamic #t20 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
        super() {}
        ^^^^^", super core::Object::•() {}
  constructor named() → self::G
    : super core::Object::•() {}
}
class H extends core::Object {
  constructor •() → self::H
    : final dynamic #t21 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
        this.named();
             ^", this self::H::named()
    ;
  constructor named() → self::H
    : super core::Object::•() {}
}
class I extends core::Object {
  constructor •() → self::I
    : final dynamic #t22 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
        super() {}
        ^^^^^", super core::Object::•() {}
}
class J extends core::Object {
  field core::int x;
  constructor •() → self::J
    : final dynamic #t23 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
        this.x = 42 {}
               ^", super core::Object::•() {}
}
static method main() → dynamic {}
