public QilNode GetPosition() {
QilLoop clone = (QilLoop) cloner.Clone(baseContext);
XmlNodeKindFlags nodeKinds = baseContext.XmlType.NodeKinds;
// baseContext either always returns attributes (attribute::), or never returns attributes or namespaces (child::)
if (nodeKinds == XmlNodeKindFlags.Attribute) {
QilIterator i = f.For(f.Parent(GetCurrent()));
clone.Variable.Binding = f.Content(i);
clone.Body = f.And(clone.Body, f.Before(clone.Variable, GetCurrent()));
clone = f.BaseFactory.Loop(i, clone);
} else {
Debug.Assert((nodeKinds & (XmlNodeKindFlags.Attribute | XmlNodeKindFlags.Namespace)) == XmlNodeKindFlags.None);
clone.Variable.Binding = f.PrecedingSibling(GetCurrent());
}
return f.Add(f.Double(1), f.XsltConvert(f.Length(clone), T.DoubleX));
}
public QilNode GetLast() {