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

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
  operator +(self::B* b) → self::A*
    return new self::C::•();
}
class C extends self::A {
  synthetic constructor •() → self::C*
    : super self::A::•()
    ;
}
static method main() → dynamic {
  core::Map<core::int*, self::B*>* map = <core::int*, self::B*>{0: new self::B::•()};
  try {
    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2).{self::B::+}(new self::B::•()) as{TypeError} self::B*);
    throw "Expected type error";
  }
  on dynamic catch(final dynamic _) {
  }
}
