private static EnumInfo GetEnumInfo(RuntimeType enumType, bool getNames = true) { EnumInfo?entry = enumType.GenericCache as EnumInfo; if (entry == null || (getNames && entry.Names == null)) { ulong[]? values = null; string[]? names = null; RuntimeTypeHandle enumTypeHandle = enumType.GetTypeHandleInternal(); GetEnumValuesAndNames( JitHelpers.GetQCallTypeHandleOnStack(ref enumTypeHandle), JitHelpers.GetObjectHandleOnStack(ref values), JitHelpers.GetObjectHandleOnStack(ref names), getNames ? Interop.BOOL.TRUE : Interop.BOOL.FALSE); bool hasFlagsAttribute = enumType.IsDefined(typeof(FlagsAttribute), inherit: false); entry = new EnumInfo(hasFlagsAttribute, values !, names !); enumType.GenericCache = entry; } return(entry); }