(t iterator)
| 614 | } |
| 615 | |
| 616 | func (p *precedingQuery) Select(t iterator) NodeNavigator { |
| 617 | for { |
| 618 | if p.iterator == nil { |
| 619 | p.posit = 0 |
| 620 | node := p.Input.Select(t) |
| 621 | if node == nil { |
| 622 | return nil |
| 623 | } |
| 624 | node = node.Copy() |
| 625 | if p.Sibling { |
| 626 | p.iterator = func() NodeNavigator { |
| 627 | for { |
| 628 | for !node.MoveToPrevious() { |
| 629 | return nil |
| 630 | } |
| 631 | if p.Predicate(node) { |
| 632 | p.posit++ |
| 633 | return node |
| 634 | } |
| 635 | } |
| 636 | } |
| 637 | } else { |
| 638 | var q query |
| 639 | p.iterator = func() NodeNavigator { |
| 640 | for { |
| 641 | if q == nil { |
| 642 | for !node.MoveToPrevious() { |
| 643 | if !node.MoveToParent() { |
| 644 | return nil |
| 645 | } |
| 646 | p.posit = 0 |
| 647 | } |
| 648 | q = &descendantQuery{ |
| 649 | Self: true, |
| 650 | Input: &contextQuery{}, |
| 651 | Predicate: p.Predicate, |
| 652 | } |
| 653 | t.Current().MoveTo(node) |
| 654 | } |
| 655 | if node := q.Select(t); node != nil { |
| 656 | p.posit++ |
| 657 | return node |
| 658 | } |
| 659 | q = nil |
| 660 | } |
| 661 | } |
| 662 | } |
| 663 | } |
| 664 | if node := p.iterator(); node != nil { |
| 665 | return node |
| 666 | } |
| 667 | p.iterator = nil |
| 668 | } |
| 669 | } |
| 670 | |
| 671 | func (p *precedingQuery) Evaluate(t iterator) interface{} { |
| 672 | p.Input.Evaluate(t) |
nothing calls this directly
no test coverage detected