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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  operator +(core::String s) → dynamic
    return null;
  operator [](dynamic i) → dynamic
    return null;
  operator []=(dynamic i, dynamic val) → dynamic {}
}
class B extends self::A {
  synthetic constructor •() → void
    : super self::A::•()
    ;
  operator +(core::String s) → dynamic
    return super.{self::A::+}("${s}${s}");
  operator [](dynamic i) → dynamic
    return super.{self::A::[]}(i);
  operator []=(dynamic i, dynamic val) → dynamic
    return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1).+(val) in let final dynamic #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
}
class Autobianchi extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method g() → dynamic
    return super.[](0);
}
