System.Xml.Xsl.Xslt.XsltLoader.XslVarPar C# (CSharp) Method

XslVarPar() private method

private XslVarPar ( ) : VarPar
return VarPar
        private VarPar XslVarPar()
        {
            string localName = _input.LocalName;
            XslNodeType nodeType = (
                Ref.Equal(localName, _atoms.Variable) ? XslNodeType.Variable :
                Ref.Equal(localName, _atoms.Param) ? XslNodeType.Param :
                Ref.Equal(localName, _atoms.WithParam) ? XslNodeType.WithParam :
                XslNodeType.Unknown
            );
            Debug.Assert(nodeType != XslNodeType.Unknown);
            bool isParam = Ref.Equal(localName, _atoms.Param);
            ContextInfo ctxInfo = _input.GetAttributes(
                nodeType == XslNodeType.Variable ? _variableAttributes :
                nodeType == XslNodeType.Param ? _paramAttributes :
                /*default:*/                       _withParamAttributes
            );

            QilName name = ParseQNameAttribute(0);
            string select = ParseStringAttribute(1, "select");
            string asType = ParseStringAttribute(2, "as");
            TriState required = ParseYesNoAttribute(3, "required");
            if (nodeType == XslNodeType.Param && _curFunction != null)
            {
                if (!_input.ForwardCompatibility)
                {
                    CheckError(required != TriState.Unknown, /*[???]*/SR.Xslt_RequiredOnFunction, name.ToString());
                }
                required = TriState.True;
            }
            else
            {
                if (required == TriState.True) ReportNYI("xsl:param/@required == true()");
            }

            if (asType != null)
            {
                ReportNYI("xsl:param/@as");
            }

            TriState tunnel = ParseYesNoAttribute(4, "tunnel");
            if (tunnel != TriState.Unknown)
            {
                if (nodeType == XslNodeType.Param && _curTemplate == null)
                {
                    if (!_input.ForwardCompatibility)
                    {
                        ReportError(/*[???]*/SR.Xslt_NonTemplateTunnel, name.ToString());
                    }
                }
                else
                {
                    if (tunnel == TriState.True) ReportNYI("xsl:param/@tunnel == true()");
                }
            }

            List<XslNode> content = LoadContent(select != null);
            CheckError((required == TriState.True) && (select != null || content.Count != 0), /*[???]*/SR.Xslt_RequiredAndSelect, name.ToString());

            VarPar result = f.VarPar(nodeType, name, select, _input.XslVersion);
            SetInfo(result, content, ctxInfo);
            return result;
        }