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;
}