public QilNode SafeDocOrderDistinct(QilNode n)
{
XmlQueryType xt = n.XmlType;
if (xt.MaybeMany)
{
if (xt.IsNode && xt.IsNotRtf)
{
// node-set
return DocOrderDistinct(n);
}
else if (!xt.IsAtomicValue)
{
QilIterator i;
return Loop(i = Let(n),
Conditional(Gt(Length(i), Int32(1)),
DocOrderDistinct(TypeAssert(i, T.NodeNotRtfS)),
i
)
);
}
}
return n;
}