Ejemplo n.º 1
0
 /// <summary>
 /// Creates a new array type signature with the provided dimensions count.
 /// </summary>
 /// <param name="baseType">The element type.</param>
 /// <param name="dimensions">The dimensions.</param>
 public ArrayTypeSignature(TypeSignature baseType, params ArrayDimension[] dimensions)
     : base(baseType)
 {
     Dimensions = new List <ArrayDimension>(dimensions);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates a new pointer type signature.
 /// </summary>
 /// <param name="baseType">The type of values the pointer addresses.</param>
 public PointerTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Creates a new array type signature.
 /// </summary>
 /// <param name="baseType">The element type.</param>
 public ArrayTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
     Dimensions = new List <ArrayDimension>(0);
 }
 /// <summary>
 /// Creates a new pinned type signature.
 /// </summary>
 /// <param name="baseType">The type to pin.</param>
 public PinnedTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Creates a new single-dimension array signature with 0 as a lower bound.
 /// </summary>
 /// <param name="baseType">The type of the elements to store in the array.</param>
 public SzArrayTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
 }
Ejemplo n.º 6
0
        internal new static ArrayTypeSignature FromReader(ModuleDefinition parentModule, IBinaryStreamReader reader,
                                                          RecursionProtection protection)
        {
            var signature = new ArrayTypeSignature(TypeSignature.FromReader(parentModule, reader, protection));

            // Rank
            if (!reader.TryReadCompressedUInt32(out uint rank))
            {
                return(signature);
            }

            // Sizes.
            if (!reader.TryReadCompressedUInt32(out uint numSizes))
            {
                return(signature);
            }

            var sizes = new List <uint>();

            for (int i = 0; i < numSizes; i++)
            {
                if (!reader.TryReadCompressedUInt32(out uint size))
                {
                    return(signature);
                }
                sizes.Add(size);
            }

            // Lower bounds.
            if (!reader.TryReadCompressedUInt32(out uint numLoBounds))
            {
                return(signature);
            }

            var loBounds = new List <uint>();

            for (int i = 0; i < numLoBounds; i++)
            {
                if (!reader.TryReadCompressedUInt32(out uint bound))
                {
                    return(signature);
                }
                loBounds.Add(bound);
            }

            // Create dimensions.
            for (int i = 0; i < rank; i++)
            {
                int?size = null, lowerBound = null;

                if (i < numSizes)
                {
                    size = (int)sizes[i];
                }
                if (i < numLoBounds)
                {
                    lowerBound = (int)loBounds[i];
                }

                signature.Dimensions.Add(new ArrayDimension(size, lowerBound));
            }

            return(signature);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Creates a new boxed type signature..
 /// </summary>
 /// <param name="baseType">The type to box..</param>
 public BoxedTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
 }
 /// <summary>
 /// Initializes a new type specification.
 /// </summary>
 /// <param name="baseType">The type to base the specification on.</param>
 protected TypeSpecificationSignature(TypeSignature baseType)
 {
     BaseType = baseType;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Creates a new type signature annotated with a modifier type.
 /// </summary>
 /// <param name="modifierType">The modifier type.</param>
 /// <param name="isRequired">Indicates whether the modifier is required or optional.</param>
 /// <param name="baseType">The type signature that was annotated.</param>
 public CustomModifierTypeSignature(ITypeDefOrRef modifierType, bool isRequired, TypeSignature baseType)
     : base(baseType)
 {
     ModifierType = modifierType;
     IsRequired   = isRequired;
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Creates a new by reference type signature.
 /// </summary>
 /// <param name="baseType">The type that is passed on by reference.</param>
 public ByReferenceTypeSignature(TypeSignature baseType)
     : base(baseType)
 {
 }