/// <summary>
                /// Constructs a new basic block enumerator.
                /// </summary>
                /// <param name="blocks">The parent blocks.</param>
                internal Enumerator(ImmutableArray <BasicBlock> blocks)
                {
                    blockEnumerator =
                        new BasicBlockCollection <TOrder, TDirection> .Enumerator(
                            blocks);

                    // There must be at least a single block
                    blockEnumerator.MoveNext();
                    valueEnumerator = blockEnumerator.Current.GetEnumerator();
                }
                public bool MoveNext()
                {
                    while (true)
                    {
                        if (valueEnumerator.MoveNext())
                        {
                            return(true);
                        }

                        // Try to move to the next function
                        if (!blockEnumerator.MoveNext())
                        {
                            return(false);
                        }

                        valueEnumerator = blockEnumerator.Current.GetEnumerator();
                    }
                }