Exemplo n.º 1
0
 public override void FromRawData(byte [] buff, int offs, int numRows)
 {
     for (int i = numRows; --i >= 0;)
     {
         Row row = new TypeSpecRow(this);
         row.FromRawData(buff, offs);
         Add(row);
         offs += TypeSpecRow.LogicalSize;
     }
 }
Exemplo n.º 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 TypeSpecRow result)
        {
            if ((token & TokenTypes.TableMask) != TokenTypes.TypeSpec)
            {
                throw new ArgumentException("Invalid token type for TypeSpecRow.", "token");
            }

            using (BinaryReader reader = CreateReaderForToken(token))
            {
                result = new TypeSpecRow(ReadIndexValue(reader, IndexType.BlobHeap));
            }
        }
        public TypeReference GetTypeSpecAt(uint rid, GenericContext context)
        {
            int           index = (int)rid - 1;
            TypeReference tspec = m_typeSpecs [index];

            if (tspec != null)
            {
                return(tspec);
            }

            TypeSpecTable tsTable = m_tableReader.GetTypeSpecTable();
            TypeSpecRow   tsRow   = tsTable [index];
            TypeSpec      ts      = m_sigReader.GetTypeSpec(tsRow.Signature);

            tspec = GetTypeRefFromSig(ts.Type, context);
            tspec.MetadataToken = MetadataToken.FromMetadataRow(TokenType.TypeSpec, index);
            m_typeSpecs [index] = tspec;

            return(tspec);
        }
Exemplo n.º 4
0
 public virtual void VisitTypeSpecRow(TypeSpecRow row)
 {
 }
Exemplo n.º 5
0
 public TypeSpecRowExt(IMetadataProvider metadata, TypeSpecRow row)
     : base(metadata)
 {
     this.row = row;
 }
Exemplo n.º 6
0
        void IMetadataProvider.Read(TokenTypes token, out TypeSpecRow result)
        {
            TableHeap theap = (TableHeap)_streams[(int)HeapType.Tables];

            theap.Read(token, out result);
        }
 public virtual void VisitTypeSpecRow(TypeSpecRow row)
 {
 }
Exemplo n.º 8
0
        /// <summary>
        /// Loads the type specs.
        /// </summary>
        private void LoadTypeSpecs()
        {
            Token maxToken = GetMaxTokenValue(TableType.TypeSpec);

            foreach (Token token in new Token(TableType.TypeSpec, 1).Upto(maxToken))
            {
                TypeSpecRow       row       = metadataProvider.ReadTypeSpecRow(token);
                TypeSpecSignature signature = GetTypeSpecSignature(row.SignatureBlobIdx);

                GenericInstSigType genericSigType = signature.Type as GenericInstSigType;

                if (genericSigType != null)
                {
                    RuntimeType genericType = null;
                    SigType     sigType     = genericSigType;

                    switch (genericSigType.Type)
                    {
                    case CilElementType.ValueType:
                        goto case CilElementType.Class;

                    case CilElementType.Class:
                        TypeSigType typeSigType = (TypeSigType)sigType;
                        genericType = types[typeSigType.Token.RID];                                     // NOTE: Should this be -1
                        break;

                    case CilElementType.GenericInst:
                        GenericInstSigType genericSigType2 = (GenericInstSigType)sigType;
                        RuntimeType        genericBaseType = null;

                        if (genericSigType2.BaseType.Token.Table == TableType.TypeDef)
                        {
                            genericBaseType = types[genericSigType2.BaseType.Token.RID - 1];
                        }
                        else if (genericSigType2.BaseType.Token.Table == TableType.TypeRef)
                        {
                            genericBaseType = typeRef[genericSigType2.BaseType.Token.RID - 1];
                        }

                        genericType = new CilGenericType(this, genericBaseType, genericSigType, token, this);
                        break;

                    default:
                        throw new NotSupportedException(String.Format(@"LoadTypeSpecs does not support CilElementType.{0}", genericSigType.Type));
                    }

                    typeSpecs[token.RID - 1] = genericType;
                }
                else
                {
                    if (signature.Type is MVarSigType)
                    {
                        continue;
                    }
                    else if (signature.Type is SZArraySigType)
                    {
                        continue;
                    }
                    else
                    {
                        continue;
                    }
                }
            }
        }