// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

import "package:expect/expect.dart";

class A {}

class B extends A {}

class C {
  Object operator [](A a) => 0;
  void operator []=(B b, Object o) {}
}

class D {
  Object operator [](B b) => 0;
  void operator []=(A a, Object o) {}
}

class E {
  Object operator [](A a) => null;
  void operator []=(B b, Object o) {}
}

void main() {
  A a1 = new B();
  A a2 = new A();
  C c = new C();
  D d = new D();
  E e = new E();
  c[a1] ??= 1; // No error
  d[a1] ??= 1; // No error
  e[a1] ??= 1; // No error
  c[a2] ??= 1; // No error - []= skipped
  Expect.throwsTypeError(() {
    d[a2] ??= 1;
  });
  Expect.throwsTypeError(() {
    e[a2] ??= 1;
  });
}
