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); }
protected virtual QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return(VisitChildren(n)); }
public XmlQueryType CheckXsltInvokeLateBound(QilInvokeLateBound node) { CheckLiteralValue(node[0], typeof(QilName)); CheckClassAndNodeType(node[1], typeof(QilList), QilNodeType.ActualParameterList); return(XmlQueryTypeFactory.ItemS); }
public XmlQueryType CheckXsltInvokeLateBound(QilInvokeLateBound node) { CheckLiteralValue(node[0], typeof(QilName)); CheckClassAndNodeType(node[1], typeof(QilList), QilNodeType.ActualParameterList); return XmlQueryTypeFactory.ItemS; }
protected virtual QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return VisitChildren(n); }
protected override QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return NoReplace(n); }
protected override QilNode VisitXsltInvokeLateBound(QilInvokeLateBound n) { return(NoReplace(n)); }
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; }
/// <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; }