library test;
import self as self;
import "dart:core" as core;

typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (core::Null?) →* void> extends core::Object {
  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
    : super core::Object::•()
    ;
  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
    return null;
}
class C extends core::Object {
  field self::B<core::num*, (core::num*) →* void>* x = null;
  static field self::B<core::num*, (core::num*) →* void>* y = null;
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
    return null;
  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
}
static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
  b = b.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
}
static method test2(self::C* c) → void {
  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*);
  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
}
static method test3(self::C* c) → void {
  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
}
static method test4(self::C* c) → void {
  self::C::y = self::C::y.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
}
static method main() → void {}
