Example #1
0
        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);
        }
Example #3
0
        /// <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;
        }
Example #4
0
        /// <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);
        }
Example #5
0
        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));
        }
Example #6
0
            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);
            }
Example #7
0
 /// <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;
 }