| File: Syntax\InternalSyntax\ChildSyntaxList.Reversed.Enumerator.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace Microsoft.CodeAnalysis.Syntax.InternalSyntax { internal partial struct ChildSyntaxList { internal readonly partial struct Reversed { internal struct Enumerator { private readonly GreenNode? _node; private int _childIndex; private GreenNode? _list; private int _listIndex; private GreenNode? _currentChild; internal Enumerator(GreenNode? node) { if (node != null) { _node = node; _childIndex = node.SlotCount; _listIndex = -1; } else { _node = null; _childIndex = 0; _listIndex = -1; } _list = null; _currentChild = null; } public bool MoveNext() { if (_node != null) { if (_list != null) { if (--_listIndex >= 0) { _currentChild = _list.GetSlot(_listIndex); return true; } _list = null; _listIndex = -1; } while (--_childIndex >= 0) { var child = _node.GetSlot(_childIndex); if (child == null) { continue; } if (child.IsList) { _list = child; _listIndex = _list.SlotCount; if (--_listIndex >= 0) { _currentChild = _list.GetSlot(_listIndex); return true; } else { _list = null; _listIndex = -1; continue; } } else { _currentChild = child; } return true; } } _currentChild = null; return false; } public GreenNode Current { get { return _currentChild!; } } } } } }