in src/Microsoft.Diagnostics.Runtime/ClrField.cs [102:135]
private void InitData(bool forName)
{
if (!forName && _attributes != (int)FieldAttributes.ReservedMask)
return;
IAbstractMetadataReader? import = ContainingType.Module.MetadataReader;
if (import is null || !import.GetFieldDefInfo(Token, out FieldDefInfo info))
{
_attributes = 0;
return;
}
StringCaching options = ContainingType.Heap.Runtime.DataTarget.CacheOptions.CacheFieldNames;
if (info.Name != null)
{
if (options == StringCaching.Intern)
info.Name = string.Intern(info.Name);
if (options != StringCaching.None)
_name = info.Name;
}
if (_type is null)
{
SigParser sigParser = new(info.Signature, info.SignatureSize);
if (sigParser.GetCallingConvInfo(out int sigType) && sigType == SigParser.IMAGE_CEE_CS_CALLCONV_FIELD)
{
sigParser.SkipCustomModifiers();
_type = ContainingType.Heap.GetOrCreateTypeFromSignature(ContainingType.Module, sigParser, ContainingType.EnumerateGenericParameters(), Array.Empty<ClrGenericParameter>());
}
}
Interlocked.Exchange(ref _attributes, (int)info.Attributes);
}