コード例 #1
0
ファイル: CFGBuilder.cs プロジェクト: woods1060/verisol
        public static FunctionCFG BuildFunctionCFG(CFGNodeFactory factory, FunctionDefinition func)
        {
            FunctionCFG CFG = new FunctionCFG();

            CFG.Entry = factory.MakeNode();
            CFG.Exit  = factory.MakeNode();
            CFGBuilder builder = new CFGBuilder(factory, CFG);

            builder.AppendControlFlow(func);
            ConnectControlFlow(builder.currentNode, CFG.Exit);
            return(CFG);
        }
コード例 #2
0
ファイル: CFGBuilder.cs プロジェクト: woods1060/verisol
        private List <CFGNode> SplitControlFlow(int num)
        {
            Debug.Assert(num > 0, $"Invalid split number: {num}");
            List <CFGNode> nodes = new List <CFGNode>();

            for (int i = 0; i < num; ++i)
            {
                CFGNode node = factory.MakeNode();
                nodes.Add(node);
                ConnectControlFlow(currentNode, node);
            }
            // set to null because we don't know what is the current node at this point
            currentNode = null;
            return(nodes);
        }