(pos Pos)
| 2409 | } |
| 2410 | |
| 2411 | func (p *Parser) parseDictionaryRangeClause(pos Pos) (*DictionaryRangeClause, error) { |
| 2412 | if err := p.expectKeyword(KeywordRange); err != nil { |
| 2413 | return nil, err |
| 2414 | } |
| 2415 | |
| 2416 | if err := p.expectTokenKind(TokenKindLParen); err != nil { |
| 2417 | return nil, err |
| 2418 | } |
| 2419 | |
| 2420 | rangeClause := &DictionaryRangeClause{ |
| 2421 | RangePos: pos, |
| 2422 | } |
| 2423 | |
| 2424 | // Parse MIN identifier MAX identifier or MAX identifier MIN identifier |
| 2425 | if p.matchKeyword(KeywordMin) { |
| 2426 | if err := p.expectKeyword(KeywordMin); err != nil { |
| 2427 | return nil, err |
| 2428 | } |
| 2429 | min, err := p.parseIdent() |
| 2430 | if err != nil { |
| 2431 | return nil, err |
| 2432 | } |
| 2433 | if err := p.expectKeyword(KeywordMax); err != nil { |
| 2434 | return nil, err |
| 2435 | } |
| 2436 | max, err := p.parseIdent() |
| 2437 | if err != nil { |
| 2438 | return nil, err |
| 2439 | } |
| 2440 | rangeClause.Min = min |
| 2441 | rangeClause.Max = max |
| 2442 | } else if p.matchKeyword(KeywordMax) { |
| 2443 | if err := p.expectKeyword(KeywordMax); err != nil { |
| 2444 | return nil, err |
| 2445 | } |
| 2446 | max, err := p.parseIdent() |
| 2447 | if err != nil { |
| 2448 | return nil, err |
| 2449 | } |
| 2450 | if err := p.expectKeyword(KeywordMin); err != nil { |
| 2451 | return nil, err |
| 2452 | } |
| 2453 | min, err := p.parseIdent() |
| 2454 | if err != nil { |
| 2455 | return nil, err |
| 2456 | } |
| 2457 | rangeClause.Min = min |
| 2458 | rangeClause.Max = max |
| 2459 | } else { |
| 2460 | return nil, fmt.Errorf("expected MIN or MAX in RANGE clause") |
| 2461 | } |
| 2462 | |
| 2463 | rParenPos := p.Pos() |
| 2464 | if err := p.expectTokenKind(TokenKindRParen); err != nil { |
| 2465 | return nil, err |
| 2466 | } |
| 2467 | rangeClause.RParenPos = rParenPos |
| 2468 |
no test coverage detected