Binder\Binder_Attributes.cs (19)
30ImmutableArray<Binder> binders, ImmutableArray<AttributeSyntax> attributesToBind, Symbol ownerSymbol, NamedTypeSymbol[] boundAttributeTypes,
55var boundTypeSymbol = (NamedTypeSymbol)boundType.Type;
74ImmutableArray<NamedTypeSymbol> boundAttributeTypes,
91NamedTypeSymbol boundAttributeType = boundAttributeTypes[i];
127AttributeSyntax node, NamedTypeSymbol boundAttributeType,
138internal BoundAttribute BindAttribute(AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
155private static BoundAttribute BindAttributeCore(Binder binder, AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
168NamedTypeSymbol attributeTypeForBinding = attributeType;
174if (errorType.CandidateSymbols.Length == 1 && errorType.CandidateSymbols[0] is NamedTypeSymbol)
176attributeTypeForBinding = (NamedTypeSymbol)errorType.CandidateSymbols[0];
284var attributeType = (NamedTypeSymbol)boundAttribute.Type;
411protected bool IsAttributeConditionallyOmitted(NamedTypeSymbol attributeType, SyntaxTree? syntaxTree, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
432var baseType = attributeType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
451NamedTypeSymbol attributeType,
514private BoundAssignmentOperator BindNamedAttributeArgument(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
592private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
607private TypeSymbol BindNamedAttributeArgumentType(AttributeArgumentSyntax namedArgument, Symbol namedArgumentNameSymbol, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
Binder\Binder_Conversions.cs (45)
114NamedTypeSymbol.ReportTupleNamesMismatchesIfAny(destination, sourceTuple, diagnostics);
200BindUnconvertedInterpolatedExpressionToHandlerType(source, (NamedTypeSymbol)destination, diagnostics),
537.AsMember((NamedTypeSymbol)destination)
538.Construct([((NamedTypeSymbol)source.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0]])
613var sourceElementType = ((NamedTypeSymbol)source).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
614var destinationElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
646((NamedTypeSymbol)parameter.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type.Equals(typeArgument.Type, TypeCompareKind.ConsiderEverything) &&
648((NamedTypeSymbol)method.ReturnType).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type.Equals(((NamedTypeSymbol)arg.destination).TypeParameters[0], TypeCompareKind.ConsiderEverything));
656Debug.Assert(((NamedTypeSymbol)readOnlySpanType).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].SpecialType is SpecialType.System_Char);
662TryFindSingleMethod(memoryExtensionsType.GetSymbol<NamedTypeSymbol>(), WellKnownMemberNames.AsSpanMethodName, 0,
713var stringFactory = GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_FormattableStringFactory, diagnostics, unconvertedSource.Syntax);
783return binder.BindClassCreationExpression(syntax, type.Name, typeNode: syntax, (NamedTypeSymbol)type, arguments, diagnostics, initializerOpt, wasTargetTyped: true);
787return binder.BindDelegateCreationExpression(syntax, (NamedTypeSymbol)type, arguments, initializerOpt, wasTargetTyped: true, diagnostics);
789return binder.BindInterfaceCreationExpression(syntax, (NamedTypeSymbol)type, diagnostics, typeNode: syntax, arguments, initializerOpt, wasTargetTyped: true);
855var namedType = (NamedTypeSymbol)targetType;
885if (targetType is NamedTypeSymbol namedType &&
886HasParamsCollectionTypeInProgress(namedType, out NamedTypeSymbol? inProgress, out MethodSymbol? inProgressConstructor))
1034NamedTypeSymbol namedType,
1042var targetTypeOriginalDefinition = namedType.OriginalDefinition;
1061var parameterType = (NamedTypeSymbol)collectionBuilderMethod.Parameters[0].Type;
1088if (targetType is NamedTypeSymbol namedType)
1116if (targetType is NamedTypeSymbol namedType)
1216private bool HasParamsCollectionTypeInProgress(NamedTypeSymbol toCheck,
1217[NotNullWhen(returnValue: true)] out NamedTypeSymbol? inProgress,
1243NamedTypeSymbol? namedType = targetType as NamedTypeSymbol;
1832NamedTypeSymbol targetType,
1851var readOnlySpanType = Compilation.GetWellKnownType(WellKnownType.System_ReadOnlySpan_T);
1893var spanTypeArg = ((NamedTypeSymbol)methodWithTargetTypeParameters.Parameters[0].Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
2170var delegateType = source.GetInferredDelegateType(ref useSiteInfo);
2221var boundLambda = unboundLambda.Bind((NamedTypeSymbol)destination, isExpressionTree: destination.IsGenericOrNonGenericExpressionType(out _)).WithInAnonymousFunctionConversion();
2310var delegateType = targetType.GetDelegateType();
2442NamedTypeSymbol targetType = (NamedTypeSymbol)destinationWithoutNullable;
2445NamedTypeSymbol.ReportTupleNamesMismatchesIfAny(targetType, sourceTuple, diagnostics);
2453if (sourceTuple.Type is NamedTypeSymbol { IsTupleType: true } sourceType)
2739var containingType = this.ContainingType;
2810Debug.Assert(delegateType is NamedTypeSymbol { TypeKind: TypeKind.Delegate, DelegateInvokeMethod: { HasUseSiteError: false } }
2816NamedTypeSymbol { DelegateInvokeMethod: { } invokeMethod } => invokeMethod,
3057NamedTypeSymbol delegateType,
3203var underlyingType = ((NamedTypeSymbol)destination).EnumUnderlyingType;
Binder\Binder_Expressions.cs (77)
56var containingType = memberOpt?.ContainingType;
230internal NamedTypeSymbol CreateErrorType(string name = "")
420var delegateType = expr.GetInferredDelegateType(ref useSiteInfo);
985var tupleType = NamedTypeSymbol.CreateTuple(
1063NamedTypeSymbol tupleTypeOpt = null;
1071tupleTypeOpt = NamedTypeSymbol.CreateTuple(node.Location, elements, locations, elementNames,
1077NamedTypeSymbol.VerifyTupleTypePresent(elements.Length, node, this.Compilation, diagnostics);
1211if (name == null || NamedTypeSymbol.IsTupleElementNameReserved(name) != -1)
1671symbol = ConstructNamedTypeUnlessTypeArgumentOmitted(node, (NamedTypeSymbol)symbol, typeArgumentList, typeArgumentsWithAnnotations, diagnostics);
1698var type = BindNativeIntegerSymbolIfAny(identifier, diagnostics);
1769if (symbol.ContainingSymbol is NamedTypeSymbol { OriginalDefinition: var symbolContainerDefinition } &&
1777NamedTypeSymbol baseToCheck = containingTypeDefinition.BaseTypeNoUseSiteDiagnostics;
1950var currentType = this.ContainingType;
1958var declaringType = members[0].ContainingType;
2138primaryCtor.ContainingSymbol is NamedTypeSymbol { IsRecord: false, IsRecordStruct: false } ||
2305var currentType = this.ContainingType;
2307NamedTypeSymbol declaringType = member.ContainingType;
2368private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType)
2519private BoundThisReference ThisReference(SyntaxNode node, NamedTypeSymbol thisTypeOpt, bool hasErrors = false, bool wasCompilerGenerated = false)
2619NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2699NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2726NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, operand);
2826!MethodGroupConversionDoesNotExistOrHasErrors((BoundMethodGroup)operand, (NamedTypeSymbol)targetType, syntax.Location, diagnostics, out _))
3679Debug.Assert(handlerType is NamedTypeSymbol { IsInterpolatedStringHandlerType: true });
3881(NamedTypeSymbol)handlerType,
4617var spanType = GetWellKnownType(WellKnownType.System_Span_T, diagnostics, node);
4838NamedTypeSymbol containingType = constructor.ContainingType;
4859NamedTypeSymbol initializerType = containingType;
4975NamedTypeSymbol initializerType,
4998NamedTypeSymbol baseType = constructor.ContainingType.BaseTypeNoUseSiteDiagnostics;
5117static void validateRecordCopyConstructor(MethodSymbol constructor, NamedTypeSymbol baseType, MethodSymbol resultMember, Location errorLocation, BindingDiagnosticBag diagnostics)
5219return BindClassCreationExpression(node, (NamedTypeSymbol)type, GetName(node.Type), diagnostics, originalType);
5222return BindDelegateCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
5225return BindInterfaceCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
5341private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
5350private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics)
5462var sourceDelegate = (NamedTypeSymbol)argument.Type;
5519private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null)
5554NamedTypeSymbol type,
6311NamedTypeSymbol collectionsIEnumerableType = this.GetSpecialType(SpecialType.System_Collections_IEnumerable, diagnostics, node);
6643NamedTypeSymbol containingType = this.ContainingType;
6677NamedTypeSymbol type,
6773NamedTypeSymbol type,
6858NamedTypeSymbol type,
6915private BoundObjectInitializerExpressionBase MakeBoundInitializerOpt(SyntaxNode typeNode, NamedTypeSymbol type, InitializerExpressionSyntax initializerSyntaxOpt, TypeSymbol initializerTypeOpt, BindingDiagnosticBag diagnostics)
6928private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
6937private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
6951NamedTypeSymbol coClassType = type.ComImportCoClass;
6963private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
7046NamedTypeSymbol interfaceType,
7047NamedTypeSymbol coClassType,
7156NamedTypeSymbol typeContainingConstructors,
7283private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
7289private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, bool allowProtectedConstructorsOfBaseType, out ImmutableArray<MethodSymbol> allInstanceConstructors, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
7296type = type.GetNonErrorGuess() as NamedTypeSymbol ?? type;
7303private static ConstantValue FoldParameterlessValueTypeConstructor(NamedTypeSymbol type)
7411var type = GetWellKnownType(WellKnownType.System_ReadOnlySpan_T, diagnostics, node).Construct(GetSpecialType(SpecialType.System_Byte, diagnostics, node));
7846var type = (NamedTypeSymbol)sym;
8262var namedType = ((NamedTypeSymbol)type).ConstructedFrom;
8474var type = (NamedTypeSymbol)symbol;
8862NamedTypeSymbol type = fieldSymbol.ContainingType;
8963NamedTypeSymbol enumType = null;
8983enumType = (NamedTypeSymbol)fieldType;
8988NamedTypeSymbol underlyingType = enumType.EnumUnderlyingType;
9007var containingType = this.ContainingType;
9712var int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
9784NamedTypeSymbol int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
10791internal NamedTypeSymbol? GetMethodGroupDelegateType(BoundMethodGroup node)
11172internal NamedTypeSymbol? GetMethodGroupOrLambdaDelegateType(
11231var delegateType = Compilation.GetWellKnownType(wkDelegateType);
11264static bool checkConstraints(CSharpCompilation compilation, ConversionsBase conversions, NamedTypeSymbol delegateType, ImmutableArray<TypeWithAnnotations> typeArguments)
Binder\Binder_InterpolatedString.cs (16)
41var stringType = GetSpecialType(SpecialType.System_String, diagnostics, node);
55var intType = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
264return BindUnconvertedInterpolatedExpressionToFactory(unconvertedInterpolatedString, parts, (NamedTypeSymbol)unconvertedInterpolatedString.Type, factoryMethod: "Format", unconvertedInterpolatedString.Type, diagnostics);
284var interpolatedStringHandlerType = Compilation.GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_DefaultInterpolatedStringHandler);
334NamedTypeSymbol factoryType,
450var interpolatedStringHandlerType = Compilation.GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_DefaultInterpolatedStringHandler);
517var @string = GetSpecialType(SpecialType.System_String, diagnostics, rootSyntax);
557NamedTypeSymbol interpolatedStringHandlerType,
576NamedTypeSymbol interpolatedStringHandlerType,
603NamedTypeSymbol interpolatedStringHandlerType,
635NamedTypeSymbol interpolatedStringHandlerType,
711var intType = GetSpecialType(SpecialType.System_Int32, diagnostics, syntax);
722var boolType = GetSpecialType(SpecialType.System_Boolean, diagnostics, syntax);
817static void populateArguments(SyntaxNode syntax, ImmutableArray<BoundInterpolatedStringArgumentPlaceholder> additionalConstructorArguments, int baseStringLength, int numFormatHoles, NamedTypeSymbol intType, ArrayBuilder<BoundExpression> argumentsBuilder)
853var objectType = GetSpecialType(SpecialType.System_Object, diagnostics, unconvertedInterpolatedString.Syntax);
998var expected = builderPatternExpectsBool == true ? Compilation.GetSpecialType(SpecialType.System_Boolean) : Compilation.GetSpecialType(SpecialType.System_Void);
Binder\Binder_Lookup.cs (72)
205var extensionDeclarations = ArrayBuilder<NamedTypeSymbol>.GetInstance();
208foreach (NamedTypeSymbol extensionDeclaration in extensionDeclarations)
262this.LookupMembersInInterface(result, (NamedTypeSymbol)type, name, arity, basesBeingResolved, options, originalBinder, diagnose, ref useSiteInfo);
753var namedType = (NamedTypeSymbol)symbol;
823internal virtual void GetExtensionDeclarations(ArrayBuilder<NamedTypeSymbol> extensions, Binder originalBinder)
877PooledHashSet<NamedTypeSymbol> visited = null;
887NamedTypeSymbol namedType = currentType as NamedTypeSymbol;
941NamedTypeSymbol type,
978NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
982foreach (var iface in type.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1023private void GetWellKnownWinRTMemberInterfaces(out NamedTypeSymbol idictSymbol, out NamedTypeSymbol iroDictSymbol, out NamedTypeSymbol iListSymbol, out NamedTypeSymbol iCollectionSymbol, out NamedTypeSymbol inccSymbol, out NamedTypeSymbol inpcSymbol)
1033private static bool ShouldAddWinRTMembersForInterface(NamedTypeSymbol iface, NamedTypeSymbol idictSymbol, NamedTypeSymbol iroDictSymbol, NamedTypeSymbol iListSymbol, NamedTypeSymbol iCollectionSymbol, NamedTypeSymbol inccSymbol, NamedTypeSymbol inpcSymbol)
1035var iFaceOriginal = iface.OriginalDefinition;
1080NamedTypeSymbol type,
1102private static ImmutableArray<NamedTypeSymbol> GetBaseInterfaces(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1111return ImmutableArray<NamedTypeSymbol>.Empty;
1118return ImmutableArray<NamedTypeSymbol>.Empty;
1134var cycleGuard = ConsList<NamedTypeSymbol>.Empty.Prepend(type.OriginalDefinition);
1138var result = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1139var visited = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.ConsiderEverything);
1148foreach (var candidate in result)
1155static void addAllInterfaces(NamedTypeSymbol @interface, HashSet<NamedTypeSymbol> visited, ArrayBuilder<NamedTypeSymbol> result, ConsList<TypeSymbol> basesBeingResolved, ConsList<NamedTypeSymbol> cycleGuard)
1157NamedTypeSymbol originalDefinition;
1163ImmutableArray<NamedTypeSymbol> baseInterfaces = @interface.GetDeclaredInterfaces(basesBeingResolved);
1170var baseInterface = baseInterfaces[i];
1183ImmutableArray<NamedTypeSymbol> interfaces,
1196HashSet<NamedTypeSymbol> seenInterfaces = null;
1199seenInterfaces = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.IgnoringNullable);
1202foreach (NamedTypeSymbol baseInterface in interfaces)
1216private void LookupMembersInInterface(LookupResult current, NamedTypeSymbol type, string name, int arity, ConsList<TypeSymbol> basesBeingResolved, LookupOptions options, Binder originalBinder, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1253private static bool IsDerivedType(NamedTypeSymbol baseType, NamedTypeSymbol derivedType, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1259for (NamedTypeSymbol b = derivedType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo); (object)b != null; b = b.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1266PooledHashSet<NamedTypeSymbol> visited = null;
1268for (var b = (NamedTypeSymbol)derivedType.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited);
1270b = (NamedTypeSymbol)b.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited))
1304var hiddenContainer = sym.ContainingType;
1310var hidingContainer = hidingSym.ContainingType;
1363return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1367return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers(name);
1391return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers();
1405while (symbol is not null and not NamedTypeSymbol { IsFileLocal: true })
1422var symbolFileIdentifier = ((NamedTypeSymbol)symbol).AssociatedFileIdentifier;
1842NamedTypeSymbol namedType = (NamedTypeSymbol)symbol;
2042private void AddWinRTMembersLookupSymbolsInfo(LookupSymbolsInfo result, NamedTypeSymbol type, LookupOptions options, Binder originalBinder, TypeSymbol accessThroughType)
2044NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
2048foreach (var iface in type.AllInterfacesNoUseSiteDiagnostics)
2059PooledHashSet<NamedTypeSymbol> visited = null;
2068NamedTypeSymbol namedType = type as NamedTypeSymbol;
2094foreach (var baseInterface in type.AllInterfacesNoUseSiteDiagnostics)
2110NamedTypeSymbol effectiveBaseClass = type.EffectiveBaseClassNoUseSiteDiagnostics;
2113foreach (var baseInterface in type.AllEffectiveInterfacesNoUseSiteDiagnostics)
Binder\Binder_Operators.cs (22)
577var extensionDeclarationsInSingleScope = ArrayBuilder<NamedTypeSymbol>.GetInstance();
621ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
1335return type is NamedTypeSymbol namedType && Compilation.IsReadOnlySpanType(namedType) &&
1555var booleanType = Compilation.GetSpecialType(SpecialType.System_Boolean);
1594var namedType = type as NamedTypeSymbol;
1683NamedTypeSymbol t = (NamedTypeSymbol)signature.Method.ContainingType;
1837var extensions = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1874ArrayBuilder<NamedTypeSymbol> extensions,
1901private bool HasApplicableBooleanOperator(NamedTypeSymbol containingType, string name, TypeSymbol argumentType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out MethodSymbol @operator)
1904for (var type = containingType; (object)type != null; type = type.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
2023var extensionDeclarationsInSingleScope = ArrayBuilder<NamedTypeSymbol>.GetInstance();
2311var extensionDeclarationsInSingleScope = ArrayBuilder<NamedTypeSymbol>.GetInstance();
3536var extensionDeclarationsInSingleScope = ArrayBuilder<NamedTypeSymbol>.GetInstance();
3581ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
3681ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
3722ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
3729foreach (NamedTypeSymbol extensionDeclaration in extensionDeclarationsInSingleScope)
4240var underlyingType = operand.Type.GetEnumUnderlyingType()!;
4247var upconvertType = upconvertSpecialType == underlyingType.SpecialType ?
5476var objectType = GetSpecialType(SpecialType.System_Object, diagnostics, node);
Binder\Binder_Patterns.cs (11)
225var systemRangeType = GetWellKnownType(WellKnownType.System_Range, diagnostics, node);
384var systemIndexType = GetWellKnownType(WellKnownType.System_Index, diagnostics, node);
1006ShouldUseITupleForRecursivePattern(node, declType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
1115var objectType = Compilation.GetSpecialType(SpecialType.System_Object);
1142var objectType = Compilation.GetSpecialType(SpecialType.System_Object);
1180foundField = CheckIsTupleElement(subpatternSyntax.NameColon.Name, (NamedTypeSymbol)declType, name, i, diagnostics);
1200[NotNullWhen(true)] out NamedTypeSymbol? iTupleType,
1238[NotNullWhen(true)] out NamedTypeSymbol? iTupleType,
1285bool hasBaseInterface(TypeSymbol type, NamedTypeSymbol possibleBaseInterface)
1297private static FieldSymbol? CheckIsTupleElement(SyntaxNode node, NamedTypeSymbol tupleType, string name, int tupleIndex, BindingDiagnosticBag diagnostics)
1402ShouldUseITuple(node, strippedInputType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
Binder\Binder_Symbols.cs (37)
563var type = (NamedTypeSymbol)constructedType.Type;
578var type = BindPredefinedTypeSymbol(predefinedType, diagnostics);
742return NamedTypeSymbol.CreateTuple(syntax.Location,
798int reserved = NamedTypeSymbol.IsTupleElementNameReserved(name);
817private NamedTypeSymbol BindPredefinedTypeSymbol(PredefinedTypeSyntax node, BindingDiagnosticBag diagnostics)
999private NamedTypeSymbol BindNativeIntegerSymbolIfAny(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
1217NamedTypeSymbol unconstructedType = LookupGenericTypeName(
1219NamedTypeSymbol resultType;
1267private NamedTypeSymbol LookupGenericTypeName(
1307NamedTypeSymbol type = lookupResultSymbol as NamedTypeSymbol;
1380private NamedTypeSymbol ConstructNamedTypeUnlessTypeArgumentOmitted(SyntaxNode typeSyntax, NamedTypeSymbol type, SeparatedSyntaxList<TypeSyntax> typeArgumentsSyntax, ImmutableArray<TypeWithAnnotations> typeArguments, BindingDiagnosticBag diagnostics)
1616private NamedTypeSymbol ConstructNamedType(
1617NamedTypeSymbol type,
1660((NamedTypeSymbol)left).IsUnboundGenericType;
1667left = ((NamedTypeSymbol)left).OriginalDefinition;
1686var namedTypeRight = right.Symbol as NamedTypeSymbol;
1697internal NamedTypeSymbol GetSpecialType(ExtendedSpecialType typeId, BindingDiagnosticBag diagnostics, SyntaxNode node)
1702internal static NamedTypeSymbol GetSpecialType(CSharpCompilation compilation, ExtendedSpecialType typeId, SyntaxNode node, BindingDiagnosticBag diagnostics)
1704NamedTypeSymbol typeSymbol = compilation.GetSpecialType(typeId);
1710internal static NamedTypeSymbol GetSpecialType(CSharpCompilation compilation, ExtendedSpecialType typeId, Location location, BindingDiagnosticBag diagnostics)
1712NamedTypeSymbol typeSymbol = compilation.GetSpecialType(typeId);
1816internal NamedTypeSymbol GetWellKnownType(WellKnownType type, BindingDiagnosticBag diagnostics, SyntaxNode node)
1825internal NamedTypeSymbol GetWellKnownType(WellKnownType type, BindingDiagnosticBag diagnostics, Location location)
1834internal static NamedTypeSymbol GetWellKnownType(CSharpCompilation compilation, WellKnownType type, BindingDiagnosticBag diagnostics, SyntaxNode node)
1839internal static NamedTypeSymbol GetWellKnownType(CSharpCompilation compilation, WellKnownType type, BindingDiagnosticBag diagnostics, Location location)
1841NamedTypeSymbol typeSymbol = compilation.GetWellKnownType(type);
1851internal NamedTypeSymbol GetWellKnownType(WellKnownType type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1853NamedTypeSymbol typeSymbol = this.Compilation.GetWellKnownType(type);
2250Compilation.IsAttributeType((NamedTypeSymbol)first) &&
2251Compilation.IsAttributeType((NamedTypeSymbol)second))
2314Emit.NoPia.EmbeddedTypesManager.IsValidEmbeddableType((NamedTypeSymbol)singleResult, where, diagnostics.DiagnosticBag);
2570if (symbol is NamedTypeSymbol { IsFileLocal: true })
2686var forwardedType =
Binder\ForEachLoopBinder.cs (14)
726nullableValueGetter = nullableValueGetter.AsMember((NamedTypeSymbol)collectionExprType);
850NamedTypeSymbol spanType = GetWellKnownType(wellKnownSpan, diagnostics, collectionExpr.Syntax);
1096NamedTypeSymbol collectionType = (NamedTypeSymbol)builder.CollectionType;
1156moveNextMethod = moveNextAsync.AsMember((NamedTypeSymbol)enumeratorType);
1168builder.CurrentPropertyGetter = currentPropertyGetter.AsMember((NamedTypeSymbol)enumeratorType);
1288NamedTypeSymbol targetInterface = isAsync ? this.Compilation.GetWellKnownType(WellKnownType.System_IAsyncDisposable) : this.Compilation.GetSpecialType(SpecialType.System_IDisposable);
1809NamedTypeSymbol implementedIEnumerable = GetIEnumerableOfT(type, isAsync, Compilation, ref useSiteInfo, out foundMultiple, out bool needSupportForRefStructInterfaces);
1818var implementedNonGeneric = this.Compilation.GetSpecialType(SpecialType.System_Collections_IEnumerable);
1838internal static NamedTypeSymbol GetIEnumerableOfT(
1842NamedTypeSymbol implementedIEnumerable = null;
1862private static void GetIEnumerableOfT(ImmutableArray<NamedTypeSymbol> interfaces, bool isAsync, CSharpCompilation compilation, ref NamedTypeSymbol result, ref bool foundMultiple)
1871foreach (NamedTypeSymbol @interface in interfaces)
Binder\InSubmissionClassBinder.cs (3)
26internal InSubmissionClassBinder(NamedTypeSymbol submissionClass, Binder next, CompilationUnitSyntax declarationSyntax, bool inUsings)
52this.LookupMembersInSubmissions(result, (NamedTypeSymbol)Container, _declarationSyntax, _inUsings, name, arity, basesBeingResolved, options, originalBinder, diagnose, ref useSiteInfo);
57this.AddMemberLookupSymbolsInfoInSubmissions(result, (NamedTypeSymbol)Container, _inUsings, options, originalBinder);
Binder\Semantics\AccessCheck.cs (41)
39NamedTypeSymbol within,
54NamedTypeSymbol within,
145Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
158return IsNamedTypeAccessible((NamedTypeSymbol)symbol, within, ref useSiteInfo, basesBeingResolved);
223private static bool IsNamedTypeAccessible(NamedTypeSymbol type, Symbol within, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
225Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
246var containingType = type.ContainingType;
261Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
281var withinType = within as NamedTypeSymbol;
298NamedTypeSymbol containingType, // the symbol's containing type
307Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
343NamedTypeSymbol containingType, // the symbol's containing type
354var originalContainingType = containingType.OriginalDefinition;
355var withinType = within as NamedTypeSymbol;
417NamedTypeSymbol withinType,
419NamedTypeSymbol originalContainingType,
460var current = withinType.OriginalDefinition;
495NamedTypeSymbol originalContainingType)
497Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
499var withinType = within as NamedTypeSymbol;
515NamedTypeSymbol withinType,
516NamedTypeSymbol originalContainingType)
524var current = withinType.OriginalDefinition;
546NamedTypeSymbol baseType,
554PooledHashSet<NamedTypeSymbol> interfacesLookedAt = null;
555ArrayBuilder<NamedTypeSymbol> baseInterfaces = null;
560interfacesLookedAt = PooledHashSet<NamedTypeSymbol>.GetInstance();
561baseInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
564PooledHashSet<NamedTypeSymbol> visited = null;
606NamedTypeSymbol currentBase = baseInterfaces.Pop();
625foreach (var candidate in interfacesLookedAt)
636static void getBaseInterfaces(TypeSymbol derived, ArrayBuilder<NamedTypeSymbol> baseInterfaces, PooledHashSet<NamedTypeSymbol> interfacesLookedAt, ConsList<TypeSymbol> basesBeingResolved)
643ImmutableArray<NamedTypeSymbol> declaredInterfaces;
651case NamedTypeSymbol namedType:
660foreach (var @interface in declaredInterfaces)
662NamedTypeSymbol definition = @interface.OriginalDefinition;
697internal static ErrorCode GetProtectedMemberInSealedTypeError(NamedTypeSymbol containingType)
Binder\Semantics\Conversions\ConversionsBase.cs (60)
960var d = derivedType as NamedTypeSymbol;
966foreach (var iface in d.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1150HasIdentityConversionInternal(((NamedTypeSymbol)destination.OriginalDefinition).Construct(ImmutableArray.Create(elementType)), destination))
1477var delegateType = (NamedTypeSymbol)type;
1586private static LambdaConversionResult IsAnonymousFunctionCompatibleWithExpressionTree(UnboundLambda anonymousFunction, NamedTypeSymbol type, CSharpCompilation compilation)
1619var multicastDelegateType = corLibrary.GetSpecialType(SpecialType.System_MulticastDelegate);
1635return IsAnonymousFunctionCompatibleWithExpressionTree(anonymousFunction, (NamedTypeSymbol)type, compilation);
1674else if ((destination as NamedTypeSymbol)?.HasCollectionBuilderAttribute(out _, out _) == true)
1701var specialType = compilation.GetSpecialType(specialInterface);
1708if (targetType is NamedTypeSymbol { Arity: 1 } namedType
1897private static bool HasIdentityConversionToAny(NamedTypeSymbol type, ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> targetTypes)
2578NamedTypeSymbol destinationAgg = (NamedTypeSymbol)destination;
2818var derivedType = this.corLibrary.GetDeclaredSpecialType(SpecialType.System_MulticastDelegate);
2830var sourceDelegate = sourceType.GetInternalDelegateType();
2836var destinationDelegate = destinationType.GetInternalDelegateType();
2917var effectiveBaseClass = source.EffectiveBaseClass(ref useSiteInfo);
2952foreach (var i in source.AllEffectiveInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
2977var d = derivedType as NamedTypeSymbol;
2983foreach (var i in d.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
2994internal bool ImplementsVarianceCompatibleInterface(NamedTypeSymbol derivedType, TypeSymbol baseType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2999internal bool HasImplicitConversionToOrImplementsVarianceCompatibleInterface(TypeSymbol typeToCheck, NamedTypeSymbol targetInterfaceType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool needSupportForRefStructInterfaces)
3019private bool IsRefLikeOrAllowsRefLikeTypeImplementingVarianceCompatibleInterface(TypeSymbol typeToCheck, NamedTypeSymbol targetInterfaceType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3033internal bool HasImplicitConversionToOrImplementsVarianceCompatibleInterface(BoundExpression expressionToCheck, NamedTypeSymbol targetInterfaceType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool needSupportForRefStructInterfaces)
3071NamedTypeSymbol? s = source as NamedTypeSymbol;
3072NamedTypeSymbol? d = destination as NamedTypeSymbol;
3090NamedTypeSymbol? s = source as NamedTypeSymbol;
3091NamedTypeSymbol? d = destination as NamedTypeSymbol;
3105private bool HasVariantConversion(NamedTypeSymbol source, NamedTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3136private ThreeState HasVariantConversionQuick(NamedTypeSymbol source, NamedTypeSymbol destination)
3146NamedTypeSymbol typeSymbol = source.OriginalDefinition;
3155private bool HasVariantConversionNoCycleCheck(NamedTypeSymbol source, NamedTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3234static bool isTypeIEquatable(NamedTypeSymbol type)
3549for (var type = t.EffectiveBaseClass(ref useSiteInfo); (object)type != null; type = type.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3601for (var type = t.EffectiveBaseClass(ref useSiteInfo); (object)type != null; type = type.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3667var sourceType = (NamedTypeSymbol)source;
3668var destinationType = (NamedTypeSymbol)destination;
3669var original = sourceType.OriginalDefinition;
3752foreach (var iface in this.corLibrary.GetDeclaredSpecialType(SpecialType.System_Array).AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3769if (HasExplicitReferenceConversion(sourceArray.ElementType, ((NamedTypeSymbol)destination).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo).Type, ref useSiteInfo))
3789var sourceElement = ((NamedTypeSymbol)source).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo).Type;
3964var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3971var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3981var sourceElementType = ((NamedTypeSymbol)source).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3982var destinationElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
3991var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
4027var spanElementType = ((NamedTypeSymbol)destination).TypeArgumentsWithDefinitionUseSiteDiagnostics(ref useSiteInfo)[0];
Binder\Semantics\Conversions\UserDefinedExplicitConversions.cs (7)
36var d = ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)>.GetInstance();
74private static void ComputeUserDefinedExplicitConversionTypeSet(TypeSymbol source, TypeSymbol target, ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> d, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
90ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> d,
102foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
117foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
128NamedTypeSymbol declaringType,
147NamedTypeSymbol declaringType,
Binder\Semantics\Conversions\UserDefinedImplicitConversions.cs (9)
80var d = ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)>.GetInstance();
118private static void ComputeUserDefinedImplicitConversionTypeSet(TypeSymbol s, TypeSymbol t, ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> d, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
146ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> d,
255foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
270foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
281NamedTypeSymbol declaringType,
885private NamedTypeSymbol MakeNullableType(TypeSymbol type)
887var nullable = this.corLibrary.GetDeclaredSpecialType(SpecialType.System_Nullable_T);
961var d = ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)>.GetInstance();
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (18)
235ImmutableArray<NamedTypeSymbol> interfaces = default;
244GetUserDefinedBinaryOperatorsFromType(constrainedToTypeOpt, (NamedTypeSymbol)operatorSourceOpt, kind, name1, name2Opt, operators);
267var shadowedInterfaces = PooledHashSet<NamedTypeSymbol>.GetInstance();
269foreach (NamedTypeSymbol @interface in interfaces)
487var underlying = enumType.GetEnumUnderlyingType();
491var nullableEnum = Compilation.GetOrCreateNullableType(enumType);
492var nullableUnderlying = Compilation.GetOrCreateNullableType(underlying);
540var boolean = Compilation.GetSpecialType(SpecialType.System_Boolean);
798var @object = Compilation.GetSpecialType(SpecialType.System_Object);
902NamedTypeSymbol current = type0 as NamedTypeSymbol;
949NamedTypeSymbol type,
989private static void GetDeclaredUserDefinedBinaryOperators(TypeSymbol? constrainedToTypeOpt, NamedTypeSymbol type, BinaryOperatorKind kind, string name, ArrayBuilder<BinaryOperatorSignature> operators)
1424ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
1464static void getDeclaredUserDefinedBinaryOperatorsInScope(ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope, BinaryOperatorKind kind, string name1, string? name2Opt, ArrayBuilder<BinaryOperatorSignature> operators)
1495static void getDeclaredUserDefinedBinaryOperators(ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope, BinaryOperatorKind kind, string name, ArrayBuilder<BinaryOperatorSignature> operators)
1497foreach (NamedTypeSymbol extensionDeclaration in extensionDeclarationsInSingleScope)
1516NamedTypeSymbol extension = method.ContainingType;
Binder\Semantics\Operators\UnaryOperatorOverloadResolution.cs (19)
19private NamedTypeSymbol MakeNullable(TypeSymbol type)
73ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope,
113static void getDeclaredUserDefinedUnaryOperatorsInScope(ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope, UnaryOperatorKind kind, string name1, string? name2Opt, ArrayBuilder<UnaryOperatorSignature> operators)
144static void getDeclaredUserDefinedUnaryOperators(ArrayBuilder<NamedTypeSymbol> extensionDeclarationsInSingleScope, UnaryOperatorKind kind, string name, ArrayBuilder<UnaryOperatorSignature> operators)
146foreach (NamedTypeSymbol extensionDeclaration in extensionDeclarationsInSingleScope)
165NamedTypeSymbol extension = method.ContainingType;
264var xExtension = x.OriginalDefinition.ContainingType;
266var yExtension = y.OriginalDefinition.ContainingType;
279private static NamedTypeSymbol Normalize(NamedTypeSymbol extension)
295var extension = op.OriginalDefinition.ContainingType;
569var nullableEnum = Compilation.GetOrCreateNullableType(enumType);
659NamedTypeSymbol current = type0 as NamedTypeSymbol;
687ImmutableArray<NamedTypeSymbol> interfaces = default;
699var shadowedInterfaces = PooledHashSet<NamedTypeSymbol>.GetInstance();
703foreach (NamedTypeSymbol @interface in interfaces)
758NamedTypeSymbol type,
798private static void GetDeclaredUserDefinedUnaryOperators(TypeSymbol? constrainedToTypeOpt, NamedTypeSymbol type, UnaryOperatorKind kind, string name, ArrayBuilder<UnaryOperatorSignature> operators)
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (66)
59private static readonly ObjectPool<PooledDictionary<NamedTypeSymbol, NamedTypeSymbol>> s_poolInstance
60= PooledDictionary<NamedTypeSymbol, NamedTypeSymbol>.CreatePool(Symbols.SymbolEqualityComparer.IgnoringNullable);
62internal static PooledDictionary<NamedTypeSymbol, NamedTypeSymbol> GetInstance()
135private readonly NamedTypeSymbol _constructedContainingTypeOfMethod;
177NamedTypeSymbol constructedContainingTypeOfMethod,
326NamedTypeSymbol constructedContainingTypeOfMethod,
731var destination = (NamedTypeSymbol)target.Type;
927var destination = (NamedTypeSymbol)formalType.Type;
1085NamedTypeSymbol n => n.DelegateInvokeMethod,
1408var delegateType = target.Type.GetDelegateType();
1466NamedTypeSymbol n => (n.DelegateInvokeMethod, false),
1569var delegateType = target.Type.GetDelegateType();
1767return ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0];
1807ExactOrBoundsInference(kind, ((NamedTypeSymbol)source.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0], ((NamedTypeSymbol)target.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0], ref useSiteInfo);
1865var namedSource = source.Type as NamedTypeSymbol;
1871var namedTarget = target.Type as NamedTypeSymbol;
1940private void ExactTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2108return ((NamedTypeSymbol)target).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo);
2197var constructedTarget = target as NamedTypeSymbol;
2217var constructedSource = source as NamedTypeSymbol;
2256private bool LowerBoundClassInference(TypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2278NamedTypeSymbol sourceBase = null;
2301private bool LowerBoundInterfaceInference(TypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2319ImmutableArray<NamedTypeSymbol> allInterfaces;
2342NamedTypeSymbol matchingInterface = GetInterfaceInferenceBound(allInterfaces, target);
2351internal static ImmutableArray<NamedTypeSymbol> ModuloReferenceTypeNullabilityDifferences(ImmutableArray<NamedTypeSymbol> interfaces, VarianceKind variance)
2355foreach (var @interface in interfaces)
2357if (dictionary.TryGetValue(@interface, out var found))
2359var merged = (NamedTypeSymbol)found.MergeEquivalentTypes(@interface, variance);
2373private void LowerBoundTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2600var constructedSource = source as NamedTypeSymbol;
2616var constructedTarget = target as NamedTypeSymbol;
2653private bool UpperBoundClassInference(NamedTypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2667var targetBase = target.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
2682private bool UpperBoundInterfaceInference(NamedTypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2708ImmutableArray<NamedTypeSymbol> allInterfaces = target.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
2713NamedTypeSymbol bestInterface = GetInterfaceInferenceBound(allInterfaces, source);
2723private void UpperBoundTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2989var resultType = functionType.GetInternalDelegateType();
2992var expressionOfTType = compilation.GetWellKnownType(WellKnownType.System_Linq_Expressions_Expression_T);
3061private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3116var fixedDelegate = (NamedTypeSymbol)GetFixedDelegateOrFunctionPointer(target);
3155private static NamedTypeSymbol GetInterfaceInferenceBound(ImmutableArray<NamedTypeSymbol> interfaces, NamedTypeSymbol target)
3158NamedTypeSymbol matchingInterface = null;
3159foreach (var currentInterface in interfaces)
3188NamedTypeSymbol extension,
Binder\Semantics\OverloadResolution\OverloadResolution.cs (36)
204members.All(static m => m.ContainingSymbol is NamedTypeSymbol { BaseTypeNoUseSiteDiagnostics.SpecialType: SpecialType.System_Object }));
370Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt = null;
715Debug.Assert(unmanagedCallingConventionTypes.All(u => FunctionPointerTypeSymbol.IsCallingConventionModifier((NamedTypeSymbol)u)));
900private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
902Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMap = new Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>>();
906NamedTypeSymbol containingType = member.ContainingType;
918private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
1063Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt,
1127NamedTypeSymbol memberContainingType = member.ContainingType;
1130NamedTypeSymbol otherType = pair.Key;
1439NamedTypeSymbol memberContainingType = member.ContainingType;
1442NamedTypeSymbol otherContainingType = otherMember.ContainingType;
1636var currentType = result.LeastOverriddenMember.ContainingType;
1649if (currentType.IsInterfaceType() && type.IsInterfaceType() && currentType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo).Contains((NamedTypeSymbol)type))
1705var type = result.LeastOverriddenMember.ContainingType;
1877var resultsByContainingType = PooledDictionary<NamedTypeSymbol, OneOrMany<TMemberResolution>>.GetInstance();
1893NamedTypeSymbol containingType = memberWithPriority.GetIsNewExtensionMember()
2825var n1 = t1 as NamedTypeSymbol;
2826var n2 = t2 as NamedTypeSymbol;
3267NamedTypeSymbol d;
3290y = ((NamedTypeSymbol)y).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3369var destination = (NamedTypeSymbol)targetType;
3530return BetterConversionTargetCore(((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
3531((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
3544NamedTypeSymbol d1;
3548NamedTypeSymbol d2;
3641var type1Element = ((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3642var type2Element = ((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3653private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType, Conversion conv)
3675NamedTypeSymbol d1;
3679NamedTypeSymbol d2;
4582&& parameters.ParameterTypes[argumentPosition].Type is NamedTypeSymbol { IsInterpolatedStringHandlerType: true, IsValueType: true })
BoundTree\UnboundLambda.cs (36)
146var delegateType = Type.GetDelegateType();
164internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol) =>
303NamedTypeSymbol? taskType = null;
304var delegateReturnType = delegateType?.GetDelegateType()?.DelegateInvokeMethod?.ReturnType as NamedTypeSymbol;
317var resultType = taskType?.Arity == 0 ?
332var taskTypeT = taskType?.Arity == 1 ?
449public BoundLambda Bind(NamedTypeSymbol delegateType, bool isExpressionTree)
455public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
484public TypeWithAnnotations InferReturnType(ConversionsBase conversions, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
525Constraint = "Avoid " + nameof(ConcurrentDictionary<(NamedTypeSymbol, bool), BoundLambda>) + " which has a large default size, but this cache is normally small.")]
526private ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>? _bindingCache;
542_bindingCache = ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>.Empty.WithComparers(BindingCacheComparer.Instance);
618public BoundLambda Bind(NamedTypeSymbol delegateType, bool isTargetExpressionTree)
654private static MethodSymbol? DelegateInvokeMethod(NamedTypeSymbol? delegateType)
718internal NamedTypeSymbol? InferDelegateType()
795private BoundLambda ReallyBind(NamedTypeSymbol delegateType, bool inExpressionTree)
918internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol)
952NamedTypeSymbol? delegateType,
1027public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
1048public readonly NamedTypeSymbol? TaskLikeReturnTypeOpt;
1052private ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations> parameterTypes, ImmutableArray<RefKind> parameterRefKinds, NamedTypeSymbol? taskLikeReturnTypeOpt)
1099public static ReturnInferenceCacheKey Create(NamedTypeSymbol? delegateType, bool isAsync)
1101GetFields(delegateType, isAsync, out var parameterTypes, out var parameterRefKinds, out var taskLikeReturnTypeOpt);
1110NamedTypeSymbol? delegateType,
1114out NamedTypeSymbol? taskLikeReturnTypeOpt)
1142var delegateReturnType = invoke.ReturnType as NamedTypeSymbol;
1211var delegateType = (NamedTypeSymbol?)lambda.Type;
1218NamedTypeSymbol? delegateType,
1232var t = (inferredReturnType.HadExpressionlessReturn || inferredReturnType.NumExpressions == 0)
1435private sealed class BindingCacheComparer : IEqualityComparer<(NamedTypeSymbol Type, bool IsExpressionTree)>
1439public bool Equals([AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) x, [AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) y)
1442public int GetHashCode([DisallowNull] (NamedTypeSymbol Type, bool IsExpressionTree) obj)
CodeGen\EmitArrayInitializer.cs (4)
397private bool TryEmitOptimizedReadonlySpanCreation(NamedTypeSymbol spanType, BoundExpression wrappedExpression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace, BoundExpression? start = null, BoundExpression? length = null)
630bool tryEmitAsCachedArrayFromBlob(NamedTypeSymbol spanType, BoundExpression wrappedExpression, int elementCount, ImmutableArray<byte> data, ref ArrayTypeSymbol arrayType, TypeSymbol elementType)
680bool tryEmitAsCachedArrayOfConstants(BoundArrayCreation arrayCreation, ArrayTypeSymbol arrayType, TypeSymbol elementType, NamedTypeSymbol spanType, bool used, BoundExpression? inPlaceTarget, out bool avoidInPlace)
754void emitEmptyReadonlySpan(NamedTypeSymbol spanType, BoundExpression wrappedExpression, bool used, BoundExpression? inPlaceTarget)
Compilation\AttributeSemanticModel.cs (5)
23NamedTypeSymbol attributeType,
39public static AttributeSemanticModel Create(PublicSemanticModel containingSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Symbol? attributeTarget, Binder rootBinder, ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
48public static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt, int position)
53private NamedTypeSymbol AttributeType
57return (NamedTypeSymbol)MemberSymbol;
Compilation\CSharpCompilation.cs (27)
59private NamedTypeSymbol? _lazyScriptClass = ErrorTypeSymbol.UnknownResultType;
150private ConcurrentCache<TypeSymbol, NamedTypeSymbol>? _lazyTypeToNullableVersion;
1570internal new NamedTypeSymbol? ScriptClass
1697internal NamedTypeSymbol GetSpecialType(ExtendedSpecialType specialType)
1704NamedTypeSymbol result;
1719private ConcurrentCache<TypeSymbol, NamedTypeSymbol> TypeToNullableVersion
1723return InterlockedOperations.Initialize(ref _lazyTypeToNullableVersion, static () => new ConcurrentCache<TypeSymbol, NamedTypeSymbol>(size: 100));
1734internal NamedTypeSymbol GetOrCreateNullableType(TypeSymbol typeArgument)
1742if (!typeToNullableVersion.TryGetValue(typeArgument, out var constructedNullableInstance))
1858internal new NamedTypeSymbol? GetTypeByMetadataName(string fullyQualifiedMetadataName)
1860var result = this.Assembly.GetTypeByMetadataName(fullyQualifiedMetadataName, includeReferences: true, isWellKnownType: false, conflicts: out var _);
1880internal new NamedTypeSymbol ObjectType
1954NamedTypeSymbol? mainType;
1958var scriptClass = this.ScriptClass;
1984mainType = mainTypeOrNamespace as NamedTypeSymbol;
2228if (!(method.ReturnType is NamedTypeSymbol namedType))
2464AccessCheck.IsSymbolAccessible(symbol0, (NamedTypeSymbol)within0, ref discardedUseSiteInfo, throughType0);
3690case NamedTypeSymbol namedType:
3697public override void VisitNamedType(NamedTypeSymbol symbol)
4207var internalType = type.EnsureCSharpSymbolOrNull($"{nameof(callingConventionTypes)}[{index}]");
4222internal new NamedTypeSymbol CreateNativeIntegerTypeSymbol(bool signed)
4242return NamedTypeSymbol.CreateTuple(
4259NamedTypeSymbol csharpUnderlyingTuple = underlyingType.EnsureCSharpSymbolOrNull(nameof(underlyingType));
4270var tupleType = NamedTypeSymbol.CreateTuple(
4538=> IsReadOnlySpanType(type) && ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].SpecialType == SpecialType.System_Byte;
4776var typeSymbol = GetSpecialType(type);
Compilation\CSharpSemanticModel.cs (19)
416NamedTypeSymbol attributeType = (NamedTypeSymbol)binder.BindType(attribute.Name, BindingDiagnosticBag.Discarded, out aliasOpt).Type;
1598if ((object)containingType != null && containingType.Kind == SymbolKind.NamedType && ((NamedTypeSymbol)containingType).IsScriptClass)
2783var attributeType = (NamedTypeSymbol)binder.BindType(attribute.Name, BindingDiagnosticBag.Discarded, out aliasOpt).Type;
3602var namedType = (NamedTypeSymbol)attribute.Type;
3611if (candidateSymbols.Length == 1 && candidateSymbols[0] is NamedTypeSymbol)
3613namedType = (NamedTypeSymbol)candidateSymbols[0];
3694NamedTypeSymbol containingType = binder.ContainingType;
3742private static ParameterSymbol GetThisParameter(TypeSymbol typeOfThis, NamedTypeSymbol containingType, Symbol containingMember, out LookupResultKind resultKind)
3876var objectType = binaryOperator.Type.ContainingAssembly.GetSpecialType(SpecialType.System_Object);
3981NamedTypeSymbol typeSymbol = null;
4002typeSymbol = (NamedTypeSymbol)unwrappedSymbols[0];
4013typeSymbol = unwrappedSymbols[0] as NamedTypeSymbol;
4027NamedTypeSymbol typeSymbolOpt,
5162return (GetSymbolInfo(tupleTypeSyntax, cancellationToken).Symbol.GetSymbol() as NamedTypeSymbol)?.TupleElements.ElementAtOrDefault(tupleTypeSyntax.Elements.IndexOf(declarationSyntax)).GetPublicSymbol();
5184typeDeclaration, namedType.GetSymbol<NamedTypeSymbol>());
5240protected static SynthesizedPrimaryConstructor TryGetSynthesizedPrimaryConstructor(TypeDeclarationSyntax node, NamedTypeSymbol type)
Emitter\Model\PEModuleBuilder.cs (61)
26internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
48private Dictionary<FieldSymbol, NamedTypeSymbol> _fixedImplementationTypes;
211internal sealed override IEnumerable<Cci.INestedTypeDefinition> GetSynthesizedNestedTypes(NamedTypeSymbol container)
385if (!((NamedTypeSymbol)member).IsExtension) // Tracked by https://github.com/dotnet/roslyn/issues/78963 : Figure out what to do about extensions, if anything
498internal virtual NamedTypeSymbol GetDynamicOperationContextType(NamedTypeSymbol contextType)
568yield return ((NamedTypeSymbol)member).GetCciAdapter();
597member is not NamedTypeSymbol { IsExtension: true }) // https://github.com/dotnet/roslyn/issues/78963 - This is a temporary handling, we should get grouping and marker types processed instead.
649internal static HashSet<NamedTypeSymbol> GetForwardedTypes(SourceAssemblySymbol sourceAssembly, ArrayBuilder<Cci.ExportedType>? builder)
651var seenTopLevelForwardedTypes = new HashSet<NamedTypeSymbol>();
666var exportedNamesMap = new Dictionary<string, NamedTypeSymbol>(StringOrdinalComparer.Instance);
670var type = (NamedTypeSymbol)exportedType.Type.GetInternalSymbol();
699NamedTypeSymbol contender;
731HashSet<NamedTypeSymbol> seenTopLevelTypes,
732CommonAssemblyWellKnownAttributeData<NamedTypeSymbol> wellKnownAttributeData,
738var stack = ArrayBuilder<(NamedTypeSymbol type, int parentIndex)>.GetInstance();
741IEnumerable<NamedTypeSymbol> orderedForwardedTypes = wellKnownAttributeData.ForwardedTypes;
748foreach (NamedTypeSymbol forwardedType in orderedForwardedTypes)
750NamedTypeSymbol originalDefinition = forwardedType.OriginalDefinition;
783ImmutableArray<NamedTypeSymbol> nested = type.GetTypeMembers(); // Ordered.
813private NamedTypeSymbol GetUntranslatedSpecialType(SpecialType specialType, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
817var typeSymbol = SourceModule.ContainingAssembly.GetSpecialType(specialType);
845var namedType = typeRef.GetInternalSymbol() as NamedTypeSymbol;
954NamedTypeSymbol namedTypeSymbol,
1015NamedTypeSymbol container = namedTypeSymbol.ContainingType;
1059else if (namedTypeSymbol.NativeIntegerUnderlyingType is NamedTypeSymbol underlyingType)
1076private void CheckTupleUnderlyingType(NamedTypeSymbol namedTypeSymbol, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
1082var declaredBase = namedTypeSymbol.BaseTypeNoUseSiteDiagnostics;
1111public static bool IsGenericType(NamedTypeSymbol toCheck)
1151return Translate((NamedTypeSymbol)typeSymbol, syntaxNodeOpt, diagnostics);
1249NamedTypeSymbol container = methodSymbol.ContainingType;
1323NamedTypeSymbol container = methodSymbol.ContainingType;
1462public NamedTypeSymbol SetFixedImplementationType(SourceMemberFieldSymbol field)
1466Interlocked.CompareExchange(ref _fixedImplementationTypes, new Dictionary<FieldSymbol, NamedTypeSymbol>(), null);
1471NamedTypeSymbol result;
1588NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1609NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1672NamedTypeSymbol booleanType = Compilation.GetSpecialType(SpecialType.System_Boolean);
1927internal MethodSymbol EnsureInlineArrayAsSpanExists(SyntaxNode syntaxNode, NamedTypeSymbol spanType, NamedTypeSymbol intType, DiagnosticBag diagnostics)
1944internal NamedTypeSymbol EnsureInlineArrayTypeExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, int arrayLength, DiagnosticBag diagnostics)
1964return (NamedTypeSymbol)typeAdapter.GetInternalSymbol()!;
1967internal NamedTypeSymbol EnsureReadOnlyListTypeExists(SyntaxNode syntaxNode, SynthesizedReadOnlyListKind kind, DiagnosticBag diagnostics)
1975NamedTypeSymbol typeSymbol;
1985typeSymbol = (NamedTypeSymbol)typeAdapter.GetInternalSymbol()!;
1996internal MethodSymbol EnsureInlineArrayAsReadOnlySpanExists(SyntaxNode syntaxNode, NamedTypeSymbol spanType, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2013internal MethodSymbol EnsureInlineArrayElementRefExists(SyntaxNode syntaxNode, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2029internal MethodSymbol EnsureInlineArrayElementRefReadOnlyExists(SyntaxNode syntaxNode, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2091public sealed override ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(DiagnosticBag diagnostics)
2102internal virtual ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(BindingDiagnosticBag diagnostics)
2117public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.INestedTypeDefinition nestedType)
2119Debug.Assert(container is not NamedTypeSymbol { IsExtension: true } || nestedType.GetInternalSymbol() is FixedFieldImplementationType);
2123public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IFieldDefinition field)
2125Debug.Assert(container is not NamedTypeSymbol { IsExtension: true });
2129public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IMethodDefinition method)
2131Debug.Assert(container is not NamedTypeSymbol { IsExtension: true });
2135public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IPropertyDefinition property)
2137Debug.Assert(container is not NamedTypeSymbol { IsExtension: true });
FlowAnalysis\EmptyStructTypeCache.cs (18)
20private SmallDictionary<NamedTypeSymbol, bool> _cache;
29private SmallDictionary<NamedTypeSymbol, bool> Cache
33return _cache ?? (_cache = new SmallDictionary<NamedTypeSymbol, bool>(Symbols.SymbolEqualityComparer.ConsiderEverything));
81return IsEmptyStructType(type, ConsList<NamedTypeSymbol>.Empty);
89private bool IsEmptyStructType(TypeSymbol type, ConsList<NamedTypeSymbol> typesWithMembersOfThisType)
91var nts = type as NamedTypeSymbol;
111private bool CheckStruct(ConsList<NamedTypeSymbol> typesWithMembersOfThisType, NamedTypeSymbol nts)
117typesWithMembersOfThisType = new ConsList<NamedTypeSymbol>(nts, typesWithMembersOfThisType);
127var nts = type.OriginalDefinition as NamedTypeSymbol;
135private bool CheckStructInstanceFields(ConsList<NamedTypeSymbol> typesWithMembersOfThisType, NamedTypeSymbol type)
165var nts = type as NamedTypeSymbol;
174public IEnumerable<FieldSymbol> GetStructFields(NamedTypeSymbol type, bool includeStatic)
192private FieldSymbol GetActualField(Symbol member, NamedTypeSymbol type)
FlowAnalysis\NullableWalker.cs (79)
925static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
1182var type = method.ContainingType;
1943if (node is BoundLambda boundLambda && originalSymbol is LambdaSymbol l && updatedSymbol is NamedTypeSymbol n)
3167type = ((NamedTypeSymbol)returnType.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics.Single();
3748return type.IsErrorType() || type.IsDynamic() || type.HasUseSiteError || (type.IsAnonymousType && canIgnoreAnonymousType((NamedTypeSymbol)type));
3750static bool canIgnoreAnonymousType(NamedTypeSymbol type)
3766(LambdaSymbol l, NamedTypeSymbol n) _ when n.IsDelegateType() => AreLambdaAndNewDelegateSimilar(l, n),
3774private static bool AreLambdaAndNewDelegateSimilar(LambdaSymbol l, NamedTypeSymbol n)
4195var containingType = constructor?.ContainingType;
4665var members = ((NamedTypeSymbol)type).GetMembersUnordered();
4712var anonymousType = (NamedTypeSymbol)node.Type;
4800NamedTypeSymbol spanType => getSpanElementType(spanType),
4877NamedTypeSymbol spanType => setSpanElementType(spanType, inferredType),
4885static TypeWithAnnotations getSpanElementType(NamedTypeSymbol namedType)
4892static TypeSymbol setSpanElementType(NamedTypeSymbol namedType, TypeWithAnnotations elementType)
5052type = TypeWithAnnotations.Create(((NamedTypeSymbol)node.Type).OriginalDefinition.Construct(ImmutableArray.Create(type)));
5397NamedTypeSymbol extension = method.OriginalDefinition.ContainingType;
5759var containingType = this._symbol?.ContainingType;
5780for (NamedTypeSymbol baseType = effectiveBase(type); !(baseType is null); baseType = baseType.BaseTypeNoUseSiteDiagnostics)
5785foreach (NamedTypeSymbol interfaceType in inheritedInterfaces(type))
5791static NamedTypeSymbol effectiveBase(TypeSymbol type) => type switch
5797static ImmutableArray<NamedTypeSymbol> inheritedInterfaces(TypeSymbol type) => type switch
5801_ => ImmutableArray<NamedTypeSymbol>.Empty,
6787var wellKnownType = wellKnownMethod.ContainingType;
6789var constructedType = wellKnownType.Construct(ImmutableArray.Create(parameterType));
7602var type = method.ContainingType;
8498private void CheckExtensionConstraints(SyntaxNode syntax, NamedTypeSymbol extension)
8670var containingType = type as NamedTypeSymbol;
8690var symbolContainer = symbol.ContainingType;
8715foreach (var @interface in containingType.AllInterfacesNoUseSiteDiagnostics)
8742bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
8921var tupleOpt = (NamedTypeSymbol?)node.Type;
8960NamedTypeSymbol tupleType,
8968Debug.Assert(values.Length == (useRestField ? Math.Min(tupleType.TupleElements.Length, NamedTypeSymbol.ValueTupleRestPosition) : tupleType.TupleElements.Length));
8976n = Math.Min(n, NamedTypeSymbol.ValueTupleRestPosition - 1);
8984values.Length == NamedTypeSymbol.ValueTupleRestPosition &&
8985tupleType.GetMembers(NamedTypeSymbol.ValueTupleRestFieldName).FirstOrDefault() is FieldSymbol restField)
8987var argOrdinal = getArgumentOrdinalFromParameterOrdinal(NamedTypeSymbol.ValueTupleRestPosition - 1);
9035var valueTuple = operandType as NamedTypeSymbol;
9042var targetElements = ((NamedTypeSymbol)targetType).TupleElements;
9166private void ReportNullabilityMismatchWithTargetDelegate(Location location, NamedTypeSymbol delegateType, BoundLambda lambda)
9362NamedTypeSymbol { TypeKind: TypeKind.Delegate, DelegateInvokeMethod: { Parameters: { } parameters } signature } => (signature, parameters),
9371var delegateType = targetType.GetDelegateType();
10106Action<NamedTypeSymbol>? analysisCompletion;
10108var delegateType = (NamedTypeSymbol)node.Type;
10136TypeWithState setAnalyzedNullability(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, Action<NamedTypeSymbol>? analysisCompletion, bool isTargetTyped)
10153void setAnalyzedNullabilityAsContinuation(BoundDelegateCreationExpression node, Action<NamedTypeSymbol>? analysisCompletion)
10159var delegateType = (NamedTypeSymbol)resultTypeWithAnnotations.Type;
10167Action<NamedTypeSymbol>? visitMethodGroupArgument(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group)
10175Action<NamedTypeSymbol>? analyzeMethodGroupConversion(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group, bool isTargetTyped)
10196Action<NamedTypeSymbol>? analyzeMethodGroupConversionAsContinuation(BoundDelegateCreationExpression node, BoundMethodGroup group)
10198return (NamedTypeSymbol delegateType) =>
10204Action<NamedTypeSymbol>? visitLambdaArgument(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10211Action<NamedTypeSymbol>? analyzeLambdaConversion(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10228Action<NamedTypeSymbol> analyzeLambdaConversionAsContinuation(BoundLambda lambda)
10230return (NamedTypeSymbol delegateType) => analyzeLambdaConversion(delegateType, lambda, isTargetTyped: false);
10233Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
10247Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
10267Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg)
10269return (NamedTypeSymbol delegateType) => analyzeDelegateConversion(delegateType, arg, isTargetTyped: false);
10382private void VisitLambda(BoundLambda node, NamedTypeSymbol? delegateTypeOpt, Optional<LocalState> initialState = default)
10936if (expr.Type is NamedTypeSymbol { IsTupleType: true } tupleType)
11539valueProperty = getValue?.AsMember((NamedTypeSymbol)containingType)?.AssociatedSymbol;
11716NamedTypeSymbol spanType = compilation.GetWellKnownType(wellKnownSpan);
12021NamedTypeSymbol extension = method.OriginalDefinition.ContainingType;
12262var reinferredGetResult = _visitResult.RValueType.Type is NamedTypeSymbol taskAwaiterType
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (28)
71var immutableArrayOfTargetCollectionTypeEmpty = immutableArrayOfTEmpty.AsMember((NamedTypeSymbol)node.Type);
202var iCollectionOfTType = _compilation.GetSpecialType(SpecialType.System_Collections_Generic_ICollection_T);
203var iCollectionOfElementType = iCollectionOfTType.Construct(((NamedTypeSymbol)targetEnumerableType).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics);
223Elements: [BoundCollectionExpressionSpreadElement { Expression: { Type: NamedTypeSymbol spreadType } expr }],
260var spanType = (NamedTypeSymbol)collectionType;
318var listToArray = ((MethodSymbol)_factory.WellKnownMember(WellKnownMember.System_Collections_Generic_List_T__ToArray)).AsMember((NamedTypeSymbol)list.Type);
398Debug.Assert(node.Type is NamedTypeSymbol);
403var collectionType = (NamedTypeSymbol)node.Type;
430var synthesizedType = _factory.ModuleBuilderOpt.EnsureReadOnlyListTypeExists(syntax, kind: kind, _diagnostics.DiagnosticBag).Construct(typeArgs);
479var spanType = (NamedTypeSymbol)constructMethod.Parameters[0].Type;
559var spanType = _factory
570var inlineArrayType = _factory.ModuleBuilderOpt.EnsureInlineArrayTypeExists(syntax, _factory, arrayLength, _diagnostics.DiagnosticBag).Construct(ImmutableArray.Create(elementType));
573var intType = _factory.SpecialType(SpecialType.System_Int32);
670return _factory.Call(rewrittenSpreadExpression, listToArrayMethod.AsMember((NamedTypeSymbol)spreadExpression.Type!));
694return _factory.Call(rewrittenSpreadExpression, toArrayMethod.AsMember((NamedTypeSymbol)rewrittenSpreadExpression.Type!));
860var spanOfElementType = spanCtorArray.ContainingType.Construct(arrayType.ElementType);
868if (type is not NamedTypeSymbol namedType)
1008var spreadLength = _factory.Call(spreadOperandAsSpan, getLengthMethod.AsMember((NamedTypeSymbol)spreadOperandAsSpan.Type!));
1009var targetSlice = _factory.Call(spanTemp, spanSliceMethod.AsMember((NamedTypeSymbol)spanTemp.Type!), indexTemp, spreadLength);
1010sideEffects.Add(_factory.Call(spreadOperandAsSpan, copyToMethod.AsMember((NamedTypeSymbol)spreadOperandAsSpan.Type!), targetSlice));
1025var collectionType = _factory.WellKnownType(WellKnownType.System_Collections_Generic_List_T).Construct(typeArguments);
1107var spanGetItem = ((MethodSymbol)_factory.WellKnownMember(WellKnownMember.System_Span_T__get_Item)).AsMember((NamedTypeSymbol)spanTemp.Type);
1124Debug.Assert(spanTemp.Type is NamedTypeSymbol);
1128var elementType = ((NamedTypeSymbol)spanTemp.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
Lowering\LocalRewriter\LocalRewriter_TupleCreationExpression.cs (15)
40return MakeTupleCreationExpression(node.Syntax, (NamedTypeSymbol)node.Type, rewrittenArguments);
43private BoundExpression MakeTupleCreationExpression(SyntaxNode syntax, NamedTypeSymbol type, ImmutableArray<BoundExpression> rewrittenArguments)
47ArrayBuilder<NamedTypeSymbol> underlyingTupleTypeChain = ArrayBuilder<NamedTypeSymbol>.GetInstance();
48NamedTypeSymbol.GetUnderlyingTypeChain(type, underlyingTupleTypeChain);
53NamedTypeSymbol smallestType = underlyingTupleTypeChain.Pop();
55underlyingTupleTypeChain.Count * (NamedTypeSymbol.ValueTupleRestPosition - 1),
57var smallestCtor = (MethodSymbol?)NamedTypeSymbol.GetWellKnownMemberInType(smallestType.OriginalDefinition,
58NamedTypeSymbol.GetTupleCtor(smallestType.Arity),
73NamedTypeSymbol tuple8Type = underlyingTupleTypeChain.Peek();
74var tuple8Ctor = (MethodSymbol?)NamedTypeSymbol.GetWellKnownMemberInType(tuple8Type.OriginalDefinition,
75NamedTypeSymbol.GetTupleCtor(NamedTypeSymbol.ValueTupleRestPosition),
89(underlyingTupleTypeChain.Count - 1) * (NamedTypeSymbol.ValueTupleRestPosition - 1),
90NamedTypeSymbol.ValueTupleRestPosition - 1)
Lowering\StateMachineRewriter\CapturedSymbol.cs (6)
26public abstract BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg);
39public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg)
42var field = this.HoistedField.AsMember((NamedTypeSymbol)frame.Type);
57public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg)
60var field = this.HoistedField.AsMember((NamedTypeSymbol)frame.Type);
77public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg)
Lowering\StateMachineRewriter\StateMachineFieldSymbol.cs (5)
32public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, bool isPublic, bool isThis)
38public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeSymbol type, string name, SynthesizedLocalKind synthesizedKind, int slotIndex, bool isPublic)
43public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeSymbol type, string name, LocalSlotDebugInfo slotDebugInfo, int slotIndex, bool isPublic) :
48public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, LocalSlotDebugInfo slotDebugInfo, int slotIndex, bool isPublic)
93public StateMachineFieldSymbolForRegularParameter(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, ParameterSymbol parameter, bool isPublic)
Lowering\SyntheticBoundNodeFactory.cs (19)
52private NamedTypeSymbol? _currentType;
53public NamedTypeSymbol? CurrentType
114public SyntheticBoundNodeFactory(MethodSymbol? topLevelMethodOpt, NamedTypeSymbol? currentClassOpt, SyntaxNode node, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, InstrumentationState? instrumentationState = null)
147public void AddNestedType(NamedTypeSymbol nestedType)
154public void OpenNestedType(NamedTypeSymbol nestedType)
210public void AddField(NamedTypeSymbol containingType, FieldSymbol field)
233public BoundBaseReference Base(NamedTypeSymbol baseType)
296public NamedTypeSymbol SpecialType(SpecialType st)
298NamedTypeSymbol specialType = Compilation.GetSpecialType(st);
308public NamedTypeSymbol WellKnownType(WellKnownType wt)
310NamedTypeSymbol wellKnownType = Compilation.GetWellKnownType(wt);
687var objectType = SpecialType(Microsoft.CodeAnalysis.SpecialType.System_Object);
744public BoundObjectCreationExpression New(NamedTypeSymbol type, params BoundExpression[] args)
753public BoundObjectCreationExpression New(NamedTypeSymbol type, ImmutableArray<BoundExpression> args)
1205NamedTypeSymbol baseType = CurrentFunction.ThisParameter.Type.BaseTypeNoUseSiteDiagnostics;
1315NamedTypeSymbol constructorInfo = WellKnownType(Microsoft.CodeAnalysis.WellKnownType.System_Reflection_ConstructorInfo);
1448private MethodSymbol GetMethodFromHandleMethod(NamedTypeSymbol methodContainer, TypeSymbol systemReflectionMethodOrConstructorInfo)
1472private MethodSymbol GetFieldFromHandleMethod(NamedTypeSymbol fieldContainer)
1531return this.Call(arg, this.SpecialMethod(CodeAnalysis.SpecialMember.System_Nullable_T_get_Value).AsMember((NamedTypeSymbol)arg.Type));
Symbols\AssemblySymbol.cs (30)
322internal abstract NamedTypeSymbol? LookupDeclaredTopLevelMetadataType(ref MetadataTypeName emittedName);
334internal abstract NamedTypeSymbol LookupDeclaredOrForwardedTopLevelMetadataType(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies);
341public NamedTypeSymbol? ResolveForwardedType(string fullyQualifiedMetadataName)
355internal virtual NamedTypeSymbol? TryLookupForwardedMetadataTypeWithCycleDetection(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies)
372internal abstract IEnumerable<NamedTypeSymbol> GetAllTopLevelForwardedTypes();
380internal abstract NamedTypeSymbol GetDeclaredSpecialType(ExtendedSpecialType type);
386internal virtual void RegisterDeclaredSpecialType(NamedTypeSymbol corType)
406internal virtual NamedTypeSymbol GetNativeIntegerType(NamedTypeSymbol underlyingType)
612internal NamedTypeSymbol GetSpecialType(ExtendedSpecialType type)
629internal NamedTypeSymbol ObjectType
642internal NamedTypeSymbol GetPrimitiveType(Microsoft.Cci.PrimitiveTypeCode type)
653public NamedTypeSymbol? GetTypeByMetadataName(string fullyQualifiedMetadataName)
660var result = this.GetTypeByMetadataName(fullyQualifiedMetadataName, includeReferences: false, isWellKnownType: false, conflicts: out var _);
691internal NamedTypeSymbol? GetTypeByMetadataName(
700NamedTypeSymbol? type;
811var symbol = (NamedTypeSymbol?)GetTypeByReflectionType(nestedTypes[i].AsType());
850NamedTypeSymbol? symbol = GetTopLevelTypeByMetadataName(ref mdName, assemblyId, includeReferences: true, isWellKnownType: false, conflicts: out var _);
867private NamedTypeSymbol? ApplyGenericArguments(NamedTypeSymbol symbol, Type[] typeArguments, ref int currentTypeArgument)
894internal NamedTypeSymbol? GetTopLevelTypeByMetadataName(
913NamedTypeSymbol? result;
938NamedTypeSymbol? corLibCandidate = GetTopLevelTypeByMetadataName(CorLibrary, ref metadataName, assemblyOpt);
973NamedTypeSymbol? candidate = GetTopLevelTypeByMetadataName(assembly, ref metadataName, assemblyOpt);
1022bool isValidCandidate([NotNullWhen(true)] NamedTypeSymbol? candidate, bool isWellKnownType)
1030private bool IsInCorLib(NamedTypeSymbol type)
1035private bool IsValidWellKnownType(NamedTypeSymbol? result)
1048private static NamedTypeSymbol? GetTopLevelTypeByMetadataName(AssemblySymbol assembly, ref MetadataTypeName metadataName, AssemblyIdentity? assemblyOpt)
1055var result = assembly.LookupDeclaredTopLevelMetadataType(ref metadataName);
Symbols\Attributes\SourceAttributeData.cs (9)
21private readonly NamedTypeSymbol _attributeClass;
33NamedTypeSymbol attributeClass,
61internal SourceAttributeData(CSharpCompilation compilation, AttributeSyntax attributeSyntax, NamedTypeSymbol attributeClass, MethodSymbol? attributeConstructor, bool hasErrors)
78NamedTypeSymbol attributeClass,
89public override NamedTypeSymbol AttributeClass
224internal static int GetTargetAttributeSignatureIndex(CSharpCompilation compilation, NamedTypeSymbol attributeClass, MethodSymbol? attributeConstructor, AttributeDescription description)
295var namedType = (NamedTypeSymbol)parameterType;
473internal static bool IsTargetAttribute(NamedTypeSymbol attributeClass, string namespaceName, string typeName)
Symbols\BaseTypeAnalysis.cs (22)
18internal static bool TypeDependsOn(NamedTypeSymbol depends, NamedTypeSymbol on)
33private static void TypeDependsClosure(NamedTypeSymbol type, CSharpCompilation currentCompilation, HashSet<Symbol> partialClosure)
45foreach (var bt in type.GetDeclaredInterfaces(null))
63internal static bool StructDependsOn(NamedTypeSymbol depends, NamedTypeSymbol on)
69var hs = PooledHashSet<NamedTypeSymbol>.GetInstance();
70var typesWithCycle = PooledHashSet<NamedTypeSymbol>.GetInstance();
71StructDependsClosure(depends, hs, typesWithCycle, ConsList<NamedTypeSymbol>.Empty.Prepend(on));
80private static void StructDependsClosure(NamedTypeSymbol type, HashSet<NamedTypeSymbol> partialClosure, HashSet<NamedTypeSymbol> typesWithCycle, ConsList<NamedTypeSymbol> on)
112static void visitFields(NamedTypeSymbol type, HashSet<NamedTypeSymbol> partialClosure, HashSet<NamedTypeSymbol> typesWithCycle, ConsList<NamedTypeSymbol> on)
123StructDependsClosure((NamedTypeSymbol)fieldType, partialClosure, typesWithCycle, on);
144internal static ManagedKind GetManagedKind(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
173static (bool definitelyManaged, bool hasGenerics) dependsOnDefinitelyManagedType(NamedTypeSymbol type, HashSet<Symbol> partialClosure, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
217NamedTypeSymbol fieldNamedType = fieldType as NamedTypeSymbol;
Symbols\ConstraintsHelper.cs (35)
141ImmutableArray<NamedTypeSymbol> interfaces;
143NamedTypeSymbol effectiveBaseClass = corLibrary.GetSpecialType(typeParameter.HasValueTypeConstraint ? SpecialType.System_ValueType : SpecialType.System_Object);
148interfaces = ImmutableArray<NamedTypeSymbol>.Empty;
153var interfacesBuilder = ArrayBuilder<NamedTypeSymbol>.GetInstance();
163NamedTypeSymbol constraintEffectiveBase;
227AddInterface(interfacesBuilder, (NamedTypeSymbol)constraintType.Type);
233constraintEffectiveBase = (NamedTypeSymbol)constraintType.Type;
275constraintEffectiveBase = (NamedTypeSymbol)constraintType.Type;
591((NamedTypeSymbol)type).CheckConstraints(args);
606this NamedTypeSymbol tuple,
625var underlyingTupleTypeChain = ArrayBuilder<NamedTypeSymbol>.GetInstance();
626NamedTypeSymbol.GetUnderlyingTypeChain(tuple, underlyingTupleTypeChain);
629foreach (var underlyingTuple in underlyingTupleTypeChain)
647offset += NamedTypeSymbol.ValueTupleRestIndex;
663var location = ordinal == NamedTypeSymbol.ValueTupleRestIndex ? typeSyntax.Location : elementLocations[ordinal + offset];
677this NamedTypeSymbol type,
718public static bool CheckConstraints(this NamedTypeSymbol type, in CheckConstraintsArgs args)
760private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved)
789foreach (var i in array)
807return type.InterfacesNoUseSiteDiagnostics(basesBeingResolved).HasDuplicates<NamedTypeSymbol>(SymbolEqualityComparer.IgnoringDynamicTupleNamesAndNullability);
844NamedTypeSymbol type,
1093if (typeArgument.Type is NamedTypeSymbol { IsInterface: true } iface && SelfOrBaseHasStaticAbstractMember(iface, ref useSiteInfo, out Symbol member))
1372if (conversions.HasBoxingConversion(typeArgument.Type.IsNullableType() ? ((NamedTypeSymbol)typeArgument.Type).ConstructedFrom : typeArgument.Type,
1378if (typeArgument.Type is NamedTypeSymbol { IsRefLikeType: true } refLike &&
1410private static bool SelfOrBaseHasStaticAbstractMember(NamedTypeSymbol iface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol memberWithoutImplementation)
1423foreach (var baseInterface in iface.InterfacesAndTheirBaseInterfacesNoUseSiteDiagnostics.Keys)
1457private static void AddInterfaces(ArrayBuilder<NamedTypeSymbol> builder, ImmutableArray<NamedTypeSymbol> interfaces)
1459foreach (var @interface in interfaces)
1465private static void AddInterface(ArrayBuilder<NamedTypeSymbol> builder, NamedTypeSymbol @interface)
1486return SatisfiesPublicParameterlessConstructor((NamedTypeSymbol)typeArgument, synthesizedIfMissing: true);
1498return SatisfiesPublicParameterlessConstructor((NamedTypeSymbol)typeArgument, synthesizedIfMissing: false);
1515private static ConstructorConstraintError SatisfiesPublicParameterlessConstructor(NamedTypeSymbol type, bool synthesizedIfMissing)
1578public static bool RequiresChecking(NamedTypeSymbol type)
Symbols\FunctionTypeSymbol.cs (24)
37private static readonly NamedTypeSymbol Uninitialized = new UnsupportedMetadataTypeSymbol();
40private readonly Func<Binder, BoundExpression, NamedTypeSymbol?>? _calculateDelegate;
43private NamedTypeSymbol? _lazyDelegateType;
45internal static FunctionTypeSymbol? CreateIfFeatureEnabled(SyntaxNode syntax, Binder binder, Func<Binder, BoundExpression, NamedTypeSymbol?> calculateDelegate)
52private FunctionTypeSymbol(Binder binder, Func<Binder, BoundExpression, NamedTypeSymbol?> calculateDelegate)
59internal FunctionTypeSymbol(NamedTypeSymbol delegateType)
77internal NamedTypeSymbol? GetInternalDelegateType()
85var delegateType = _calculateDelegate(_binder, _expression);
86var result = Interlocked.CompareExchange(ref _lazyDelegateType, delegateType, Uninitialized);
126internal override NamedTypeSymbol? BaseTypeNoUseSiteDiagnostics => null;
142public override ImmutableArray<NamedTypeSymbol> GetTypeMembers() => throw ExceptionUtilities.Unreachable();
144public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name) => throw ExceptionUtilities.Unreachable();
160internal override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol>? basesBeingResolved = null) => ImmutableArray<NamedTypeSymbol>.Empty;
166var thisDelegateType = GetInternalDelegateType();
168var otherDelegateType = otherType.GetInternalDelegateType();
175var mergedDelegateType = (NamedTypeSymbol)thisDelegateType.MergeEquivalentTypes(otherDelegateType, variance);
183var thisDelegateType = GetInternalDelegateType();
188return WithDelegateType((NamedTypeSymbol)thisDelegateType.SetNullabilityForReferenceTypes(transform));
191private FunctionTypeSymbol WithDelegateType(NamedTypeSymbol delegateType)
193var thisDelegateType = GetInternalDelegateType();
216var thisDelegateType = GetInternalDelegateType();
217var otherDelegateType = otherType.GetInternalDelegateType();
Symbols\Metadata\PE\PENamedTypeSymbol.cs (53)
76private NamedTypeSymbol _lazyBaseType = ErrorTypeSymbol.UnknownResultType;
77private ImmutableArray<NamedTypeSymbol> _lazyInterfaces = default(ImmutableArray<NamedTypeSymbol>);
78private NamedTypeSymbol _lazyDeclaredBaseType = ErrorTypeSymbol.UnknownResultType;
79private ImmutableArray<NamedTypeSymbol> _lazyDeclaredInterfaces = default(ImmutableArray<NamedTypeSymbol>);
136internal NamedTypeSymbol lazyEnumUnderlyingType;
147internal NamedTypeSymbol lazyComImportCoClassType = ErrorTypeSymbol.UnknownResultType;
695internal override NamedTypeSymbol BaseTypeNoUseSiteDiagnostics
708internal override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol> basesBeingResolved = null)
712ImmutableInterlocked.InterlockedCompareExchange(ref _lazyInterfaces, MakeAcyclicInterfaces(), default(ImmutableArray<NamedTypeSymbol>));
718internal override ImmutableArray<NamedTypeSymbol> GetInterfacesToEmit()
723internal override NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved)
728private NamedTypeSymbol GetDeclaredBaseType(bool skipTransformsIfNecessary)
732var baseType = MakeDeclaredBaseType();
746baseType = (NamedTypeSymbol)NullableTypeDecoder.TransformType(TypeWithAnnotations.Create(decodedType), _handle, moduleSymbol, accessSymbol: this, nullableContext: this).Type;
755internal override ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved)
759ImmutableInterlocked.InterlockedCompareExchange(ref _lazyDeclaredInterfaces, MakeDeclaredInterfaces(), default(ImmutableArray<NamedTypeSymbol>));
765private NamedTypeSymbol MakeDeclaredBaseType()
775return (NamedTypeSymbol)new MetadataDecoder(moduleSymbol, this).GetTypeOfToken(token);
787private ImmutableArray<NamedTypeSymbol> MakeDeclaredInterfaces()
796var symbols = ArrayBuilder<NamedTypeSymbol>.GetInstance(interfaceImpls.Count);
808var namedTypeSymbol = typeSymbol as NamedTypeSymbol ?? new UnsupportedMetadataTypeSymbol(); // interface list contains a bad type
815return ImmutableArray<NamedTypeSymbol>.Empty;
819return ImmutableArray.Create<NamedTypeSymbol>(new UnsupportedMetadataTypeSymbol(mrEx));
823public override NamedTypeSymbol ConstructedFrom
839public override NamedTypeSymbol ContainingType
843return _container as NamedTypeSymbol;
909public override NamedTypeSymbol EnumUnderlyingType
1447NamedTypeSymbol underlyingType = null;
1476underlyingType = (NamedTypeSymbol)type;
1785internal override ImmutableArray<NamedTypeSymbol> GetTypeMembersUnordered()
1790public override ImmutableArray<NamedTypeSymbol> GetTypeMembers()
1796private ImmutableArray<NamedTypeSymbol> GetMemberTypesPrivate()
1798var builder = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1827public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name)
1835return StaticCast<NamedTypeSymbol>.From(t);
1838return ImmutableArray<NamedTypeSymbol>.Empty;
1841public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name, int arity)
2126private NamedTypeSymbol MakeAcyclicBaseType()
2128NamedTypeSymbol declaredBase = GetDeclaredBaseType(null);
2145private ImmutableArray<NamedTypeSymbol> MakeAcyclicInterfaces()
2753internal override NamedTypeSymbol ComImportCoClass
2771var coClassType = ((object)type != null && (type.TypeKind == TypeKind.Class || type.IsErrorType())) ? (NamedTypeSymbol)type : null;
2967protected override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
2995internal override NamedTypeSymbol AsNativeInteger()
3006internal override NamedTypeSymbol NativeIntegerUnderlyingType => null;
3056protected sealed override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
3101internal sealed override NamedTypeSymbol AsNativeInteger() => throw ExceptionUtilities.Unreachable();
3103internal sealed override NamedTypeSymbol NativeIntegerUnderlyingType => null;
3157var container = this.ContainingType;
Symbols\NamedTypeSymbol.cs (51)
95public abstract NamedTypeSymbol ConstructedFrom { get; }
101public virtual NamedTypeSymbol EnumUnderlyingType
109public override NamedTypeSymbol ContainingType
117return this.ContainingSymbol as NamedTypeSymbol;
379internal void GetExtensionContainers(ArrayBuilder<NamedTypeSymbol> extensions)
384foreach (var nestedType in GetTypeMembersUnordered())
710public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers();
718public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name, int arity);
801internal abstract NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved);
803internal abstract ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved);
839NamedTypeSymbol other = t2 as NamedTypeSymbol;
843var thisOriginalDefinition = this.OriginalDefinition;
844var otherOriginalDefinition = other.OriginalDefinition;
878private bool EqualsComplicatedCases(NamedTypeSymbol other, TypeCompareKind comparison)
934bool tupleNamesEquals(NamedTypeSymbol other, TypeCompareKind comparison)
1014NamedTypeSymbol result = haveChanges ? this.WithTypeArguments(allTypeArguments.ToImmutable()) : this;
1019internal NamedTypeSymbol WithTypeArguments(ImmutableArray<TypeWithAnnotations> allTypeArguments)
1021var definition = this.OriginalDefinition;
1037bool haveChanges = MergeEquivalentTypeArguments(this, (NamedTypeSymbol)other, variance, allTypeParameters, allTypeArguments);
1039NamedTypeSymbol result;
1053return IsTupleType ? MergeTupleNames((NamedTypeSymbol)other, result) : result;
1063NamedTypeSymbol typeA,
1064NamedTypeSymbol typeB,
1075var definition = typeA.OriginalDefinition;
1138public NamedTypeSymbol Construct(params TypeSymbol[] typeArguments)
1149public NamedTypeSymbol Construct(ImmutableArray<TypeSymbol> typeArguments)
1159public NamedTypeSymbol Construct(IEnumerable<TypeSymbol> typeArguments)
1168public NamedTypeSymbol ConstructUnboundGenericType()
1173internal NamedTypeSymbol GetUnboundGenericTypeOrSelf()
1201private NamedTypeSymbol ConstructWithoutModifiers(ImmutableArray<TypeSymbol> typeArguments, bool unbound)
1217internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments)
1222internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1259protected virtual NamedTypeSymbol ConstructCore(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1271for (var current = this; !ReferenceEquals(current, null); current = current.ContainingType)
1302var outer = ContainingType;
1323var outer = ContainingType;
1342var outer = ContainingType;
1361public new virtual NamedTypeSymbol OriginalDefinition
1387internal virtual NamedTypeSymbol AsMember(NamedTypeSymbol newOwner)
1416NamedTypeSymbol currentType = this;
1461NamedTypeSymbol @base = this.BaseTypeNoUseSiteDiagnostics;
1498var @base = this.BaseTypeNoUseSiteDiagnostics;
1562var baseType = this.BaseTypeNoUseSiteDiagnostics;
1631internal virtual NamedTypeSymbol ComImportCoClass
1695typeToCheck = ((NamedTypeSymbol)typeToCheck).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestPosition - 1].Type;
1699arity = (typeToCheck as NamedTypeSymbol)?.Arity ?? 0;
1701if (arity > 0 && arity < ValueTupleRestPosition && ((NamedTypeSymbol)typeToCheck).IsTupleTypeOfCardinality(out tupleCardinality))
1720internal abstract NamedTypeSymbol AsNativeInteger();
1727internal abstract NamedTypeSymbol NativeIntegerUnderlyingType { get; }
Symbols\Retargeting\RetargetingSymbolTranslator.cs (56)
57return new RetargetingNamedTypeSymbol(this, (NamedTypeSymbol)symbol);
164Debug.Assert(symbol.Kind != SymbolKind.NamedType || ((NamedTypeSymbol)symbol).PrimitiveTypeCode == Cci.PrimitiveTypeCode.NotPrimitive);
180public TypeWithAnnotations Retarget(TypeWithAnnotations underlyingType, RetargetOptions options, NamedTypeSymbol asDynamicIfNoPiaContainingType = null)
205private NamedTypeSymbol RetargetNamedTypeDefinition(NamedTypeSymbol type, RetargetOptions options)
211var result = RetargetNamedTypeDefinition(type.NativeIntegerUnderlyingType, options);
276private NamedTypeSymbol RetargetNamedTypeDefinitionFromUnderlyingAssembly(NamedTypeSymbol type)
285var container = type.ContainingType;
292return (NamedTypeSymbol)this.SymbolMap.GetOrAdd(type, new UnsupportedMetadataTypeSymbol());
298return (NamedTypeSymbol)this.SymbolMap.GetOrAdd(type, _retargetingModule._createRetargetingNamedType);
310private NamedTypeSymbol RetargetNoPiaLocalType(NamedTypeSymbol type)
312NamedTypeSymbol cached;
320NamedTypeSymbol result;
401private static NamedTypeSymbol RetargetNamedTypeDefinition(PENamedTypeSymbol type, PEModuleSymbol addedModule)
410return (NamedTypeSymbol)cached;
413NamedTypeSymbol? result;
415NamedTypeSymbol containingType = type.ContainingType;
423NamedTypeSymbol scope = RetargetNamedTypeDefinition((PENamedTypeSymbol)containingType, addedModule);
440private static NamedTypeSymbol PerformTypeRetargeting(
442NamedTypeSymbol type)
444NamedTypeSymbol? result;
449NamedTypeSymbol containingType = type.ContainingType;
450NamedTypeSymbol? result1;
458NamedTypeSymbol scope = PerformTypeRetargeting(ref destination, containingType);
483public NamedTypeSymbol Retarget(NamedTypeSymbol type, RetargetOptions options)
485NamedTypeSymbol originalDefinition = type.OriginalDefinition;
487NamedTypeSymbol newDefinition = RetargetNamedTypeDefinition(originalDefinition, options);
514NamedTypeSymbol genericType = type;
551NamedTypeSymbol constructedType;
662var namedType = (NamedTypeSymbol)symbol;
720NamedTypeSymbol oldModifierSymbol = ((CSharpCustomModifier)oldModifier).ModifierSymbol;
721NamedTypeSymbol newModifierSymbol = Retarget(oldModifierSymbol, RetargetOptions.RetargetPrimitiveTypesByName); // should be retargeted by name
834public ImmutableArray<NamedTypeSymbol> Retarget(ImmutableArray<NamedTypeSymbol> sequence)
891var containingType = method.ContainingType;
892var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
939var containingType = property.ContainingType;
940var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
955var containingType = @event.ContainingType;
956var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
964private MethodSymbol FindMethodInRetargetedType(MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
971private readonly NamedTypeSymbol _retargetedType;
974private RetargetedTypeMethodFinder(RetargetingModuleSymbol retargetingModule, NamedTypeSymbol retargetedType, MethodSymbol toFind) :
981public static MethodSymbol Find(RetargetingSymbolTranslator translator, MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
998NamedTypeSymbol retargetedType,
1055NamedTypeSymbol containingType = _toFind.ContainingType;
1056NamedTypeSymbol retargetedContainingType = _retargetedType;
1074private PropertySymbol FindPropertyInRetargetedType(PropertySymbol property, NamedTypeSymbol retargetedType, IEqualityComparer<PropertySymbol> retargetedPropertyComparer)
1110private EventSymbol FindEventInRetargetedType(EventSymbol @event, NamedTypeSymbol retargetedType)
1163NamedTypeSymbol oldAttributeType = oldAttributeData.AttributeClass;
1164NamedTypeSymbol newAttributeType;
1329public override Symbol VisitNamedType(NamedTypeSymbol symbol, RetargetOptions options)
Symbols\Source\SourceComplexParameterSymbol.cs (7)
613internal override void EarlyDecodeWellKnownAttributeType(NamedTypeSymbol attributeType, AttributeSyntax attributeSyntax)
636internal override (CSharpAttributeData?, BoundAttribute?) EarlyDecodeWellKnownAttribute(ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
700private (CSharpAttributeData?, BoundAttribute?) EarlyDecodeAttributeForDefaultParameterValue(AttributeDescription description, ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
979((NamedTypeSymbol)arg.TypeInternal).EnumUnderlyingType.SpecialType :
1245if (Type is not NamedTypeSymbol { IsInterpolatedStringHandlerType: true } handlerType)
1651MethodSymbol? collectionBuilderMethod = binder.GetAndValidateCollectionBuilderMethod(syntax, (NamedTypeSymbol)Type, diagnostics, elementType: out _);
1657if (ContainingSymbol.ContainingSymbol is NamedTypeSymbol) // No need to check for lambdas or local function
Symbols\Source\SourceDestructorSymbol.cs (2)
65private static (DeclarationModifiers, Flags) MakeModifiersAndFlags(NamedTypeSymbol containingType, DestructorDeclarationSyntax syntax, bool isNullableAnalysisEnabled, Location location, BindingDiagnosticBag diagnostics, out bool modifierErrors)
130private static DeclarationModifiers MakeModifiers(NamedTypeSymbol containingType, SyntaxTokenList modifiers, Location location, BindingDiagnosticBag diagnostics, out bool modifierErrors)
Symbols\Source\SourceMemberContainerSymbol.cs (52)
208private static readonly Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>> s_emptyTypeMembers =
209new Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>(EmptyReadOnlyMemoryOfCharComparer.Instance);
211private Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>? _lazyTypeMembers;
264var containingType = this.ContainingType;
315if (((NamedTypeSymbol)containingSymbol).IsInterface)
592var discarded = this.EnumUnderlyingType;
776public sealed override NamedTypeSymbol? ContainingType
780return _containingSymbol as NamedTypeSymbol;
1295internal override ImmutableArray<NamedTypeSymbol> GetTypeMembersUnordered()
1300public override ImmutableArray<NamedTypeSymbol> GetTypeMembers()
1305public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name)
1307ImmutableArray<NamedTypeSymbol> members;
1313return ImmutableArray<NamedTypeSymbol>.Empty;
1316public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name, int arity)
1321private Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>> GetTypeMembersDictionary()
1339private Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>> MakeTypeMembers(BindingDiagnosticBag diagnostics)
1341var symbols = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1384foreach (var t in symbols)
1423if (this.ExtensionParameter is { Type: NamedTypeSymbol { Name: var extendedTypeName } })
1732if (member is NamedTypeSymbol type)
1884var baseType = BaseTypeNoUseSiteDiagnostics;
1959bool hasBaseTypeOrInterface(Func<NamedTypeSymbol, bool> predicate)
2008Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>? typesByName,
2406Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>? typesByName,
2418IEnumerable<IGrouping<string, NamedTypeSymbol>> extensionsByReceiverType = GetTypeMembers("").Where(static t => t.IsExtension).GroupBy(static t => ((SourceNamedTypeSymbol)t).ExtensionGroupingName);
2434static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<string, NamedTypeSymbol> grouping)
2438NamedTypeSymbol? masterExtension = null;
2441foreach (NamedTypeSymbol item in grouping)
2443var extension = item;
2494static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2663BaseTypeAnalysis.StructDependsOn((NamedTypeSymbol)type, this) &&
2973var instanceMap = new Dictionary<NamedTypeSymbol, NamedTypeSymbol>(ReferenceEqualityComparer.Instance);
2994var type = (NamedTypeSymbol)f.Type;
3005private static bool InfiniteFlatteningGraph(SourceMemberContainerTypeSymbol top, NamedTypeSymbol t, Dictionary<NamedTypeSymbol, NamedTypeSymbol> instanceMap)
3008var tOriginal = t.OriginalDefinition;
3009if (instanceMap.TryGetValue(tOriginal, out var oldInstance))
3023var type = (NamedTypeSymbol)f.Type;
3148Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>> typesByName)
3150foreach ((ReadOnlyMemory<char> name, ImmutableArray<NamedTypeSymbol> types) in typesByName)
3793ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3851foreach (var type in GetTypeMembers(""))
5087var currentBaseType = this.BaseTypeNoUseSiteDiagnostics;
5883var baseType = BaseTypeNoUseSiteDiagnostics;
5888foreach (var @interface in GetInterfacesToEmit())
5921NamedTypeSymbol baseType = this.BaseTypeNoUseSiteDiagnostics;
6000foreach (var type in this.GetTypeMembers())
6020public sealed override NamedTypeSymbol ConstructedFrom
Symbols\Source\SourceNamedTypeSymbol_Bases.cs (57)
24private Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> _lazyDeclaredBases;
26private NamedTypeSymbol _lazyBaseType = ErrorTypeSymbol.UnknownResultType;
27private ImmutableArray<NamedTypeSymbol> _lazyInterfaces;
35internal sealed override NamedTypeSymbol BaseTypeNoUseSiteDiagnostics
46var tmp = ContainingType.BaseTypeNoUseSiteDiagnostics;
50var acyclicBase = this.MakeAcyclicBaseType(diagnostics);
66internal sealed override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol> basesBeingResolved)
72return ImmutableArray<NamedTypeSymbol>.Empty;
77if (ImmutableInterlocked.InterlockedCompareExchange(ref _lazyInterfaces, acyclicInterfaces, default(ImmutableArray<NamedTypeSymbol>)).IsDefault)
89var localBase = this.BaseTypeNoUseSiteDiagnostics;
168MultiDictionary<NamedTypeSymbol, NamedTypeSymbol>.ValueSet set = pair.Value;
170foreach (var @interface in set)
177NamedTypeSymbol other = pair.Key;
178foreach (var @interface in set)
212private SourceLocation FindBaseRefSyntax(NamedTypeSymbol baseSym)
255internal Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> GetDeclaredBases(ConsList<TypeSymbol> basesBeingResolved)
270internal override NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved)
275internal override ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved)
280private Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> MakeDeclaredBases(ConsList<TypeSymbol> basesBeingResolved, BindingDiagnosticBag diagnostics)
285return new Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>>(null, ImmutableArray<NamedTypeSymbol>.Empty);
291var baseInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
293NamedTypeSymbol baseType = null;
296var interfaceLocations = SpecializedSymbolCollections.GetPooledSymbolDictionaryInstance<NamedTypeSymbol, SourceLocation>();
300Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> one = MakeOneDeclaredBases(newBasesBeingResolved, decl, diagnostics);
303var partBase = one.Item1;
358foreach (var t in partInterfaces)
372var type = DeclaringCompilation.GetWellKnownType(WellKnownType.System_IEquatable_T).Construct(this);
404foreach (var i in baseInterfacesRO)
423return new Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>>(baseType, baseInterfacesRO);
438private Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> MakeOneDeclaredBases(ConsList<TypeSymbol> newBasesBeingResolved, SingleTypeDeclaration decl, BindingDiagnosticBag diagnostics)
446NamedTypeSymbol localBase = null;
447var localInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
526localBase = (NamedTypeSymbol)baseType;
551foreach (var t in localInterfaces)
580localInterfaces.Add((NamedTypeSymbol)baseType);
588localBase = (NamedTypeSymbol)baseType;
606localInterfaces.Add((NamedTypeSymbol)baseType);
628return new Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>>(localBase, localInterfaces.ToImmutableAndFree());
658private ImmutableArray<NamedTypeSymbol> MakeAcyclicInterfaces(ConsList<TypeSymbol> basesBeingResolved, BindingDiagnosticBag diagnostics)
665return ImmutableArray<NamedTypeSymbol>.Empty;
671ArrayBuilder<NamedTypeSymbol> result = isInterface ? ArrayBuilder<NamedTypeSymbol>.GetInstance() : null;
672foreach (var t in declaredInterfaces)
694foreach (var @interface in t.AllInterfacesNoUseSiteDiagnostics)
709private NamedTypeSymbol MakeAcyclicBaseType(BindingDiagnosticBag diagnostics)
713NamedTypeSymbol declaredBase;
767NamedTypeSymbol current = declaredBase;
Symbols\Source\SourceNamedTypeSymbol_Extension.cs (15)
159if (type is NamedTypeSymbol namedType)
193static void appendNamedType(TypeSymbol type, StringBuilder builder, NamedTypeSymbol namedType)
224static void appendContainingType(NamedTypeSymbol namedType, StringBuilder builder)
235static void appendTypeArguments(NamedTypeSymbol namedType, StringBuilder builder)
466if (type is NamedTypeSymbol namedType)
497static void appendNamedType(NamedTypeSymbol namedType, StringBuilder builder)
562static void appendContainingType(NamedTypeSymbol namedType, StringBuilder builder)
573static void appendTypeArguments(NamedTypeSymbol namedType, StringBuilder builder)
762static void appendCallingConventionTypes(ImmutableArray<NamedTypeSymbol> callingConventionTypes, StringBuilder builder)
1037var containingType = this.ContainingType;
1167NamedTypeSymbol extension = extensionMember.ContainingType;
1176NamedTypeSymbol? constructedExtension = inferExtensionTypeArguments(extension, receiverType, compilation);
1199static NamedTypeSymbol? inferExtensionTypeArguments(NamedTypeSymbol extension, TypeSymbol receiverType, CSharpCompilation compilation)
1219var result = extension.Construct(typeArguments);
Symbols\Source\SourceOrdinaryMethodSymbol.cs (8)
24NamedTypeSymbol containingType,
49NamedTypeSymbol containingType,
90NamedTypeSymbol containingType, Location location, MethodDeclarationSyntax syntax, MethodKind methodKind,
434private static DeclarationModifiers MakeDeclarationModifiers(MethodDeclarationSyntax syntax, NamedTypeSymbol containingType, Location location, DeclarationModifiers allowedModifiers, BindingDiagnosticBag diagnostics)
725private static (DeclarationModifiers mods, bool hasExplicitAccessMod) MakeModifiers(MethodDeclarationSyntax syntax, NamedTypeSymbol containingType, MethodKind methodKind, bool hasBody, Location location, BindingDiagnosticBag diagnostics)
962NamedTypeSymbol containingType,
1019NamedTypeSymbol containingType,
1178if (tpEnclosing.ContainingSymbol is NamedTypeSymbol { IsExtension: true })
Symbols\Source\SourcePropertyAccessorSymbol.cs (9)
30NamedTypeSymbol containingType,
67NamedTypeSymbol containingType,
88NamedTypeSymbol containingType,
114NamedTypeSymbol containingType,
141NamedTypeSymbol containingType,
175NamedTypeSymbol containingType,
224NamedTypeSymbol containingType, SourcePropertySymbolBase property, DeclarationModifiers propertyModifiers, Location location,
392var isInitOnlyType = Binder.GetWellKnownType(this.DeclaringCompilation,
493private static DeclarationModifiers MakeModifiers(NamedTypeSymbol containingType, SyntaxTokenList modifiers, bool isExplicitInterfaceImplementation,
Symbols\Symbol_Attributes.cs (19)
67var namedType = (NamedTypeSymbol)this;
122internal virtual void EarlyDecodeWellKnownAttributeType(NamedTypeSymbol attributeType, AttributeSyntax attributeSyntax)
142internal virtual (CSharpAttributeData?, BoundAttribute?) EarlyDecodeWellKnownAttribute(ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
148ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments,
153var type = arguments.AttributeType;
333var attributeTypesBuilder = new NamedTypeSymbol[totalAttributesCount];
349ImmutableArray<NamedTypeSymbol> boundAttributeTypes = attributeTypesBuilder.AsImmutableOrNull();
551var boundTypeSymbol = (NamedTypeSymbol)boundType.Type;
767ImmutableArray<NamedTypeSymbol> boundAttributeTypes,
780var arguments = new EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation>();
785NamedTypeSymbol boundAttributeType = boundAttributeTypes[i];
814private void EarlyDecodeWellKnownAttributeTypes(ImmutableArray<NamedTypeSymbol> attributeTypes, ImmutableArray<AttributeSyntax> attributeSyntaxList)
821var attributeType = attributeTypes[i];
851HashSet<NamedTypeSymbol> uniqueAttributeTypes = new HashSet<NamedTypeSymbol>();
892HashSet<NamedTypeSymbol> uniqueAttributeTypes)
896NamedTypeSymbol attributeType = attribute.AttributeClass;
Symbols\Synthesized\SynthesizedEntryPointSymbol.cs (8)
25private readonly NamedTypeSymbol _containingType;
29var containingType = initializerMethod.ContainingType;
33var systemObject = Binder.GetSpecialType(compilation, SpecialType.System_Object, DummySyntax(), diagnostics);
43var systemVoid = Binder.GetSpecialType(compilation, SpecialType.System_Void, DummySyntax(), diagnostics);
48private SynthesizedEntryPointSymbol(NamedTypeSymbol containingType)
343internal AsyncForwardEntryPoint(CSharpCompilation compilation, NamedTypeSymbol containingType, MethodSymbol userMain) :
449internal ScriptEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType) :
539internal SubmissionEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType, TypeSymbol submissionArrayType) :
Symbols\Tuples\TupleTypeSymbol.cs (54)
29internal static NamedTypeSymbol CreateTuple(
52NamedTypeSymbol underlyingType = getTupleUnderlyingType(elementTypesWithAnnotations, syntax, compilation, diagnostics);
61var constructedType = CreateTuple(underlyingType, elementNames, errorPositions, elementLocations, locations);
73static NamedTypeSymbol getTupleUnderlyingType(ImmutableArray<TypeWithAnnotations> elementTypes, CSharpSyntaxNode? syntax, CSharpCompilation compilation, BindingDiagnosticBag? diagnostics)
79NamedTypeSymbol firstTupleType = compilation.GetWellKnownType(GetTupleType(remainder));
85NamedTypeSymbol? chainedTupleType = null;
99public static NamedTypeSymbol CreateTuple(
100NamedTypeSymbol tupleCompatibleType,
110internal NamedTypeSymbol WithTupleDataFrom(NamedTypeSymbol original)
120internal NamedTypeSymbol? TupleUnderlyingType
126internal NamedTypeSymbol WithElementTypes(ImmutableArray<TypeWithAnnotations> newElementTypes)
131NamedTypeSymbol firstTupleType;
132NamedTypeSymbol? chainedTupleType;
133if (Arity < NamedTypeSymbol.ValueTupleRestPosition)
141var underlyingType = this;
144underlyingType = ((NamedTypeSymbol)underlyingType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[NamedTypeSymbol.ValueTupleRestIndex].Type);
146while (underlyingType.Arity >= NamedTypeSymbol.ValueTupleRestPosition);
160internal NamedTypeSymbol WithElementNames(ImmutableArray<string?> newElementNames,
170private NamedTypeSymbol WithTupleData(TupleExtraData newData)
195protected abstract NamedTypeSymbol WithTupleDataCore(TupleExtraData newData);
203internal static void GetUnderlyingTypeChain(NamedTypeSymbol underlyingTupleType, ArrayBuilder<NamedTypeSymbol> underlyingTupleTypeChain)
205NamedTypeSymbol currentType = underlyingTupleType;
210if (currentType.Arity == NamedTypeSymbol.ValueTupleRestPosition)
212currentType = (NamedTypeSymbol)currentType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[NamedTypeSymbol.ValueTupleRestPosition - 1].Type;
231private static NamedTypeSymbol ConstructTupleUnderlyingType(NamedTypeSymbol firstTupleType, NamedTypeSymbol? chainedTupleTypeOpt, ImmutableArray<TypeWithAnnotations> elementTypes)
239NamedTypeSymbol currentSymbol = firstTupleType.Construct(ImmutableArray.Create(elementTypes, (chainLength - 1) * (ValueTupleRestPosition - 1), remainder));
251private static void ReportUseSiteAndObsoleteDiagnostics(CSharpSyntaxNode? syntax, BindingDiagnosticBag diagnostics, NamedTypeSymbol firstTupleType)
267NamedTypeSymbol firstTupleType = compilation.GetWellKnownType(GetTupleType(remainder));
272NamedTypeSymbol chainedTupleType = compilation.GetWellKnownType(GetTupleType(ValueTupleRestPosition));
486internal static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember, BindingDiagnosticBag diagnostics, SyntaxNode? syntax)
515static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember)
578NamedTypeSymbol currentValueTuple = this;
710var oldUnderlying = currentValueTuple;
711currentValueTuple = (NamedTypeSymbol)oldUnderlying.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestIndex].Type;
737NamedTypeSymbol container = getNestedTupleUnderlyingType(this, fieldChainLength - 1).OriginalDefinition;
787static NamedTypeSymbol getNestedTupleUnderlyingType(NamedTypeSymbol topLevelUnderlyingType, int depth)
789NamedTypeSymbol found = topLevelUnderlyingType;
792found = (NamedTypeSymbol)found.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestPosition - 1].Type;
853private TypeSymbol MergeTupleNames(NamedTypeSymbol other, NamedTypeSymbol mergedType)
917internal NamedTypeSymbol TupleUnderlyingType { get; }
919internal TupleExtraData(NamedTypeSymbol underlyingType)
929internal TupleExtraData(NamedTypeSymbol underlyingType, ImmutableArray<string?> elementNames,
967public ImmutableArray<TypeWithAnnotations> TupleElementTypesWithAnnotations(NamedTypeSymbol tuple)
977static ImmutableArray<TypeWithAnnotations> collectTupleElementTypesWithAnnotations(NamedTypeSymbol tuple)
999public ImmutableArray<FieldSymbol> TupleElements(NamedTypeSymbol tuple)
1009ImmutableArray<FieldSymbol> collectTupleElementFields(NamedTypeSymbol tuple)
Symbols\TypeSymbol.cs (61)
48internal ImmutableArray<NamedTypeSymbol> allInterfaces;
53internal MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> interfacesAndTheirBaseInterfaces;
55internal static readonly MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> EmptyInterfacesAndTheirBaseInterfaces =
56new MultiDictionary<NamedTypeSymbol, NamedTypeSymbol>(0, SymbolEqualityComparer.CLRSignature);
160internal abstract NamedTypeSymbol BaseTypeNoUseSiteDiagnostics { get; }
162internal NamedTypeSymbol BaseTypeWithDefinitionUseSiteDiagnostics(ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
164var result = BaseTypeNoUseSiteDiagnostics;
174internal NamedTypeSymbol BaseTypeOriginalDefinition(ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
176var result = BaseTypeNoUseSiteDiagnostics;
191internal abstract ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol> basesBeingResolved = null);
203internal ImmutableArray<NamedTypeSymbol> AllInterfacesNoUseSiteDiagnostics
211internal ImmutableArray<NamedTypeSymbol> AllInterfacesWithDefinitionUseSiteDiagnostics(ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
224foreach (var iface in result)
261var t = this.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
317protected virtual ImmutableArray<NamedTypeSymbol> GetAllInterfaces()
322return ImmutableArray<NamedTypeSymbol>.Empty;
337protected virtual ImmutableArray<NamedTypeSymbol> MakeAllInterfaces()
339var result = ArrayBuilder<NamedTypeSymbol>.GetInstance();
340var visited = new HashSet<NamedTypeSymbol>(SymbolEqualityComparer.ConsiderEverything);
354static void addAllInterfaces(NamedTypeSymbol @interface, HashSet<NamedTypeSymbol> visited, ArrayBuilder<NamedTypeSymbol> result)
358ImmutableArray<NamedTypeSymbol> baseInterfaces = @interface.InterfacesNoUseSiteDiagnostics();
361var baseInterface = baseInterfaces[i];
380internal MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> InterfacesAndTheirBaseInterfacesNoUseSiteDiagnostics
400internal MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> InterfacesAndTheirBaseInterfacesWithDefinitionUseSiteDiagnostics(ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
404foreach (var iface in result.Keys)
415private static MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> MakeInterfacesAndTheirBaseInterfaces(ImmutableArray<NamedTypeSymbol> declaredInterfaces)
417var resultBuilder = new MultiDictionary<NamedTypeSymbol, NamedTypeSymbol>(declaredInterfaces.Length, SymbolEqualityComparer.CLRSignature, SymbolEqualityComparer.ConsiderEverything);
418foreach (var @interface in declaredInterfaces)
422foreach (var baseInterface in @interface.AllInterfacesNoUseSiteDiagnostics)
457return FindMostSpecificImplementation(interfaceMember, (NamedTypeSymbol)this, ref discardedUseSiteInfo);
742var interfaceType = interfaceMember.ContainingType;
821NamedTypeSymbol interfaceType = interfaceMember.ContainingType;
1025if (implementingType is NamedTypeSymbol named &&
1119private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1167ImmutableArray<NamedTypeSymbol> allInterfaces = implementingType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1253NamedTypeSymbol implementingInterface = inplementingAccessor1.ContainingType;
1274ImmutableArray<NamedTypeSymbol> allInterfaces,
1279var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1281foreach (var interfaceType in allInterfaces)
1298(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1300NamedTypeSymbol previousContainingType = previous.ContainingType;
1332MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases = interfaceType.InterfacesAndTheirBaseInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1391internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1395NamedTypeSymbol containingType = interfaceMember.ContainingType;
2097var @interface = interfaceMember.ContainingType;
2162var @interface = interfaceMember.ContainingType;
2547foreach (FieldSymbol field in ((NamedTypeSymbol)this).OriginalDefinition.GetFieldsToEmit())
2565elementField = elementField.AsMember((NamedTypeSymbol)this);
Symbols\TypeSymbolExtensions.cs (62)
29foreach (NamedTypeSymbol @interface in subType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
160if (type is NamedTypeSymbol nt
175RoslynDebug.Assert(type is NamedTypeSymbol); //not testing Kind because it may be an ErrorType
177return ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0];
215public static NamedTypeSymbol? GetEnumUnderlyingType(this TypeSymbol? type)
217return (type is NamedTypeSymbol namedType) ? namedType.EnumUnderlyingType : null;
228var underlyingType = type.GetEnumUnderlyingType();
330return type.Kind == SymbolKind.NamedType && ((NamedTypeSymbol)type).IsInterface;
381if (type is NamedTypeSymbol
417internal static ImmutableArray<NamedTypeSymbol> GetAllInterfacesOrEffectiveInterfaces(this TypeSymbol type)
431return ImmutableArray<NamedTypeSymbol>.Empty;
438public static NamedTypeSymbol? GetDelegateType(this TypeSymbol? type)
443type = ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
446return type.IsDelegateType() ? (NamedTypeSymbol)type : null;
479if (_type.OriginalDefinition is NamedTypeSymbol type)
519if (!(type is NamedTypeSymbol t))
601elementTypes = ((NamedTypeSymbol)type).TupleElementTypesWithAnnotations;
708return !IsAsRestrictive((NamedTypeSymbol)type, sym, ref useSiteInfo);
783var containingType = current.ContainingType;
891var typeArguments = ((NamedTypeSymbol)current).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics;
1044var parent1 = s1.ContainingType;
1054for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
1066var parent2 = s2.ContainingType;
1078var parent1 = s1.ContainingType;
1096for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
1156NamedTypeSymbol parent1 = s1.ContainingType;
1163var parent1OriginalDefinition = parent1.OriginalDefinition;
1164for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
1185return type is NamedTypeSymbol { IsUnboundGenericType: true };
1188public static bool IsTopLevelType(this NamedTypeSymbol type)
1369return type is NamedTypeSymbol
1382return type is NamedTypeSymbol
1395return type is NamedTypeSymbol
1406return type is NamedTypeSymbol
1417return type is NamedTypeSymbol
1483var foundType = type.VisitType(predicate: (type, _, _) => type is NamedTypeSymbol { IsFileLocal: true }, arg: (object?)null);
1487internal static string? GetFileLocalTypeMetadataNamePrefix(this NamedTypeSymbol type)
1525return ((NamedTypeSymbol)type).EnumUnderlyingType.SpecialType.IsValidVolatileFieldType();
1569internal static int ComputeHashCode(this NamedTypeSymbol type)
1611static bool wasConstructedForAnnotations(NamedTypeSymbol type)
1644public static TypeSymbol AsDynamicIfNoPia(this TypeSymbol type, NamedTypeSymbol containingType)
1649public static bool TryAsDynamicIfNoPia(this TypeSymbol type, NamedTypeSymbol containingType, [NotNullWhen(true)] out TypeSymbol? result)
1686internal static ImmutableArray<TypeParameterSymbol> GetAllTypeParameters(this NamedTypeSymbol type)
1703internal static void GetAllTypeParameters(this NamedTypeSymbol type, ArrayBuilder<TypeParameterSymbol> result)
1705var containingType = type.ContainingType;
1718internal static TypeParameterSymbol? FindEnclosingTypeParameter(this NamedTypeSymbol type, string name)
1774internal static bool HasNameQualifier(this NamedTypeSymbol type, string qualifiedName)
1831var namedType = type as NamedTypeSymbol;
1849if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1862if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1872if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1890internal static bool IsCustomTaskType(this NamedTypeSymbol type, [NotNullWhen(true)] out TypeSymbol? builderArgument)
1923var namedType = (NamedTypeSymbol)type;
1964private static bool NormalizeTaskTypesInNamedType(CSharpCompilation compilation, ref NamedTypeSymbol type)
1987var originalType = type;
1988var originalDefinition = originalType.OriginalDefinition;
2000var taskType = compilation.GetWellKnownType(
2137return typeSymbol is NamedTypeSymbol { Name: WellKnownMemberNames.LockTypeName, Arity: 0, ContainingType: null } &&
2143return typeSymbol is NamedTypeSymbol
2181return type is NamedTypeSymbol { Name: "INumberBase", IsInterface: true, Arity: 1, ContainingType: null } &&
Utilities\TypeSymbolExtensions.cs (15)
52var namedType = (NamedTypeSymbol)type;
135var namedType = (NamedTypeSymbol)type;
179internal static TypeSymbol GetNextBaseTypeNoUseSiteDiagnostics(this TypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref PooledHashSet<NamedTypeSymbol> visited)
190return GetNextDeclaredBase((NamedTypeSymbol)type, basesBeingResolved, compilation, ref visited);
210private static TypeSymbol GetNextDeclaredBase(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref PooledHashSet<NamedTypeSymbol> visited)
226var nextType = type.GetDeclaredBaseType(basesBeingResolved);
235var origType = type.OriginalDefinition;
244visited = visited ?? PooledHashSet<NamedTypeSymbol>.GetInstance();
255private static void SetKnownToHaveNoDeclaredBaseCycles(ref PooledHashSet<NamedTypeSymbol> visited)
259foreach (var v in visited)
269private static NamedTypeSymbol GetDefaultBaseOrNull(NamedTypeSymbol type, CSharpCompilation compilation)