uint GetFieldReferenceInternedId(IFieldReference fieldReference) {
Contract.Requires(fieldReference != null);
uint containingTypeReferenceInternedId = this.GetTypeReferenceInternId(fieldReference.ContainingType);
uint fieldTypeInternedId;
if (fieldReference.IsModified)
fieldTypeInternedId = this.GetModifiedTypeReferenceInternId(fieldReference.Type, fieldReference.CustomModifiers);
else
fieldTypeInternedId = this.GetTypeReferenceInternId(fieldReference.Type);
uint fieldNameId = (uint)fieldReference.Name.UniqueKey;
var fieldsForType = this.FieldReferenceHashtable.Find(containingTypeReferenceInternedId);
if (fieldsForType == null) {
fieldsForType = new DoubleHashtable();
this.FieldReferenceHashtable.Add(containingTypeReferenceInternedId, fieldsForType);
}
uint result = fieldsForType.Find(fieldNameId, fieldTypeInternedId);
if (result == 0) {
result = this.CurrentFieldReferenceInternValue++;
fieldsForType.Add(fieldNameId, fieldTypeInternedId, result);
}
return result;
}