MCPcopy Index your code
hub / github.com/expr-lang/expr / parseSecondary

Method parseSecondary

parser/parser.go:447–551  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

445}
446
447func (p *Parser) parseSecondary() Node {
448 var node Node
449 token := p.current
450
451 switch token.Kind {
452
453 case Identifier:
454 p.next()
455 switch token.Value {
456 case "true":
457 node = p.createNode(&BoolNode{Value: true}, token.Location)
458 if node == nil {
459 return nil
460 }
461 return node
462 case "false":
463 node = p.createNode(&BoolNode{Value: false}, token.Location)
464 if node == nil {
465 return nil
466 }
467 return node
468 case "nil":
469 node = p.createNode(&NilNode{}, token.Location)
470 if node == nil {
471 return nil
472 }
473 return node
474 default:
475 if p.current.Is(Bracket, "(") {
476 node = p.parseCall(token, []Node{}, true)
477 } else {
478 node = p.createNode(&IdentifierNode{Value: token.Value}, token.Location)
479 if node == nil {
480 return nil
481 }
482 }
483 }
484
485 case Number:
486 p.next()
487 value := strings.Replace(token.Value, "_", "", -1)
488 var node Node
489 valueLower := strings.ToLower(value)
490 switch {
491 case strings.HasPrefix(valueLower, "0x"):
492 number, err := strconv.ParseInt(value, 0, 64)
493 if err != nil {
494 p.error("invalid hex literal: %v", err)
495 }
496 node = p.toIntegerNode(number)
497 case strings.ContainsAny(valueLower, ".e"):
498 number, err := strconv.ParseFloat(value, 64)
499 if err != nil {
500 p.error("invalid float literal: %v", err)
501 }
502 node = p.toFloatNode(number)
503 case strings.HasPrefix(valueLower, "0b"):
504 number, err := strconv.ParseInt(value, 0, 64)

Callers 1

parsePrimaryMethod · 0.95

Calls 11

nextMethod · 0.95
createNodeMethod · 0.95
parseCallMethod · 0.95
errorMethod · 0.95
toIntegerNodeMethod · 0.95
toFloatNodeMethod · 0.95
SetLocationMethod · 0.95
parseArrayExpressionMethod · 0.95
parseMapExpressionMethod · 0.95
IsMethod · 0.80

Tested by

no test coverage detected