MCPcopy
hub / github.com/google/go-jsonnet / parseArray

Method parseArray

internal/parser/parser.go:733–813  ·  view source on GitHub ↗

Assumes that the leading '[' has already been consumed and passed as tok. Should read up to and consume the trailing ']'

(tok *token)

Source from the content-addressed store, hash-verified

731// Assumes that the leading '[' has already been consumed and passed as tok.
732// Should read up to and consume the trailing ']'
733func (p *parser) parseArray(tok *token) (ast.Node, errors.StaticError) {
734 if p.peek().kind == tokenBracketR {
735 bracketR := p.pop()
736 return &ast.Array{
737 NodeBase: ast.NewNodeBaseLoc(locFromTokens(tok, bracketR), tok.fodder),
738 CloseFodder: bracketR.fodder,
739 }, nil
740 }
741
742 first, err := p.parse(iast.MaxPrecedence)
743 if err != nil {
744 return nil, err
745 }
746 var gotComma bool
747 var commaFodder ast.Fodder
748 if p.peek().kind == tokenComma {
749 comma := p.pop()
750 gotComma = true
751 commaFodder = comma.fodder
752 }
753
754 if p.peek().kind == tokenFor {
755 // It's a comprehension
756 forToken := p.pop()
757 spec, last, err := p.parseComprehensionSpecs(forToken, tokenBracketR)
758 if err != nil {
759 return nil, err
760 }
761 return &ast.ArrayComp{
762 NodeBase: ast.NewNodeBaseLoc(locFromTokens(tok, last), tok.fodder),
763 Body: first,
764 TrailingComma: gotComma,
765 TrailingCommaFodder: commaFodder,
766 Spec: *spec,
767 CloseFodder: last.fodder,
768 }, nil
769 }
770
771 // Not a comprehension: It can have more elements.
772 elements := []ast.CommaSeparatedExpr{{
773 Expr: first,
774 CommaFodder: commaFodder,
775 }}
776
777 var bracketR *token
778 for {
779 next := p.peek()
780
781 if next.kind == tokenBracketR {
782 bracketR = p.pop()
783 break
784 }
785 if !gotComma {
786 return nil, errors.MakeStaticError("Expected a comma before next array element", next.loc)
787 }
788 nextElem, err := p.parse(iast.MaxPrecedence)
789 if err != nil {
790 return nil, err

Callers 1

parseTerminalMethod · 0.95

Calls 6

peekMethod · 0.95
popMethod · 0.95
parseMethod · 0.95
MakeStaticErrorFunction · 0.92
locFromTokensFunction · 0.85

Tested by

no test coverage detected