private QilNode CompileOrderAttribute(string attName, string attValue, string value0, string value1, bool fwdCompat)
{
QilNode result = CompileStringAvt(attValue);
if (result != null)
{
if (result.NodeType == QilNodeType.LiteralString)
{
string value = (string)(QilLiteral)result;
if (value == value1)
{
result = _f.String("1");
}
else
{
if (value != value0 && !fwdCompat)
{
ReportError(/*[XT_034]*/SR.Xslt_BistateAttribute, attName, value0, value1);
}
result = _f.String("0");
}
}
else
{
QilIterator i;
result = _f.Loop(i = _f.Let(result),
_f.Conditional(_f.Eq(i, _f.String(value1)), _f.String("1"),
fwdCompat ? _f.String("0") :
_f.Conditional(_f.Eq(i, _f.String(value0)), _f.String("0"),
_f.Error(_lastScope.SourceLine,
SR.Xslt_BistateAttribute, attName, value0, value1
)
)));
}
Debug.Assert(result.XmlType == T.StringX);
}
return result;
}