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

Method parseBind

internal/parser/parser.go:237–302  ·  view source on GitHub ↗

TODO(sbarzowski) add location to all individual binds

(binds *ast.LocalBinds)

Source from the content-addressed store, hash-verified

235
236// TODO(sbarzowski) add location to all individual binds
237func (p *parser) parseBind(binds *ast.LocalBinds) (*token, errors.StaticError) {
238 varID, popErr := p.popExpect(tokenIdentifier)
239 if popErr != nil {
240 return nil, popErr
241 }
242 for _, b := range *binds {
243 if b.Variable == ast.Identifier(varID.data) {
244 return nil, errors.MakeStaticError(fmt.Sprintf("Duplicate local var: %v", varID.data), varID.loc)
245 }
246 }
247
248 var fun *ast.Function
249 if p.peek().kind == tokenParenL {
250 parenL := p.pop()
251 parenR, params, gotComma, err := p.parseParameters("function parameter")
252 if err != nil {
253 return nil, err
254 }
255 fun = &ast.Function{
256 ParenLeftFodder: parenL.fodder,
257 Parameters: params,
258 TrailingComma: gotComma,
259 ParenRightFodder: parenR.fodder,
260 // Body gets filled in later.
261 }
262 }
263
264 eqToken, popErr := p.popExpectOp("=")
265 if popErr != nil {
266 return nil, popErr
267 }
268 body, err := p.parse(iast.MaxPrecedence)
269 if err != nil {
270 return nil, err
271 }
272
273 delim := p.pop()
274 if delim.kind != tokenSemicolon && delim.kind != tokenComma {
275 return nil, errors.MakeStaticError(fmt.Sprintf("Expected , or ; but got %v", delim), delim.loc)
276 }
277
278 if fun != nil {
279 fun.NodeBase = ast.NewNodeBaseLoc(locFromTokenAST(varID, body), nil)
280 fun.Body = body
281 *binds = append(*binds, ast.LocalBind{
282 VarFodder: varID.fodder,
283 Variable: ast.Identifier(varID.data),
284 EqFodder: eqToken.fodder,
285 Body: body,
286 Fun: fun,
287 CloseFodder: delim.fodder,
288 LocRange: locFromTokenAST(varID, body),
289 })
290 } else {
291 *binds = append(*binds, ast.LocalBind{
292 VarFodder: varID.fodder,
293 Variable: ast.Identifier(varID.data),
294 EqFodder: eqToken.fodder,

Callers 1

parseMethod · 0.95

Calls 8

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

Tested by

no test coverage detected