< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 57
Coverable lines: 57
Total lines: 135
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 14
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
.ctor(...)100%110%
Equals(...)0%220%
Equals(...)100%110%
GetHashCode()100%110%
op_Equality(...)100%110%
op_Inequality(...)100%110%
ToString()0%440%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/Signatures/SignatureHeader.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.Diagnostics.CodeAnalysis;
 5using System.Text;
 6
 7namespace System.Reflection.Metadata
 8{
 9    /// <summary>
 10    /// Represents the signature characteristics specified by the leading byte of signature blobs.
 11    /// </summary>
 12    /// <remarks>
 13    /// This header byte is present in all method definition, method reference, standalone method, field,
 14    /// property, and local variable signatures, but not in type specification signatures.
 15    /// </remarks>
 16    public struct SignatureHeader : IEquatable<SignatureHeader>
 17    {
 18        private readonly byte _rawValue;
 19        public const byte CallingConventionOrKindMask = 0x0F;
 20        private const byte maxCallingConvention = (byte)SignatureCallingConvention.VarArgs;
 21
 22        public SignatureHeader(byte rawValue)
 023        {
 024            _rawValue = rawValue;
 025        }
 26
 27        public SignatureHeader(SignatureKind kind, SignatureCallingConvention convention, SignatureAttributes attributes
 028             : this((byte)((int)kind | (int)convention | (int)attributes))
 029        {
 030        }
 31
 32        public byte RawValue
 33        {
 034            get { return _rawValue; }
 35        }
 36
 37        public SignatureCallingConvention CallingConvention
 38        {
 39            get
 040            {
 041                int callingConventionOrKind = _rawValue & CallingConventionOrKindMask;
 42
 043                if (callingConventionOrKind > maxCallingConvention
 044                    && callingConventionOrKind != (int)SignatureCallingConvention.Unmanaged)
 045                {
 046                    return SignatureCallingConvention.Default;
 47                }
 48
 049                return (SignatureCallingConvention)callingConventionOrKind;
 050            }
 51        }
 52
 53        public SignatureKind Kind
 54        {
 55            get
 056            {
 057                int callingConventionOrKind = _rawValue & CallingConventionOrKindMask;
 58
 059                if (callingConventionOrKind <= maxCallingConvention
 060                    || callingConventionOrKind == (int)SignatureCallingConvention.Unmanaged)
 061                {
 062                    return SignatureKind.Method;
 63                }
 64
 065                return (SignatureKind)callingConventionOrKind;
 066            }
 67        }
 68
 69        public SignatureAttributes Attributes
 70        {
 071            get { return (SignatureAttributes)(_rawValue & ~CallingConventionOrKindMask); }
 72        }
 73
 74        public bool HasExplicitThis
 75        {
 076            get { return (_rawValue & (byte)SignatureAttributes.ExplicitThis) != 0; }
 77        }
 78
 79        public bool IsInstance
 80        {
 081            get { return (_rawValue & (byte)SignatureAttributes.Instance) != 0; }
 82        }
 83
 84        public bool IsGeneric
 85        {
 086            get { return (_rawValue & (byte)SignatureAttributes.Generic) != 0; }
 87        }
 88
 89        public override bool Equals([NotNullWhen(true)] object? obj)
 090        {
 091            return obj is SignatureHeader signatureHeader && Equals(signatureHeader);
 092        }
 93
 94        public bool Equals(SignatureHeader other)
 095        {
 096            return _rawValue == other._rawValue;
 097        }
 98
 99        public override int GetHashCode()
 0100        {
 0101            return _rawValue;
 0102        }
 103
 104        public static bool operator ==(SignatureHeader left, SignatureHeader right)
 0105        {
 0106            return left._rawValue == right._rawValue;
 0107        }
 108
 109        public static bool operator !=(SignatureHeader left, SignatureHeader right)
 0110        {
 0111            return left._rawValue != right._rawValue;
 0112        }
 113
 114        public override string ToString()
 0115        {
 0116            var sb = new StringBuilder();
 0117            sb.Append(Kind.ToString());
 118
 0119            if (Kind == SignatureKind.Method)
 0120            {
 0121                sb.Append(',');
 0122                sb.Append(CallingConvention.ToString());
 0123            }
 124
 0125            if (Attributes != SignatureAttributes.None)
 0126            {
 0127                sb.Append(',');
 0128                sb.Append(Attributes.ToString());
 0129            }
 130
 0131            return sb.ToString();
 0132        }
 133    }
 134}
 135