()
| 2822 | // 11.4 Unary Operators |
| 2823 | |
| 2824 | function parseUnaryExpression() { |
| 2825 | var token, expr, startToken; |
| 2826 | |
| 2827 | if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { |
| 2828 | expr = parsePostfixExpression(); |
| 2829 | } else if (match('++') || match('--')) { |
| 2830 | startToken = lookahead; |
| 2831 | token = lex(); |
| 2832 | expr = parseUnaryExpression(); |
| 2833 | // 11.4.4, 11.4.5 |
| 2834 | if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { |
| 2835 | tolerateError(Messages.StrictLHSPrefix); |
| 2836 | } |
| 2837 | |
| 2838 | if (!isLeftHandSide(expr)) { |
| 2839 | tolerateError(Messages.InvalidLHSInAssignment); |
| 2840 | } |
| 2841 | |
| 2842 | expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); |
| 2843 | } else if (match('+') || match('-') || match('~') || match('!')) { |
| 2844 | startToken = lookahead; |
| 2845 | token = lex(); |
| 2846 | expr = parseUnaryExpression(); |
| 2847 | expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); |
| 2848 | } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { |
| 2849 | startToken = lookahead; |
| 2850 | token = lex(); |
| 2851 | expr = parseUnaryExpression(); |
| 2852 | expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); |
| 2853 | if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { |
| 2854 | tolerateError(Messages.StrictDelete); |
| 2855 | } |
| 2856 | } else { |
| 2857 | expr = parsePostfixExpression(); |
| 2858 | } |
| 2859 | |
| 2860 | return expr; |
| 2861 | } |
| 2862 | |
| 2863 | function binaryPrecedence(token, allowIn) { |
| 2864 | var prec = 0; |
no test coverage detected