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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator +(core::int value) → self::C
    return throw "";
  operator *(self::D value) → self::C
    return throw "";
}
class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  operator +(core::int value) → self::E
    return throw "";
  operator *(self::F value) → self::E
    return throw "";
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
}
class E extends core::Object {
  synthetic constructor •() → self::E
    : super core::Object::•()
    ;
}
class F extends core::Object {
  synthetic constructor •() → self::F
    : super core::Object::•()
    ;
}
class G extends core::Object {
  synthetic constructor •() → self::G
    : super core::Object::•()
    ;
  operator [](core::int i) → self::A
    return throw "";
  operator []=(core::int i, self::B value) → void {}
}
static method f<T extends core::Object? = dynamic>() → self::f::T%
  return throw "";
static method test1(self::G g) → void {
  let final self::G #t1 = g in let final core::int #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C}){(core::int, self::B) → void};
  self::C x = let final self::G #t3 = g in let final core::int #t4 = 0 in let final self::C #t5 = #t3.{self::G::[]}(#t4){(core::int) → self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int, self::B) → void} in #t5;
}
static method test2(self::G g) → void {
  let final self::G #t7 = g in let final core::int #t8 = 0 in let final self::C #t9 = #t7.{self::G::[]}(#t8){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int, self::B) → void} in #t9;
  self::C x = let final self::G #t11 = g in let final core::int #t12 = 0 in let final self::C #t13 = #t11.{self::G::[]}(#t12){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int, self::B) → void} in #t13;
}
static method test3(self::G g) → void {
  let final self::G #t15 = g in let final core::int #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int) → self::A}.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void};
  self::A x = let final self::G #t17 = g in let final core::int #t18 = 0 in let final self::A #t19 = #t17.{self::G::[]}(#t18){(core::int) → self::A} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int) → self::C}){(core::int, self::B) → void} in #t19;
}
static method main() → dynamic {}
