System.Xml.Xsl.Xslt.QilGenerator.CompileCallTemplate C# (CSharp) Method

CompileCallTemplate() private method

private CompileCallTemplate ( XslNodeEx node ) : QilNode
node XslNodeEx
return QilNode
        private QilNode CompileCallTemplate(XslNodeEx node)
        {
            VerifyXPathQName(node.Name);
            int varScope = _varHelper.StartVariables();

            IList<XslNode> content = node.Content;
            foreach (VarPar withParam in content)
            {
                CompileWithParam(withParam);
                // In debug mode precalculate all with-param's
                if (IsDebug)
                {
                    QilNode val = withParam.Value;
                    QilIterator let = _f.Let(val);
                    let.DebugName = _f.QName("with-param " + withParam.Name.QualifiedName, XmlReservedNs.NsXslDebug).ToString();
                    _varHelper.AddVariable(let);
                    withParam.Value = let;
                }
            }

            QilNode result;
            {
                Template tmpl;
                if (_compiler.NamedTemplates.TryGetValue(node.Name, out tmpl))
                {
                    Debug.Assert(tmpl.Function != null, "All templates should be already compiled");
                    result = _invkGen.GenerateInvoke(tmpl.Function, AddRemoveImplicitArgs(node.Content, tmpl.Flags));
                }
                else
                {
                    if (!_compiler.IsPhantomName(node.Name))
                    {
                        _compiler.ReportError(/*[XT0710]*/node.SourceLine, SR.Xslt_InvalidCallTemplate, node.Name.QualifiedName);
                    }
                    result = _f.Sequence();
                }
            }

            // Do not create an additional sequence point if there are no parameters
            if (content.Count > 0)
            {
                result = SetLineInfo(result, node.ElemNameLi);
            }
            result = _varHelper.FinishVariables(result, varScope);
            if (IsDebug)
            {
                return _f.Nop(result);
            }
            return result;
        }
QilGenerator