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 == 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 == 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 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
  self::_extension#0|set#setter(c, "42");
  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
  self::_extension#0|[]=(c, 42, "87");
  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
