// Formatted problems:
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: 'n' is already declared in this scope.
//   set n(_) {}
//       ^
// pkg/front_end/testcases/rasta/super.dart:26:8: Context: Previous declaration of 'n'.
//   void n() {}
//        ^
//
// pkg/front_end/testcases/rasta/super.dart:26:8: Error: Can't declare a member that conflicts with an inherited one.
//   void n() {}
//        ^
// pkg/front_end/testcases/rasta/super.dart:27:7: Context: This is the inherited member.
//   set n(_) {}
//       ^
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: Can't declare a member that conflicts with an inherited one.
//   set n(_) {}
//       ^
// pkg/front_end/testcases/rasta/super.dart:26:8: Context: This is the inherited member.
//   void n() {}
//        ^
//
// pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
// Try removing '+'.
//     +super;
//     ^
//
// pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
// To delegate a constructor to a super constructor, put the super call as an initializer.
//     +super;
//      ^^^^^
//
// pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.
// Try removing '+'.
//     use(+super);
//         ^
//
// pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
// To delegate a constructor to a super constructor, put the super call as an initializer.
//     use(+super);
//          ^^^^^
//
// pkg/front_end/testcases/rasta/super.dart:62:11: Warning: Superclass has no getter named 'g'.
//     super.g;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:63:15: Warning: Superclass has no getter named 'g'.
//     use(super.g);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:83:11: Warning: Superclass has no setter named 'e'.
//     super.e++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:84:15: Warning: Superclass has no setter named 'e'.
//     use(super.e++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:85:11: Warning: Superclass has no setter named 'f'.
//     super.f++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:86:15: Warning: Superclass has no setter named 'f'.
//     use(super.f++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:87:11: Warning: Superclass has no getter named 'g'.
//     super.g++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:88:15: Warning: Superclass has no getter named 'g'.
//     use(super.g++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:95:11: Warning: Superclass has no setter named 'm'.
//     super.m++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:96:15: Warning: Superclass has no setter named 'm'.
//     use(super.m++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:108:13: Warning: Superclass has no setter named 'e'.
//     ++super.e;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:109:17: Warning: Superclass has no setter named 'e'.
//     use(++super.e);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:110:13: Warning: Superclass has no setter named 'f'.
//     ++super.f;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:111:17: Warning: Superclass has no setter named 'f'.
//     use(++super.f);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:112:13: Warning: Superclass has no getter named 'g'.
//     ++super.g;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:113:17: Warning: Superclass has no getter named 'g'.
//     use(++super.g);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:120:13: Warning: Superclass has no setter named 'm'.
//     ++super.m;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:121:17: Warning: Superclass has no setter named 'm'.
//     use(++super.m);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:137:11: Warning: Superclass has no method named 'g'.
//     super.g();
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:138:15: Warning: Superclass has no method named 'g'.
//     use(super.g());
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:160:11: Warning: Superclass has no setter named 'e'.
//     super.e = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:161:15: Warning: Superclass has no setter named 'e'.
//     use(super.e = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:162:11: Warning: Superclass has no setter named 'f'.
//     super.f = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:163:15: Warning: Superclass has no setter named 'f'.
//     use(super.f = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:172:11: Warning: Superclass has no setter named 'm'.
//     super.m = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:173:15: Warning: Superclass has no setter named 'm'.
//     use(super.m = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:185:11: Warning: Superclass has no setter named 'e'.
//     super.e ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:186:15: Warning: Superclass has no setter named 'e'.
//     use(super.e ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:187:11: Warning: Superclass has no setter named 'f'.
//     super.f ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:188:15: Warning: Superclass has no setter named 'f'.
//     use(super.f ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:189:11: Warning: Superclass has no getter named 'g'.
//     super.g ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:190:15: Warning: Superclass has no getter named 'g'.
//     use(super.g ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:197:11: Warning: Superclass has no setter named 'm'.
//     super.m ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:198:15: Warning: Superclass has no setter named 'm'.
//     use(super.m ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:210:11: Warning: Superclass has no setter named 'e'.
//     super.e += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:211:15: Warning: Superclass has no setter named 'e'.
//     use(super.e += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:212:11: Warning: Superclass has no setter named 'f'.
//     super.f += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:213:15: Warning: Superclass has no setter named 'f'.
//     use(super.f += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:214:11: Warning: Superclass has no getter named 'g'.
//     super.g += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:215:15: Warning: Superclass has no getter named 'g'.
//     use(super.g += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:222:11: Warning: Superclass has no setter named 'm'.
//     super.m += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:223:15: Warning: Superclass has no setter named 'm'.
//     use(super.m += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:235:11: Warning: Superclass has no setter named 'e'.
//     super.e -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:236:15: Warning: Superclass has no setter named 'e'.
//     use(super.e -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:237:11: Warning: Superclass has no setter named 'f'.
//     super.f -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:238:15: Warning: Superclass has no setter named 'f'.
//     use(super.f -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:239:11: Warning: Superclass has no getter named 'g'.
//     super.g -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:240:15: Warning: Superclass has no getter named 'g'.
//     use(super.g -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:247:11: Warning: Superclass has no setter named 'm'.
//     super.m -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:248:15: Warning: Superclass has no setter named 'm'.
//     use(super.m -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:11:9: Error: Final field 'f' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   final f;
//         ^
//
// pkg/front_end/testcases/rasta/super.dart:33:9: Error: Final field 'd' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   final d;
//         ^

