| // 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 Unary expressions invoke unary operators on objects. |
| * unaryExpression: |
| * prefixOperator unaryExpression | |
| * awaitExpression | |
| * postfixExpression | |
| * (minusOperator | tildeOperator) super | |
| * incrementOperator assignableExpression |
| * ; |
| * prefixOperator: |
| * minusOperator | |
| * negationOperator | |
| * tildeOperator |
| * ; |
| * minusOperator: |
| * ‘-’ | |
| * ; |
| * negationOperator: |
| * ‘!’ | |
| * ; |
| * tildeOperator: |
| * ‘˜’ |
| * ; |
| * A unary expression is either a postfix expression, an await expression or |
| * an invocation of a prefix operator on an expression or an invocation of a |
| * unary operator on either super or an expression e. |
| * @description Checks that expressions composed from prefix/unary operators and |
| * super that fit into this production don't cause compile-time errors. |
| * @author msyabro |
| */ |
| |
| class S { |
| var x = 1; |
| operator -() { return this; } |
| operator ~() { return this; } |
| } |
| |
| class A extends S { |
| test() { |
| -super; |
| ~super; |
| - -super; // should be interpreted as -(-super); |
| ~~super; |
| try { |
| !-super; |
| } catch (ok) {} |
| ~-super; |
| -~super; |
| try { |
| !~super; |
| } catch (ok) {} |
| } |
| } |
| |
| main() { |
| A a = new A(); |
| a.test(); |
| } |