protected override void ParseSignature(SignatureReader reader) { this.ParseModifier(reader); this.customMods = CustomMod.ParseCustomMods(reader); this.type = SigType.ParseTypeSignature(reader); }
public TypeReference GetModifierType(CustomMod [] cmods, TypeReference type) { TypeReference ret = type; for (int i = cmods.Length - 1; i >= 0; i--) { CustomMod cmod = cmods [i]; TypeReference modType = null; if (cmod.TypeDefOrRef.TokenType == TokenType.TypeDef) { modType = GetTypeDefAt(cmod.TypeDefOrRef.RID); } else { modType = GetTypeRefAt(cmod.TypeDefOrRef.RID); } if (cmod.CMOD == CustomMod.CMODType.OPT) { ret = new ModifierOptional(ret, modType); } else if (cmod.CMOD == CustomMod.CMODType.REQD) { ret = new ModifierRequired(ret, modType); } } return(ret); }
/// <summary> /// Initializes a new instance of the <see cref="PtrSigType"/> class. /// </summary> /// <param name="customMods">The custom mods.</param> /// <param name="type">The type.</param> public PtrSigType(CustomMod[] customMods, SigType type) : base(CilElementType.Ptr) { if (null == type) throw new ArgumentNullException(@"type"); this.customMods = customMods; this.elementType = type; }
/// <summary> /// Parses the signature. /// </summary> /// <param name="buffer">The buffer.</param> /// <param name="index">The index.</param> protected override void ParseSignature(byte[] buffer, ref int index) { if (Field != buffer[index]) { return; } index++; _customMods = CustomMod.ParseCustomMods(buffer, ref index); _type = SigType.ParseTypeSignature(buffer, ref index); }
private static TokenTypes ValueTokenTypeFromSignature(IMetadataProvider metadata, TokenTypes signatureToken) { int index = 1; byte[] buffer; metadata.Read(signatureToken, out buffer); // Jump over custom mods CustomMod.ParseCustomMods(buffer, ref index); index++; return(SigType.ReadTypeDefOrRefEncoded(buffer, ref index)); }
static IList <int> ReadCustomMods(byte[] sig, int pos, out int nextPos) { List <int> mods = new List <int>(); int start = pos; while (true) { nextPos = start; CustomMod flag = (CustomMod)ReadCompressedInteger(sig, start, out start); if (flag != CustomMod.Required && flag != CustomMod.Optional) { break; } mods.Add(ReadCustomModToken(sig, start, out start)); } return(mods); }
/// <summary> /// Initializes a new instance of the <see cref="SZArraySigType"/> class. /// </summary> /// <param name="customMods">The custom mods.</param> /// <param name="type">The type.</param> public SZArraySigType(CustomMod[] customMods, SigType type) : base(CilElementType.SZArray) { _customMods = customMods; _elementType = type; }