public static bool TryCreate(object baseEnumerator, out IEnumerable enumerator) { Debug.Assert(!(baseEnumerator is IEnumerable) || baseEnumerator is IPythonObject); // we shouldn't re-wrap things that don't need it if (PythonOps.TryGetBoundAttr(baseEnumerator, "__iter__", out object iter)) { object iterator = PythonCalls.Call(iter); if (iterator is IEnumerable) { enumerator = (IEnumerable)iterator; } else { if (!PythonOps.TryGetBoundAttr(iterator, "__next__", out _)) { enumerator = null; return(false); } enumerator = new PythonEnumerable(iterator); } return(true); } else { enumerator = null; return(false); } }
public static bool TryCreate(object baseEnumerator, out PythonEnumerable enumerator) { object iter; if (Ops.TryGetAttr(baseEnumerator, SymbolTable.Iterator, out iter)) { object iterator = Ops.Call(iter); enumerator = new PythonEnumerable(iterator); return true; } else { enumerator = null; return false; } }