public ILCompilationUnit(ControlFlowGraph controlFlowGraph, IFrameLayout frameLayout) { ControlFlowGraph = controlFlowGraph ?? throw new ArgumentNullException(nameof(controlFlowGraph)); FrameLayout = frameLayout; DominatorInfo = new DominatorInfo(controlFlowGraph.Entrypoint); DominatorTree = DominatorInfo.ToDominatorTree(); for (int i = 0; i < frameLayout.Parameters.Count; i++) { var parameter = new ILParameter("arg_" + i, i); Parameters.Add(parameter); _variables.Add(parameter.Name, parameter); } }
public BlockGenerator(ControlFlowGraph cfg, CilCodeGenerator generator) { _cfg = cfg ?? throw new ArgumentNullException(nameof(cfg)); _generator = generator; _dominatorInfo = new DominatorInfo(cfg.Entrypoint); _dominatorTree = _dominatorInfo.ToDominatorTree(); var components = cfg.Entrypoint.FindStronglyConnectedComponents(); _nodeToComponent = new Dictionary <Node, ISet <Node> >(); foreach (var component in components) { foreach (var node in component) { _nodeToComponent[node] = component; } } }