MCPcopy Create free account
hub / github.com/dop251/goja / parseLeftHandSideExpressionAllowCall

Method parseLeftHandSideExpressionAllowCall

parser/expression.go:752–804  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

750}
751
752func (self *_parser) parseLeftHandSideExpressionAllowCall() ast.Expression {
753
754 allowIn := self.scope.allowIn
755 self.scope.allowIn = true
756 defer func() {
757 self.scope.allowIn = allowIn
758 }()
759
760 var left ast.Expression
761 start := self.idx
762 if self.token == token.NEW {
763 left = self.parseNewExpression()
764 } else {
765 left = self.parsePrimaryExpression()
766 }
767
768 optionalChain := false
769L:
770 for {
771 switch self.token {
772 case token.PERIOD:
773 left = self.parseDotMember(left)
774 case token.LEFT_BRACKET:
775 left = self.parseBracketMember(left)
776 case token.LEFT_PARENTHESIS:
777 left = self.parseCallExpression(left)
778 case token.BACKTICK:
779 if optionalChain {
780 self.error(self.idx, "Invalid template literal on optional chain")
781 self.nextStatement()
782 return &ast.BadExpression{From: start, To: self.idx}
783 }
784 left = self.parseTaggedTemplateLiteral(left)
785 case token.QUESTION_DOT:
786 optionalChain = true
787 left = &ast.Optional{Expression: left}
788
789 switch self.peek() {
790 case token.LEFT_BRACKET, token.LEFT_PARENTHESIS, token.BACKTICK:
791 self.next()
792 default:
793 left = self.parseDotMember(left)
794 }
795 default:
796 break L
797 }
798 }
799
800 if optionalChain {
801 left = &ast.OptionalChain{Expression: left}
802 }
803 return left
804}
805
806func (self *_parser) parseUpdateExpression() ast.Expression {
807 switch self.token {

Callers 2

parseUpdateExpressionMethod · 0.95
parseClassMethod · 0.95

Calls 10

parseNewExpressionMethod · 0.95
parseDotMemberMethod · 0.95
parseBracketMemberMethod · 0.95
parseCallExpressionMethod · 0.95
errorMethod · 0.95
nextStatementMethod · 0.95
peekMethod · 0.95
nextMethod · 0.95

Tested by

no test coverage detected