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

Method parseObjectRemainderLocal

internal/parser/parser.go:501–570  ·  view source on GitHub ↗
(binds *ast.IdentifierSet, tok *token, next *token)

Source from the content-addressed store, hash-verified

499}
500
501func (p *parser) parseObjectRemainderLocal(binds *ast.IdentifierSet, tok *token, next *token) (*ast.ObjectField, errors.StaticError) {
502 varID, popErr := p.popExpect(tokenIdentifier)
503 if popErr != nil {
504 return nil, popErr
505 }
506
507 id := ast.Identifier(varID.data)
508
509 if binds.Contains(id) {
510 return nil, errors.MakeStaticError(fmt.Sprintf("Duplicate local var: %v", id), varID.loc)
511 }
512
513 // TODO(sbarzowski) Can we reuse regular local bind parsing here?
514
515 isMethod := false
516 funcComma := false
517 var parenL *token
518 var parenR *token
519 var params []ast.Parameter
520 if p.peek().kind == tokenParenL {
521 parenL = p.pop()
522 isMethod = true
523 var err errors.StaticError
524 parenR, params, funcComma, err = p.parseParameters("function parameter")
525 if err != nil {
526 return nil, err
527 }
528 }
529 opToken, popErr := p.popExpectOp("=")
530 if popErr != nil {
531 return nil, popErr
532 }
533
534 body, err := p.parse(iast.MaxPrecedence)
535 if err != nil {
536 return nil, err
537 }
538
539 var method *ast.Function
540 if isMethod {
541 method = &ast.Function{
542 ParenLeftFodder: parenL.fodder,
543 Parameters: params,
544 ParenRightFodder: parenR.fodder,
545 TrailingComma: funcComma,
546 Body: body,
547 }
548 }
549
550 binds.Add(id)
551
552 var commaFodder ast.Fodder
553 if p.peek().kind == tokenComma {
554 commaFodder = p.peek().fodder
555 }
556
557 return &ast.ObjectField{
558 Kind: ast.ObjectLocal,

Callers 1

parseObjectRemainderMethod · 0.95

Calls 10

popExpectMethod · 0.95
peekMethod · 0.95
popMethod · 0.95
parseParametersMethod · 0.95
popExpectOpMethod · 0.95
parseMethod · 0.95
MakeStaticErrorFunction · 0.92
locFromTokenASTFunction · 0.85
ContainsMethod · 0.80
AddMethod · 0.80

Tested by

no test coverage detected