public override void Write(BlobWriter writer) { writer.WriteByte((byte)TypeSigTag.CUSTOM_ATTRIBUTE_ENUM); writer.WriteUTF8SizedString(TypeName); }
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); } } }
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(); } }