/// <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); }
/// <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) { }
/// <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) { }
/// <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) { }
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); }
/// <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; }
/// <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; }
/// <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) { }