public RapidTypeAnalysis(WholeProgram wholeProgram, TargetProfile profile) { Contract.Ensures(!this.FinishedAnalysis); this.types = new HashSet <ITypeDefinition>(new TypeDefinitionEqualityComparer()); this.methods = new HashSet <IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.virtualCallsInDemand = new VirtualDispatchDemand(); this.nonvirtualDispatches = new HashSet <IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.fields = new HashSet <IFieldDefinition>(new FieldDefinitionEqualityComparer()); this.constructed = new HashSet <ITypeDefinition>(new TypeDefinitionEqualityComparer()); this.constructedGenericParameters = new HashSet <IGenericParameter>(new TypeDefinitionEqualityComparer()); // Note: we use the interned key as the hashcode, so this set should be deterministic this.worklist = new HashSet <IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.wholeProgram = wholeProgram; this.reflectionSummarizers = new HashSet <IMethodSummarizer>(); this.simpleBytecodeSummarizer = new SimpleBytecodeMethodSummarizer(); this.reachabilityFlowBytecodeSummarizer = new ReachabilityBasedLocalFlowMethodSummarizer(); //systemObjectType = wholeProgram.Host().PlatformType.SystemObject.ResolvedType; // Weak heuristic -- should provide custom host? IAssembly coreAssembly = wholeProgram.HeuristicFindCoreAssemblyForProfile(profile); Contract.Assert(coreAssembly != null); systemObjectType = GarbageCollectHelper.CreateTypeReference(wholeProgram.Host(), coreAssembly, "System.Object").ResolvedType; Contract.Assert(!(systemObjectType is Dummy)); systemObjectFinalizeMethod = TypeHelper.GetMethod(systemObjectType, wholeProgram.Host().NameTable.GetNameFor("Finalize")); Contract.Assert(!(systemObjectFinalizeMethod is Dummy)); methodsRequiringReflectionSummary = new HashSet <IMethodDefinition>(new MethodDefinitionEqualityComparer()); unresolvedReferences = new HashSet <IReference>(new ReferenceEqualityComparer()); unspecializedTypesPassedAsTypeVariables = new HashSet <ITypeDefinition>(new TypeDefinitionEqualityComparer()); }
public RapidTypeAnalysis(WholeProgram wholeProgram, TargetProfile profile) { Contract.Ensures(!this.FinishedAnalysis); this.types = new HashSet<ITypeDefinition>(new TypeDefinitionEqualityComparer()); this.methods = new HashSet<IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.virtualCallsInDemand = new VirtualDispatchDemand(); this.nonvirtualDispatches = new HashSet<IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.fields = new HashSet<IFieldDefinition>(new FieldDefinitionEqualityComparer()); this.constructed = new HashSet<ITypeDefinition>(new TypeDefinitionEqualityComparer()); this.constructedGenericParameters = new HashSet<IGenericParameter>(new TypeDefinitionEqualityComparer()); // Note: we use the interned key as the hashcode, so this set should be deterministic this.worklist = new HashSet<IMethodDefinition>(new MethodDefinitionEqualityComparer()); this.wholeProgram = wholeProgram; this.reflectionSummarizers = new HashSet<IMethodSummarizer>(); this.simpleBytecodeSummarizer = new SimpleBytecodeMethodSummarizer(); this.reachabilityFlowBytecodeSummarizer = new ReachabilityBasedLocalFlowMethodSummarizer(); //systemObjectType = wholeProgram.Host().PlatformType.SystemObject.ResolvedType; // Weak heuristic -- should provide custom host? IAssembly coreAssembly = wholeProgram.HeuristicFindCoreAssemblyForProfile(profile); Contract.Assert(coreAssembly != null); systemObjectType = GarbageCollectHelper.CreateTypeReference(wholeProgram.Host(), coreAssembly, "System.Object").ResolvedType; Contract.Assert(!(systemObjectType is Dummy)); systemObjectFinalizeMethod = TypeHelper.GetMethod(systemObjectType, wholeProgram.Host().NameTable.GetNameFor("Finalize")); Contract.Assert(!(systemObjectFinalizeMethod is Dummy)); methodsRequiringReflectionSummary = new HashSet<IMethodDefinition>(new MethodDefinitionEqualityComparer()); unresolvedReferences = new HashSet<IReference>(new ReferenceEqualityComparer()); unspecializedTypesPassedAsTypeVariables = new HashSet<ITypeDefinition>(new TypeDefinitionEqualityComparer()); }