| // Copyright (c) 2011, 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 Postfix expressions invoke the postfix operators on objects. |
| * postfixExpression: |
| * assignableExpression postfixOperator | |
| * primary (selector* | (‘#’ ( (identifier ‘=’?) | operator))) |
| * ; |
| * postfixOperator: |
| * incrementOperator |
| * ; |
| * selector: |
| * assignableSelector | |
| * arguments |
| * ; |
| * incrementOperator: |
| * '++' | |
| * '--' |
| * ; |
| * A postfix expression is either a primary expression, a function, method or |
| * getter invocation, or an invocation of a postfix operator on an expression e. |
| * @description Checks that any assignableExpression can be used with |
| * postfixOperator. |
| * See tests 10_27_Assignable_Expressions_A01_t0[1-3].dart |
| * @author msyabro |
| * @issue 2709 |
| */ |
| |
| class S { |
| S() : x = 1; |
| operator [](var ind) {return x;} |
| operator []=(var ind, var val) {x = val;} |
| var x; |
| } |
| |
| class C { |
| const C(); |
| const C.c2(); |
| } |
| |
| class A extends S { |
| A() : id = 1; |
| method() {} |
| var id; |
| |
| test() { |
| //identifier |
| id++; |
| id--; |
| |
| //super |
| super[0]; |
| super.x; |
| super[0]++; // issue 1300 |
| super.x--; // issue 1300 |
| |
| //thisExpression |
| try { this[0];} catch (e) {} |
| try { this.x;} catch (e) {} |
| try { this[0]--;} catch (e) {} |
| try { this.x++;} catch (e) {} |
| |
| //listLiteral |
| try { [0, 1, 2, 3][1]; } catch (e) {} |
| try { [0, 1, 2, 3][1]++; } catch (e) {} |
| try { const [1, 2, 3][0];} catch (e) {} |
| try { const [1, 2, 3][0]--;} catch (e) {} |
| |
| //identifier |
| try { id["id"];} catch (e) {} |
| try { id.id;} catch (e) {} |
| try { id["id"]++;} catch (e) {} |
| try { id.id--;} catch (e) {} |
| |
| //newExpression |
| try { new A()[0];} catch (e) {} |
| try { new A().x;} catch (e) {} |
| try { new A()[0]--;} catch (e) {} |
| try { new A().x++;} catch (e) {} |
| } |
| } |
| |
| main() { |
| A a = new A(); |
| a.test(); |
| } |