Ejemplo n.º 1
0
 /// <inheritdoc />
 public object VisitCorLibType(CorLibTypeSignature signature)
 {
     WriteIdentifier(signature.Namespace);
     _writer.Write('.');
     WriteIdentifier(signature.Name);
     return(null);
 }
        /// <inheritdoc />
        public bool Equals(TypeSignature x, TypeSignature y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }
            if (ReferenceEquals(x, null) || ReferenceEquals(y, null))
            {
                return(false);
            }

            return(x switch
            {
                CorLibTypeSignature corLibType => Equals(corLibType, y as CorLibTypeSignature),
                TypeDefOrRefSignature typeDefOrRef => Equals(typeDefOrRef, y as TypeDefOrRefSignature),
                SzArrayTypeSignature szArrayType => Equals(szArrayType, y as SzArrayTypeSignature),
                ArrayTypeSignature arrayType => Equals(arrayType, y as ArrayTypeSignature),
                ByReferenceTypeSignature byRefType => Equals(byRefType, y as ByReferenceTypeSignature),
                BoxedTypeSignature boxedType => Equals(boxedType, y as BoxedTypeSignature),
                GenericInstanceTypeSignature genericInstanceType => Equals(genericInstanceType, y as GenericInstanceTypeSignature),
                GenericParameterSignature genericParameter => Equals(genericParameter, y as GenericParameterSignature),
                PointerTypeSignature pointerType => Equals(pointerType, y as PointerTypeSignature),
                PinnedTypeSignature pinnedType => Equals(pinnedType, y as PinnedTypeSignature),
                CustomModifierTypeSignature modifierType => Equals(modifierType, y as CustomModifierTypeSignature),
                _ => throw new NotSupportedException()
            });
Ejemplo n.º 3
0
        /// <inheritdoc />
        public TypeMemoryLayout VisitCorLibType(CorLibTypeSignature signature)
        {
            uint elementSize = signature.ElementType switch
            {
                ElementType.Boolean => sizeof(bool),
                ElementType.Char => sizeof(char),
                ElementType.I1 => sizeof(sbyte),
                ElementType.U1 => sizeof(byte),
                ElementType.I2 => sizeof(short),
                ElementType.U2 => sizeof(ushort),
                ElementType.I4 => sizeof(int),
                ElementType.U4 => sizeof(uint),
                ElementType.I8 => sizeof(long),
                ElementType.U8 => sizeof(ulong),
                ElementType.R4 => sizeof(float),
                ElementType.R8 => sizeof(double),
                ElementType.String => PointerSize,
                ElementType.I => PointerSize,
                ElementType.U => PointerSize,
                ElementType.Object => PointerSize,
                _ => throw new ArgumentOutOfRangeException(nameof(signature))
            };

            return(new TypeMemoryLayout(signature, elementSize));
        }
Ejemplo n.º 4
0
 /// <inheritdoc />
 public bool Equals(CorLibTypeSignature x, CorLibTypeSignature y)
 {
     if (ReferenceEquals(x, y))
     {
         return(true);
     }
     if (x is null || y is null)
     {
         return(false);
     }
     return(x.ElementType == y.ElementType);
 }
Ejemplo n.º 5
0
 /// <inheritdoc />
 public int GetHashCode(CorLibTypeSignature obj) =>
 (int)obj.ElementType << ElementTypeOffset;