/// <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); }
internal void InitializeNewPoint(ProgramPointBase point, ProgramPointGraph owningGraph) { point.Initialize(Services.CreateEmptySet(), Services.CreateEmptySet()); point.SetServices(Services); point.SetOwningGraph(owningGraph); }