示例#1
0
        /// <summary>
        /// Run analysis starting at EntryMethodGraph
        /// </summary>
        private void analyse()
        {
            EntryInput.CommitTransaction();

            ProgramPointGraph = ProgramPointGraph.FromSource(EntryCFG);
            _services.SetProgramEnd(ProgramPointGraph.End);
            _services.SetServices(ProgramPointGraph);

            var output = _services.CreateEmptySet();

            ProgramPointGraph.Start.Initialize(EntryInput, output);

            _services.EnqueueEntryPoint(ProgramPointGraph.Start, ProgramPointGraph.End);


            //fix point computation
            while (_workList.HasWork)
            {
                var point = _workList.GetWork();

                //during flow through are enqueued all needed flow children
                point.FlowThrough();
            }

            //because of avoid incorrect use
            //_services.UnSetServices(ProgramPointGraph);
        }
示例#2
0
 internal void InitializeNewPoint(ProgramPointBase point, ProgramPointGraph owningGraph)
 {
     point.Initialize(Services.CreateEmptySet(), Services.CreateEmptySet());
     point.SetServices(Services);
     point.SetOwningGraph(owningGraph);
 }