private unsafe void PopulateEvents(RuntimeType.RuntimeTypeCache.Filter filter, RuntimeTypeHandle declaringTypeHandle, Hashtable csEventInfos, List <RuntimeEventInfo> list) { int token = declaringTypeHandle.GetToken(); if (!MetadataToken.IsNullToken(token)) { MetadataImport metadataImport = declaringTypeHandle.GetModuleHandle().GetMetadataImport(); int count = metadataImport.EnumEventsCount(token); int * result = stackalloc int[count]; //result.AllocatedUntil = count metadataImport.EnumEvents(token, result, count); this.PopulateEvents(filter, declaringTypeHandle, metadataImport, result, count, csEventInfos, list); //Ensures that result.AllocatedUntil >= count! } }
private unsafe void PopulateEvents(RuntimeType.RuntimeTypeCache.Filter filter, RuntimeTypeHandle declaringTypeHandle, MetadataImport scope, int *tkAssociates, int cAssociates, Hashtable csEventInfos, List <RuntimeEventInfo> list) { //Require tkAssociates.AllocatedUntil >= cAssociates for (int i = 0; i < cAssociates; i++) { int mdToken = tkAssociates[i]; Utf8String name = scope.GetName(mdToken); if (filter.Match(name)) { bool flag; RuntimeEventInfo item = new RuntimeEventInfo(mdToken, declaringTypeHandle.GetRuntimeType(), this.m_runtimeTypeCache, out flag); if ((declaringTypeHandle.Equals(this.m_runtimeTypeCache.RuntimeTypeHandle) || !flag) && (csEventInfos[item.Name] == null)) { csEventInfos[item.Name] = item; list.Add(item); } } } }