// Errors:
//
// 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:43:5: Error: '+' is not a prefix operator.
// Try removing '+'.
//     +super;
//     ^
//
// pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.
//     +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:9: Error: Getter not found: ''.
//     use(+super);
//         ^
//
// pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.
//     super.g;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.
//     use(super.g);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.
//     super.e++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.
//     use(super.e++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.
//     super.f++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.
//     use(super.f++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.
//     super.g++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.
//     use(super.g++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.
//     super.m++;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.
//     use(super.m++);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.
//     ++super.e;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.
//     use(++super.e);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.
//     ++super.f;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.
//     use(++super.f);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.
//     ++super.g;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.
//     use(++super.g);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.
//     ++super.m;
//             ^
//
// pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.
//     use(++super.m);
//                 ^
//
// pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.
//     super.g();
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.
//     use(super.g());
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.
//     super.e = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.
//     use(super.e = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.
//     super.f = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.
//     use(super.f = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.
//     super.m = 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.
//     use(super.m = 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.
//     super.e ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.
//     use(super.e ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.
//     super.f ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.
//     use(super.f ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.
//     super.g ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.
//     use(super.g ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.
//     super.m ??= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
//     use(super.m ??= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.
//     super.e += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.
//     use(super.e += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.
//     super.f += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.
//     use(super.f += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.
//     super.g += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.
//     use(super.g += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.
//     super.m += 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.
//     use(super.m += 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.
//     super.e -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.
//     use(super.e -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.
//     super.f -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.
//     use(super.f -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.
//     super.g -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.
//     use(super.g -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.
//     super.m -= 42;
//           ^
//
// pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.
//     use(super.m -= 42);
//               ^
//
// pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
//     super.m(87);
//            ^^^^
//
// pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
//     use(super.m(87));
//                ^^^^
//
// pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
//     super.n(87);
//            ^^^^
//
// pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
//     use(super.n(87));
//                ^^^^
//
// 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 •() → void
    : super core::Object::•()
    ;
  get e() → dynamic
    return null;
  set g(dynamic _) → void {}
  get h() → dynamic
    return null;
  set h(dynamic _) → void {}
  get i() → dynamic
    return null;
  operator [](dynamic _) → dynamic
    return null;
  operator []=(dynamic a, dynamic b) → void {}
  operator ~() → dynamic
    return 117;
  operator unary-() → dynamic
    return 117;
  operator ==(dynamic other) → core::bool
    return true;
  method m() → void {}
  method n() → void {}
  set n(dynamic _) → void {}
}
class B extends self::A {
  final field dynamic d = null;
  synthetic constructor •() → void
    : super self::A::•()
    ;
  get b() → dynamic
    return null;
  set c(dynamic x) → void {}
  set i(dynamic x) → void {}
}
class C extends self::B {
  synthetic constructor •() → void
    : super self::B::•()
    ;
  method test() → dynamic {
    super.{self::A::~}();
    self::use(super.{self::A::~}());
    super.{self::A::unary-}();
    self::use(super.{self::A::unary-}());
    (let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: The getter '' isn't defined for the class '#lib1::C'.
Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
    +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((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.
Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
    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 #t3 = super.{self::A::a} in let final dynamic #t4 = super.{self::A::a} = #t3.+(1) in #t3);
    super.{self::A::b} = super.{self::B::b}.+(1);
    self::use(let final dynamic #t5 = super.{self::B::b} in let final dynamic #t6 = super.{self::A::b} = #t5.+(1) in #t5);
    super.{self::B::c} = super.{self::A::c}.+(1);
    self::use(let final dynamic #t7 = super.{self::A::c} in let final dynamic #t8 = super.{self::B::c} = #t7.+(1) in #t7);
    super.{self::A::d} = super.{self::B::d}.+(1);
    self::use(let final dynamic #t9 = super.{self::B::d} in let final dynamic #t10 = super.{self::A::d} = #t9.+(1) in #t9);
    super.e = super.{self::A::e}.+(1);
    self::use(let final dynamic #t11 = super.{self::A::e} in let final dynamic #t12 = super.e = #t11.+(1) in #t11);
    super.f = super.{self::A::f}.+(1);
    self::use(let final dynamic #t13 = super.{self::A::f} in let final dynamic #t14 = super.f = #t13.+(1) in #t13);
    super.{self::A::g} = super.g.+(1);
    self::use(let final dynamic #t15 = super.g in let final dynamic #t16 = super.{self::A::g} = #t15.+(1) in #t15);
    super.{self::A::h} = super.{self::A::h}.+(1);
    self::use(let final dynamic #t17 = super.{self::A::h} in let final dynamic #t18 = super.{self::A::h} = #t17.+(1) in #t17);
    super.{self::B::i} = super.{self::A::i}.+(1);
    self::use(let final dynamic #t19 = super.{self::A::i} in let final dynamic #t20 = super.{self::B::i} = #t19.+(1) in #t19);
    let final core::int #t21 = 87 in super.{self::A::[]=}(#t21, super.{self::A::[]}(#t21).+(1));
    self::use(let final core::int #t22 = 87 in let final dynamic #t23 = super.{self::A::[]}(#t22) in let final void #t24 = super.{self::A::[]=}(#t22, #t23.+(1)) in #t23);
    super.m = let final dynamic #t25 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    super.m++;
           ^";
    self::use(let final () → void #t26 = super.{self::A::m} in let final dynamic #t27 = super.m = let final dynamic #t28 = #t26 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(super.m++);
               ^" in #t26);
    super.{self::A::n} = let final dynamic #t29 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    super.n++;
           ^";
    self::use(let final () → void #t30 = super.{self::A::n} in let final dynamic #t31 = super.{self::A::n} = let final dynamic #t32 = #t30 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(super.n++);
               ^" in #t30);
    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 core::int #t33 = 87 in let final dynamic #t34 = super.{self::A::[]}(#t33).+(1) in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34;
    self::use(let final core::int #t36 = 87 in let final dynamic #t37 = super.{self::A::[]}(#t36).+(1) in let final void #t38 = super.{self::A::[]=}(#t36, #t37) in #t37);
    super.m = let final dynamic #t39 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    ++super.m;
    ^";
    self::use(super.m = let final dynamic #t40 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(++super.m);
        ^");
    super.{self::A::n} = let final dynamic #t41 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    ++super.n;
    ^";
    self::use(super.{self::A::n} = let final dynamic #t42 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(++super.n);
        ^");
    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 core::int #t43 = 87 in let final core::int #t44 = 42 in let final void #t45 = super.{self::A::[]=}(#t43, #t44) in #t44);
    super.m = 42;
    self::use(super.m = 42);
    super.{self::A::n} = 42;
    self::use(super.{self::A::n} = 42);
    super.{self::A::a}.{core::Object::==}(null) ?{dynamic} super.{self::A::a} = 42 : null;
    self::use(let final dynamic #t46 = super.{self::A::a} in #t46.{core::Object::==}(null) ?{dynamic} super.{self::A::a} = 42 : #t46);
    super.{self::B::b}.{core::Object::==}(null) ?{dynamic} super.{self::A::b} = 42 : null;
    self::use(let final dynamic #t47 = super.{self::B::b} in #t47.{core::Object::==}(null) ?{dynamic} super.{self::A::b} = 42 : #t47);
    super.{self::A::c}.{core::Object::==}(null) ?{dynamic} super.{self::B::c} = 42 : null;
    self::use(let final dynamic #t48 = super.{self::A::c} in #t48.{core::Object::==}(null) ?{dynamic} super.{self::B::c} = 42 : #t48);
    super.{self::B::d}.{core::Object::==}(null) ?{dynamic} super.{self::A::d} = 42 : null;
    self::use(let final dynamic #t49 = super.{self::B::d} in #t49.{core::Object::==}(null) ?{dynamic} super.{self::A::d} = 42 : #t49);
    super.{self::A::e}.{core::Object::==}(null) ?{dynamic} super.e = 42 : null;
    self::use(let final dynamic #t50 = super.{self::A::e} in #t50.{core::Object::==}(null) ?{dynamic} super.e = 42 : #t50);
    super.{self::A::f}.{core::Object::==}(null) ?{dynamic} super.f = 42 : null;
    self::use(let final dynamic #t51 = super.{self::A::f} in #t51.{core::Object::==}(null) ?{dynamic} super.f = 42 : #t51);
    super.g.{core::Object::==}(null) ?{dynamic} super.{self::A::g} = 42 : null;
    self::use(let final dynamic #t52 = super.g in #t52.{core::Object::==}(null) ?{dynamic} super.{self::A::g} = 42 : #t52);
    super.{self::A::h}.{core::Object::==}(null) ?{dynamic} super.{self::A::h} = 42 : null;
    self::use(let final dynamic #t53 = super.{self::A::h} in #t53.{core::Object::==}(null) ?{dynamic} super.{self::A::h} = 42 : #t53);
    super.{self::A::i}.{core::Object::==}(null) ?{dynamic} super.{self::B::i} = 42 : null;
    self::use(let final dynamic #t54 = super.{self::A::i} in #t54.{core::Object::==}(null) ?{dynamic} super.{self::B::i} = 42 : #t54);
    let final core::int #t55 = 87 in super.{self::A::[]}(#t55).{core::Object::==}(null) ?{dynamic} let final core::int #t56 = 42 in let final void #t57 = super.{self::A::[]=}(#t55, #t56) in #t56 : null;
    self::use(let final core::int #t58 = 87 in let final dynamic #t59 = super.{self::A::[]}(#t58) in #t59.{core::Object::==}(null) ?{dynamic} let final core::int #t60 = 42 in let final void #t61 = super.{self::A::[]=}(#t58, #t60) in #t60 : #t59);
    super.{self::A::m}.{core::Object::==}(null) ?{core::Object} super.m = 42 : null;
    self::use(let final () → void #t62 = super.{self::A::m} in #t62.{core::Object::==}(null) ?{core::Object} super.m = 42 : #t62);
    super.{self::A::n}.{core::Object::==}(null) ?{core::Object} super.{self::A::n} = 42 : null;
    self::use(let final () → void #t63 = super.{self::A::n} in #t63.{core::Object::==}(null) ?{core::Object} super.{self::A::n} = 42 : #t63);
    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 core::int #t64 = 87 in super.{self::A::[]=}(#t64, super.{self::A::[]}(#t64).+(42));
    self::use(let final core::int #t65 = 87 in let final dynamic #t66 = super.{self::A::[]}(#t65).+(42) in let final void #t67 = super.{self::A::[]=}(#t65, #t66) in #t66);
    super.m = let final dynamic #t68 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    super.m += 42;
            ^";
    self::use(super.m = let final dynamic #t69 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(super.m += 42);
                ^");
    super.{self::A::n} = let final dynamic #t70 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    super.n += 42;
            ^";
    self::use(super.{self::A::n} = let final dynamic #t71 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '+'.
    use(super.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 core::int #t72 = 87 in super.{self::A::[]=}(#t72, super.{self::A::[]}(#t72).-(42));
    self::use(let final core::int #t73 = 87 in let final dynamic #t74 = super.{self::A::[]}(#t73).-(42) in let final void #t75 = super.{self::A::[]=}(#t73, #t74) in #t74);
    super.m = let final dynamic #t76 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '-'.
    super.m -= 42;
            ^";
    self::use(super.m = let final dynamic #t77 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '-'.
    use(super.m -= 42);
                ^");
    super.{self::A::n} = let final dynamic #t78 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '-'.
    super.n -= 42;
            ^";
    self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
Try correcting the name to the name of an existing method, or defining a method named '-'.
    use(super.n -= 42);
                ^");
  }
}
static method use(dynamic x) → dynamic {
  if(x.{core::Object::==}(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
    throw "Shouldn't happen";
}
static method main() → dynamic {
  new self::C::•().{self::C::test}();
}
