MCPcopy Create free account
hub / github.com/microsoft/typescript-go / parseUnaryExpressionOrHigher

Method parseUnaryExpressionOrHigher

internal/parser/parser.go:4673–4710  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

4671}
4672
4673func (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
4712func (p *Parser) isUpdateExpression() bool {
4713 switch p.token {

Callers 2

parseTypeParameterMethod · 0.95

Calls 13

isUpdateExpressionMethod · 0.95
nodePosMethod · 0.95
parseUpdateExpressionMethod · 0.95
parseErrorAtMethod · 0.95
SkipTriviaFunction · 0.92
AssertFunction · 0.92
TokenToStringFunction · 0.92
isKeywordOrPunctuationFunction · 0.85
PosMethod · 0.65

Tested by

no test coverage detected