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];
286var attributeType = (NamedTypeSymbol)boundAttribute.Type;
413protected bool IsAttributeConditionallyOmitted(NamedTypeSymbol attributeType, SyntaxTree? syntaxTree, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
434var baseType = attributeType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
453NamedTypeSymbol attributeType,
516private BoundAssignmentOperator BindNamedAttributeArgument(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
594private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
609private 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 (80)
52if (memberOpt is { ContainingSymbol: NamedTypeSymbol { IsExtension: true } })
57var containingType = memberOpt?.ContainingType;
231internal NamedTypeSymbol CreateErrorType(string name = "")
421var delegateType = expr.GetInferredDelegateType(ref useSiteInfo);
508|| this.ContainingMemberOrLambda is NamedTypeSymbol { IsExtension: true });
986var tupleType = NamedTypeSymbol.CreateTuple(
1064NamedTypeSymbol tupleTypeOpt = null;
1072tupleTypeOpt = NamedTypeSymbol.CreateTuple(node.Location, elements, locations, elementNames,
1078NamedTypeSymbol.VerifyTupleTypePresent(elements.Length, node, this.Compilation, diagnostics);
1212if (name == null || NamedTypeSymbol.IsTupleElementNameReserved(name) != -1)
1694symbol = ConstructNamedTypeUnlessTypeArgumentOmitted(node, (NamedTypeSymbol)symbol, typeArgumentList, typeArgumentsWithAnnotations, diagnostics);
1721var type = BindNativeIntegerSymbolIfAny(identifier, diagnostics);
1792if (symbol.ContainingSymbol is NamedTypeSymbol { OriginalDefinition: var symbolContainerDefinition } &&
1800NamedTypeSymbol baseToCheck = containingTypeDefinition.BaseTypeNoUseSiteDiagnostics;
1973var currentType = this.ContainingType;
1981var declaringType = members[0].ContainingType;
2161primaryCtor.ContainingSymbol is NamedTypeSymbol { IsRecord: false, IsRecordStruct: false } ||
2328var currentType = this.ContainingType;
2330NamedTypeSymbol declaringType = member.ContainingType;
2391private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType)
2542private BoundThisReference ThisReference(SyntaxNode node, NamedTypeSymbol thisTypeOpt, bool hasErrors = false, bool wasCompilerGenerated = false)
2642NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2722NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2749NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, operand);
2849!MethodGroupConversionDoesNotExistOrHasErrors((BoundMethodGroup)operand, (NamedTypeSymbol)targetType, syntax.Location, diagnostics, out _))
3702Debug.Assert(handlerType is NamedTypeSymbol { IsInterpolatedStringHandlerType: true });
3818var receiverParameter = ((NamedTypeSymbol)methodResult.Member.ContainingSymbol).ExtensionParameter;
3904(NamedTypeSymbol)handlerType,
4640var spanType = GetWellKnownType(WellKnownType.System_Span_T, diagnostics, node);
4861NamedTypeSymbol containingType = constructor.ContainingType;
4882NamedTypeSymbol initializerType = containingType;
4998NamedTypeSymbol initializerType,
5021NamedTypeSymbol baseType = constructor.ContainingType.BaseTypeNoUseSiteDiagnostics;
5141static void validateRecordCopyConstructor(MethodSymbol constructor, NamedTypeSymbol baseType, MethodSymbol resultMember, Location errorLocation, BindingDiagnosticBag diagnostics)
5243return BindClassCreationExpression(node, (NamedTypeSymbol)type, GetName(node.Type), diagnostics, originalType);
5246return BindDelegateCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
5249return BindInterfaceCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
5371private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
5380private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics)
5492var sourceDelegate = (NamedTypeSymbol)argument.Type;
5549private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null)
5584NamedTypeSymbol type,
6341NamedTypeSymbol collectionsIEnumerableType = this.GetSpecialType(SpecialType.System_Collections_IEnumerable, diagnostics, node);
6673NamedTypeSymbol containingType = this.ContainingType;
6707NamedTypeSymbol type,
6803NamedTypeSymbol type,
6889NamedTypeSymbol type,
6946private BoundObjectInitializerExpressionBase MakeBoundInitializerOpt(SyntaxNode typeNode, NamedTypeSymbol type, InitializerExpressionSyntax initializerSyntaxOpt, TypeSymbol initializerTypeOpt, BindingDiagnosticBag diagnostics)
6959private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
6968private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
6982NamedTypeSymbol coClassType = type.ComImportCoClass;
6994private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
7077NamedTypeSymbol interfaceType,
7078NamedTypeSymbol coClassType,
7187NamedTypeSymbol typeContainingConstructors,
7314private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
7320private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, bool allowProtectedConstructorsOfBaseType, out ImmutableArray<MethodSymbol> allInstanceConstructors, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
7327type = type.GetNonErrorGuess() as NamedTypeSymbol ?? type;
7334private static ConstantValue FoldParameterlessValueTypeConstructor(NamedTypeSymbol type)
7442var type = GetWellKnownType(WellKnownType.System_ReadOnlySpan_T, diagnostics, node).Construct(GetSpecialType(SpecialType.System_Byte, diagnostics, node));
7877var type = (NamedTypeSymbol)sym;
8293var namedType = ((NamedTypeSymbol)type).ConstructedFrom;
8505var type = (NamedTypeSymbol)symbol;
8893NamedTypeSymbol type = fieldSymbol.ContainingType;
8994NamedTypeSymbol enumType = null;
9014enumType = (NamedTypeSymbol)fieldType;
9019NamedTypeSymbol underlyingType = enumType.EnumUnderlyingType;
9038var containingType = this.ContainingType;
9743var int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
9815NamedTypeSymbol int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
10822internal NamedTypeSymbol? GetMethodGroupDelegateType(BoundMethodGroup node)
11203internal NamedTypeSymbol? GetMethodGroupOrLambdaDelegateType(
11262var delegateType = Compilation.GetWellKnownType(wkDelegateType);
11295static 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 (69)
252this.LookupMembersInInterface(result, (NamedTypeSymbol)type, name, arity, basesBeingResolved, options, originalBinder, diagnose, ref useSiteInfo);
743var namedType = (NamedTypeSymbol)symbol;
876PooledHashSet<NamedTypeSymbol> visited = null;
886NamedTypeSymbol namedType = currentType as NamedTypeSymbol;
940NamedTypeSymbol type,
977NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
981foreach (var iface in type.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1022private void GetWellKnownWinRTMemberInterfaces(out NamedTypeSymbol idictSymbol, out NamedTypeSymbol iroDictSymbol, out NamedTypeSymbol iListSymbol, out NamedTypeSymbol iCollectionSymbol, out NamedTypeSymbol inccSymbol, out NamedTypeSymbol inpcSymbol)
1032private static bool ShouldAddWinRTMembersForInterface(NamedTypeSymbol iface, NamedTypeSymbol idictSymbol, NamedTypeSymbol iroDictSymbol, NamedTypeSymbol iListSymbol, NamedTypeSymbol iCollectionSymbol, NamedTypeSymbol inccSymbol, NamedTypeSymbol inpcSymbol)
1034var iFaceOriginal = iface.OriginalDefinition;
1079NamedTypeSymbol type,
1101private static ImmutableArray<NamedTypeSymbol> GetBaseInterfaces(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1110return ImmutableArray<NamedTypeSymbol>.Empty;
1117return ImmutableArray<NamedTypeSymbol>.Empty;
1133var cycleGuard = ConsList<NamedTypeSymbol>.Empty.Prepend(type.OriginalDefinition);
1137var result = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1138var visited = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.ConsiderEverything);
1147foreach (var candidate in result)
1154static void addAllInterfaces(NamedTypeSymbol @interface, HashSet<NamedTypeSymbol> visited, ArrayBuilder<NamedTypeSymbol> result, ConsList<TypeSymbol> basesBeingResolved, ConsList<NamedTypeSymbol> cycleGuard)
1156NamedTypeSymbol originalDefinition;
1162ImmutableArray<NamedTypeSymbol> baseInterfaces = @interface.GetDeclaredInterfaces(basesBeingResolved);
1169var baseInterface = baseInterfaces[i];
1182ImmutableArray<NamedTypeSymbol> interfaces,
1195HashSet<NamedTypeSymbol> seenInterfaces = null;
1198seenInterfaces = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.IgnoringNullable);
1201foreach (NamedTypeSymbol baseInterface in interfaces)
1215private void LookupMembersInInterface(LookupResult current, NamedTypeSymbol type, string name, int arity, ConsList<TypeSymbol> basesBeingResolved, LookupOptions options, Binder originalBinder, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1252private static bool IsDerivedType(NamedTypeSymbol baseType, NamedTypeSymbol derivedType, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1258for (NamedTypeSymbol b = derivedType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo); (object)b != null; b = b.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1265PooledHashSet<NamedTypeSymbol> visited = null;
1267for (var b = (NamedTypeSymbol)derivedType.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited);
1269b = (NamedTypeSymbol)b.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited))
1303var hiddenContainer = sym.ContainingType;
1309var hidingContainer = hidingSym.ContainingType;
1362return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1366return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers(name);
1390return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers();
1404while (symbol is not null and not NamedTypeSymbol { IsFileLocal: true })
1421var symbolFileIdentifier = ((NamedTypeSymbol)symbol).AssociatedFileIdentifier;
1841NamedTypeSymbol namedType = (NamedTypeSymbol)symbol;
2041private void AddWinRTMembersLookupSymbolsInfo(LookupSymbolsInfo result, NamedTypeSymbol type, LookupOptions options, Binder originalBinder, TypeSymbol accessThroughType)
2043NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
2047foreach (var iface in type.AllInterfacesNoUseSiteDiagnostics)
2058PooledHashSet<NamedTypeSymbol> visited = null;
2067NamedTypeSymbol namedType = type as NamedTypeSymbol;
2093foreach (var baseInterface in type.AllInterfacesNoUseSiteDiagnostics)
2109NamedTypeSymbol effectiveBaseClass = type.EffectiveBaseClassNoUseSiteDiagnostics;
2112foreach (var baseInterface in type.AllEffectiveInterfacesNoUseSiteDiagnostics)
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 (38)
353&& containing is not NamedTypeSymbol { IsExtension: true })
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)
729nullableValueGetter = nullableValueGetter.AsMember((NamedTypeSymbol)collectionExprType);
853NamedTypeSymbol spanType = GetWellKnownType(wellKnownSpan, diagnostics, collectionExpr.Syntax);
1099NamedTypeSymbol collectionType = (NamedTypeSymbol)builder.CollectionType;
1159moveNextMethod = moveNextAsync.AsMember((NamedTypeSymbol)enumeratorType);
1171builder.CurrentPropertyGetter = currentPropertyGetter.AsMember((NamedTypeSymbol)enumeratorType);
1293NamedTypeSymbol targetInterface = isAsync ? this.Compilation.GetWellKnownType(WellKnownType.System_IAsyncDisposable) : this.Compilation.GetSpecialType(SpecialType.System_IDisposable);
1820NamedTypeSymbol implementedIEnumerable = GetIEnumerableOfT(type, isAsync, Compilation, ref useSiteInfo, out foundMultiple, out bool needSupportForRefStructInterfaces);
1829var implementedNonGeneric = this.Compilation.GetSpecialType(SpecialType.System_Collections_IEnumerable);
1850internal static NamedTypeSymbol GetIEnumerableOfT(
1854NamedTypeSymbol implementedIEnumerable = null;
1874private static void GetIEnumerableOfT(ImmutableArray<NamedTypeSymbol> interfaces, bool isAsync, CSharpCompilation compilation, ref NamedTypeSymbol result, ref bool foundMultiple)
1883foreach (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 (15)
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)
1507NamedTypeSymbol.AddOperators(typeOperators, extensionCandidatesInSingleScope);
1518NamedTypeSymbol extension = method.ContainingType;
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 (37)
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()
2679bool isExtensionParameterOfStaticExtensionMember = parameter is { ContainingSymbol: NamedTypeSymbol { IsExtension: true, ExtensionParameter: var extensionParameter } }
2838var n1 = t1 as NamedTypeSymbol;
2839var n2 = t2 as NamedTypeSymbol;
3280NamedTypeSymbol d;
3303y = ((NamedTypeSymbol)y).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3382var destination = (NamedTypeSymbol)targetType;
3543return BetterConversionTargetCore(((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
3544((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
3557NamedTypeSymbol d1;
3561NamedTypeSymbol d2;
3654var type1Element = ((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3655var type2Element = ((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
3666private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType, Conversion conv)
3688NamedTypeSymbol d1;
3692NamedTypeSymbol d2;
4595&& parameters.ParameterTypes[argumentPosition].Type is NamedTypeSymbol { IsInterpolatedStringHandlerType: true, IsValueType: true })
BoundTree\UnboundLambda.cs (36)
152var delegateType = Type.GetDelegateType();
171internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol) =>
310NamedTypeSymbol? taskType = null;
311var delegateReturnType = delegateType?.GetDelegateType()?.DelegateInvokeMethod?.ReturnType as NamedTypeSymbol;
324var resultType = taskType?.Arity == 0 ?
339var taskTypeT = taskType?.Arity == 1 ?
458public BoundLambda Bind(NamedTypeSymbol delegateType, bool isExpressionTree)
464public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
493public TypeWithAnnotations InferReturnType(ConversionsBase conversions, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
534Constraint = "Avoid " + nameof(ConcurrentDictionary<(NamedTypeSymbol, bool), BoundLambda>) + " which has a large default size, but this cache is normally small.")]
535private ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>? _bindingCache;
551_bindingCache = ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>.Empty.WithComparers(BindingCacheComparer.Instance);
627public BoundLambda Bind(NamedTypeSymbol delegateType, bool isTargetExpressionTree)
663private static MethodSymbol? DelegateInvokeMethod(NamedTypeSymbol? delegateType)
727internal NamedTypeSymbol? InferDelegateType()
804private BoundLambda ReallyBind(NamedTypeSymbol delegateType, bool inExpressionTree)
927internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol)
961NamedTypeSymbol? delegateType,
1036public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
1057public readonly NamedTypeSymbol? TaskLikeReturnTypeOpt;
1061private ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations> parameterTypes, ImmutableArray<RefKind> parameterRefKinds, NamedTypeSymbol? taskLikeReturnTypeOpt)
1108public static ReturnInferenceCacheKey Create(NamedTypeSymbol? delegateType, bool isAsync)
1110GetFields(delegateType, isAsync, out var parameterTypes, out var parameterRefKinds, out var taskLikeReturnTypeOpt);
1119NamedTypeSymbol? delegateType,
1123out NamedTypeSymbol? taskLikeReturnTypeOpt)
1151var delegateReturnType = invoke.ReturnType as NamedTypeSymbol;
1220var delegateType = (NamedTypeSymbol?)lambda.Type;
1227NamedTypeSymbol? delegateType,
1241var t = (inferredReturnType.HadExpressionlessReturn || inferredReturnType.NumExpressions == 0)
1444private sealed class BindingCacheComparer : IEqualityComparer<(NamedTypeSymbol Type, bool IsExpressionTree)>
1448public bool Equals([AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) x, [AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) y)
1451public 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)
2786var attributeType = (NamedTypeSymbol)binder.BindType(attribute.Name, BindingDiagnosticBag.Discarded, out aliasOpt).Type;
3605var namedType = (NamedTypeSymbol)attribute.Type;
3614if (candidateSymbols.Length == 1 && candidateSymbols[0] is NamedTypeSymbol)
3616namedType = (NamedTypeSymbol)candidateSymbols[0];
3697NamedTypeSymbol containingType = binder.ContainingType;
3745private static ParameterSymbol GetThisParameter(TypeSymbol typeOfThis, NamedTypeSymbol containingType, Symbol containingMember, out LookupResultKind resultKind)
3884var objectType = binaryOperator.Type.ContainingAssembly.GetSpecialType(SpecialType.System_Object);
3989NamedTypeSymbol typeSymbol = null;
4010typeSymbol = (NamedTypeSymbol)unwrappedSymbols[0];
4021typeSymbol = unwrappedSymbols[0] as NamedTypeSymbol;
4035NamedTypeSymbol typeSymbolOpt,
5182return (GetSymbolInfo(tupleTypeSyntax, cancellationToken).Symbol.GetSymbol() as NamedTypeSymbol)?.TupleElements.ElementAtOrDefault(tupleTypeSyntax.Elements.IndexOf(declarationSyntax)).GetPublicSymbol();
5204typeDeclaration, namedType.GetSymbol<NamedTypeSymbol>());
5260protected static SynthesizedPrimaryConstructor TryGetSynthesizedPrimaryConstructor(TypeDeclarationSyntax node, NamedTypeSymbol type)
Compilation\SyntaxTreeSemanticModel.cs (10)
760internal PublicSemanticModel CreateSpeculativeAttributeSemanticModel(int position, AttributeSyntax attribute, Binder binder, AliasSymbol aliasOpt, NamedTypeSymbol attributeType)
1377private NamedTypeSymbol GetDeclaredType(BaseTypeDeclarationSyntax declarationSyntax)
1390private NamedTypeSymbol GetDeclaredExtension(ExtensionBlockDeclarationSyntax extensionDeclaration)
1402if (symbol is NamedTypeSymbol { IsExtension: true } && symbol.HasLocationContainedWithin(this.SyntaxTree, declarationSpan, out var wasZeroWidthMatch))
1405return (NamedTypeSymbol)symbol;
1412private NamedTypeSymbol GetDeclaredType(DelegateDeclarationSyntax declarationSyntax)
1420private NamedTypeSymbol GetDeclaredNamedType(CSharpSyntaxNode declarationSyntax, string name)
1428return GetDeclaredMember(container, declarationSyntax.Span, isKnownToBeANamespace: false, name) as NamedTypeSymbol;
2140var delegateType = (GetDeclaredSymbol(memberDecl, cancellationToken) as INamedTypeSymbol).GetSymbol();
2216case NamedTypeSymbol typeSymbol:
Emitter\Model\PEModuleBuilder.cs (68)
28internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
50private Dictionary<FieldSymbol, NamedTypeSymbol> _fixedImplementationTypes;
213internal sealed override IEnumerable<Cci.INestedTypeDefinition> GetSynthesizedNestedTypes(NamedTypeSymbol container)
387if (!((NamedTypeSymbol)member).IsExtension)
503internal virtual NamedTypeSymbol GetDynamicOperationContextType(NamedTypeSymbol contextType)
573yield return ((NamedTypeSymbol)member).GetCciAdapter();
600foreach (var member in (symbol.IsNamespace ? symbol.GetMembers() : symbol.GetTypeMembers().Cast<NamedTypeSymbol, Symbol>()))
607if (namespaceOrType is NamedTypeSymbol { IsExtension: true })
637foreach (var type in symbol.GetTypeMembers(""))
701internal static HashSet<NamedTypeSymbol> GetForwardedTypes(SourceAssemblySymbol sourceAssembly, ArrayBuilder<Cci.ExportedType>? builder, EmitContext? context)
703var seenTopLevelForwardedTypes = new HashSet<NamedTypeSymbol>();
718var exportedNamesMap = new Dictionary<string, NamedTypeSymbol>(StringOrdinalComparer.Instance);
731var type = (NamedTypeSymbol)exportedType.Type.GetInternalSymbol();
756NamedTypeSymbol contender;
788HashSet<NamedTypeSymbol> seenTopLevelTypes,
789CommonAssemblyWellKnownAttributeData<NamedTypeSymbol> wellKnownAttributeData,
798var stack = ArrayBuilder<(NamedTypeSymbol type, int parentIndex)>.GetInstance();
801IEnumerable<NamedTypeSymbol> orderedForwardedTypes = wellKnownAttributeData.ForwardedTypes;
808foreach (NamedTypeSymbol forwardedType in orderedForwardedTypes)
810NamedTypeSymbol originalDefinition = forwardedType.OriginalDefinition;
837static void processTopItemFromStack(ArrayBuilder<(NamedTypeSymbol type, int parentIndex)> stack, EmitContext context, ArrayBuilder<Cci.ExportedType> builder)
857ImmutableArray<NamedTypeSymbol> nested = type.GetTypeMembers(); // Ordered.
925static void pushNestedTypes(ArrayBuilder<(NamedTypeSymbol type, int parentIndex)> stack, int index, ImmutableArray<NamedTypeSymbol> nested)
939static void pushAndProcessNestedTypes(ArrayBuilder<(NamedTypeSymbol type, int parentIndex)> stack, EmitContext context, int index, ImmutableArray<NamedTypeSymbol> nested, ArrayBuilder<Cci.ExportedType> builder)
964private NamedTypeSymbol GetUntranslatedSpecialType(SpecialType specialType, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
968var typeSymbol = SourceModule.ContainingAssembly.GetSpecialType(specialType);
996var namedType = typeRef.GetInternalSymbol() as NamedTypeSymbol;
1105NamedTypeSymbol namedTypeSymbol,
1166NamedTypeSymbol container = namedTypeSymbol.ContainingType;
1210else if (namedTypeSymbol.NativeIntegerUnderlyingType is NamedTypeSymbol underlyingType)
1227private void CheckTupleUnderlyingType(NamedTypeSymbol namedTypeSymbol, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
1233var declaredBase = namedTypeSymbol.BaseTypeNoUseSiteDiagnostics;
1262public static bool IsGenericType(NamedTypeSymbol toCheck)
1302return Translate((NamedTypeSymbol)typeSymbol, syntaxNodeOpt, diagnostics);
1400NamedTypeSymbol container = methodSymbol.ContainingType;
1474NamedTypeSymbol container = methodSymbol.ContainingType;
1613public NamedTypeSymbol SetFixedImplementationType(SourceMemberFieldSymbol field)
1617Interlocked.CompareExchange(ref _fixedImplementationTypes, new Dictionary<FieldSymbol, NamedTypeSymbol>(), null);
1622NamedTypeSymbol result;
1739NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1760NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1823NamedTypeSymbol booleanType = Compilation.GetSpecialType(SpecialType.System_Boolean);
2078internal MethodSymbol EnsureInlineArrayAsSpanExists(SyntaxNode syntaxNode, NamedTypeSymbol spanType, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2095internal NamedTypeSymbol EnsureInlineArrayTypeExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, int arrayLength, DiagnosticBag diagnostics)
2115return (NamedTypeSymbol)typeAdapter.GetInternalSymbol()!;
2118internal NamedTypeSymbol EnsureReadOnlyListTypeExists(SyntaxNode syntaxNode, SynthesizedReadOnlyListKind kind, DiagnosticBag diagnostics)
2126NamedTypeSymbol typeSymbol;
2136typeSymbol = (NamedTypeSymbol)typeAdapter.GetInternalSymbol()!;
2147internal MethodSymbol EnsureInlineArrayAsReadOnlySpanExists(SyntaxNode syntaxNode, NamedTypeSymbol spanType, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2164internal MethodSymbol EnsureInlineArrayElementRefExists(SyntaxNode syntaxNode, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2180internal MethodSymbol EnsureInlineArrayElementRefReadOnlyExists(SyntaxNode syntaxNode, NamedTypeSymbol intType, DiagnosticBag diagnostics)
2242public sealed override ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(DiagnosticBag diagnostics)
2253internal virtual ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(BindingDiagnosticBag diagnostics)
2268public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.INestedTypeDefinition nestedType)
2270Debug.Assert(container is not NamedTypeSymbol { IsExtension: true } || nestedType.GetInternalSymbol() is FixedFieldImplementationType);
2274public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IFieldDefinition field)
2276Debug.Assert(container is not NamedTypeSymbol { IsExtension: true });
2280public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IMethodDefinition method)
2282Debug.Assert(container is not NamedTypeSymbol { IsExtension: true });
2286public override void AddSynthesizedDefinition(NamedTypeSymbol container, Cci.IPropertyDefinition property)
2288Debug.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 (80)
942static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
1199var type = method.ContainingType;
1961if (node is BoundLambda boundLambda && originalSymbol is LambdaSymbol l && updatedSymbol is NamedTypeSymbol n)
3185type = ((NamedTypeSymbol)returnType.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics.Single();
3764return type.IsErrorType() || type.IsDynamic() || type.HasUseSiteError || (type.IsAnonymousType && canIgnoreAnonymousType((NamedTypeSymbol)type));
3766static bool canIgnoreAnonymousType(NamedTypeSymbol type)
3782(LambdaSymbol l, NamedTypeSymbol n) _ when n.IsDelegateType() => AreLambdaAndNewDelegateSimilar(l, n),
3790private static bool AreLambdaAndNewDelegateSimilar(LambdaSymbol l, NamedTypeSymbol n)
4210var containingType = constructor?.ContainingType;
4438var extension = symbol.OriginalDefinition.ContainingType;
4717var members = ((NamedTypeSymbol)type).GetMembersUnordered();
4764var anonymousType = (NamedTypeSymbol)node.Type;
4852NamedTypeSymbol spanType => getSpanElementType(spanType),
4929NamedTypeSymbol spanType => setSpanElementType(spanType, inferredType),
4937static TypeWithAnnotations getSpanElementType(NamedTypeSymbol namedType)
4944static TypeSymbol setSpanElementType(NamedTypeSymbol namedType, TypeWithAnnotations elementType)
5104type = TypeWithAnnotations.Create(((NamedTypeSymbol)node.Type).OriginalDefinition.Construct(ImmutableArray.Create(type)));
5449NamedTypeSymbol extension = method.OriginalDefinition.ContainingType;
5811var containingType = this._symbol?.ContainingType;
5832for (NamedTypeSymbol baseType = effectiveBase(type); !(baseType is null); baseType = baseType.BaseTypeNoUseSiteDiagnostics)
5837foreach (NamedTypeSymbol interfaceType in inheritedInterfaces(type))
5843static NamedTypeSymbol effectiveBase(TypeSymbol type) => type switch
5849static ImmutableArray<NamedTypeSymbol> inheritedInterfaces(TypeSymbol type) => type switch
5853_ => ImmutableArray<NamedTypeSymbol>.Empty,
6880var wellKnownType = wellKnownMethod.ContainingType;
6882var constructedType = wellKnownType.Construct(ImmutableArray.Create(parameterType));
7695var type = method.ContainingType;
8637private void CheckExtensionConstraints(SyntaxNode syntax, NamedTypeSymbol extension)
8809var containingType = type as NamedTypeSymbol;
8829var symbolContainer = symbol.ContainingType;
8854foreach (var @interface in containingType.AllInterfacesNoUseSiteDiagnostics)
8881bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
9060var tupleOpt = (NamedTypeSymbol?)node.Type;
9099NamedTypeSymbol tupleType,
9107Debug.Assert(values.Length == (useRestField ? Math.Min(tupleType.TupleElements.Length, NamedTypeSymbol.ValueTupleRestPosition) : tupleType.TupleElements.Length));
9115n = Math.Min(n, NamedTypeSymbol.ValueTupleRestPosition - 1);
9123values.Length == NamedTypeSymbol.ValueTupleRestPosition &&
9124tupleType.GetMembers(NamedTypeSymbol.ValueTupleRestFieldName).FirstOrDefault() is FieldSymbol restField)
9126var argOrdinal = getArgumentOrdinalFromParameterOrdinal(NamedTypeSymbol.ValueTupleRestPosition - 1);
9174var valueTuple = operandType as NamedTypeSymbol;
9181var targetElements = ((NamedTypeSymbol)targetType).TupleElements;
9305private void ReportNullabilityMismatchWithTargetDelegate(Location location, NamedTypeSymbol delegateType, BoundLambda lambda)
9501NamedTypeSymbol { TypeKind: TypeKind.Delegate, DelegateInvokeMethod: { Parameters: { } parameters } signature } => (signature, parameters),
9510var delegateType = targetType.GetDelegateType();
10245Action<NamedTypeSymbol>? analysisCompletion;
10247var delegateType = (NamedTypeSymbol)node.Type;
10275TypeWithState setAnalyzedNullability(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, Action<NamedTypeSymbol>? analysisCompletion, bool isTargetTyped)
10292void setAnalyzedNullabilityAsContinuation(BoundDelegateCreationExpression node, Action<NamedTypeSymbol>? analysisCompletion)
10298var delegateType = (NamedTypeSymbol)resultTypeWithAnnotations.Type;
10306Action<NamedTypeSymbol>? visitMethodGroupArgument(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group)
10314Action<NamedTypeSymbol>? analyzeMethodGroupConversion(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group, bool isTargetTyped)
10335Action<NamedTypeSymbol>? analyzeMethodGroupConversionAsContinuation(BoundDelegateCreationExpression node, BoundMethodGroup group)
10337return (NamedTypeSymbol delegateType) =>
10343Action<NamedTypeSymbol>? visitLambdaArgument(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10350Action<NamedTypeSymbol>? analyzeLambdaConversion(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
10367Action<NamedTypeSymbol> analyzeLambdaConversionAsContinuation(BoundLambda lambda)
10369return (NamedTypeSymbol delegateType) => analyzeLambdaConversion(delegateType, lambda, isTargetTyped: false);
10372Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
10386Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
10406Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg)
10408return (NamedTypeSymbol delegateType) => analyzeDelegateConversion(delegateType, arg, isTargetTyped: false);
10521private void VisitLambda(BoundLambda node, NamedTypeSymbol? delegateTypeOpt, Optional<LocalState> initialState = default)
11073if (expr.Type is NamedTypeSymbol { IsTupleType: true } tupleType)
11674valueProperty = getValue?.AsMember((NamedTypeSymbol)containingType)?.AssociatedSymbol;
11848NamedTypeSymbol spanType = compilation.GetWellKnownType(wellKnownSpan);
12160NamedTypeSymbol extension = method.OriginalDefinition.ContainingType;
12401var 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);
78public 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)
327internal abstract NamedTypeSymbol? LookupDeclaredTopLevelMetadataType(ref MetadataTypeName emittedName);
339internal abstract NamedTypeSymbol LookupDeclaredOrForwardedTopLevelMetadataType(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies);
346public NamedTypeSymbol? ResolveForwardedType(string fullyQualifiedMetadataName)
360internal virtual NamedTypeSymbol? TryLookupForwardedMetadataTypeWithCycleDetection(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies)
377internal abstract IEnumerable<NamedTypeSymbol> GetAllTopLevelForwardedTypes();
385internal abstract NamedTypeSymbol GetDeclaredSpecialType(ExtendedSpecialType type);
391internal virtual void RegisterDeclaredSpecialType(NamedTypeSymbol corType)
411internal virtual NamedTypeSymbol GetNativeIntegerType(NamedTypeSymbol underlyingType)
617internal NamedTypeSymbol GetSpecialType(ExtendedSpecialType type)
634internal NamedTypeSymbol ObjectType
647internal NamedTypeSymbol GetPrimitiveType(Microsoft.Cci.PrimitiveTypeCode type)
658public NamedTypeSymbol? GetTypeByMetadataName(string fullyQualifiedMetadataName)
665var result = this.GetTypeByMetadataName(fullyQualifiedMetadataName, includeReferences: false, isWellKnownType: false, conflicts: out var _);
696internal NamedTypeSymbol? GetTypeByMetadataName(
705NamedTypeSymbol? type;
816var symbol = (NamedTypeSymbol?)GetTypeByReflectionType(nestedTypes[i].AsType());
855NamedTypeSymbol? symbol = GetTopLevelTypeByMetadataName(ref mdName, assemblyId, includeReferences: true, isWellKnownType: false, conflicts: out var _);
872private NamedTypeSymbol? ApplyGenericArguments(NamedTypeSymbol symbol, Type[] typeArguments, ref int currentTypeArgument)
899internal NamedTypeSymbol? GetTopLevelTypeByMetadataName(
918NamedTypeSymbol? result;
943NamedTypeSymbol? corLibCandidate = GetTopLevelTypeByMetadataName(CorLibrary, ref metadataName, assemblyOpt);
978NamedTypeSymbol? candidate = GetTopLevelTypeByMetadataName(assembly, ref metadataName, assemblyOpt);
1033bool isValidCandidate([NotNullWhen(true)] NamedTypeSymbol? candidate, bool isWellKnownType)
1041private bool IsInCorLib(NamedTypeSymbol type)
1046private bool IsValidWellKnownType(NamedTypeSymbol? result)
1059private static NamedTypeSymbol? GetTopLevelTypeByMetadataName(AssemblySymbol assembly, ref MetadataTypeName metadataName, AssemblyIdentity? assemblyOpt)
1066var 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);
124internal override NamedTypeSymbol? BaseTypeNoUseSiteDiagnostics => null;
140public override ImmutableArray<NamedTypeSymbol> GetTypeMembers() => throw ExceptionUtilities.Unreachable();
142public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name) => throw ExceptionUtilities.Unreachable();
158internal override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol>? basesBeingResolved = null) => ImmutableArray<NamedTypeSymbol>.Empty;
164var thisDelegateType = GetInternalDelegateType();
166var otherDelegateType = otherType.GetInternalDelegateType();
173var mergedDelegateType = (NamedTypeSymbol)thisDelegateType.MergeEquivalentTypes(otherDelegateType, variance);
181var thisDelegateType = GetInternalDelegateType();
186return WithDelegateType((NamedTypeSymbol)thisDelegateType.SetNullabilityForReferenceTypes(transform));
189private FunctionTypeSymbol WithDelegateType(NamedTypeSymbol delegateType)
191var thisDelegateType = GetInternalDelegateType();
214var thisDelegateType = GetInternalDelegateType();
215var 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();
1833public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name)
1841return StaticCast<NamedTypeSymbol>.From(t);
1844return ImmutableArray<NamedTypeSymbol>.Empty;
1847public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name, int arity)
2132private NamedTypeSymbol MakeAcyclicBaseType()
2134NamedTypeSymbol declaredBase = GetDeclaredBaseType(null);
2151private ImmutableArray<NamedTypeSymbol> MakeAcyclicInterfaces()
2760internal override NamedTypeSymbol ComImportCoClass
2778var coClassType = ((object)type != null && (type.TypeKind == TypeKind.Class || type.IsErrorType())) ? (NamedTypeSymbol)type : null;
2974protected override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
3002internal override NamedTypeSymbol AsNativeInteger()
3013internal override NamedTypeSymbol NativeIntegerUnderlyingType => null;
3063protected sealed override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
3108internal sealed override NamedTypeSymbol AsNativeInteger() => throw ExceptionUtilities.Unreachable();
3110internal sealed override NamedTypeSymbol NativeIntegerUnderlyingType => null;
3164var container = this.ContainingType;
Symbols\NamedTypeSymbol.cs (50)
96public abstract NamedTypeSymbol ConstructedFrom { get; }
102public virtual NamedTypeSymbol EnumUnderlyingType
110public override NamedTypeSymbol ContainingType
118return this.ContainingSymbol as NamedTypeSymbol;
417foreach (NamedTypeSymbol nestedType in GetTypeMembersUnordered())
818public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers();
826public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers(ReadOnlyMemory<char> name, int arity);
909internal abstract NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved);
911internal abstract ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved);
947NamedTypeSymbol other = t2 as NamedTypeSymbol;
951var thisOriginalDefinition = this.OriginalDefinition;
952var otherOriginalDefinition = other.OriginalDefinition;
986private bool EqualsComplicatedCases(NamedTypeSymbol other, TypeCompareKind comparison)
1042bool tupleNamesEquals(NamedTypeSymbol other, TypeCompareKind comparison)
1122NamedTypeSymbol result = haveChanges ? this.WithTypeArguments(allTypeArguments.ToImmutable()) : this;
1127internal NamedTypeSymbol WithTypeArguments(ImmutableArray<TypeWithAnnotations> allTypeArguments)
1129var definition = this.OriginalDefinition;
1145bool haveChanges = MergeEquivalentTypeArguments(this, (NamedTypeSymbol)other, variance, allTypeParameters, allTypeArguments);
1147NamedTypeSymbol result;
1161return IsTupleType ? MergeTupleNames((NamedTypeSymbol)other, result) : result;
1171NamedTypeSymbol typeA,
1172NamedTypeSymbol typeB,
1183var definition = typeA.OriginalDefinition;
1246public NamedTypeSymbol Construct(params TypeSymbol[] typeArguments)
1257public NamedTypeSymbol Construct(ImmutableArray<TypeSymbol> typeArguments)
1267public NamedTypeSymbol Construct(IEnumerable<TypeSymbol> typeArguments)
1276public NamedTypeSymbol ConstructUnboundGenericType()
1281internal NamedTypeSymbol GetUnboundGenericTypeOrSelf()
1309private NamedTypeSymbol ConstructWithoutModifiers(ImmutableArray<TypeSymbol> typeArguments, bool unbound)
1325internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments)
1330internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1367protected virtual NamedTypeSymbol ConstructCore(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1379for (var current = this; !ReferenceEquals(current, null); current = current.ContainingType)
1410var outer = ContainingType;
1431var outer = ContainingType;
1450var outer = ContainingType;
1469public new virtual NamedTypeSymbol OriginalDefinition
1495internal virtual NamedTypeSymbol AsMember(NamedTypeSymbol newOwner)
1524NamedTypeSymbol currentType = this;
1569NamedTypeSymbol @base = this.BaseTypeNoUseSiteDiagnostics;
1606var @base = this.BaseTypeNoUseSiteDiagnostics;
1670var baseType = this.BaseTypeNoUseSiteDiagnostics;
1739internal virtual NamedTypeSymbol ComImportCoClass
1803typeToCheck = ((NamedTypeSymbol)typeToCheck).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestPosition - 1].Type;
1807arity = (typeToCheck as NamedTypeSymbol)?.Arity ?? 0;
1809if (arity > 0 && arity < ValueTupleRestPosition && ((NamedTypeSymbol)typeToCheck).IsTupleTypeOfCardinality(out tupleCardinality))
1828internal abstract NamedTypeSymbol AsNativeInteger();
1835internal 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)
619internal override void EarlyDecodeWellKnownAttributeType(NamedTypeSymbol attributeType, AttributeSyntax attributeSyntax)
642internal override (CSharpAttributeData?, BoundAttribute?) EarlyDecodeWellKnownAttribute(ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
731private (CSharpAttributeData?, BoundAttribute?) EarlyDecodeAttributeForDefaultParameterValue(AttributeDescription description, ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
1010((NamedTypeSymbol)arg.TypeInternal).EnumUnderlyingType.SpecialType :
1292if (Type is not NamedTypeSymbol { IsInterpolatedStringHandlerType: true } handlerType)
1698MethodSymbol? collectionBuilderMethod = binder.GetAndValidateCollectionBuilderMethod(syntax, (NamedTypeSymbol)Type, diagnostics, elementType: out _);
1704if (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)
1885var baseType = BaseTypeNoUseSiteDiagnostics;
1960bool hasBaseTypeOrInterface(Func<NamedTypeSymbol, bool> predicate)
2009Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>? typesByName,
2407Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>>? typesByName,
2419IEnumerable<IGrouping<string, NamedTypeSymbol>> extensionsByReceiverType = GetTypeMembers("").Where(static t => t.IsExtension).GroupBy(static t => ((SourceNamedTypeSymbol)t).ExtensionGroupingName!);
2435static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<string, NamedTypeSymbol> grouping)
2439NamedTypeSymbol? masterExtension = null;
2442foreach (NamedTypeSymbol item in grouping)
2444var extension = item;
2495static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2664BaseTypeAnalysis.StructDependsOn((NamedTypeSymbol)type, this) &&
2974var instanceMap = new Dictionary<NamedTypeSymbol, NamedTypeSymbol>(ReferenceEqualityComparer.Instance);
2995var type = (NamedTypeSymbol)f.Type;
3006private static bool InfiniteFlatteningGraph(SourceMemberContainerTypeSymbol top, NamedTypeSymbol t, Dictionary<NamedTypeSymbol, NamedTypeSymbol> instanceMap)
3009var tOriginal = t.OriginalDefinition;
3010if (instanceMap.TryGetValue(tOriginal, out var oldInstance))
3024var type = (NamedTypeSymbol)f.Type;
3149Dictionary<ReadOnlyMemory<char>, ImmutableArray<NamedTypeSymbol>> typesByName)
3151foreach ((ReadOnlyMemory<char> name, ImmutableArray<NamedTypeSymbol> types) in typesByName)
3794ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3852foreach (var type in GetTypeMembers(""))
5088var currentBaseType = this.BaseTypeNoUseSiteDiagnostics;
5884var baseType = BaseTypeNoUseSiteDiagnostics;
5889foreach (var @interface in GetInterfacesToEmit())
5922NamedTypeSymbol baseType = this.BaseTypeNoUseSiteDiagnostics;
6001foreach (var type in this.GetTypeMembers())
6021public 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;
1175NamedTypeSymbol extension = extensionMember.ContainingType;
1184NamedTypeSymbol? constructedExtension = inferExtensionTypeArguments(extension, receiverType, compilation);
1207static NamedTypeSymbol? inferExtensionTypeArguments(NamedTypeSymbol extension, TypeSymbol receiverType, CSharpCompilation compilation)
1227var 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;
337var attributeTypesBuilder = new NamedTypeSymbol[totalAttributesCount];
353ImmutableArray<NamedTypeSymbol> boundAttributeTypes = attributeTypesBuilder.AsImmutableOrNull();
555var boundTypeSymbol = (NamedTypeSymbol)boundType.Type;
771ImmutableArray<NamedTypeSymbol> boundAttributeTypes,
784var arguments = new EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation>();
789NamedTypeSymbol boundAttributeType = boundAttributeTypes[i];
818private void EarlyDecodeWellKnownAttributeTypes(ImmutableArray<NamedTypeSymbol> attributeTypes, ImmutableArray<AttributeSyntax> attributeSyntaxList)
825var attributeType = attributeTypes[i];
855HashSet<NamedTypeSymbol> uniqueAttributeTypes = new HashSet<NamedTypeSymbol>();
896HashSet<NamedTypeSymbol> uniqueAttributeTypes)
900NamedTypeSymbol 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);
730var interfaceType = interfaceMember.ContainingType;
809NamedTypeSymbol interfaceType = interfaceMember.ContainingType;
1013if (implementingType is NamedTypeSymbol named &&
1107private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1155ImmutableArray<NamedTypeSymbol> allInterfaces = implementingType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1241NamedTypeSymbol implementingInterface = inplementingAccessor1.ContainingType;
1262ImmutableArray<NamedTypeSymbol> allInterfaces,
1267var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1269foreach (var interfaceType in allInterfaces)
1286(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1288NamedTypeSymbol previousContainingType = previous.ContainingType;
1320MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases = interfaceType.InterfacesAndTheirBaseInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1379internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1383NamedTypeSymbol containingType = interfaceMember.ContainingType;
2085var @interface = interfaceMember.ContainingType;
2150var @interface = interfaceMember.ContainingType;
2537foreach (FieldSymbol field in ((NamedTypeSymbol)this).OriginalDefinition.GetFieldsToEmit())
2555elementField = 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)