Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
                }
            }
        }