library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/pure_index_expressions.dart:26:15: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
//  - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
//     map[this] += this;
//               ^
//
// pkg/front_end/testcases/general/pure_index_expressions.dart:27:15: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
//  - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
//     map[self] += self;
//               ^
//
// pkg/front_end/testcases/general/pure_index_expressions.dart:42:19: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
//  - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
//     v = map[this] += this;
//                   ^
//
// pkg/front_end/testcases/general/pure_index_expressions.dart:43:19: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
//  - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
//     v = map[self] += self;
//                   ^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  operator [](self::Class cls) → self::Class
    return new self::Class::•();
  operator []=(self::Class cls, self::Class value) → void {}
  operator +(self::Class cls) → self::Class
    return cls;
  method indexGetSetForEffect(core::Map<self::Class, self::Class> map) → void {
    final self::Class self = this;
    let final core::Map<self::Class, self::Class> #t1 = map in #t1.{core::Map::[]}(this){(core::Object?) → self::Class?} == null ?{self::Class?} #t1.{core::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
    let final core::Map<self::Class, self::Class> #t2 = map in #t2.{core::Map::[]}(self){(core::Object?) → self::Class?} == null ?{self::Class?} #t2.{core::Map::[]=}(self, self){(self::Class, self::Class) → void} : null;
    map.{core::Map::[]=}(this, this){(self::Class, self::Class) → void};
    map.{core::Map::[]=}(self, self){(self::Class, self::Class) → void};
    map.{core::Map::[]}(this){(core::Object?) → self::Class?};
    map.{core::Map::[]}(self){(core::Object?) → self::Class?};
    let final core::Map<self::Class, self::Class> #t3 = map in #t3.{core::Map::[]=}(this, invalid-expression "pkg/front_end/testcases/general/pure_index_expressions.dart:26:15: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
 - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
    map[this] += this;
              ^" in #t3.{core::Map::[]}(this){(core::Object?) → self::Class?}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
    let final core::Map<self::Class, self::Class> #t4 = map in #t4.{core::Map::[]=}(self, invalid-expression "pkg/front_end/testcases/general/pure_index_expressions.dart:27:15: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
 - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
    map[self] += self;
              ^" in #t4.{core::Map::[]}(self){(core::Object?) → self::Class?}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
  }
  method indexGetSetForValue(core::Map<self::Class, self::Class> map) → void {
    final self::Class self = this;
    dynamic v;
    v = let final core::Map<self::Class, self::Class> #t5 = map in let final self::Class? #t6 = #t5.{core::Map::[]}(this){(core::Object?) → self::Class?} in #t6 == null ?{self::Class} let final void #t7 = #t5.{core::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t6{self::Class};
    v = let final core::Map<self::Class, self::Class> #t8 = map in let final self::Class? #t9 = #t8.{core::Map::[]}(self){(core::Object?) → self::Class?} in #t9 == null ?{self::Class} let final void #t10 = #t8.{core::Map::[]=}(self, self){(self::Class, self::Class) → void} in self : #t9{self::Class};
    v = let final core::Map<self::Class, self::Class> #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
    v = let final core::Map<self::Class, self::Class> #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self){(self::Class, self::Class) → void} in self;
    v = map.{core::Map::[]}(this){(core::Object?) → self::Class?};
    v = map.{core::Map::[]}(self){(core::Object?) → self::Class?};
    v = let final core::Map<self::Class, self::Class> #t15 = map in let final self::Class #t16 = invalid-expression "pkg/front_end/testcases/general/pure_index_expressions.dart:42:19: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
 - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
    v = map[this] += this;
                  ^" in #t15.{core::Map::[]}(this){(core::Object?) → self::Class?}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t17 = #t15.{core::Map::[]=}(this, #t16){(self::Class, self::Class) → void} in #t16;
    v = let final core::Map<self::Class, self::Class> #t18 = map in let final self::Class #t19 = invalid-expression "pkg/front_end/testcases/general/pure_index_expressions.dart:43:19: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
 - 'Class' is from 'pkg/front_end/testcases/general/pure_index_expressions.dart'.
    v = map[self] += self;
                  ^" in #t18.{core::Map::[]}(self){(core::Object?) → self::Class?}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t20 = #t18.{core::Map::[]=}(self, #t19){(self::Class, self::Class) → void} in #t19;
  }
  method implicitExtensionGetSetForEffect(core::int i) → void {
    final self::Class self = this;
    let final core::int #t21 = i in self::Extension|[](#t21, this) == null ?{self::Class?} self::Extension|[]=(#t21, this, this) : null;
    let final core::int #t22 = i in self::Extension|[](#t22, self) == null ?{self::Class?} self::Extension|[]=(#t22, self, self) : null;
    self::Extension|[]=(i, this, this);
    self::Extension|[]=(i, self, self);
    self::Extension|[](i, this);
    self::Extension|[](i, self);
    let final core::int #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this){(self::Class) → self::Class});
    let final core::int #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self){(self::Class) → self::Class});
  }
  method implicitExtensionGetSetForValue(core::int i) → void {
    final self::Class self = this;
    dynamic v;
    v = let final core::int #t25 = i in let final self::Class #t26 = self::Extension|[](#t25, this) in #t26 == null ?{self::Class} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
    v = let final core::int #t28 = i in let final self::Class #t29 = self::Extension|[](#t28, self) in #t29 == null ?{self::Class} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
    v = let final core::int #t31 = i in let final void #t32 = self::Extension|[]=(#t31, this, this) in this;
    v = let final core::int #t33 = i in let final void #t34 = self::Extension|[]=(#t33, self, self) in self;
    v = self::Extension|[](i, this);
    v = self::Extension|[](i, self);
    v = let final core::int #t35 = i in let final self::Class #t36 = self::Extension|[](#t35, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
    v = let final core::int #t38 = i in let final self::Class #t39 = self::Extension|[](#t38, self).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
  }
  method explicitExtensionGetSetForEffect(core::int i) → void {
    final self::Class self = this;
    let final core::int #t41 = i in self::Extension|[](#t41, this) == null ?{self::Class?} self::Extension|[]=(#t41, this, this) : null;
    let final core::int #t42 = i in self::Extension|[](#t42, self) == null ?{self::Class?} self::Extension|[]=(#t42, self, self) : null;
    self::Extension|[]=(i, this, this);
    self::Extension|[]=(i, self, self);
    self::Extension|[](i, this);
    self::Extension|[](i, self);
    let final core::int #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this){(self::Class) → self::Class});
    let final core::int #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self){(self::Class) → self::Class});
  }
  method explicitExtensionGetSetForValue(core::int i) → void {
    final self::Class self = this;
    dynamic v;
    v = let final core::int #t45 = i in let final self::Class #t46 = self::Extension|[](#t45, this) in #t46 == null ?{self::Class} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, self) in #t49 == null ?{self::Class} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
    v = let final core::int #t51 = i in let final void #t52 = self::Extension|[]=(#t51, this, this) in this;
    v = let final core::int #t53 = i in let final void #t54 = self::Extension|[]=(#t53, self, self) in self;
    v = self::Extension|[](i, this);
    v = self::Extension|[](i, self);
    v = let final core::int #t55 = i in let final self::Class #t56 = self::Extension|[](#t55, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
    v = let final core::int #t58 = i in let final self::Class #t59 = self::Extension|[](#t58, self).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
  }
}
class Subclass extends self::Class {
  synthetic constructor •() → self::Subclass
    : super self::Class::•()
    ;
  method superIndexGetSetForEffect() → void {
    final self::Class self = this;
    super.{self::Class::[]}(this) == null ?{self::Class?} super.{self::Class::[]=}(this, this) : null;
    super.{self::Class::[]}(self) == null ?{self::Class?} super.{self::Class::[]=}(self, self) : null;
    super.{self::Class::[]=}(this, this);
    super.{self::Class::[]=}(self, self);
    super.{self::Class::[]}(this);
    super.{self::Class::[]}(self);
    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class) → self::Class});
  }
  method superIndexGetSetForValue() → void {
    final self::Class self = this;
    dynamic v;
    v = let final self::Class #t61 = super.{self::Class::[]}(this) in #t61 == null ?{self::Class} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
    v = let final self::Class #t63 = super.{self::Class::[]}(self) in #t63 == null ?{self::Class} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
    v = let final void #t65 = super.{self::Class::[]=}(this, this) in this;
    v = let final void #t66 = super.{self::Class::[]=}(self, self) in self;
    v = super.{self::Class::[]}(this);
    v = super.{self::Class::[]}(self);
    v = let final self::Class #t67 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
    v = let final self::Class #t69 = super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
  }
}
class Class2 extends core::Object {
  synthetic constructor •() → self::Class2
    : super core::Object::•()
    ;
  operator +(self::Class2 cls) → self::Class2
    return cls;
  method implicitExtensionGetSetForEffect() → void {
    final self::Class2 self = this;
    self::Extension2|[](this, this) == null ?{self::Class2?} self::Extension2|[]=(this, this, this) : null;
    self::Extension2|[](self, self) == null ?{self::Class2?} self::Extension2|[]=(self, self, self) : null;
    self::Extension2|[]=(this, this, this);
    self::Extension2|[]=(self, self, self);
    self::Extension2|[](this, this);
    self::Extension2|[](self, self);
    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2) → self::Class2});
  }
  method implicitExtensionGetSetForValue() → void {
    final self::Class2 self = this;
    dynamic v;
    v = let final self::Class2 #t71 = self::Extension2|[](this, this) in #t71 == null ?{self::Class2} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
    v = let final self::Class2 #t73 = self::Extension2|[](self, self) in #t73 == null ?{self::Class2} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
    v = let final void #t75 = self::Extension2|[]=(this, this, this) in this;
    v = let final void #t76 = self::Extension2|[]=(self, self, self) in self;
    v = self::Extension2|[](this, this);
    v = self::Extension2|[](self, self);
    v = let final self::Class2 #t77 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
    v = let final self::Class2 #t79 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
  }
  method explicitExtensionGetSetForEffect() → void {
    final self::Class2 self = this;
    self::Extension2|[](this, this) == null ?{self::Class2?} self::Extension2|[]=(this, this, this) : null;
    self::Extension2|[](self, self) == null ?{self::Class2?} self::Extension2|[]=(self, self, self) : null;
    self::Extension2|[]=(this, this, this);
    self::Extension2|[]=(self, self, self);
    self::Extension2|[](this, this);
    self::Extension2|[](self, self);
    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2) → self::Class2});
  }
  method explicitExtensionGetSetForValue() → void {
    final self::Class2 self = this;
    dynamic v;
    v = let final self::Class2 #t81 = self::Extension2|[](this, this) in #t81 == null ?{self::Class2} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
    v = let final self::Class2 #t83 = self::Extension2|[](self, self) in #t83 == null ?{self::Class2} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
    v = let final void #t85 = self::Extension2|[]=(this, this, this) in this;
    v = let final void #t86 = self::Extension2|[]=(self, self, self) in self;
    v = self::Extension2|[](this, this);
    v = self::Extension2|[](self, self);
    v = let final self::Class2 #t87 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
    v = let final self::Class2 #t89 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
  }
}
extension Extension on core::int {
  operator [] = self::Extension|[];
  operator []= = self::Extension|[]=;
}
extension Extension2 on self::Class2 {
  operator [] = self::Extension2|[];
  operator []= = self::Extension2|[]=;
}
static extension-member method Extension|[](lowered final core::int #this, self::Class cls) → self::Class
  return new self::Class::•();
static extension-member method Extension|[]=(lowered final core::int #this, self::Class cls, self::Class value) → void {}
static extension-member method Extension2|[](lowered final self::Class2 #this, self::Class2 cls) → self::Class2
  return new self::Class2::•();
static extension-member method Extension2|[]=(lowered final self::Class2 #this, self::Class2 cls, self::Class2 value) → void {}
static method main() → dynamic {}
