Exemple #1
0
        /// <summary>
        /// Loads the generic param constraints.
        /// </summary>
        private void LoadGenericParams()
        {
            Token maxToken = GetMaxTokenValue(TableType.GenericParam);

            foreach (Token token in new Token(TableType.GenericParam, 1).Upto(maxToken))
            {
                GenericParamRow row  = metadataProvider.ReadGenericParamRow(token);
                string          name = GetString(row.NameStringIdx);

                // The following switch matches the AttributeTargets enumeration against
                // metadata tables, which make valid targets for an attribute.
                switch (row.Owner.Table)
                {
                case TableType.TypeDef:
                    types[row.Owner.RID - 1].GenericParameters.Add(new GenericParameter(name, row.Flags));
                    break;

                case TableType.MethodDef:
                    methods[row.Owner.RID - 1].GenericParameters.Add(new GenericParameter(name, row.Flags));
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Reads the specified token.
        /// </summary>
        /// <param name="token">The token.</param>
        /// <param name="result">The result.</param>
        public void Read(TokenTypes token, out GenericParamRow result)
        {
            if ((token & TokenTypes.TableMask) != TokenTypes.GenericParam)
            {
                throw new ArgumentException("Invalid token type for GenericParamRow.", "token");
            }

            using (BinaryReader reader = CreateReaderForToken(token))
            {
                result = new GenericParamRow(reader.ReadUInt16(), (GenericParamAttributes)reader.ReadUInt16(), ReadIndexValue(reader, IndexType.TypeOrMethodDef), ReadIndexValue(reader, IndexType.StringHeap));
            }
        }
        void ReadGenericParameters()
        {
            if (!m_tHeap.HasTable(GenericParamTable.RId))
            {
                return;
            }

            GenericParamTable gpTable = m_tableReader.GetGenericParamTable();

            m_genericParameters = new GenericParameter [gpTable.Rows.Count];
            for (int i = 0; i < gpTable.Rows.Count; i++)
            {
                GenericParamRow           gpRow = gpTable [i];
                IGenericParameterProvider owner;
                if (gpRow.Owner.TokenType == TokenType.Method)
                {
                    owner = GetMethodDefAt(gpRow.Owner.RID);
                }
                else if (gpRow.Owner.TokenType == TokenType.TypeDef)
                {
                    owner = GetTypeDefAt(gpRow.Owner.RID);
                }
                else
                {
                    throw new ReflectionException("Unknown owner type for generic parameter");
                }

                GenericParameter gp = new GenericParameter((int)gpRow.Number, owner);
                gp.Attributes    = gpRow.Flags;
                gp.Name          = MetadataRoot.Streams.StringsHeap [gpRow.Name];
                gp.MetadataToken = MetadataToken.FromMetadataRow(TokenType.GenericParam, i);

                owner.GenericParameters.Add(gp);
                m_genericParameters [i] = gp;
            }
        }
 public virtual void VisitGenericParamRow(GenericParamRow row)
 {
 }
Exemple #5
0
 public GenericParamRowExt(IMetadataProvider metadata, GenericParamRow row)
     : base(metadata)
 {
     this.row = row;
 }
Exemple #6
0
        void IMetadataProvider.Read(TokenTypes token, out GenericParamRow result)
        {
            TableHeap theap = (TableHeap)_streams[(int)HeapType.Tables];

            theap.Read(token, out result);
        }
 public virtual void VisitGenericParamRow(GenericParamRow row)
 {
 }