private int numberCount(XPathNavigator nav, Processor processor, XPathNavigator contextNode) {
Debug.Assert(nav.NodeType != XPathNodeType.Attribute && nav.NodeType != XPathNodeType.Namespace);
Debug.Assert(MatchCountKey(processor, contextNode, nav));
XPathNavigator runner = nav.Clone();
int number = 1;
if (runner.MoveToParent()) {
runner.MoveToFirstChild();
while (! runner.IsSamePosition(nav)) {
if (MatchCountKey(processor, contextNode, runner)) {
number++;
}
if (! runner.MoveToNext()) {
Debug.Fail("We implementing preceding-sibling::node() and some how miss context node 'nav'");
break;
}
}
}
return number;
}