| /* |
| * 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 Assignable expressions are expressions that can appear on the |
| * left hand side of an assignment. |
| * assignableExpression: |
| * primary (arguments* assignableSelector)+ | |
| * super unconditionalAssignableSelector | |
| * identifier |
| * ; |
| * unconditionalAssignableSelector: |
| * '[' expression ']' | |
| * '.' identifier |
| * ; |
| * assignableSelector: |
| * unconditionalAssignableSelector | |
| * '?.' identifier |
| * ; |
| * An assignable expression is either: |
| * • An identifier. |
| * • An invocation (possibly conditional) of a getter or list access operator |
| * on an expression e. |
| * • An invocation of a getter or list access operator on super. |
| * @description Checks that expressions that fits into this grammar |
| * can be used in the left hand side of an assignment. |
| * @author msyabro |
| */ |
| |
| topLevelFunction() => ["x"]; |
| |
| class S { |
| const S(); |
| } |
| |
| class A { |
| method() => ["y"]; |
| test() { |
| var ident = [""]; |
| |
| //listLiteral |
| [0, 1, 2, 3][1] = 1; |
| |
| //identifier |
| ident[0] = "Lily was here"; |
| |
| //constantObjectExpression |
| const c = 1; |
| |
| //(functionInvocation) |
| (topLevelFunction())[0] = "testme"; |
| |
| //(methodInvocation) |
| (this.method())[0] = "1"; |
| } |
| } |
| |
| main() { |
| A a = new A(); |
| a.test(); |
| } |