< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 22
Coverable lines: 22
Total lines: 57
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
ConvertToHandle(...)0%440%
ConvertToTag(...)0%660%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/Internal/HasConstantTag.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Runtime.CompilerServices;
 5
 6namespace System.Reflection.Metadata.Ecma335
 7{
 8    internal static class HasConstantTag
 9    {
 10        internal const int NumberOfBits = 2;
 11        internal const int LargeRowSize = 0x00000001 << (16 - NumberOfBits);
 12        internal const uint Field = 0x00000000;
 13        internal const uint Param = 0x00000001;
 14        internal const uint Property = 0x00000002;
 15        internal const uint TagMask = 0x00000003;
 16        internal const TableMask TablesReferenced =
 17          TableMask.Field
 18          | TableMask.Param
 19          | TableMask.Property;
 20        internal const uint TagToTokenTypeByteVector = TokenTypeIds.FieldDef >> 24 | TokenTypeIds.ParamDef >> 16 | Token
 21
 22        [MethodImpl(MethodImplOptions.AggressiveInlining)]
 23        internal static EntityHandle ConvertToHandle(uint hasConstant)
 024        {
 025            uint tokenType = (TagToTokenTypeByteVector >> ((int)(hasConstant & TagMask) << 3)) << TokenTypeIds.RowIdBitC
 026            uint rowId = (hasConstant >> NumberOfBits);
 27
 028            if (tokenType == 0 || (rowId & ~TokenTypeIds.RIDMask) != 0)
 029            {
 030                Throw.InvalidCodedIndex();
 31            }
 32
 033            return new EntityHandle(tokenType | rowId);
 034        }
 35
 36        internal static uint ConvertToTag(EntityHandle token)
 037        {
 038            HandleKind tokenKind = token.Kind;
 039            uint rowId = (uint)token.RowId;
 040            if (tokenKind == HandleKind.FieldDefinition)
 041            {
 042                return rowId << NumberOfBits | Field;
 43            }
 044            else if (tokenKind == HandleKind.Parameter)
 045            {
 046                return rowId << NumberOfBits | Param;
 47            }
 048            else if (tokenKind == HandleKind.PropertyDefinition)
 049            {
 050                return rowId << NumberOfBits | Property;
 51            }
 52
 053            return 0;
 054        }
 55    }
 56}
 57