37 internal struct Record : IRecord
41 internal int MethodBody;
42 internal int MethodDeclaration;
44 readonly
int IRecord.FilterKey =>
Class;
46 public readonly
int CompareTo(Record other) => Comparer<int>.Default.Compare(
Class, other.Class);
50 internal const int Index = 0x19;
52 internal override void Read(Reader.MetadataReader mr)
54 for (
int i = 0; i < records.Length; i++)
56 records[i].Class = mr.ReadTypeDef();
57 records[i].MethodBody = mr.ReadMethodDefOrRef();
58 records[i].MethodDeclaration = mr.ReadMethodDefOrRef();
62 internal override void Write(ModuleBuilder module)
64 for (
int i = 0; i < rowCount; i++)
66 var h = module.Metadata.AddMethodImplementation(
67 (TypeDefinitionHandle)MetadataTokens.EntityHandle(records[i].Class),
68 MetadataTokens.EntityHandle(records[i].MethodBody),
69 MetadataTokens.EntityHandle(records[i].MethodDeclaration));
71 Debug.Assert(h == MetadataTokens.MethodImplementationHandle(i + 1));
75 internal void Fixup(ModuleBuilder moduleBuilder)
77 for (
int i = 0; i < rowCount; i++)
79 moduleBuilder.FixupPseudoToken(
ref records[i].MethodBody);
80 moduleBuilder.FixupPseudoToken(
ref records[i].MethodDeclaration);