36 internal struct Record : IRecord
40 internal int Constraint;
42 readonly
int IRecord.FilterKey => Owner;
44 public readonly
int CompareTo(Record other) => Comparer<int>.Default.Compare(Owner, other.Owner);
48 internal const int Index = 0x2C;
50 internal override void Read(Reader.MetadataReader mr)
52 for (
int i = 0; i < records.Length; i++)
54 records[i].Owner = mr.ReadGenericParam();
55 records[i].Constraint = mr.ReadTypeDefOrRef();
59 internal override void Write(ModuleBuilder module)
61 for (
int i = 0; i < rowCount; i++)
63 var h = module.Metadata.AddGenericParameterConstraint(
64 (GenericParameterHandle)MetadataTokens.EntityHandle(records[i].Owner),
65 MetadataTokens.EntityHandle(records[i].Constraint));
67 Debug.Assert(h == MetadataTokens.GenericParameterConstraintHandle(i + 1));
71 internal void Fixup(ModuleBuilder moduleBuilder)
73 var fixups = moduleBuilder.GenericParamTable.GetIndexFixup();
74 for (
int i = 0; i < rowCount; i++)
75 records[i].Owner = MetadataTokens.GetToken(MetadataTokens.GenericParameterHandle(fixups[MetadataTokens.GetRowNumber(MetadataTokens.EntityHandle(records[i].Owner)) - 1] + 1));