public bool MoveToFirstChild() {
Debug.Assert(lastResult, "The previous move must be successful");
Debug.Assert(lastMove != Moves.Parent, "MoveToNextSibling() must be called after MoveToParent()");
bool result = MoveToFirstChildAny();
if (result) {
// Pass comments and PIs
if (NodeType == XPathNodeType.Comment || NodeType == XPathNodeType.ProcessingInstruction) {
result = MoveToNextSibling();
if (! result) {
MoveToParent();
}
}
}
SetLastMove(Moves.Child, result);
return result;
}