parseColonDefault extract : statements
()
| 513 | |
| 514 | // parseColonDefault extract :<data> statements |
| 515 | func (p *Parser) parseColonDefault() (Revisioner, error) { |
| 516 | var tok token |
| 517 | var lit string |
| 518 | var path string |
| 519 | var stage int |
| 520 | var err error |
| 521 | var n = -1 |
| 522 | |
| 523 | tok, lit, err = p.scan() |
| 524 | |
| 525 | if err != nil { |
| 526 | return nil, err |
| 527 | } |
| 528 | |
| 529 | nextTok, _, err := p.scan() |
| 530 | |
| 531 | if err != nil { |
| 532 | return nil, err |
| 533 | } |
| 534 | |
| 535 | if tok == number && nextTok == colon { |
| 536 | n, _ = strconv.Atoi(lit) |
| 537 | } |
| 538 | |
| 539 | switch n { |
| 540 | case 0, 1, 2, 3: |
| 541 | stage = n |
| 542 | default: |
| 543 | path += lit |
| 544 | p.unscan() |
| 545 | } |
| 546 | |
| 547 | for { |
| 548 | tok, lit, err = p.scan() |
| 549 | |
| 550 | if err != nil { |
| 551 | return nil, err |
| 552 | } |
| 553 | |
| 554 | switch { |
| 555 | case tok == eof && n == -1: |
| 556 | return ColonPath{path}, nil |
| 557 | case tok == eof: |
| 558 | return ColonStagePath{path, stage}, nil |
| 559 | default: |
| 560 | path += lit |
| 561 | } |
| 562 | } |
| 563 | } |
| 564 | |
| 565 | // parseRef extract reference name |
| 566 | func (p *Parser) parseRef() (Revisioner, error) { |
no test coverage detected