public override IAnalysisSet GetEnumeratorTypes(Node node, AnalysisUnit unit)
        {
            if (Push())
            {
                try {
                    IAnalysisSet res;
                    if (TryInvokeMethod(node, unit, "__iter__", Array.Empty <IAnalysisSet>(), out res))
                    {
                        if (res.Any())
                        {
                            return(res
                                   .GetMember(node, unit, unit.State.LanguageVersion.Is3x() ? "__next__" : "next")
                                   .Call(node, unit, ExpressionEvaluator.EmptySets, ExpressionEvaluator.EmptyNames));
                        }
                    }

                    if (TryInvokeMethod(node, unit, "__getitem__", new[] { unit.State.ClassInfos[BuiltinTypeId.Int].SelfSet }, out res))
                    {
                        return(res);
                    }
                } finally {
                    Pop();
                }
            }

            return(_instances.GetEnumeratorTypes(node, unit));
        }