Ejemplo n.º 1
0
 public override void  Write(BlobWriter writer)
 {
     writer.WriteByte((byte)TypeSigTag.CUSTOM_ATTRIBUTE_ENUM);
     writer.WriteUTF8SizedString(TypeName);
 }
Ejemplo n.º 2
0
        public override void Write(WriterContext ctxt, BlobWriter writer)
        {
            if (FixedArgs.Count > 0 || FieldArgs.Count > 0 || PropertyArgs.Count > 0)
            {
                writer.WriteUInt16(prolog);

                foreach (var p in FixedArgs)
                    p.Type.WriteValue(writer, p.Value);

                writer.WriteUInt16((ushort)(FieldArgs.Count + PropertyArgs.Count));

                foreach (var kv in FieldArgs)
                {
                    writer.WriteByte((byte)TypeSigTag.CUSTOM_ATTRIBUTE_FIELD);
                    kv.Value.Type.Write(writer);
                    writer.WriteUTF8SizedString(kv.Key);
                    kv.Value.Type.WriteValue(writer, kv.Value.Value);
                }
                foreach (var kv in PropertyArgs)
                {
                    writer.WriteByte((byte)TypeSigTag.CUSTOM_ATTRIBUTE_PROPERTY);
                    kv.Value.Type.Write(writer);
                    writer.WriteUTF8SizedString(kv.Key);
                    kv.Value.Type.WriteValue(writer, kv.Value.Value);
                }
            }
        }
Ejemplo n.º 3
0
 public override void  WriteValue(BlobWriter writer, object value)
 {
     switch (Type)
     {
     case PrimitiveType.Boolean:
         {
             var b = (bool)value;
             writer.WriteByte(b ? (byte)1 : (byte)0);
         }
         break;
     case PrimitiveType.Char:
         {
             var c = (char)value;
             writer.WriteUInt16(c);
         }
         break;
     case PrimitiveType.Int8:
         {
             var i = (sbyte)value;
             writer.WriteSByte(i);
         }
         break;
     case PrimitiveType.Int16:
         {
             var i = (short)value;
             writer.WriteInt16(i);
         }
         break;
     case PrimitiveType.Int32:
         {
             var i = (int)value;
             writer.WriteInt32(i);
         }
         break;
     case PrimitiveType.Int64:
         {
             var i = (long)value;
             writer.WriteInt64(i);
         }
         break;
     case PrimitiveType.UInt8:
         {
             var i = (byte)value;
             writer.WriteByte(i);
         }
         break;
     case PrimitiveType.UInt16:
         {
             var i = (ushort)value;
             writer.WriteUInt16(i);
         }
         break;
     case PrimitiveType.UInt32:
         {
             var i = (uint)value;
             writer.WriteUInt32(i);
         }
         break;
     case PrimitiveType.UInt64:
         {
             var i = (ulong)value;
             writer.WriteUInt64(i);
         }
         break;
     case PrimitiveType.IntNative:
     case PrimitiveType.UIntNative:
         throw new InvalidOperationException("cannot write native integers");
     case PrimitiveType.Single:
         {
             var f = (float)value;
             writer.WriteSingle(f);
         }
         break;
     case PrimitiveType.Double:
         {
             var d = (double)value;
             writer.WriteDouble(d);
         }
         break;
     case PrimitiveType.String:
         {
             var s = (string)value;
             writer.WriteUTF8SizedString(s);
         }
         break;
     case PrimitiveType.Type:
         {
             var t = (TypeCustomAttributePropertyValue)value;
             writer.WriteUTF8SizedString(t.Name);
         }
         break;
     case PrimitiveType.Object:
     case PrimitiveType.TypedRef:
     case PrimitiveType.Void:
         throw new PEException("invalid type tag in custom attribute");
     default:
         throw new ArgumentOutOfRangeException();
     }
 }