public Scanner(
Program program,
IImportResolver importResolver,
IServiceProvider services)
{
this.program = program;
this.segmentMap = program.SegmentMap;
this.importResolver = importResolver;
this.Services = services;
this.eventListener = services.RequireService<DecompilerEventListener>();
this.cancelSvc = services.GetService<CancellationTokenSource>();
if (segmentMap == null)
throw new InvalidOperationException("Program must have an segment map.");
if (program.ImageMap == null)
{
program.ImageMap = segmentMap.CreateImageMap();
}
this.imageMap = program.ImageMap;
this.queue = new PriorityQueue<WorkItem>();
this.blocks = new SortedList<Address, BlockRange>();
this.blockStarts = new Dictionary<Block, Address>();
this.pseudoProcs = program.PseudoProcedures;
this.importReferences = program.ImportReferences;
this.visitedProcs = new HashSet<Procedure>();
this.noDecompiledProcs = new Dictionary<Address, Procedure_v1>();
}