| File: Compiler\DependencyAnalysis\ImportReferenceProvider.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; using ILCompiler.DependencyAnalysis.ReadyToRun; using ILCompiler.ReadyToRun; using Internal.TypeSystem; using Internal.NativeFormat; using Internal.ReadyToRunConstants; using System.Diagnostics; using Internal.TypeSystem.Ecma; namespace ILCompiler.DependencyAnalysis { public sealed class ImportReferenceProvider : INativeFormatTypeReferenceProvider { private ReadyToRunSymbolNodeFactory _symbolNodeFactory; private ExternalReferenceTokenManager _externalReferenceTokenManager; public Import GetImportToType(TypeDesc type, ModuleDesc moduleRequiringImport = null) { if (moduleRequiringImport is not null) { _externalReferenceTokenManager.EnsureDefTokensAreAvailable(type, moduleRequiringImport, referencesAreForAsyncMethod: false); } return _symbolNodeFactory.CreateReadyToRunHelper(ReadyToRunHelperId.TypeHandle, type); } public Import GetImportToModule(ModuleDesc module) { Debug.Assert(module is IEcmaModule); return _symbolNodeFactory.ModuleLookup((IEcmaModule)module); } internal void Initialize(ReadyToRunSymbolNodeFactory symbolNodeFactory, ExternalReferenceTokenManager externalReferenceTokenManager) { _symbolNodeFactory = symbolNodeFactory; _externalReferenceTokenManager = externalReferenceTokenManager; } internal Vertex EncodeReferenceToModule(NativeWriter writer, ModuleDesc module) { Import typeImport = GetImportToModule(module); return writer.GetTuple(writer.GetUnsignedConstant((uint)typeImport.Table.IndexFromBeginningOfArray), writer.GetUnsignedConstant((uint)typeImport.IndexFromBeginningOfArray)); } internal Vertex EncodeReferenceToType(NativeWriter writer, TypeDesc type, ModuleDesc module) { Debug.Assert(module is not null); Import typeImport = GetImportToType(type, module); return writer.GetTuple(writer.GetUnsignedConstant((uint)typeImport.Table.IndexFromBeginningOfArray), writer.GetUnsignedConstant((uint)typeImport.IndexFromBeginningOfArray)); } Vertex INativeFormatTypeReferenceProvider.EncodeReferenceToMethod(NativeWriter writer, MethodDesc method) => throw new NotImplementedException(); Vertex INativeFormatTypeReferenceProvider.EncodeReferenceToType(NativeWriter writer, TypeDesc type, ModuleDesc module) => EncodeReferenceToType(writer, type, module); } }