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); }
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); }