/// <summary> /// A helper method for ReferenceManager to set AssemblySymbols for assemblies /// referenced by this module. /// </summary> internal override void SetReferences(ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly) { base.SetReferences(moduleReferences, originatingSourceAssemblyDebugOnly); // Build the retargeting map _retargetingAssemblyMap.Clear(); ImmutableArray <AssemblySymbol> underlyingBoundReferences = _underlyingModule.GetReferencedAssemblySymbols(); ImmutableArray <AssemblySymbol> referencedAssemblySymbols = moduleReferences.Symbols; Debug.Assert(referencedAssemblySymbols.Length == moduleReferences.Identities.Length); Debug.Assert(referencedAssemblySymbols.Length <= underlyingBoundReferences.Length); // Linked references are filtered out. int i, j; for (i = 0, j = 0; i < referencedAssemblySymbols.Length; i++, j++) { // Skip linked assemblies for source module while (underlyingBoundReferences[j].IsLinked) { j++; } #if DEBUG var identityComparer = _underlyingModule.DeclaringCompilation.Options.AssemblyIdentityComparer; var definitionIdentity = ReferenceEquals(referencedAssemblySymbols[i], originatingSourceAssemblyDebugOnly) ? new AssemblyIdentity(name: originatingSourceAssemblyDebugOnly.Name) : referencedAssemblySymbols[i].Identity; Debug.Assert(identityComparer.Compare(moduleReferences.Identities[i], definitionIdentity) != AssemblyIdentityComparer.ComparisonResult.NotEquivalent); Debug.Assert(identityComparer.Compare(moduleReferences.Identities[i], underlyingBoundReferences[j].Identity) != AssemblyIdentityComparer.ComparisonResult.NotEquivalent); #endif if (!ReferenceEquals(referencedAssemblySymbols[i], underlyingBoundReferences[j])) { DestinationData destinationData; if (!_retargetingAssemblyMap.TryGetValue(underlyingBoundReferences[j], out destinationData)) { _retargetingAssemblyMap.Add(underlyingBoundReferences[j], new DestinationData { To = referencedAssemblySymbols[i] }); } else { Debug.Assert(ReferenceEquals(destinationData.To, referencedAssemblySymbols[i])); } } } #if DEBUG while (j < underlyingBoundReferences.Length && underlyingBoundReferences[j].IsLinked) { j++; } Debug.Assert(j == underlyingBoundReferences.Length); #endif }
internal override void SetReferences( ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly ) { throw ExceptionUtilities.Unreachable; }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal void SetReferences(ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(_moduleReferences == null); Debug.Assert(moduleReferences != null); _moduleReferences = moduleReferences; }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal void SetReferences(ModuleReferences<AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(_moduleReferences == null); Debug.Assert(moduleReferences != null); _moduleReferences = moduleReferences; }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal override void SetReferences(ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(moduleReferences != null); AssertReferencesUninitialized(); _moduleReferences = moduleReferences; }
/// <summary> /// </summary> /// <param name="assemblyMetadata"> /// </param> /// <returns> /// </returns> private ModuleReferences <AssemblySymbol> LoadReferences(AssemblyMetadata assemblyMetadata) { var peReferences = ImmutableArray.CreateRange(assemblyMetadata.Assembly.AssemblyReferences.Select(this.LoadAssemblySymbolOrMissingAssemblySymbol)); var moduleReferences = new ModuleReferences <AssemblySymbol>( assemblyMetadata.Assembly.AssemblyReferences, peReferences, ImmutableArray.CreateRange(this.unifiedAssemblies)); return(moduleReferences); }
public void CopyTo(Module copy) { copy._name = _name; copy._mvid = _mvid; copy._frameworkVersionMoniker = _frameworkVersionMoniker; copy._entryPoint = EntryPoint; AssemblyReferences.CopyTo(copy.AssemblyReferences); ModuleReferences.CopyTo(copy.ModuleReferences); Files.CopyTo(copy.Files); Types.CopyTo(copy.Types); ExportedTypes.CopyTo(copy.ExportedTypes); Resources.CopyTo(copy.Resources); CustomAttributes.CopyTo(copy.CustomAttributes); if (_unmanagedResources != null) { copy._unmanagedResources = _unmanagedResources.Clone(); } }
internal abstract void SetReferences(ModuleReferences <AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null);
/// <summary> /// A helper method for ReferenceManager to set AssemblySymbols for assemblies /// referenced by this module. /// </summary> internal override void SetReferences(ModuleReferences<AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly) { base.SetReferences(moduleReferences, originatingSourceAssemblyDebugOnly); // Build the retargeting map _retargetingAssemblyMap.Clear(); ImmutableArray<AssemblySymbol> underlyingBoundReferences = _underlyingModule.GetReferencedAssemblySymbols(); ImmutableArray<AssemblySymbol> referencedAssemblySymbols = moduleReferences.Symbols; Debug.Assert(referencedAssemblySymbols.Length == moduleReferences.Identities.Length); Debug.Assert(referencedAssemblySymbols.Length <= underlyingBoundReferences.Length); // Linked references are filtered out. int i, j; for (i = 0, j = 0; i < referencedAssemblySymbols.Length; i++, j++) { // Skip linked assemblies for source module while (underlyingBoundReferences[j].IsLinked) { j++; } #if DEBUG var identityComparer = _underlyingModule.DeclaringCompilation.Options.AssemblyIdentityComparer; var definitionIdentity = ReferenceEquals(referencedAssemblySymbols[i], originatingSourceAssemblyDebugOnly) ? new AssemblyIdentity(name: originatingSourceAssemblyDebugOnly.Name) : referencedAssemblySymbols[i].Identity; Debug.Assert(identityComparer.Compare(moduleReferences.Identities[i], definitionIdentity) != AssemblyIdentityComparer.ComparisonResult.NotEquivalent); Debug.Assert(identityComparer.Compare(moduleReferences.Identities[i], underlyingBoundReferences[j].Identity) != AssemblyIdentityComparer.ComparisonResult.NotEquivalent); #endif if (!ReferenceEquals(referencedAssemblySymbols[i], underlyingBoundReferences[j])) { DestinationData destinationData; if (!_retargetingAssemblyMap.TryGetValue(underlyingBoundReferences[j], out destinationData)) { _retargetingAssemblyMap.Add(underlyingBoundReferences[j], new DestinationData { To = referencedAssemblySymbols[i] }); } else { Debug.Assert(ReferenceEquals(destinationData.To, referencedAssemblySymbols[i])); } } } #if DEBUG while (j < underlyingBoundReferences.Length && underlyingBoundReferences[j].IsLinked) { j++; } Debug.Assert(j == underlyingBoundReferences.Length); #endif }
internal override void SetReferences(ModuleReferences<AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly) { throw ExceptionUtilities.Unreachable; }
/// <summary> /// A helper method for ReferenceManager to set assembly identities for assemblies /// referenced by this module and corresponding AssemblySymbols. /// </summary> internal override void SetReferences(ModuleReferences<AssemblySymbol> moduleReferences, SourceAssemblySymbol originatingSourceAssemblyDebugOnly = null) { Debug.Assert(moduleReferences != null); AssertReferencesUninitialized(); _moduleReferences = moduleReferences; }
/// <summary> /// </summary> /// <param name="assemblyMetadata"> /// </param> /// <returns> /// </returns> private ModuleReferences<AssemblySymbol> LoadReferences(AssemblyMetadata assemblyMetadata) { var peReferences = ImmutableArray.CreateRange(assemblyMetadata.Assembly.AssemblyReferences.Select(this.LoadAssemblySymbolOrMissingAssemblySymbol)); var moduleReferences = new ModuleReferences<AssemblySymbol>( assemblyMetadata.Assembly.AssemblyReferences, peReferences, ImmutableArray.CreateRange(this.unifiedAssemblies)); return moduleReferences; }