public bool GetNextArrayItem() { if (!m_isIterating) { if (Current.TryGetArray(out var currentArray)) { var items = currentArray.GetEnumerator(); if (items.MoveNext()) { m_stack.Push(StackEntry.ArrayItem(Current, items)); SetCurrentValue(items.Current); return(true); } } else { m_isIterating = m_stack.Count != 0; } } else if (m_stack.Count != 0) { var entry = m_stack.Peek(); if (entry.Value.Type == JSValueType.Array) { if (entry.Item.MoveNext()) { SetCurrentValue(entry.Item.Current); return(true); } else { Current = entry.Value; m_stack.Pop(); m_isIterating = m_stack.Count != 0; } } } return(false); }