| /* |
| * Copyright (c) 2019, 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. |
| */ |
| /** |
| * @assertion A pre-increment expression of the form ++e1.id is generally |
| * equivalent to e1.id += 1. Similarly for --e1.id, ++e1[e2] and --e1[e2]. This |
| * applies when e1 is an extension application too, reducing it to the former |
| * case. |
| * |
| * A post-increment expression of the form e1.id++ is generally equivalent to |
| * e1.id += 1 (which is e1.id = e1.id + 1 except that subexpressions of e1 are |
| * not evaluated more than once), but the value of the expression is the value |
| * from evaluating e1.id before adding 1. |
| * |
| * @description Check --e1[id] and e1[id]-- values |
| * @issue 39198 |
| * @author sgrekhov@unipro.ru |
| */ |
| |
| import "../../Utils/expect.dart"; |
| |
| class C { |
| int value; |
| C() : value = 0 {} |
| init() { |
| value = 0; |
| } |
| } |
| |
| extension Ext on C { |
| int operator [](int index) => this.value; |
| void operator []=(int index, int val) { |
| this.value = val; |
| } |
| } |
| |
| main() { |
| C c = C(); |
| Expect.equals(-1, --Ext(c)[42]); |
| c.init(); |
| Expect.equals(0, Ext(c)[42]--); |
| } |