blob: 108cbc8ef1b39beab1cc12a3f555f9ad800f8220 [file] [log] [blame]
// 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 with a prefix operator which fit into
* this production don't cause compile-time errors.
* @author msyabro
*/
class S {
var x = 1;
operator -() {return -x;}
operator [](var ind) {return x;}
operator []=(var ind, var val) {x = val;}
}
class A extends S {
test() {
//prefixOperator postfixExpression
-x--;
~x--;
//combination of prefix and increment operator
try {- --x;} catch (e) {}
try {~--x;} catch (e) {}
try {-++x;} catch (e) {}
try {~++x;} catch (e) {}
//prefixOperator postfixExpression>primary>identifier
-x;
~x;
~~x;
//prefix operators with literals
try {-1;} catch (e) {}
try {~2;} catch (e) {}
try {-this;} catch (e) {}
!!false;
!!!true;
!!!!false;
!!!!!!true;
//prefix operators with various expressions
try {~(1 + 2);} catch (e) {}
// super with selector
try {-super[0];} catch (ok) {}
try {~super.x;} catch (ok) {}
try {!super[0];} catch (ok) {}
}
}
main() {
A a = new A();
a.test();
}