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

abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
  abstract operator [](core::String s) → self::Test::T;
  abstract operator []=(core::String s, self::Test::U v) → void;
}
static method getInt() → core::int
  return 0;
static method getNum() → core::num
  return 0;
static method getDouble() → core::double
  return 0.0;
static method test1(self::Test<core::int, core::int> t) → void {
  core::int v1 = let final dynamic #t1 = t in let final dynamic #t2 = "x" in let final dynamic #t3 = self::getInt() in let final dynamic #t4 = #t1.{self::Test::[]=}(#t2, #t3) in #t3;
  core::num v2 = let final dynamic #t5 = t in let final dynamic #t6 = "x" in let final dynamic #t7 = self::getNum() in let final dynamic #t8 = #t5.{self::Test::[]=}(#t6, #t7) in #t7;
  core::int v4 = let final dynamic #t9 = t in let final dynamic #t10 = "x" in let final dynamic #t11 = #t9.{self::Test::[]}(#t10) in #t11.{core::num::==}(null) ? let final dynamic #t12 = self::getInt() in let final dynamic #t13 = #t9.{self::Test::[]=}(#t10, #t12) in #t12 : #t11;
  core::num v5 = let final dynamic #t14 = t in let final dynamic #t15 = "x" in let final dynamic #t16 = #t14.{self::Test::[]}(#t15) in #t16.{core::num::==}(null) ? let final dynamic #t17 = self::getNum() in let final dynamic #t18 = #t14.{self::Test::[]=}(#t15, #t17) in #t17 : #t16;
  core::int v7 = let final dynamic #t19 = t in let final dynamic #t20 = "x" in let final dynamic #t21 = #t19.{self::Test::[]}(#t20).{core::num::+}(self::getInt()) in let final dynamic #t22 = #t19.{self::Test::[]=}(#t20, #t21) in #t21;
  core::num v8 = let final dynamic #t23 = t in let final dynamic #t24 = "x" in let final dynamic #t25 = #t23.{self::Test::[]}(#t24).{core::num::+}(self::getNum()) in let final dynamic #t26 = #t23.{self::Test::[]=}(#t24, #t25) in #t25;
  core::int v10 = let final dynamic #t27 = t in let final dynamic #t28 = "x" in let final dynamic #t29 = #t27.{self::Test::[]}(#t28).{core::num::+}(1) in let final dynamic #t30 = #t27.{self::Test::[]=}(#t28, #t29) in #t29;
  core::int v11 = let final dynamic #t31 = t in let final dynamic #t32 = "x" in let final dynamic #t33 = #t31.{self::Test::[]}(#t32) in let final dynamic #t34 = #t31.{self::Test::[]=}(#t32, #t33.{core::num::+}(1)) in #t33;
}
static method test2(self::Test<core::int, core::num> t) → void {
  core::int v1 = let final dynamic #t35 = t in let final dynamic #t36 = "x" in let final dynamic #t37 = self::getInt() in let final dynamic #t38 = #t35.{self::Test::[]=}(#t36, #t37) in #t37;
  core::num v2 = let final dynamic #t39 = t in let final dynamic #t40 = "x" in let final dynamic #t41 = self::getNum() in let final dynamic #t42 = #t39.{self::Test::[]=}(#t40, #t41) in #t41;
  core::double v3 = let final dynamic #t43 = t in let final dynamic #t44 = "x" in let final dynamic #t45 = self::getDouble() in let final dynamic #t46 = #t43.{self::Test::[]=}(#t44, #t45) in #t45;
  core::num v4 = let final dynamic #t47 = t in let final dynamic #t48 = "x" in let final dynamic #t49 = #t47.{self::Test::[]}(#t48) in #t49.{core::num::==}(null) ? let final dynamic #t50 = self::getInt() in let final dynamic #t51 = #t47.{self::Test::[]=}(#t48, #t50) in #t50 : #t49;
  core::num v5 = let final dynamic #t52 = t in let final dynamic #t53 = "x" in let final dynamic #t54 = #t52.{self::Test::[]}(#t53) in #t54.{core::num::==}(null) ? let final dynamic #t55 = self::getNum() in let final dynamic #t56 = #t52.{self::Test::[]=}(#t53, #t55) in #t55 : #t54;
  core::num v6 = let final dynamic #t57 = t in let final dynamic #t58 = "x" in let final dynamic #t59 = #t57.{self::Test::[]}(#t58) in #t59.{core::num::==}(null) ? let final dynamic #t60 = self::getDouble() in let final dynamic #t61 = #t57.{self::Test::[]=}(#t58, #t60) in #t60 : #t59;
  core::num v7 = let final dynamic #t62 = t in let final dynamic #t63 = "x" in let final dynamic #t64 = #t62.{self::Test::[]}(#t63).{core::num::+}(self::getInt()) in let final dynamic #t65 = #t62.{self::Test::[]=}(#t63, #t64) in #t64;
  core::num v8 = let final dynamic #t66 = t in let final dynamic #t67 = "x" in let final dynamic #t68 = #t66.{self::Test::[]}(#t67).{core::num::+}(self::getNum()) in let final dynamic #t69 = #t66.{self::Test::[]=}(#t67, #t68) in #t68;
  core::num v9 = let final dynamic #t70 = t in let final dynamic #t71 = "x" in let final dynamic #t72 = #t70.{self::Test::[]}(#t71).{core::num::+}(self::getDouble()) in let final dynamic #t73 = #t70.{self::Test::[]=}(#t71, #t72) in #t72;
  core::num v10 = let final dynamic #t74 = t in let final dynamic #t75 = "x" in let final dynamic #t76 = #t74.{self::Test::[]}(#t75).{core::num::+}(1) in let final dynamic #t77 = #t74.{self::Test::[]=}(#t75, #t76) in #t76;
  core::num v11 = let final dynamic #t78 = t in let final dynamic #t79 = "x" in let final dynamic #t80 = #t78.{self::Test::[]}(#t79) in let final dynamic #t81 = #t78.{self::Test::[]=}(#t79, #t80.{core::num::+}(1)) in #t80;
}
static method test3(self::Test<core::int, core::double> t) → void {
  core::num v2 = let final dynamic #t82 = t in let final dynamic #t83 = "x" in let final dynamic #t84 = self::getNum() in let final dynamic #t85 = #t82.{self::Test::[]=}(#t83, #t84) in #t84;
  core::double v3 = let final dynamic #t86 = t in let final dynamic #t87 = "x" in let final dynamic #t88 = self::getDouble() in let final dynamic #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
  core::num v5 = let final dynamic #t90 = t in let final dynamic #t91 = "x" in let final dynamic #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ? let final dynamic #t93 = self::getNum() in let final dynamic #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
  core::double v6 = let final dynamic #t95 = t in let final dynamic #t96 = "x" in let final dynamic #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ? let final dynamic #t98 = self::getDouble() in let final dynamic #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
  core::double v7 = let final dynamic #t100 = t in let final dynamic #t101 = "x" in let final dynamic #t102 = #t100.{self::Test::[]}(#t101).{core::double::+}(self::getInt()) in let final dynamic #t103 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
  core::double v8 = let final dynamic #t104 = t in let final dynamic #t105 = "x" in let final dynamic #t106 = #t104.{self::Test::[]}(#t105).{core::double::+}(self::getNum()) in let final dynamic #t107 = #t104.{self::Test::[]=}(#t105, #t106) in #t106;
  core::double v9 = let final dynamic #t108 = t in let final dynamic #t109 = "x" in let final dynamic #t110 = #t108.{self::Test::[]}(#t109).{core::double::+}(self::getDouble()) in let final dynamic #t111 = #t108.{self::Test::[]=}(#t109, #t110) in #t110;
  core::double v10 = let final dynamic #t112 = t in let final dynamic #t113 = "x" in let final dynamic #t114 = #t112.{self::Test::[]}(#t113).{core::double::+}(1) in let final dynamic #t115 = #t112.{self::Test::[]=}(#t113, #t114) in #t114;
  core::double v11 = let final dynamic #t116 = t in let final dynamic #t117 = "x" in let final dynamic #t118 = #t116.{self::Test::[]}(#t117) in let final dynamic #t119 = #t116.{self::Test::[]=}(#t117, #t118.{core::double::+}(1)) in #t118;
}
static method test4(self::Test<core::num, core::int> t) → void {
  core::int v1 = let final dynamic #t120 = t in let final dynamic #t121 = "x" in let final dynamic #t122 = self::getInt() in let final dynamic #t123 = #t120.{self::Test::[]=}(#t121, #t122) in #t122;
  core::num v2 = let final dynamic #t124 = t in let final dynamic #t125 = "x" in let final dynamic #t126 = self::getNum() in let final dynamic #t127 = #t124.{self::Test::[]=}(#t125, #t126) in #t126;
  core::int v4 = let final dynamic #t128 = t in let final dynamic #t129 = "x" in let final dynamic #t130 = #t128.{self::Test::[]}(#t129) in #t130.{core::num::==}(null) ? let final dynamic #t131 = self::getInt() in let final dynamic #t132 = #t128.{self::Test::[]=}(#t129, #t131) in #t131 : #t130;
  core::num v5 = let final dynamic #t133 = t in let final dynamic #t134 = "x" in let final dynamic #t135 = #t133.{self::Test::[]}(#t134) in #t135.{core::num::==}(null) ? let final dynamic #t136 = self::getNum() in let final dynamic #t137 = #t133.{self::Test::[]=}(#t134, #t136) in #t136 : #t135;
  core::int v7 = let final dynamic #t138 = t in let final dynamic #t139 = "x" in let final dynamic #t140 = #t138.{self::Test::[]}(#t139).{core::num::+}(self::getInt()) in let final dynamic #t141 = #t138.{self::Test::[]=}(#t139, #t140) in #t140;
  core::num v8 = let final dynamic #t142 = t in let final dynamic #t143 = "x" in let final dynamic #t144 = #t142.{self::Test::[]}(#t143).{core::num::+}(self::getNum()) in let final dynamic #t145 = #t142.{self::Test::[]=}(#t143, #t144) in #t144;
  core::int v10 = let final dynamic #t146 = t in let final dynamic #t147 = "x" in let final dynamic #t148 = #t146.{self::Test::[]}(#t147).{core::num::+}(1) in let final dynamic #t149 = #t146.{self::Test::[]=}(#t147, #t148) in #t148;
  core::int v11 = let final dynamic #t150 = t in let final dynamic #t151 = "x" in let final dynamic #t152 = #t150.{self::Test::[]}(#t151) in let final dynamic #t153 = #t150.{self::Test::[]=}(#t151, #t152.{core::num::+}(1)) in #t152;
}
static method test5(self::Test<core::num, core::num> t) → void {
  core::int v1 = let final dynamic #t154 = t in let final dynamic #t155 = "x" in let final dynamic #t156 = self::getInt() in let final dynamic #t157 = #t154.{self::Test::[]=}(#t155, #t156) in #t156;
  core::num v2 = let final dynamic #t158 = t in let final dynamic #t159 = "x" in let final dynamic #t160 = self::getNum() in let final dynamic #t161 = #t158.{self::Test::[]=}(#t159, #t160) in #t160;
  core::double v3 = let final dynamic #t162 = t in let final dynamic #t163 = "x" in let final dynamic #t164 = self::getDouble() in let final dynamic #t165 = #t162.{self::Test::[]=}(#t163, #t164) in #t164;
  core::num v4 = let final dynamic #t166 = t in let final dynamic #t167 = "x" in let final dynamic #t168 = #t166.{self::Test::[]}(#t167) in #t168.{core::num::==}(null) ? let final dynamic #t169 = self::getInt() in let final dynamic #t170 = #t166.{self::Test::[]=}(#t167, #t169) in #t169 : #t168;
  core::num v5 = let final dynamic #t171 = t in let final dynamic #t172 = "x" in let final dynamic #t173 = #t171.{self::Test::[]}(#t172) in #t173.{core::num::==}(null) ? let final dynamic #t174 = self::getNum() in let final dynamic #t175 = #t171.{self::Test::[]=}(#t172, #t174) in #t174 : #t173;
  core::num v6 = let final dynamic #t176 = t in let final dynamic #t177 = "x" in let final dynamic #t178 = #t176.{self::Test::[]}(#t177) in #t178.{core::num::==}(null) ? let final dynamic #t179 = self::getDouble() in let final dynamic #t180 = #t176.{self::Test::[]=}(#t177, #t179) in #t179 : #t178;
  core::num v7 = let final dynamic #t181 = t in let final dynamic #t182 = "x" in let final dynamic #t183 = #t181.{self::Test::[]}(#t182).{core::num::+}(self::getInt()) in let final dynamic #t184 = #t181.{self::Test::[]=}(#t182, #t183) in #t183;
  core::num v8 = let final dynamic #t185 = t in let final dynamic #t186 = "x" in let final dynamic #t187 = #t185.{self::Test::[]}(#t186).{core::num::+}(self::getNum()) in let final dynamic #t188 = #t185.{self::Test::[]=}(#t186, #t187) in #t187;
  core::num v9 = let final dynamic #t189 = t in let final dynamic #t190 = "x" in let final dynamic #t191 = #t189.{self::Test::[]}(#t190).{core::num::+}(self::getDouble()) in let final dynamic #t192 = #t189.{self::Test::[]=}(#t190, #t191) in #t191;
  core::num v10 = let final dynamic #t193 = t in let final dynamic #t194 = "x" in let final dynamic #t195 = #t193.{self::Test::[]}(#t194).{core::num::+}(1) in let final dynamic #t196 = #t193.{self::Test::[]=}(#t194, #t195) in #t195;
  core::num v11 = let final dynamic #t197 = t in let final dynamic #t198 = "x" in let final dynamic #t199 = #t197.{self::Test::[]}(#t198) in let final dynamic #t200 = #t197.{self::Test::[]=}(#t198, #t199.{core::num::+}(1)) in #t199;
}
static method test6(self::Test<core::num, core::double> t) → void {
  core::num v2 = let final dynamic #t201 = t in let final dynamic #t202 = "x" in let final dynamic #t203 = self::getNum() in let final dynamic #t204 = #t201.{self::Test::[]=}(#t202, #t203) in #t203;
  core::double v3 = let final dynamic #t205 = t in let final dynamic #t206 = "x" in let final dynamic #t207 = self::getDouble() in let final dynamic #t208 = #t205.{self::Test::[]=}(#t206, #t207) in #t207;
  core::num v5 = let final dynamic #t209 = t in let final dynamic #t210 = "x" in let final dynamic #t211 = #t209.{self::Test::[]}(#t210) in #t211.{core::num::==}(null) ? let final dynamic #t212 = self::getNum() in let final dynamic #t213 = #t209.{self::Test::[]=}(#t210, #t212) in #t212 : #t211;
  core::double v6 = let final dynamic #t214 = t in let final dynamic #t215 = "x" in let final dynamic #t216 = #t214.{self::Test::[]}(#t215) in #t216.{core::num::==}(null) ? let final dynamic #t217 = self::getDouble() in let final dynamic #t218 = #t214.{self::Test::[]=}(#t215, #t217) in #t217 : #t216;
  core::double v7 = let final dynamic #t219 = t in let final dynamic #t220 = "x" in let final dynamic #t221 = #t219.{self::Test::[]}(#t220).{core::double::+}(self::getInt()) in let final dynamic #t222 = #t219.{self::Test::[]=}(#t220, #t221) in #t221;
  core::double v8 = let final dynamic #t223 = t in let final dynamic #t224 = "x" in let final dynamic #t225 = #t223.{self::Test::[]}(#t224).{core::double::+}(self::getNum()) in let final dynamic #t226 = #t223.{self::Test::[]=}(#t224, #t225) in #t225;
  core::double v9 = let final dynamic #t227 = t in let final dynamic #t228 = "x" in let final dynamic #t229 = #t227.{self::Test::[]}(#t228).{core::double::+}(self::getDouble()) in let final dynamic #t230 = #t227.{self::Test::[]=}(#t228, #t229) in #t229;
  core::double v10 = let final dynamic #t231 = t in let final dynamic #t232 = "x" in let final dynamic #t233 = #t231.{self::Test::[]}(#t232).{core::double::+}(1) in let final dynamic #t234 = #t231.{self::Test::[]=}(#t232, #t233) in #t233;
  core::double v11 = let final dynamic #t235 = t in let final dynamic #t236 = "x" in let final dynamic #t237 = #t235.{self::Test::[]}(#t236) in let final dynamic #t238 = #t235.{self::Test::[]=}(#t236, #t237.{core::double::+}(1)) in #t237;
}
static method test7(self::Test<core::double, core::int> t) → void {
  core::int v1 = let final dynamic #t239 = t in let final dynamic #t240 = "x" in let final dynamic #t241 = self::getInt() in let final dynamic #t242 = #t239.{self::Test::[]=}(#t240, #t241) in #t241;
  core::num v2 = let final dynamic #t243 = t in let final dynamic #t244 = "x" in let final dynamic #t245 = self::getNum() in let final dynamic #t246 = #t243.{self::Test::[]=}(#t244, #t245) in #t245;
  core::int v4 = let final dynamic #t247 = t in let final dynamic #t248 = "x" in let final dynamic #t249 = #t247.{self::Test::[]}(#t248) in #t249.{core::num::==}(null) ? let final dynamic #t250 = self::getInt() in let final dynamic #t251 = #t247.{self::Test::[]=}(#t248, #t250) in #t250 : #t249;
  core::num v5 = let final dynamic #t252 = t in let final dynamic #t253 = "x" in let final dynamic #t254 = #t252.{self::Test::[]}(#t253) in #t254.{core::num::==}(null) ? let final dynamic #t255 = self::getNum() in let final dynamic #t256 = #t252.{self::Test::[]=}(#t253, #t255) in #t255 : #t254;
  core::int v7 = let final dynamic #t257 = t in let final dynamic #t258 = "x" in let final dynamic #t259 = #t257.{self::Test::[]}(#t258).{core::num::+}(self::getInt()) in let final dynamic #t260 = #t257.{self::Test::[]=}(#t258, #t259) in #t259;
  core::num v8 = let final dynamic #t261 = t in let final dynamic #t262 = "x" in let final dynamic #t263 = #t261.{self::Test::[]}(#t262).{core::num::+}(self::getNum()) in let final dynamic #t264 = #t261.{self::Test::[]=}(#t262, #t263) in #t263;
  core::int v10 = let final dynamic #t265 = t in let final dynamic #t266 = "x" in let final dynamic #t267 = #t265.{self::Test::[]}(#t266).{core::num::+}(1) in let final dynamic #t268 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
  core::int v11 = let final dynamic #t269 = t in let final dynamic #t270 = "x" in let final dynamic #t271 = #t269.{self::Test::[]}(#t270) in let final dynamic #t272 = #t269.{self::Test::[]=}(#t270, #t271.{core::num::+}(1)) in #t271;
}
static method test8(self::Test<core::double, core::num> t) → void {
  core::int v1 = let final dynamic #t273 = t in let final dynamic #t274 = "x" in let final dynamic #t275 = self::getInt() in let final dynamic #t276 = #t273.{self::Test::[]=}(#t274, #t275) in #t275;
  core::num v2 = let final dynamic #t277 = t in let final dynamic #t278 = "x" in let final dynamic #t279 = self::getNum() in let final dynamic #t280 = #t277.{self::Test::[]=}(#t278, #t279) in #t279;
  core::double v3 = let final dynamic #t281 = t in let final dynamic #t282 = "x" in let final dynamic #t283 = self::getDouble() in let final dynamic #t284 = #t281.{self::Test::[]=}(#t282, #t283) in #t283;
  core::num v4 = let final dynamic #t285 = t in let final dynamic #t286 = "x" in let final dynamic #t287 = #t285.{self::Test::[]}(#t286) in #t287.{core::num::==}(null) ? let final dynamic #t288 = self::getInt() in let final dynamic #t289 = #t285.{self::Test::[]=}(#t286, #t288) in #t288 : #t287;
  core::num v5 = let final dynamic #t290 = t in let final dynamic #t291 = "x" in let final dynamic #t292 = #t290.{self::Test::[]}(#t291) in #t292.{core::num::==}(null) ? let final dynamic #t293 = self::getNum() in let final dynamic #t294 = #t290.{self::Test::[]=}(#t291, #t293) in #t293 : #t292;
  core::num v6 = let final dynamic #t295 = t in let final dynamic #t296 = "x" in let final dynamic #t297 = #t295.{self::Test::[]}(#t296) in #t297.{core::num::==}(null) ? let final dynamic #t298 = self::getDouble() in let final dynamic #t299 = #t295.{self::Test::[]=}(#t296, #t298) in #t298 : #t297;
  core::num v7 = let final dynamic #t300 = t in let final dynamic #t301 = "x" in let final dynamic #t302 = #t300.{self::Test::[]}(#t301).{core::num::+}(self::getInt()) in let final dynamic #t303 = #t300.{self::Test::[]=}(#t301, #t302) in #t302;
  core::num v8 = let final dynamic #t304 = t in let final dynamic #t305 = "x" in let final dynamic #t306 = #t304.{self::Test::[]}(#t305).{core::num::+}(self::getNum()) in let final dynamic #t307 = #t304.{self::Test::[]=}(#t305, #t306) in #t306;
  core::num v9 = let final dynamic #t308 = t in let final dynamic #t309 = "x" in let final dynamic #t310 = #t308.{self::Test::[]}(#t309).{core::num::+}(self::getDouble()) in let final dynamic #t311 = #t308.{self::Test::[]=}(#t309, #t310) in #t310;
  core::num v10 = let final dynamic #t312 = t in let final dynamic #t313 = "x" in let final dynamic #t314 = #t312.{self::Test::[]}(#t313).{core::num::+}(1) in let final dynamic #t315 = #t312.{self::Test::[]=}(#t313, #t314) in #t314;
  core::num v11 = let final dynamic #t316 = t in let final dynamic #t317 = "x" in let final dynamic #t318 = #t316.{self::Test::[]}(#t317) in let final dynamic #t319 = #t316.{self::Test::[]=}(#t317, #t318.{core::num::+}(1)) in #t318;
}
static method test9(self::Test<core::double, core::double> t) → void {
  core::num v2 = let final dynamic #t320 = t in let final dynamic #t321 = "x" in let final dynamic #t322 = self::getNum() in let final dynamic #t323 = #t320.{self::Test::[]=}(#t321, #t322) in #t322;
  core::double v3 = let final dynamic #t324 = t in let final dynamic #t325 = "x" in let final dynamic #t326 = self::getDouble() in let final dynamic #t327 = #t324.{self::Test::[]=}(#t325, #t326) in #t326;
  core::num v5 = let final dynamic #t328 = t in let final dynamic #t329 = "x" in let final dynamic #t330 = #t328.{self::Test::[]}(#t329) in #t330.{core::num::==}(null) ? let final dynamic #t331 = self::getNum() in let final dynamic #t332 = #t328.{self::Test::[]=}(#t329, #t331) in #t331 : #t330;
  core::double v6 = let final dynamic #t333 = t in let final dynamic #t334 = "x" in let final dynamic #t335 = #t333.{self::Test::[]}(#t334) in #t335.{core::num::==}(null) ? let final dynamic #t336 = self::getDouble() in let final dynamic #t337 = #t333.{self::Test::[]=}(#t334, #t336) in #t336 : #t335;
  core::double v7 = let final dynamic #t338 = t in let final dynamic #t339 = "x" in let final dynamic #t340 = #t338.{self::Test::[]}(#t339).{core::double::+}(self::getInt()) in let final dynamic #t341 = #t338.{self::Test::[]=}(#t339, #t340) in #t340;
  core::double v8 = let final dynamic #t342 = t in let final dynamic #t343 = "x" in let final dynamic #t344 = #t342.{self::Test::[]}(#t343).{core::double::+}(self::getNum()) in let final dynamic #t345 = #t342.{self::Test::[]=}(#t343, #t344) in #t344;
  core::double v9 = let final dynamic #t346 = t in let final dynamic #t347 = "x" in let final dynamic #t348 = #t346.{self::Test::[]}(#t347).{core::double::+}(self::getDouble()) in let final dynamic #t349 = #t346.{self::Test::[]=}(#t347, #t348) in #t348;
  core::double v10 = let final dynamic #t350 = t in let final dynamic #t351 = "x" in let final dynamic #t352 = #t350.{self::Test::[]}(#t351).{core::double::+}(1) in let final dynamic #t353 = #t350.{self::Test::[]=}(#t351, #t352) in #t352;
  core::double v11 = let final dynamic #t354 = t in let final dynamic #t355 = "x" in let final dynamic #t356 = #t354.{self::Test::[]}(#t355) in let final dynamic #t357 = #t354.{self::Test::[]=}(#t355, #t356.{core::double::+}(1)) in #t356;
}
static method main() → dynamic {}
