| // 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() {} |