зеркало из https://github.com/mono/ikvm-fork.git
- 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:
Родитель
3841cc0e3f
Коммит
13ec0c138e
|
@ -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();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче