()
| 4671 | } |
| 4672 | |
| 4673 | func (p *Parser) parseUnaryExpressionOrHigher() *ast.Expression { |
| 4674 | // ES7 UpdateExpression: |
| 4675 | // 1) LeftHandSideExpression[?Yield] |
| 4676 | // 2) LeftHandSideExpression[?Yield][no LineTerminator here]++ |
| 4677 | // 3) LeftHandSideExpression[?Yield][no LineTerminator here]-- |
| 4678 | // 4) ++UnaryExpression[?Yield] |
| 4679 | // 5) --UnaryExpression[?Yield] |
| 4680 | if p.isUpdateExpression() { |
| 4681 | pos := p.nodePos() |
| 4682 | updateExpression := p.parseUpdateExpression() |
| 4683 | if p.token == ast.KindAsteriskAsteriskToken { |
| 4684 | return p.parseBinaryExpressionRest(ast.GetBinaryOperatorPrecedence(p.token), updateExpression, pos) |
| 4685 | } |
| 4686 | return updateExpression |
| 4687 | } |
| 4688 | // ES7 UnaryExpression: |
| 4689 | // 1) UpdateExpression[?yield] |
| 4690 | // 2) delete UpdateExpression[?yield] |
| 4691 | // 3) void UpdateExpression[?yield] |
| 4692 | // 4) typeof UpdateExpression[?yield] |
| 4693 | // 5) + UpdateExpression[?yield] |
| 4694 | // 6) - UpdateExpression[?yield] |
| 4695 | // 7) ~ UpdateExpression[?yield] |
| 4696 | // 8) ! UpdateExpression[?yield] |
| 4697 | unaryOperator := p.token |
| 4698 | simpleUnaryExpression := p.parseSimpleUnaryExpression() |
| 4699 | if p.token == ast.KindAsteriskAsteriskToken { |
| 4700 | pos := scanner.SkipTrivia(p.sourceText, simpleUnaryExpression.Pos()) |
| 4701 | end := simpleUnaryExpression.End() |
| 4702 | if simpleUnaryExpression.Kind == ast.KindTypeAssertionExpression { |
| 4703 | p.parseErrorAt(pos, end, diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses) |
| 4704 | } else { |
| 4705 | debug.Assert(isKeywordOrPunctuation(unaryOperator)) |
| 4706 | p.parseErrorAt(pos, end, diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, scanner.TokenToString(unaryOperator)) |
| 4707 | } |
| 4708 | } |
| 4709 | return simpleUnaryExpression |
| 4710 | } |
| 4711 | |
| 4712 | func (p *Parser) isUpdateExpression() bool { |
| 4713 | switch p.token { |
no test coverage detected