Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }