Exemplo n.º 1
0
        public QilNode GetCurrent()
        {
            CheckFocus();
            switch (_focusType)
            {
            case SingletonFocusType.InitialDocumentNode: return(_f.Root(_f.XmlContext()));

            case SingletonFocusType.InitialContextNode: return(_f.XmlContext());

            default:
                Debug.Assert(_focusType == SingletonFocusType.Iterator && _current != null, "Unexpected singleton focus type");
                return(_current);
            }
        }
Exemplo n.º 2
0
 // Filers that travers Content being converted to global travers:
 // Filter($j= ... Filter($i = Content(fixup), ...))  -> Filter($j= ... Filter($i = Loop($j = DesendentOrSelf(Root(fixup)), Content($j), ...)))
 protected override QilNode VisitLoop(QilLoop n)
 {
     if (n.Variable.Binding.NodeType == QilNodeType.Root || n.Variable.Binding.NodeType == QilNodeType.Deref)
     {
         // This is absolute path already. We shouldn't touch it
         return(n);
     }
     if (n.Variable.Binding.NodeType == QilNodeType.Content)
     {
         // This is "begin" of reletive path. Let's rewrite it as absolute:
         QilUnary content = (QilUnary)n.Variable.Binding;
         Debug.Assert(content.Child == this.fixup, "Unexpected content node");
         QilIterator it = f.For(f.DescendantOrSelf(f.Root(this.fixup)));
         content.Child      = it;
         n.Variable.Binding = f.Loop(it, content);
         return(n);
     }
     n.Variable.Binding = Visit(n.Variable.Binding);
     return(n);
 }