(node ASTNode)
| 497 | return indexExpr, nil |
| 498 | } |
| 499 | func (p *Parser) parseFilter(node ASTNode) (ASTNode, error) { |
| 500 | var right, condition ASTNode |
| 501 | var err error |
| 502 | condition, err = p.parseExpression(0) |
| 503 | if err != nil { |
| 504 | return ASTNode{}, err |
| 505 | } |
| 506 | if err := p.match(tRbracket); err != nil { |
| 507 | return ASTNode{}, err |
| 508 | } |
| 509 | if p.current() == tFlatten { |
| 510 | right = ASTNode{nodeType: ASTIdentity} |
| 511 | } else { |
| 512 | right, err = p.parseProjectionRHS(bindingPowers[tFilter]) |
| 513 | if err != nil { |
| 514 | return ASTNode{}, err |
| 515 | } |
| 516 | } |
| 517 | |
| 518 | return ASTNode{ |
| 519 | nodeType: ASTFilterProjection, |
| 520 | children: []ASTNode{node, right, condition}, |
| 521 | }, nil |
| 522 | } |
| 523 | |
| 524 | func (p *Parser) parseDotRHS(bindingPower int) (ASTNode, error) { |
| 525 | lookahead := p.current() |
no test coverage detected