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

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


Extra constant evaluation status:
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:31:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:34:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:34:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:37:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:37:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:40:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:40:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:47:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:47:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:53:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:55:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:57:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:60:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:60:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:63:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:63:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:66:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:66:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:69:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:69:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:72:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:72:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:79:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:79:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:82:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:82:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:85:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:85:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:91:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:94:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:94:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:97:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:97:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:100:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:100:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:107:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:107:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:113:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:120:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:120:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:126:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:128:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:130:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:133:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:133:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:136:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:136:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:139:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:139:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:142:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:142:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:145:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:145:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:152:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:152:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:155:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:155:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:158:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:158:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:164:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:167:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:167:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:170:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:170:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:173:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:173:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:180:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:180:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:186:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:193:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:193:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:199:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:201:56 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:203:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:206:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:206:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:209:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:209:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:212:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:212:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:215:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:215:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:218:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:218:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:225:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:225:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:228:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:228:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:231:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:231:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:237:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:240:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:240:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:243:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:243:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:246:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:246:9 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:249:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:249:10 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:256:59 -> StringConstant("x")
Evaluated: VariableGet @ org-dartlang-testcase:///infer_assign_to_index_super_upwards2.dart:256:59 -> StringConstant("x")
Extra constant evaluation: evaluated: 653, effectively constant: 101
