private QilIterator GetNsVar(QilList nsList)
{
Debug.Assert(IsDebug, "This is debug only logic");
// All global vars at this point are nsList like one we are looking now.
foreach (QilIterator var in _nsVars)
{
Debug.Assert(var.XmlType.IsSubtypeOf(T.NamespaceS));
Debug.Assert(var.Binding is QilList);
QilList varList = (QilList)var.Binding;
if (varList.Count != nsList.Count)
{
continue;
}
bool found = true;
for (int i = 0; i < nsList.Count; i++)
{
Debug.Assert(nsList[i].NodeType == QilNodeType.NamespaceDecl);
Debug.Assert(varList[i].NodeType == QilNodeType.NamespaceDecl);
if (
((QilLiteral)((QilBinary)nsList[i]).Right).Value != ((QilLiteral)((QilBinary)varList[i]).Right).Value ||
((QilLiteral)((QilBinary)nsList[i]).Left).Value != ((QilLiteral)((QilBinary)varList[i]).Left).Value
)
{
found = false;
break;
}
}
if (found)
{
return var; // Found!
}
}
QilIterator newVar = _f.Let(nsList);
newVar.DebugName = _f.QName("ns" + _nsVars.Count, XmlReservedNs.NsXslDebug).ToString();
_gloVars.Add(newVar);
_nsVars.Add(newVar);
return newVar;
}