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

class C extends core::Object {
  field core::String m = "";
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  set setter(core::String v) → void {}
  operator []=(core::int index, core::String value) → void {}
}
extension _extension#0 on self::C? {
  operator []= = self::_extension#0|[]=;
  set setter = self::_extension#0|set#setter;
}
static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
  let final self::C? #t1 = #this in #t1.{core::Object::==}(null) ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
}
static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
  let final self::C? #t2 = #this in #t2.{core::Object::==}(null) ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
}
static method main() → dynamic {
  self::C? c = new self::C::•();
  self::expect("", let final self::C? #t3 = c in #t3.{core::Object::==}(null) ?{core::String?} null : #t3{self::C}.{self::C::m});
  self::_extension#0|set#setter(c, "42");
  self::expect("42", let final self::C? #t4 = c in #t4.{core::Object::==}(null) ?{core::String?} null : #t4{self::C}.{self::C::m});
  self::_extension#0|[]=(c, 42, "87");
  self::expect("4287", let final self::C? #t5 = c in #t5.{core::Object::==}(null) ?{core::String?} null : #t5{self::C}.{self::C::m});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
