| File: Compiler\DependencyAnalysis\ReadyToRun\ModuleToken.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 System.Reflection.Metadata; using System.Reflection.Metadata.Ecma335; using Internal.JitInterface; using Internal.TypeSystem.Ecma; using Internal.CorConstants; namespace ILCompiler.DependencyAnalysis.ReadyToRun { /// <summary> /// This helper structure encapsulates a module-qualified token. /// </summary> public struct ModuleToken : IEquatable<ModuleToken> { public readonly IEcmaModule Module; public readonly mdToken Token; public ModuleToken(IEcmaModule module, mdToken token) { Module = module; Token = token; } public ModuleToken(IEcmaModule module, EntityHandle entityHandle) { Module = module; Token = (mdToken)MetadataTokens.GetToken(entityHandle); } public ModuleToken(IEcmaModule module, Handle handle) { Module = module; Token = (mdToken)MetadataTokens.GetToken(handle); } public bool IsNull => Module == null; public override int GetHashCode() { return IsNull ? 0 : Module.GetHashCode() ^ unchecked((int)(31 * (uint)Token)); } public override string ToString() { if (IsNull) { return "default(ModuleToken)"; } return Module.ToString() + ":" + ((uint)Token).ToString("X8"); } public override bool Equals(object obj) { return obj is ModuleToken moduleToken && Equals(moduleToken); } public bool Equals(ModuleToken moduleToken) { return Module == moduleToken.Module && Token == moduleToken.Token; } public int CompareTo(ModuleToken other) { int result = ((int)Token).CompareTo((int)other.Token); if (result != 0) return result; return Module.CompareTo(other.Module); } public MetadataReader MetadataReader => Module.MetadataReader; public CorTokenType TokenType => SignatureBuilder.TypeFromToken(Token); public uint TokenRid => SignatureBuilder.RidFromToken(Token); public Handle Handle => MetadataTokens.Handle((int)Token); } }