blob: 89c6ab9c604c1f3e700a9be85d8278036a758e8c [file] [log] [blame]
// Copyright (c) 2020, 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
// @dart=2.9
extension Extension on int {
Class operator [](Class cls) => new Class();
void operator []=(Class cls, Class value) {}
}
class Class {
Class operator [](Class cls) => new Class();
void operator []=(Class cls, Class value) {}
Class operator +(Class cls) => cls;
void indexGetSetForEffect(Map<Class, Class> map) {
final Class self = this;
map[this] ??= this;
map[self] ??= self;
map[this] = this;
map[self] = self;
map[this];
map[self];
map[this] += this;
map[self] += self;
}
void indexGetSetForValue(Map<Class, Class> map) {
final Class self = this;
var v;
v = map[this] ??= this;
v = map[self] ??= self;
v = map[this] = this;
v = map[self] = self;
v = map[this];
v = map[self];
v = map[this] += this;
v = map[self] += self;
}
void implicitExtensionGetSetForEffect(int i) {
final Class self = this;
i[this] ??= this;
i[self] ??= self;
i[this] = this;
i[self] = self;
i[this];
i[self];
i[this] += this;
i[self] += self;
}
void implicitExtensionGetSetForValue(int i) {
final Class self = this;
var v;
v = i[this] ??= this;
v = i[self] ??= self;
v = i[this] = this;
v = i[self] = self;
v = i[this];
v = i[self];
v = i[this] += this;
v = i[self] += self;
}
void explicitExtensionGetSetForEffect(int i) {
final Class self = this;
Extension(i)[this] ??= this;
Extension(i)[self] ??= self;
Extension(i)[this] = this;
Extension(i)[self] = self;
Extension(i)[this];
Extension(i)[self];
Extension(i)[this] += this;
Extension(i)[self] += self;
}
void explicitExtensionGetSetForValue(int i) {
final Class self = this;
var v;
v = Extension(i)[this] ??= this;
v = Extension(i)[self] ??= self;
v = Extension(i)[this] = this;
v = Extension(i)[self] = self;
v = Extension(i)[this];
v = Extension(i)[self];
v = Extension(i)[this] += this;
v = Extension(i)[self] += self;
}
}
class Subclass extends Class {
void superIndexGetSetForEffect() {
final Class self = this;
super[this] ??= this;
super[self] ??= self;
super[this] = this;
super[self] = self;
super[this];
super[self];
super[this] += this;
super[self] += self;
}
void superIndexGetSetForValue() {
final Class self = this;
var v;
v = super[this] ??= this;
v = super[self] ??= self;
v = super[this] = this;
v = super[self] = self;
v = super[this];
v = super[self];
v = super[this] += this;
v = super[self] += self;
}
}
extension Extension2 on Class2 {
Class2 operator [](Class2 cls) => new Class2();
void operator []=(Class2 cls, Class2 value) {}
}
class Class2 {
Class2 operator +(Class2 cls) => cls;
void implicitExtensionGetSetForEffect() {
final Class2 self = this;
this[this] ??= this;
self[self] ??= self;
this[this] = this;
self[self] = self;
this[this];
self[self];
this[this] += this;
self[self] += self;
}
void implicitExtensionGetSetForValue() {
final Class2 self = this;
var v;
v = this[this] ??= this;
v = self[self] ??= self;
v = this[this] = this;
v = self[self] = self;
v = this[this];
v = self[self];
v = this[this] += this;
v = self[self] += self;
}
void explicitExtensionGetSetForEffect() {
final Class2 self = this;
Extension2(this)[this] ??= this;
Extension2(self)[self] ??= self;
Extension2(this)[this] = this;
Extension2(self)[self] = self;
Extension2(this)[this];
Extension2(self)[self];
Extension2(this)[this] += this;
Extension2(self)[self] += self;
}
void explicitExtensionGetSetForValue() {
final Class2 self = this;
var v;
v = Extension2(this)[this] ??= this;
v = Extension2(self)[self] ??= self;
v = Extension2(this)[this] = this;
v = Extension2(self)[self] = self;
v = Extension2(this)[this];
v = Extension2(self)[self];
v = Extension2(this)[this] += this;
v = Extension2(self)[self] += self;
}
}
main() {}