library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract class Test1a extends core::Object {
  synthetic constructor •() → self::Test1a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int;
  abstract operator []=(core::String s, core::int v) → void;
  method test() → void {
    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = this.{self::Test1a::[]=}(#t1, #t2){(core::String, core::int) → void} in #t2;
    core::int v7 = let final core::String #t4 = "x" in let final core::int #t5 = this.{self::Test1a::[]}(#t4){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t6 = this.{self::Test1a::[]=}(#t4, #t5){(core::String, core::int) → void} in #t5;
    core::int v10 = let final core::String #t7 = "x" in let final core::int #t8 = this.{self::Test1a::[]}(#t7){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t9 = this.{self::Test1a::[]=}(#t7, #t8){(core::String, core::int) → void} in #t8;
    core::int v11 = let final core::String #t10 = "x" in let final core::int #t11 = this.{self::Test1a::[]}(#t10){(core::String) → core::int} in let final void #t12 = this.{self::Test1a::[]=}(#t10, #t11.{core::num::+}(1){(core::num) → core::int}){(core::String, core::int) → void} in #t11;
  }
}
abstract class Test1b extends core::Object {
  synthetic constructor •() → self::Test1b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int?;
  abstract operator []=(core::String s, core::int? v) → void;
  method test() → void {
    core::int v4 = let final core::String #t13 = "x" in let final core::int? #t14 = this.{self::Test1b::[]}(#t13){(core::String) → core::int?} in #t14 == null ?{core::int} let final core::int #t15 = self::getInt() in let final void #t16 = this.{self::Test1b::[]=}(#t13, #t15){(core::String, core::int?) → void} in #t15 : #t14{core::int};
  }
}
abstract class Test2a extends core::Object {
  synthetic constructor •() → self::Test2a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int;
  abstract operator []=(core::String s, core::num v) → void;
  method test() → void {
    core::int v1 = let final core::String #t17 = "x" in let final core::int #t18 = self::getInt() in let final void #t19 = this.{self::Test2a::[]=}(#t17, #t18){(core::String, core::num) → void} in #t18;
    core::num v2 = let final core::String #t20 = "x" in let final core::num #t21 = self::getNum() in let final void #t22 = this.{self::Test2a::[]=}(#t20, #t21){(core::String, core::num) → void} in #t21;
    core::double v3 = let final core::String #t23 = "x" in let final core::double #t24 = self::getDouble() in let final void #t25 = this.{self::Test2a::[]=}(#t23, #t24){(core::String, core::num) → void} in #t24;
    core::int v7 = let final core::String #t26 = "x" in let final core::int #t27 = this.{self::Test2a::[]}(#t26){(core::String) → core::int}.{core::num::+}(self::getInt()){(core::num) → core::int} in let final void #t28 = this.{self::Test2a::[]=}(#t26, #t27){(core::String, core::num) → void} in #t27;
    core::num v8 = let final core::String #t29 = "x" in let final core::num #t30 = this.{self::Test2a::[]}(#t29){(core::String) → core::int}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t31 = this.{self::Test2a::[]=}(#t29, #t30){(core::String, core::num) → void} in #t30;
    core::double v9 = let final core::String #t32 = "x" in let final core::double #t33 = this.{self::Test2a::[]}(#t32){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t34 = this.{self::Test2a::[]=}(#t32, #t33){(core::String, core::num) → void} in #t33;
    core::int v10 = let final core::String #t35 = "x" in let final core::int #t36 = this.{self::Test2a::[]}(#t35){(core::String) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t37 = this.{self::Test2a::[]=}(#t35, #t36){(core::String, core::num) → void} in #t36;
    core::int v11 = let final core::String #t38 = "x" in let final core::int #t39 = this.{self::Test2a::[]}(#t38){(core::String) → core::int} in let final void #t40 = this.{self::Test2a::[]=}(#t38, #t39.{core::num::+}(1){(core::num) → core::int}){(core::String, core::num) → void} in #t39;
  }
}
abstract class Test2b extends core::Object {
  synthetic constructor •() → self::Test2b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int?;
  abstract operator []=(core::String s, core::num? v) → void;
  method test() → void {
    core::int v4 = let final core::String #t41 = "x" in let final core::int? #t42 = this.{self::Test2b::[]}(#t41){(core::String) → core::int?} in #t42 == null ?{core::int} let final core::int #t43 = self::getInt() in let final void #t44 = this.{self::Test2b::[]=}(#t41, #t43){(core::String, core::num?) → void} in #t43 : #t42{core::int};
    core::num v5 = let final core::String #t45 = "x" in let final core::int? #t46 = this.{self::Test2b::[]}(#t45){(core::String) → core::int?} in #t46 == null ?{core::num} let final core::num #t47 = self::getNum() in let final void #t48 = this.{self::Test2b::[]=}(#t45, #t47){(core::String, core::num?) → void} in #t47 : #t46{core::int};
    core::num v6 = let final core::String #t49 = "x" in let final core::int? #t50 = this.{self::Test2b::[]}(#t49){(core::String) → core::int?} in #t50 == null ?{core::num} let final core::double #t51 = self::getDouble() in let final void #t52 = this.{self::Test2b::[]=}(#t49, #t51){(core::String, core::num?) → void} in #t51 : #t50{core::int};
  }
}
abstract class Test3a extends core::Object {
  synthetic constructor •() → self::Test3a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int;
  abstract operator []=(core::String s, core::double v) → void;
  method test() → void {
    core::double v3 = let final core::String #t53 = "x" in let final core::double #t54 = self::getDouble() in let final void #t55 = this.{self::Test3a::[]=}(#t53, #t54){(core::String, core::double) → void} in #t54;
    core::double v9 = let final core::String #t56 = "x" in let final core::double #t57 = this.{self::Test3a::[]}(#t56){(core::String) → core::int}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t58 = this.{self::Test3a::[]=}(#t56, #t57){(core::String, core::double) → void} in #t57;
    core::double v10 = let final core::String #t59 = "x" in let final core::double #t60 = this.{self::Test3a::[]}(#t59){(core::String) → core::int}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t61 = this.{self::Test3a::[]=}(#t59, #t60){(core::String, core::double) → void} in #t60;
    core::int v11 = let final core::String #t62 = "x" in let final core::int #t63 = this.{self::Test3a::[]}(#t62){(core::String) → core::int} in let final void #t64 = this.{self::Test3a::[]=}(#t62, #t63.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t63;
  }
}
abstract class Test3b extends core::Object {
  synthetic constructor •() → self::Test3b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::int?;
  abstract operator []=(core::String s, core::double? v) → void;
  method test() → void {
    core::num v6 = let final core::String #t65 = "x" in let final core::int? #t66 = this.{self::Test3b::[]}(#t65){(core::String) → core::int?} in #t66 == null ?{core::num} let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3b::[]=}(#t65, #t67){(core::String, core::double?) → void} in #t67 : #t66{core::int};
  }
}
abstract class Test4a extends core::Object {
  synthetic constructor •() → self::Test4a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num;
  abstract operator []=(core::String s, core::int v) → void;
  method test() → void {
    core::int v1 = let final core::String #t69 = "x" in let final core::int #t70 = self::getInt() in let final void #t71 = this.{self::Test4a::[]=}(#t69, #t70){(core::String, core::int) → void} in #t70;
  }
}
abstract class Test4b extends core::Object {
  synthetic constructor •() → self::Test4b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num?;
  abstract operator []=(core::String s, core::int? v) → void;
  method test() → void {
    core::num v4 = let final core::String #t72 = "x" in let final core::num? #t73 = this.{self::Test4b::[]}(#t72){(core::String) → core::num?} in #t73 == null ?{core::num} let final core::int #t74 = self::getInt() in let final void #t75 = this.{self::Test4b::[]=}(#t72, #t74){(core::String, core::int?) → void} in #t74 : #t73{core::num};
  }
}
abstract class Test5a extends core::Object {
  synthetic constructor •() → self::Test5a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num;
  abstract operator []=(core::String s, core::num v) → void;
  method test() → void {
    core::int v1 = let final core::String #t76 = "x" in let final core::int #t77 = self::getInt() in let final void #t78 = this.{self::Test5a::[]=}(#t76, #t77){(core::String, core::num) → void} in #t77;
    core::num v2 = let final core::String #t79 = "x" in let final core::num #t80 = self::getNum() in let final void #t81 = this.{self::Test5a::[]=}(#t79, #t80){(core::String, core::num) → void} in #t80;
    core::double v3 = let final core::String #t82 = "x" in let final core::double #t83 = self::getDouble() in let final void #t84 = this.{self::Test5a::[]=}(#t82, #t83){(core::String, core::num) → void} in #t83;
    core::num v7 = let final core::String #t85 = "x" in let final core::num #t86 = this.{self::Test5a::[]}(#t85){(core::String) → core::num}.{core::num::+}(self::getInt()){(core::num) → core::num} in let final void #t87 = this.{self::Test5a::[]=}(#t85, #t86){(core::String, core::num) → void} in #t86;
    core::num v8 = let final core::String #t88 = "x" in let final core::num #t89 = this.{self::Test5a::[]}(#t88){(core::String) → core::num}.{core::num::+}(self::getNum()){(core::num) → core::num} in let final void #t90 = this.{self::Test5a::[]=}(#t88, #t89){(core::String, core::num) → void} in #t89;
    core::double v9 = let final core::String #t91 = "x" in let final core::double #t92 = this.{self::Test5a::[]}(#t91){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t93 = this.{self::Test5a::[]=}(#t91, #t92){(core::String, core::num) → void} in #t92;
    core::num v10 = let final core::String #t94 = "x" in let final core::num #t95 = this.{self::Test5a::[]}(#t94){(core::String) → core::num}.{core::num::+}(1){(core::num) → core::num} in let final void #t96 = this.{self::Test5a::[]=}(#t94, #t95){(core::String, core::num) → void} in #t95;
    core::num v11 = let final core::String #t97 = "x" in let final core::num #t98 = this.{self::Test5a::[]}(#t97){(core::String) → core::num} in let final void #t99 = this.{self::Test5a::[]=}(#t97, #t98.{core::num::+}(1){(core::num) → core::num}){(core::String, core::num) → void} in #t98;
  }
}
abstract class Test5b extends core::Object {
  synthetic constructor •() → self::Test5b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num?;
  abstract operator []=(core::String s, core::num? v) → void;
  method test() → void {
    core::num v4 = let final core::String #t100 = "x" in let final core::num? #t101 = this.{self::Test5b::[]}(#t100){(core::String) → core::num?} in #t101 == null ?{core::num} let final core::int #t102 = self::getInt() in let final void #t103 = this.{self::Test5b::[]=}(#t100, #t102){(core::String, core::num?) → void} in #t102 : #t101{core::num};
    core::num v5 = let final core::String #t104 = "x" in let final core::num? #t105 = this.{self::Test5b::[]}(#t104){(core::String) → core::num?} in #t105 == null ?{core::num} let final core::num #t106 = self::getNum() in let final void #t107 = this.{self::Test5b::[]=}(#t104, #t106){(core::String, core::num?) → void} in #t106 : #t105{core::num};
    core::num v6 = let final core::String #t108 = "x" in let final core::num? #t109 = this.{self::Test5b::[]}(#t108){(core::String) → core::num?} in #t109 == null ?{core::num} let final core::double #t110 = self::getDouble() in let final void #t111 = this.{self::Test5b::[]=}(#t108, #t110){(core::String, core::num?) → void} in #t110 : #t109{core::num};
  }
}
abstract class Test6a extends core::Object {
  synthetic constructor •() → self::Test6a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num;
  abstract operator []=(core::String s, core::double v) → void;
  method test() → void {
    core::double v3 = let final core::String #t112 = "x" in let final core::double #t113 = self::getDouble() in let final void #t114 = this.{self::Test6a::[]=}(#t112, #t113){(core::String, core::double) → void} in #t113;
    core::double v9 = let final core::String #t115 = "x" in let final core::double #t116 = this.{self::Test6a::[]}(#t115){(core::String) → core::num}.{core::num::+}(self::getDouble()){(core::num) → core::double} in let final void #t117 = this.{self::Test6a::[]=}(#t115, #t116){(core::String, core::double) → void} in #t116;
    core::double v10 = let final core::String #t118 = "x" in let final core::double #t119 = this.{self::Test6a::[]}(#t118){(core::String) → core::num}.{core::num::+}(1.0){(core::num) → core::double} in let final void #t120 = this.{self::Test6a::[]=}(#t118, #t119){(core::String, core::double) → void} in #t119;
    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = this.{self::Test6a::[]}(#t121){(core::String) → core::num} in let final void #t123 = this.{self::Test6a::[]=}(#t121, #t122.{core::num::+}(1.0){(core::num) → core::double}){(core::String, core::double) → void} in #t122;
  }
}
abstract class Test6b extends core::Object {
  synthetic constructor •() → self::Test6b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::num?;
  abstract operator []=(core::String s, core::double? v) → void;
  method test() → void {
    core::num v6 = let final core::String #t124 = "x" in let final core::num? #t125 = this.{self::Test6b::[]}(#t124){(core::String) → core::num?} in #t125 == null ?{core::num} let final core::double #t126 = self::getDouble() in let final void #t127 = this.{self::Test6b::[]=}(#t124, #t126){(core::String, core::double?) → void} in #t126 : #t125{core::num};
  }
}
abstract class Test7a extends core::Object {
  synthetic constructor •() → self::Test7a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double;
  abstract operator []=(core::String s, core::int v) → void;
  method test() → void {
    core::int v1 = let final core::String #t128 = "x" in let final core::int #t129 = self::getInt() in let final void #t130 = this.{self::Test7a::[]=}(#t128, #t129){(core::String, core::int) → void} in #t129;
  }
}
abstract class Test7b extends core::Object {
  synthetic constructor •() → self::Test7b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double?;
  abstract operator []=(core::String s, core::int? v) → void;
  method test() → void {
    core::num v4 = let final core::String #t131 = "x" in let final core::double? #t132 = this.{self::Test7b::[]}(#t131){(core::String) → core::double?} in #t132 == null ?{core::num} let final core::int #t133 = self::getInt() in let final void #t134 = this.{self::Test7b::[]=}(#t131, #t133){(core::String, core::int?) → void} in #t133 : #t132{core::double};
  }
}
abstract class Test8a extends core::Object {
  synthetic constructor •() → self::Test8a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double;
  abstract operator []=(core::String s, core::num v) → void;
  method test() → void {
    core::int v1 = let final core::String #t135 = "x" in let final core::int #t136 = self::getInt() in let final void #t137 = this.{self::Test8a::[]=}(#t135, #t136){(core::String, core::num) → void} in #t136;
    core::num v2 = let final core::String #t138 = "x" in let final core::num #t139 = self::getNum() in let final void #t140 = this.{self::Test8a::[]=}(#t138, #t139){(core::String, core::num) → void} in #t139;
    core::double v3 = let final core::String #t141 = "x" in let final core::double #t142 = self::getDouble() in let final void #t143 = this.{self::Test8a::[]=}(#t141, #t142){(core::String, core::num) → void} in #t142;
    core::double v7 = let final core::String #t144 = "x" in let final core::double #t145 = this.{self::Test8a::[]}(#t144){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t146 = this.{self::Test8a::[]=}(#t144, #t145){(core::String, core::num) → void} in #t145;
    core::double v8 = let final core::String #t147 = "x" in let final core::double #t148 = this.{self::Test8a::[]}(#t147){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t149 = this.{self::Test8a::[]=}(#t147, #t148){(core::String, core::num) → void} in #t148;
    core::double v9 = let final core::String #t150 = "x" in let final core::double #t151 = this.{self::Test8a::[]}(#t150){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t152 = this.{self::Test8a::[]=}(#t150, #t151){(core::String, core::num) → void} in #t151;
    core::double v10 = let final core::String #t153 = "x" in let final core::double #t154 = this.{self::Test8a::[]}(#t153){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t155 = this.{self::Test8a::[]=}(#t153, #t154){(core::String, core::num) → void} in #t154;
    core::double v11 = let final core::String #t156 = "x" in let final core::double #t157 = this.{self::Test8a::[]}(#t156){(core::String) → core::double} in let final void #t158 = this.{self::Test8a::[]=}(#t156, #t157.{core::double::+}(1){(core::num) → core::double}){(core::String, core::num) → void} in #t157;
  }
}
abstract class Test8b extends core::Object {
  synthetic constructor •() → self::Test8b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double?;
  abstract operator []=(core::String s, core::num? v) → void;
  method test() → void {
    core::num v4 = let final core::String #t159 = "x" in let final core::double? #t160 = this.{self::Test8b::[]}(#t159){(core::String) → core::double?} in #t160 == null ?{core::num} let final core::int #t161 = self::getInt() in let final void #t162 = this.{self::Test8b::[]=}(#t159, #t161){(core::String, core::num?) → void} in #t161 : #t160{core::double};
    core::num v5 = let final core::String #t163 = "x" in let final core::double? #t164 = this.{self::Test8b::[]}(#t163){(core::String) → core::double?} in #t164 == null ?{core::num} let final core::num #t165 = self::getNum() in let final void #t166 = this.{self::Test8b::[]=}(#t163, #t165){(core::String, core::num?) → void} in #t165 : #t164{core::double};
    core::double v6 = let final core::String #t167 = "x" in let final core::double? #t168 = this.{self::Test8b::[]}(#t167){(core::String) → core::double?} in #t168 == null ?{core::double} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test8b::[]=}(#t167, #t169){(core::String, core::num?) → void} in #t169 : #t168{core::double};
  }
}
abstract class Test9a extends core::Object {
  synthetic constructor •() → self::Test9a
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double;
  abstract operator []=(core::String s, core::double v) → void;
  method test() → void {
    core::double v3 = let final core::String #t171 = "x" in let final core::double #t172 = self::getDouble() in let final void #t173 = this.{self::Test9a::[]=}(#t171, #t172){(core::String, core::double) → void} in #t172;
    core::double v7 = let final core::String #t174 = "x" in let final core::double #t175 = this.{self::Test9a::[]}(#t174){(core::String) → core::double}.{core::double::+}(self::getInt()){(core::num) → core::double} in let final void #t176 = this.{self::Test9a::[]=}(#t174, #t175){(core::String, core::double) → void} in #t175;
    core::double v8 = let final core::String #t177 = "x" in let final core::double #t178 = this.{self::Test9a::[]}(#t177){(core::String) → core::double}.{core::double::+}(self::getNum()){(core::num) → core::double} in let final void #t179 = this.{self::Test9a::[]=}(#t177, #t178){(core::String, core::double) → void} in #t178;
    core::double v9 = let final core::String #t180 = "x" in let final core::double #t181 = this.{self::Test9a::[]}(#t180){(core::String) → core::double}.{core::double::+}(self::getDouble()){(core::num) → core::double} in let final void #t182 = this.{self::Test9a::[]=}(#t180, #t181){(core::String, core::double) → void} in #t181;
    core::double v10 = let final core::String #t183 = "x" in let final core::double #t184 = this.{self::Test9a::[]}(#t183){(core::String) → core::double}.{core::double::+}(1){(core::num) → core::double} in let final void #t185 = this.{self::Test9a::[]=}(#t183, #t184){(core::String, core::double) → void} in #t184;
    core::double v11 = let final core::String #t186 = "x" in let final core::double #t187 = this.{self::Test9a::[]}(#t186){(core::String) → core::double} in let final void #t188 = this.{self::Test9a::[]=}(#t186, #t187.{core::double::+}(1){(core::num) → core::double}){(core::String, core::double) → void} in #t187;
  }
}
abstract class Test9b extends core::Object {
  synthetic constructor •() → self::Test9b
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → core::double?;
  abstract operator []=(core::String s, core::double? v) → void;
  method test() → void {
    core::double v6 = let final core::String #t189 = "x" in let final core::double? #t190 = this.{self::Test9b::[]}(#t189){(core::String) → core::double?} in #t190 == null ?{core::double} let final core::double #t191 = self::getDouble() in let final void #t192 = this.{self::Test9b::[]=}(#t189, #t191){(core::String, core::double?) → void} in #t191 : #t190{core::double};
  }
}
static method getInt() → core::int
  return 0;
static method getNum() → core::num
  return 0;
static method getDouble() → core::double
  return 0.0;
static method main() → dynamic {}
