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

class Index extends core::Object {
  synthetic constructor •() → self::Index
    : super core::Object::•()
    ;
}
class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  operator +(self::C v) → self::B
    return throw "";
  operator -(core::int i) → self::B
    return throw "";
  operator *(self::B v) → self::B
    return throw "";
  operator &(self::A v) → self::C
    return throw "";
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class Test extends core::Object {
  synthetic constructor •() → self::Test
    : super core::Object::•()
    ;
  operator [](self::Index i) → self::B
    return throw "";
  operator []=(self::Index i, self::B v) → void {}
  method test() → void {
    self::Test t = self::f<self::Test>();
    self::Test2 t2 = self::f<self::Test2>();
    t.{self::Test::[]=}(self::f<self::Index>(), self::f<self::B>()){(self::Index, self::B) → void};
    let final self::Test2 #t1 = t2 in let final self::Index #t2 = self::f<self::Index>() in #t1.{self::Test2::[]}(#t2){(self::Index) → self::B?} == null ?{self::B?} #t1.{self::Test2::[]=}(#t2, self::f<self::B?>()){(self::Index, self::B?) → void} : null;
    let final self::Test #t3 = t in let final self::Index #t4 = self::f<self::Index>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index) → self::B}.{self::B::+}(self::f<self::C>()){(self::C) → self::B}){(self::Index, self::B) → void};
    let final self::Test #t5 = t in let final self::Index #t6 = self::f<self::Index>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B}){(self::Index, self::B) → void};
    let final self::Test #t7 = t in let final self::Index #t8 = self::f<self::Index>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C}){(self::Index, self::B) → void};
    t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
    let final self::Test #t9 = t in let final self::Index #t10 = self::f<self::Index>() in let final self::B #t11 = #t9.{self::Test::[]}(#t10){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index, self::B) → void} in #t11;
    let final self::Test #t13 = t in let final self::Index #t14 = self::f<self::Index>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void};
    self::B v1 = let final self::Test #t15 = t in let final self::Index #t16 = self::f<self::Index>() in let final self::B #t17 = self::f<self::B>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index, self::B) → void} in #t17;
    self::B? v2 = let final self::Test2 #t19 = t2 in let final self::Index #t20 = self::f<self::Index>() in let final self::B? #t21 = #t19.{self::Test2::[]}(#t20){(self::Index) → self::B?} in #t21 == null ?{self::B?} let final self::B? #t22 = self::f<self::B?>() in let final void #t23 = #t19.{self::Test2::[]=}(#t20, #t22){(self::Index, self::B?) → void} in #t22 : #t21{self::B};
    self::B v4 = let final self::Test #t24 = t in let final self::Index #t25 = self::f<self::Index>() in let final self::B #t26 = #t24.{self::Test::[]}(#t25){(self::Index) → self::B}.{self::B::*}(self::f<self::B>()){(self::B) → self::B} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index, self::B) → void} in #t26;
    self::C v5 = let final self::Test #t28 = t in let final self::Index #t29 = self::f<self::Index>() in let final self::C #t30 = #t28.{self::Test::[]}(#t29){(self::Index) → self::B}.{self::B::&}(self::f<self::A>()){(self::A) → self::C} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index, self::B) → void} in #t30;
    self::B v6 = t.{self::Test::[]}(self::f<self::Index>()){(self::Index) → self::B};
    self::B v7 = let final self::Test #t32 = t in let final self::Index #t33 = self::f<self::Index>() in let final self::B #t34 = #t32.{self::Test::[]}(#t33){(self::Index) → self::B}.{self::B::-}(1){(core::int) → self::B} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index, self::B) → void} in #t34;
    self::B v8 = let final self::Test #t36 = t in let final self::Index #t37 = self::f<self::Index>() in let final self::B #t38 = #t36.{self::Test::[]}(#t37){(self::Index) → self::B} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int) → self::B}){(self::Index, self::B) → void} in #t38;
  }
}
class Test2 extends core::Object {
  synthetic constructor •() → self::Test2
    : super core::Object::•()
    ;
  operator [](self::Index i) → self::B?
    return throw "";
  operator []=(self::Index i, self::B? v) → void {}
}
static method f<T extends core::Object? = dynamic>() → self::f::T%
  return throw "";
static method main() → dynamic {}
