- Assembly version number parts should be treated as unsigned shorts.

- Added support for encoding/decoding custom attributes on generic parameters (this encoding is missing from the June 2006 ECMA CLI spec).
This commit is contained in:
jfrijters 2010-04-02 03:52:22 +00:00
Родитель 3841cc0e3f
Коммит 13ec0c138e
3 изменённых файлов: 22 добавлений и 12 удалений

Просмотреть файл

@ -178,10 +178,10 @@ namespace IKVM.Reflection.Emit
assemblyRecord.Name = manifestModule.Strings.Add(name.Name);
if (name.Version != null)
{
assemblyRecord.MajorVersion = (short)name.Version.Major;
assemblyRecord.MinorVersion = (short)name.Version.Minor;
assemblyRecord.BuildNumber = (short)name.Version.Build;
assemblyRecord.RevisionNumber = (short)name.Version.Revision;
assemblyRecord.MajorVersion = (ushort)name.Version.Major;
assemblyRecord.MinorVersion = (ushort)name.Version.Minor;
assemblyRecord.BuildNumber = (ushort)name.Version.Build;
assemblyRecord.RevisionNumber = (ushort)name.Version.Revision;
}
if (name.KeyPair != null)
{

Просмотреть файл

@ -1075,6 +1075,9 @@ namespace IKVM.Reflection.Metadata
case ManifestResourceTable.Index:
records[i].Parent = (token & 0xFFFFFF) << 5 | 18;
break;
case GenericParamTable.Index:
records[i].Parent = (token & 0xFFFFFF) << 5 | 19;
break;
default:
throw new InvalidOperationException();
}
@ -1918,10 +1921,10 @@ namespace IKVM.Reflection.Metadata
internal struct Record
{
internal int HashAlgId;
internal short MajorVersion;
internal short MinorVersion;
internal short BuildNumber;
internal short RevisionNumber;
internal ushort MajorVersion;
internal ushort MinorVersion;
internal ushort BuildNumber;
internal ushort RevisionNumber;
internal int Flags;
internal int PublicKey;
internal int Name;
@ -1933,10 +1936,10 @@ namespace IKVM.Reflection.Metadata
for (int i = 0; i < records.Length; i++)
{
records[i].HashAlgId = mr.ReadInt32();
records[i].MajorVersion = mr.ReadInt16();
records[i].MinorVersion = mr.ReadInt16();
records[i].BuildNumber = mr.ReadInt16();
records[i].RevisionNumber = mr.ReadInt16();
records[i].MajorVersion = mr.ReadUInt16();
records[i].MinorVersion = mr.ReadUInt16();
records[i].BuildNumber = mr.ReadUInt16();
records[i].RevisionNumber = mr.ReadUInt16();
records[i].Flags = mr.ReadInt32();
records[i].PublicKey = mr.ReadBlobIndex();
records[i].Name = mr.ReadStringIndex();

Просмотреть файл

@ -44,6 +44,11 @@ namespace IKVM.Reflection.Reader
return br.ReadInt16();
}
internal ushort ReadUInt16()
{
return br.ReadUInt16();
}
internal int ReadInt32()
{
return br.ReadInt32();
@ -214,6 +219,8 @@ namespace IKVM.Reflection.Reader
return (ExportedTypeTable.Index << 24) + (codedIndex >> 5);
case 18:
return (ManifestResourceTable.Index << 24) + (codedIndex >> 5);
case 19:
return (GenericParamTable.Index << 24) + (codedIndex >> 5);
default:
throw new BadImageFormatException();
}