private static TypeMap GetTypeMap(Symbol member) { var typeParameters = member.GetMemberTypeParameters(); return typeParameters.IsEmpty ? null : new TypeMap( typeParameters, IndexedTypeParameterSymbol.Take(member.GetMemberArity()), true); }
private static TypeMap GetTypeMap(Symbol member) { var typeParameters = member.GetMemberTypeParameters(); return(typeParameters.IsEmpty ? null : new TypeMap( nonNullTypesContext: member.OriginalDefinition, typeParameters, IndexedTypeParameterSymbol.Take(member.GetMemberArity()), true)); }
/// <summary> /// Returns true if the two partial methods have the same constraints. /// </summary> private static bool HaveSameConstraints(SourceMemberMethodSymbol part1, SourceMemberMethodSymbol part2) { Debug.Assert(!ReferenceEquals(part1, part2)); Debug.Assert(part1.Arity == part2.Arity); var typeParameters1 = part1.TypeParameters; int arity = typeParameters1.Length; if (arity == 0) { return(true); } var typeParameters2 = part2.TypeParameters; var indexedTypeParameters = IndexedTypeParameterSymbol.Take(arity); var typeMap1 = new TypeMap(typeParameters1, indexedTypeParameters, allowAlpha: true); var typeMap2 = new TypeMap(typeParameters2, indexedTypeParameters, allowAlpha: true); return(MemberSignatureComparer.HaveSameConstraints(typeParameters1, typeMap1, typeParameters2, typeMap2)); }
private static void GrowPool(int count) { var initialPool = s_parameterPool; while (count > initialPool.Length) { var newPoolSize = ((count + 0x0F) & ~0xF); // grow in increments of 16 var newPool = new TypeParameterSymbol[newPoolSize]; Array.Copy(initialPool, newPool, initialPool.Length); for (int i = initialPool.Length; i < newPool.Length; i++) { newPool[i] = new IndexedTypeParameterSymbol(i); } Interlocked.CompareExchange(ref s_parameterPool, newPool, initialPool); // repeat if race condition occurred and someone else resized the pool before us // and the new pool is still too small initialPool = s_parameterPool; } }
private static void GrowPool(int count) { var initialPool = parameterPool; while (count > initialPool.Length) { var newPoolSize = ((count + 0x0F) & ~0xF); // grow in increments of 16 var newPool = new TypeParameterSymbol[newPoolSize]; Array.Copy(initialPool, newPool, initialPool.Length); for (int i = initialPool.Length; i < newPool.Length; i++) { newPool[i] = new IndexedTypeParameterSymbol(i); } Interlocked.CompareExchange(ref parameterPool, newPool, initialPool); // repeat if race condition occurred and someone else resized the pool before us // and the new pool is still too small initialPool = parameterPool; } }