Ejemplo n.º 1
0
        public QilInvokeLateBound XsltInvokeLateBound(QilNode name, QilNode arguments)
        {
            QilInvokeLateBound n = new QilInvokeLateBound(QilNodeType.XsltInvokeLateBound, name, arguments);

            n.XmlType = this.typeCheck.CheckXsltInvokeLateBound(n);
            TraceNode(n);
            return(n);
        }
Ejemplo n.º 2
0
 protected virtual QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n)
 {
     return(VisitChildren(n));
 }
Ejemplo n.º 3
0
 public XmlQueryType CheckXsltInvokeLateBound(QilInvokeLateBound node)
 {
     CheckLiteralValue(node[0], typeof(QilName));
     CheckClassAndNodeType(node[1], typeof(QilList), QilNodeType.ActualParameterList);
     return(XmlQueryTypeFactory.ItemS);
 }
Ejemplo n.º 4
0
 public XmlQueryType CheckXsltInvokeLateBound(QilInvokeLateBound node) {
     CheckLiteralValue(node[0], typeof(QilName));
     CheckClassAndNodeType(node[1], typeof(QilList), QilNodeType.ActualParameterList);
     return XmlQueryTypeFactory.ItemS;
 }
Ejemplo n.º 5
0
 protected virtual QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return VisitChildren(n); }
Ejemplo n.º 6
0
 protected override QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return NoReplace(n); }
Ejemplo n.º 7
0
 protected override QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n)
 {
     return(NoReplace(n));
 }
Ejemplo n.º 8
0
 public QilInvokeLateBound XsltInvokeLateBound(QilNode name, QilNode arguments) {
     QilInvokeLateBound n = new QilInvokeLateBound(QilNodeType.XsltInvokeLateBound, name, arguments);
     n.XmlType = this.typeCheck.CheckXsltInvokeLateBound(n);
     TraceNode(n);
     return n;
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Generate code for for QilNodeType.XsltInvokeLateBound.
        /// </summary>
        protected override QilNode VisitXsltInvokeLateBound(QilInvokeLateBound ndInvoke)
        {
            LocalBuilder locArgs = _helper.DeclareLocal("$$$args", typeof(IList<XPathItem>[]));
            QilName ndName = (QilName)ndInvoke.Name;
            Debug.Assert(XmlILConstructInfo.Read(ndInvoke).ConstructMethod != XmlILConstructMethod.Writer);

            // runtime.ExternalContext.InvokeXsltLateBoundFunction(name, ns, args);
            _helper.LoadQueryContext();
            _helper.Emit(OpCodes.Ldstr, ndName.LocalName);
            _helper.Emit(OpCodes.Ldstr, ndName.NamespaceUri);

            // args = new IList<XPathItem>[argCount];
            _helper.LoadInteger(ndInvoke.Arguments.Count);
            _helper.Emit(OpCodes.Newarr, typeof(IList<XPathItem>));
            _helper.Emit(OpCodes.Stloc, locArgs);

            for (int iArg = 0; iArg < ndInvoke.Arguments.Count; iArg++)
            {
                QilNode ndArg = ndInvoke.Arguments[iArg];

                // args[0] = arg0;
                // ...
                // args[N] = argN;
                _helper.Emit(OpCodes.Ldloc, locArgs);
                _helper.LoadInteger(iArg);
                _helper.Emit(OpCodes.Ldelema, typeof(IList<XPathItem>));

                NestedVisitEnsureCache(ndArg, typeof(XPathItem));
                _iterCurr.EnsureStack();

                _helper.Emit(OpCodes.Stobj, typeof(IList<XPathItem>));
            }

            _helper.Emit(OpCodes.Ldloc, locArgs);

            _helper.Call(XmlILMethods.InvokeXsltLate);

            // Returned item sequence is on the stack
            _iterCurr.Storage = StorageDescriptor.Stack(typeof(XPathItem), true);

            return ndInvoke;
        }