public void BindIterator(Analyzer analyzer, Exp target, Exp iter, DataType iterType, BindingKind kind)
{
if (iterType is ListType)
{
this.Bind(analyzer, target, ((ListType) iterType).eltType, kind);
}
else if (iterType is TupleType)
{
this.Bind(analyzer, target, ((TupleType) iterType).toListType().eltType, kind);
}
else
{
ISet<Binding> ents = iterType.Table.LookupAttribute("__iter__");
if (ents != null)
{
foreach (Binding ent in ents)
{
if (ent == null || !(ent.type is FunType))
{
if (!iterType.isUnknownType())
{
analyzer.putProblem(iter, "not an iterable type: " + iterType);
}
this.Bind(analyzer, target, DataType.Unknown, kind);
}
else
{
this.Bind(analyzer, target, ((FunType) ent.type).getReturnType(), kind);
}
}
}
else
{
this.Bind(analyzer, target, DataType.Unknown, kind);
}
}
}