Example #1
0
 public QilNode InvokeSystemProperty(QilNode n)
 {
     CheckQName(n);
     return(XsltInvokeEarlyBound(QName("system-property"),
                                 XsltMethods.SystemProperty, T.Choice(T.DoubleX, T.StringX), new QilNode[] { n }
                                 ));
 }
Example #2
0
        private static QilLoop BuildAxisFilter(QilPatternFactory f, QilIterator itr, XPathAxis xpathAxis, XPathNodeType nodeType, string?name, string?nsUri)
        {
            QilNode nameTest = (
                name != null && nsUri != null ? f.Eq(f.NameOf(itr), f.QName(name, nsUri)) :                   // ns:bar || bar
                nsUri != null ? f.Eq(f.NamespaceUriOf(itr), f.String(nsUri)) :                                // ns:*
                name != null ? f.Eq(f.LocalNameOf(itr), f.String(name)) :                                     // *:foo
                                                                          /*name  == nsUri == null*/ f.True() // *
                );

            XmlNodeKindFlags intersection = XPathBuilder.AxisTypeMask(itr.XmlType !.NodeKinds, nodeType, xpathAxis);

            QilNode typeTest = (
                intersection == 0 ? f.False() :                    // input & required doesn't intersect
                intersection == itr.XmlType.NodeKinds ? f.True() : // input is subset of required
                                                                    /*else*/ f.IsType(itr, T.NodeChoice(intersection))
                );

            QilLoop filter = f.BaseFactory.Filter(itr, f.And(typeTest, nameTest));

            filter.XmlType = T.PrimeProduct(T.NodeChoice(intersection), filter.XmlType !.Cardinality);

            return(filter);
        }