library;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/super_operator.dart:22:15: Error: Superclass has no method named '[]'.
//   g() => super[0];
//               ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator +(core::String s) → dynamic
    return null;
  operator [](dynamic i) → dynamic
    return null;
  operator []=(dynamic i, dynamic val) → void {}
}
class B extends self::A {
  synthetic constructor •() → self::B
    : 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) → void
    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 void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
}
class Autobianchi extends core::Object {
  synthetic constructor •() → self::Autobianchi
    : super core::Object::•()
    ;
  method g() → dynamic
    return super.[](0);
}
