MetadataReader metadataReader = _module.MetadataReader;
BlobReader metadataBlob = new BlobReader(_module.PEReader.GetMetadata().Pointer, _module.PEReader.GetMetadata().Length);
metadataBlob.Offset = metadataReader.GetTableMetadataOffset(TableIndex.FieldRva);
-
+ bool compressedFieldRef = 6 == metadataReader.GetTableRowSize(TableIndex.FieldRva);
+
for (int i = 1; i <= metadataReader.GetTableRowCount(TableIndex.FieldRva); i++)
{
int currentFieldRva = metadataBlob.ReadInt32();
- short currentFieldRid = metadataBlob.ReadInt16();
+ int currentFieldRid;
+ if (compressedFieldRef)
+ {
+ currentFieldRid = metadataBlob.ReadInt16();
+ }
+ else
+ {
+ currentFieldRid = metadataBlob.ReadInt32();
+ }
if (currentFieldRva != _rva)
continue;
MetadataReader metadataReader = _sourceModule.MetadataReader;
var tableIndex = TableIndex.FieldRva;
int rowCount = metadataReader.GetTableRowCount(tableIndex);
-
+ bool compressedFieldRef = 6 == metadataReader.GetTableRowSize(TableIndex.FieldRva);
+
for (int i = 1; i <= rowCount; i++)
{
Debug.Assert(builder.CountBytes == reader.Offset);
// Rva
reader.ReadInt32();
- short fieldToken = reader.ReadInt16();
+ int fieldToken;
+ if (compressedFieldRef)
+ {
+ fieldToken = reader.ReadInt16();
+ }
+ else
+ {
+ fieldToken = reader.ReadInt32();
+ }
EntityHandle fieldHandle = MetadataTokens.EntityHandle(TableIndex.Field, fieldToken);
EcmaField fieldDesc = (EcmaField)_sourceModule.GetField(fieldHandle);
Debug.Assert(fieldDesc.HasRva);
builder.EmitReloc(factory.CopiedFieldRva(fieldDesc), RelocType.IMAGE_REL_BASED_ADDR32NB);
- builder.EmitShort(fieldToken);
+ if (compressedFieldRef)
+ {
+ builder.EmitUShort((ushort)fieldToken);
+ }
+ else
+ {
+ builder.EmitUInt((uint)fieldToken);
+ }
}
}