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(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|[]=(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::•() as{ForNonNullableByDefault} 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}";
}
