blob: b65ef3de538a2fcd99e5b1bb82653a4ac3820604 [file] [log] [blame]
// 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;
});
}