public ControlFlowGraph(List <Block> reversedBlocks, Block entryBlock, ExitBlock exitBlock)
            {
                ExitBlock  = exitBlock;
                EntryBlock = RemoveEmptyBlocks(reversedBlocks, entryBlock);

                Blocks = reversedBlocks.Reverse <Block>().ToImmutableArray();

                if (Blocks.OfType <TemporaryBlock>().Any())
                {
                    throw new InvalidOperationException("Could not construct valid control flow graph");
                }

                ComputePredecessors();
            }
        protected ControlFlowGraphBuilder(SyntaxNode node, SemanticModel semanticModel)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            if (semanticModel == null)
            {
                throw new ArgumentNullException(nameof(semanticModel));
            }

            this.node          = node;
            this.semanticModel = semanticModel;

            ExitBlock = CreateExitBlock();
        }