// Unhandled errors:
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: 'n' is already declared in this scope.
//   set n(_) {}
//       ^
//
// pkg/front_end/testcases/rasta/super.dart:26:8: Error: Can't declare a member that conflicts with an inherited one.
//   void n() {}
//        ^
//
// pkg/front_end/testcases/rasta/super.dart:27:7: Error: Can't declare a member that conflicts with an inherited one.
//   set n(_) {}
//       ^
//
// pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
// Try removing '+'.
//     +super;
//     ^
//
// pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.
// Try removing '+'.
//     use(+super);
//         ^
//
// pkg/front_end/testcases/rasta/super.dart:11:9: Error: Final field 'f' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   final f;
//         ^
//
// pkg/front_end/testcases/rasta/super.dart:33:9: Error: Final field 'd' is not initialized.
// Try to initialize the field in the declaration or in every constructor.
//   final d;
//         ^

library;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  field dynamic a = null;
  field dynamic b = null;
  field dynamic c = null;
  field dynamic d = null;
  final field dynamic f = null;
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get e() → dynamic
    return null;
  set g(dynamic _) → dynamic {}
  get h() → dynamic
    return null;
  set h(dynamic _) → dynamic {}
  get i() → dynamic
    return null;
  operator [](dynamic _) → dynamic
    return null;
  operator []=(dynamic a, dynamic b) → dynamic {}
  operator ~() → dynamic
    return 117;
  operator unary-() → dynamic
    return 117;
  operator ==(dynamic other) → dynamic
    return true;
  method m() → void {}
  method n() → void {}
  set n(dynamic _) → dynamic {}
}
class B extends self::A {
  final field dynamic d = null;
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  get b() → dynamic
    return null;
  set c(dynamic x) → dynamic {}
  set i(dynamic x) → dynamic {}
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
  method test() → dynamic {
    super.{self::A::~}();
    self::use(super.{self::A::~}());
    super.{self::A::unary-}();
    self::use(super.{self::A::unary-}());
    invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: This couldn't be parsed.
    +super;
    ^".+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
To delegate a constructor to a super constructor, put the super call as an initializer.
    +super;
     ^^^^^");
    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: This couldn't be parsed.
    use(+super);
        ^".+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
To delegate a constructor to a super constructor, put the super call as an initializer.
    use(+super);
         ^^^^^"));
    super.{self::A::==}(87);
    self::use(super.{self::A::==}(87));
    !super.{self::A::==}(87);
    self::use(!super.{self::A::==}(87));
    super.{self::A::a};
    self::use(super.{self::A::a});
    super.{self::B::b};
    self::use(super.{self::B::b});
    super.{self::A::c};
    self::use(super.{self::A::c});
    super.{self::B::d};
    self::use(super.{self::B::d});
    super.{self::A::e};
    self::use(super.{self::A::e});
    super.{self::A::f};
    self::use(super.{self::A::f});
    super.g;
    self::use(super.g);
    super.{self::A::h};
    self::use(super.{self::A::h});
    super.{self::A::i};
    self::use(super.{self::A::i});
    super.{self::A::[]}(87);
    self::use(super.{self::A::[]}(87));
    super.{self::A::m};
    self::use(super.{self::A::m});
    super.{self::A::n};
    self::use(super.{self::A::n});
    super.{self::A::a} = super.{self::A::a}.+(1);
    self::use(let final dynamic #t1 = super.{self::A::a} in let final dynamic #t2 = super.{self::A::a} = #t1.+(1) in #t1);
    super.{self::A::b} = super.{self::B::b}.+(1);
    self::use(let final dynamic #t3 = super.{self::B::b} in let final dynamic #t4 = super.{self::A::b} = #t3.+(1) in #t3);
    super.{self::B::c} = super.{self::A::c}.+(1);
    self::use(let final dynamic #t5 = super.{self::A::c} in let final dynamic #t6 = super.{self::B::c} = #t5.+(1) in #t5);
    super.{self::A::d} = super.{self::B::d}.+(1);
    self::use(let final dynamic #t7 = super.{self::B::d} in let final dynamic #t8 = super.{self::A::d} = #t7.+(1) in #t7);
    super.e = super.{self::A::e}.+(1);
    self::use(let final dynamic #t9 = super.{self::A::e} in let final dynamic #t10 = super.e = #t9.+(1) in #t9);
    super.f = super.{self::A::f}.+(1);
    self::use(let final dynamic #t11 = super.{self::A::f} in let final dynamic #t12 = super.f = #t11.+(1) in #t11);
    super.{self::A::g} = super.g.+(1);
    self::use(let final dynamic #t13 = super.g in let final dynamic #t14 = super.{self::A::g} = #t13.+(1) in #t13);
    super.{self::A::h} = super.{self::A::h}.+(1);
    self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15.+(1) in #t15);
    super.{self::B::i} = super.{self::A::i}.+(1);
    self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17.+(1) in #t17);
    let final dynamic #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19).+(1));
    self::use(let final dynamic #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final dynamic #t22 = super.{self::A::[]=}(#t20, #t21.+(1)) in #t21);
    super.m = super.{self::A::m}.+(1);
    self::use(let final dynamic #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = #t23.+(1) in #t23);
    super.{self::A::n} = super.{self::A::n}.+(1);
    self::use(let final dynamic #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = #t25.+(1) in #t25);
    super.{self::A::a} = super.{self::A::a}.+(1);
    self::use(super.{self::A::a} = super.{self::A::a}.+(1));
    super.{self::A::b} = super.{self::B::b}.+(1);
    self::use(super.{self::A::b} = super.{self::B::b}.+(1));
    super.{self::B::c} = super.{self::A::c}.+(1);
    self::use(super.{self::B::c} = super.{self::A::c}.+(1));
    super.{self::A::d} = super.{self::B::d}.+(1);
    self::use(super.{self::A::d} = super.{self::B::d}.+(1));
    super.e = super.{self::A::e}.+(1);
    self::use(super.e = super.{self::A::e}.+(1));
    super.f = super.{self::A::f}.+(1);
    self::use(super.f = super.{self::A::f}.+(1));
    super.{self::A::g} = super.g.+(1);
    self::use(super.{self::A::g} = super.g.+(1));
    super.{self::A::h} = super.{self::A::h}.+(1);
    self::use(super.{self::A::h} = super.{self::A::h}.+(1));
    super.{self::B::i} = super.{self::A::i}.+(1);
    self::use(super.{self::B::i} = super.{self::A::i}.+(1));
    let final dynamic #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27).+(1) in let final dynamic #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
    self::use(let final dynamic #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30).+(1) in let final dynamic #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
    super.m = super.{self::A::m}.+(1);
    self::use(super.m = super.{self::A::m}.+(1));
    super.{self::A::n} = super.{self::A::n}.+(1);
    self::use(super.{self::A::n} = super.{self::A::n}.+(1));
    super.{self::A::a}.call();
    self::use(super.{self::A::a}.call());
    super.{self::B::b}.call();
    self::use(super.{self::B::b}.call());
    super.{self::A::c}.call();
    self::use(super.{self::A::c}.call());
    super.{self::B::d}.call();
    self::use(super.{self::B::d}.call());
    super.{self::A::e}.call();
    self::use(super.{self::A::e}.call());
    super.{self::A::f}.call();
    self::use(super.{self::A::f}.call());
    super.g();
    self::use(super.g());
    super.{self::A::h}.call();
    self::use(super.{self::A::h}.call());
    super.{self::A::i}.call();
    self::use(super.{self::A::i}.call());
    super.{self::A::[]}(87).call();
    self::use(super.{self::A::[]}(87).call());
    super.{self::A::m}();
    self::use(super.{self::A::m}());
    super.{self::A::m}(87);
    self::use(super.{self::A::m}(87));
    super.{self::A::n}(87);
    self::use(super.{self::A::n}(87));
    super.{self::A::a} = 42;
    self::use(super.{self::A::a} = 42);
    super.{self::A::b} = 42;
    self::use(super.{self::A::b} = 42);
    super.{self::B::c} = 42;
    self::use(super.{self::B::c} = 42);
    super.{self::A::d} = 42;
    self::use(super.{self::A::d} = 42);
    super.e = 42;
    self::use(super.e = 42);
    super.f = 42;
    self::use(super.f = 42);
    super.{self::A::g} = 42;
    self::use(super.{self::A::g} = 42);
    super.{self::A::h} = 42;
    self::use(super.{self::A::h} = 42);
    super.{self::B::i} = 42;
    self::use(super.{self::B::i} = 42);
    super.{self::A::[]=}(87, 42);
    self::use(let final dynamic #t33 = 87 in let final dynamic #t34 = 42 in let final dynamic #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
    super.m = 42;
    self::use(super.m = 42);
    super.{self::A::n} = 42;
    self::use(super.{self::A::n} = 42);
    super.{self::A::a}.==(null) ? super.{self::A::a} = 42 : null;
    self::use(let final dynamic #t36 = super.{self::A::a} in #t36.==(null) ? super.{self::A::a} = 42 : #t36);
    super.{self::B::b}.==(null) ? super.{self::A::b} = 42 : null;
    self::use(let final dynamic #t37 = super.{self::B::b} in #t37.==(null) ? super.{self::A::b} = 42 : #t37);
    super.{self::A::c}.==(null) ? super.{self::B::c} = 42 : null;
    self::use(let final dynamic #t38 = super.{self::A::c} in #t38.==(null) ? super.{self::B::c} = 42 : #t38);
    super.{self::B::d}.==(null) ? super.{self::A::d} = 42 : null;
    self::use(let final dynamic #t39 = super.{self::B::d} in #t39.==(null) ? super.{self::A::d} = 42 : #t39);
    super.{self::A::e}.==(null) ? super.e = 42 : null;
    self::use(let final dynamic #t40 = super.{self::A::e} in #t40.==(null) ? super.e = 42 : #t40);
    super.{self::A::f}.==(null) ? super.f = 42 : null;
    self::use(let final dynamic #t41 = super.{self::A::f} in #t41.==(null) ? super.f = 42 : #t41);
    super.g.==(null) ? super.{self::A::g} = 42 : null;
    self::use(let final dynamic #t42 = super.g in #t42.==(null) ? super.{self::A::g} = 42 : #t42);
    super.{self::A::h}.==(null) ? super.{self::A::h} = 42 : null;
    self::use(let final dynamic #t43 = super.{self::A::h} in #t43.==(null) ? super.{self::A::h} = 42 : #t43);
    super.{self::A::i}.==(null) ? super.{self::B::i} = 42 : null;
    self::use(let final dynamic #t44 = super.{self::A::i} in #t44.==(null) ? super.{self::B::i} = 42 : #t44);
    let final dynamic #t45 = 87 in super.{self::A::[]}(#t45).==(null) ? let final dynamic #t46 = 42 in let final dynamic #t47 = super.{self::A::[]=}(#t45, #t46) in #t46 : null;
    self::use(let final dynamic #t48 = 87 in let final dynamic #t49 = super.{self::A::[]}(#t48) in #t49.==(null) ? let final dynamic #t50 = 42 in let final dynamic #t51 = super.{self::A::[]=}(#t48, #t50) in #t50 : #t49);
    super.{self::A::m}.==(null) ? super.m = 42 : null;
    self::use(let final dynamic #t52 = super.{self::A::m} in #t52.==(null) ? super.m = 42 : #t52);
    super.{self::A::n}.==(null) ? super.{self::A::n} = 42 : null;
    self::use(let final dynamic #t53 = super.{self::A::n} in #t53.==(null) ? super.{self::A::n} = 42 : #t53);
    super.{self::A::a} = super.{self::A::a}.+(42);
    self::use(super.{self::A::a} = super.{self::A::a}.+(42));
    super.{self::A::b} = super.{self::B::b}.+(42);
    self::use(super.{self::A::b} = super.{self::B::b}.+(42));
    super.{self::B::c} = super.{self::A::c}.+(42);
    self::use(super.{self::B::c} = super.{self::A::c}.+(42));
    super.{self::A::d} = super.{self::B::d}.+(42);
    self::use(super.{self::A::d} = super.{self::B::d}.+(42));
    super.e = super.{self::A::e}.+(42);
    self::use(super.e = super.{self::A::e}.+(42));
    super.f = super.{self::A::f}.+(42);
    self::use(super.f = super.{self::A::f}.+(42));
    super.{self::A::g} = super.g.+(42);
    self::use(super.{self::A::g} = super.g.+(42));
    super.{self::A::h} = super.{self::A::h}.+(42);
    self::use(super.{self::A::h} = super.{self::A::h}.+(42));
    super.{self::B::i} = super.{self::A::i}.+(42);
    self::use(super.{self::B::i} = super.{self::A::i}.+(42));
    let final dynamic #t54 = 87 in super.{self::A::[]=}(#t54, super.{self::A::[]}(#t54).+(42));
    self::use(let final dynamic #t55 = 87 in let final dynamic #t56 = super.{self::A::[]}(#t55).+(42) in let final dynamic #t57 = super.{self::A::[]=}(#t55, #t56) in #t56);
    super.m = super.{self::A::m}.+(42);
    self::use(super.m = super.{self::A::m}.+(42));
    super.{self::A::n} = super.{self::A::n}.+(42);
    self::use(super.{self::A::n} = super.{self::A::n}.+(42));
    super.{self::A::a} = super.{self::A::a}.-(42);
    self::use(super.{self::A::a} = super.{self::A::a}.-(42));
    super.{self::A::b} = super.{self::B::b}.-(42);
    self::use(super.{self::A::b} = super.{self::B::b}.-(42));
    super.{self::B::c} = super.{self::A::c}.-(42);
    self::use(super.{self::B::c} = super.{self::A::c}.-(42));
    super.{self::A::d} = super.{self::B::d}.-(42);
    self::use(super.{self::A::d} = super.{self::B::d}.-(42));
    super.e = super.{self::A::e}.-(42);
    self::use(super.e = super.{self::A::e}.-(42));
    super.f = super.{self::A::f}.-(42);
    self::use(super.f = super.{self::A::f}.-(42));
    super.{self::A::g} = super.g.-(42);
    self::use(super.{self::A::g} = super.g.-(42));
    super.{self::A::h} = super.{self::A::h}.-(42);
    self::use(super.{self::A::h} = super.{self::A::h}.-(42));
    super.{self::B::i} = super.{self::A::i}.-(42);
    self::use(super.{self::B::i} = super.{self::A::i}.-(42));
    let final dynamic #t58 = 87 in super.{self::A::[]=}(#t58, super.{self::A::[]}(#t58).-(42));
    self::use(let final dynamic #t59 = 87 in let final dynamic #t60 = super.{self::A::[]}(#t59).-(42) in let final dynamic #t61 = super.{self::A::[]=}(#t59, #t60) in #t60);
    super.m = super.{self::A::m}.-(42);
    self::use(super.m = super.{self::A::m}.-(42));
    super.{self::A::n} = super.{self::A::n}.-(42);
    self::use(super.{self::A::n} = super.{self::A::n}.-(42));
  }
}
static method use(dynamic x) → dynamic {
  if(x.==(new core::DateTime::now().millisecondsSinceEpoch))
    throw "Shouldn't happen";
}
static method main() → dynamic {
  new self::C::•().test();
}
