| File: Compiler\ReadyToRunTypeMapManager.cs | Web Access |
| Project: src\runtime\src\coreclr\tools\aot\ILCompiler.ReadyToRun\ILCompiler.ReadyToRun.csproj (ILCompiler.ReadyToRun) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using ILCompiler.DependencyAnalysis; using ILCompiler.DependencyAnalysis.ReadyToRun; using ILCompiler.DependencyAnalysisFramework; using Internal.Runtime; using Internal.TypeSystem; namespace ILCompiler.ReadyToRun { public sealed class ReadyToRunTypeMapManager(ModuleDesc triggeringModule, TypeMapMetadata assemblyTypeMaps) : TypeMapManager { private ImportReferenceProvider _importReferenceProvider; public override ModuleDesc AssociatedModule => triggeringModule; public override void AttachToDependencyGraph(DependencyAnalyzerBase<NodeFactory> graph) { base.AttachToDependencyGraph(graph); foreach (var map in GetExternalTypeMaps()) { graph.AddRoot(map, "External type map"); } foreach (var map in GetProxyTypeMaps()) { graph.AddRoot(map, "Proxy type map"); } } protected override bool IsEmpty => assemblyTypeMaps.IsEmpty; public override void AddCompilationRoots(IRootingServiceProvider rootProvider) { } internal override IEnumerable<IExternalTypeMapNode> GetExternalTypeMaps() { foreach (var map in assemblyTypeMaps.Maps) { yield return new ReadyToRunExternalTypeMapNode(triggeringModule, map.Key, map.Value, _importReferenceProvider); } } internal override IEnumerable<IProxyTypeMapNode> GetProxyTypeMaps() { foreach (var map in assemblyTypeMaps.Maps) { yield return new ReadyToRunProxyTypeMapNode(triggeringModule, map.Key, map.Value, _importReferenceProvider); } } public void AddToReadyToRunHeader(ReadyToRunHeaderNode header, NodeFactory nodeFactory, ImportReferenceProvider importReferenceProvider) { _importReferenceProvider = importReferenceProvider; if (IsEmpty) return; header.Add(ReadyToRunSectionType.ExternalTypeMaps, new ExternalTypeMapObjectNode(this, importReferenceProvider)); header.Add(ReadyToRunSectionType.ProxyTypeMaps, new ProxyTypeMapObjectNode(this, importReferenceProvider)); header.Add(ReadyToRunSectionType.TypeMapAssemblyTargets, new TypeMapAssemblyTargetsNode(assemblyTypeMaps, importReferenceProvider)); } } }