Example #1
0
 private object GetCustomAttributeLiteralValue(MemoryCursor/*!*/ sigReader, ref TypeNode/*!*/ type)
 {
     if (type == null) return sigReader.ReadInt32();
     switch (type.typeCode)
     {
         case ElementType.Boolean: return sigReader.ReadBoolean();
         case ElementType.Char: return sigReader.ReadChar();
         case ElementType.Double: return sigReader.ReadDouble();
         case ElementType.Single: return sigReader.ReadSingle();
         case ElementType.Int16: return sigReader.ReadInt16();
         case ElementType.Int32: return sigReader.ReadInt32();
         case ElementType.Int64: return sigReader.ReadInt64();
         case ElementType.Int8: return sigReader.ReadSByte();
         case ElementType.UInt16: return sigReader.ReadUInt16();
         case ElementType.UInt32: return sigReader.ReadUInt32();
         case ElementType.UInt64: return sigReader.ReadUInt64();
         case ElementType.UInt8: return sigReader.ReadByte();
         case ElementType.String: return ReadSerString(sigReader);
         case ElementType.ValueType:
             EnumNode etype = GetCustomAttributeEnumNode(ref type);
             return this.GetCustomAttributeLiteralValue(sigReader, etype.UnderlyingType);
         case ElementType.Class: return this.GetTypeFromSerializedName(ReadSerString(sigReader));
         case ElementType.SzArray:
             int numElems = sigReader.ReadInt32();
             TypeNode elemType = ((ArrayType)type).ElementType;
             return this.GetCustomAttributeLiteralArray(sigReader, numElems, elemType);
         case ElementType.Object:
             {
                 type = this.ParseTypeSignature(sigReader);
                 return this.GetCustomAttributeLiteralValue(sigReader, ref type);
             }
     }
     throw new InvalidMetadataException(ExceptionStrings.UnexpectedTypeInCustomAttribute);
 }