// Formatted problems:
//
// pkg/front_end/testcases/rasta/super_operator.dart:22:15: Error: Superclass has no method named '[]'.
//   g() => super[0];
//               ^

// Unhandled errors:
//
// pkg/front_end/testcases/rasta/super_operator.dart:22:15: Error: Superclass has no method named '[]'.
//   g() => super[0];
//               ^

library;
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);
}
