Binder\Binder_Attributes.cs (19)
30ImmutableArray<Binder> binders, ImmutableArray<AttributeSyntax> attributesToBind, Symbol ownerSymbol, NamedTypeSymbol[] boundAttributeTypes,
55var boundTypeSymbol = (NamedTypeSymbol)boundType.Type;
75ImmutableArray<NamedTypeSymbol> boundAttributeTypes,
92NamedTypeSymbol boundAttributeType = boundAttributeTypes[i];
128AttributeSyntax node, NamedTypeSymbol boundAttributeType,
139internal BoundAttribute BindAttribute(AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
156private BoundAttribute BindAttributeCore(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];
275var attributeType = (NamedTypeSymbol)boundAttribute.Type;
400protected bool IsAttributeConditionallyOmitted(NamedTypeSymbol attributeType, SyntaxTree? syntaxTree, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
421var baseType = attributeType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
440NamedTypeSymbol attributeType,
503private BoundAssignmentOperator BindNamedAttributeArgument(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
574private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
589private TypeSymbol BindNamedAttributeArgumentType(AttributeArgumentSyntax namedArgument, Symbol namedArgumentNameSymbol, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
Binder\Binder_Conversions.cs (18)
111NamedTypeSymbol.ReportTupleNamesMismatchesIfAny(destination, sourceTuple, diagnostics);
202BindUnconvertedInterpolatedExpressionToHandlerType(source, (NamedTypeSymbol)destination, diagnostics),
383return binder.BindClassCreationExpression(syntax, type.Name, typeNode: syntax, (NamedTypeSymbol)type, arguments, diagnostics, initializerOpt, wasTargetTyped: true);
387return binder.BindDelegateCreationExpression(syntax, (NamedTypeSymbol)type, arguments, initializerOpt, wasTargetTyped: true, diagnostics);
389return binder.BindInterfaceCreationExpression(syntax, (NamedTypeSymbol)type, diagnostics, typeNode: syntax, arguments, initializerOpt, wasTargetTyped: true);
652var delegateType = source.GetInferredDelegateType(ref useSiteInfo);
703var boundLambda = unboundLambda.Bind((NamedTypeSymbol)destination, isExpressionTree: destination.IsGenericOrNonGenericExpressionType(out _)).WithInAnonymousFunctionConversion();
779var delegateType = targetType.GetDelegateType();
911NamedTypeSymbol targetType = (NamedTypeSymbol)destinationWithoutNullable;
914NamedTypeSymbol.ReportTupleNamesMismatchesIfAny(targetType, sourceTuple, diagnostics);
922if (sourceTuple.Type is NamedTypeSymbol { IsTupleType: true } sourceType)
1205var containingType = this.ContainingType;
1276Debug.Assert(delegateType is NamedTypeSymbol { TypeKind: TypeKind.Delegate, DelegateInvokeMethod: { HasUseSiteError: false } }
1282NamedTypeSymbol { DelegateInvokeMethod: { } invokeMethod } => invokeMethod,
1498NamedTypeSymbol delegateType,
1644var underlyingType = ((NamedTypeSymbol)destination).EnumUnderlyingType;
Binder\Binder_Expressions.cs (69)
50var containingType = memberOpt?.ContainingType;
222internal NamedTypeSymbol CreateErrorType(string name = "")
403var delegateType = expr.GetInferredDelegateType(ref useSiteInfo);
942var tupleType = NamedTypeSymbol.CreateTuple(
1020NamedTypeSymbol tupleTypeOpt = null;
1028tupleTypeOpt = NamedTypeSymbol.CreateTuple(node.Location, elements, locations, elementNames,
1034NamedTypeSymbol.VerifyTupleTypePresent(elements.Length, node, this.Compilation, diagnostics);
1168if (name == null || NamedTypeSymbol.IsTupleElementNameReserved(name) != -1)
1543symbol = ConstructNamedTypeUnlessTypeArgumentOmitted(node, (NamedTypeSymbol)symbol, typeArgumentList, typeArgumentsWithAnnotations, diagnostics);
1568var type = BindNativeIntegerSymbolIfAny(identifier, diagnostics);
1755var currentType = this.ContainingType;
1763var declaringType = members[0].ContainingType;
1927primaryCtor.ContainingSymbol is NamedTypeSymbol { IsRecord: false, IsRecordStruct: false } ||
2005return new BoundTypeExpression(node, alias, (NamedTypeSymbol)symbol, hasErrors: isError);
2071var currentType = this.ContainingType;
2073NamedTypeSymbol declaringType = member.ContainingType;
2123private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType)
2274private BoundThisReference ThisReference(SyntaxNode node, NamedTypeSymbol thisTypeOpt, bool hasErrors = false, bool wasCompilerGenerated = false)
2359NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2439NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, node);
2466NamedTypeSymbol nullableType = GetSpecialType(SpecialType.System_Nullable_T, diagnostics, operand);
2566!MethodGroupConversionDoesNotExistOrHasErrors((BoundMethodGroup)operand, (NamedTypeSymbol)targetType, syntax.Location, diagnostics, out _))
3898var spanType = GetWellKnownType(WellKnownType.System_Span_T, diagnostics, node);
4119NamedTypeSymbol containingType = constructor.ContainingType;
4132NamedTypeSymbol baseType = containingType.BaseTypeNoUseSiteDiagnostics;
4141NamedTypeSymbol initializerType = containingType;
4371static void validateRecordCopyConstructor(MethodSymbol constructor, NamedTypeSymbol baseType, MethodSymbol resultMember, Location errorLocation, BindingDiagnosticBag diagnostics)
4446return BindClassCreationExpression(node, (NamedTypeSymbol)type, GetName(node.Type), diagnostics, originalType);
4449return BindDelegateCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
4452return BindInterfaceCreationExpression(node, (NamedTypeSymbol)type, diagnostics);
4481private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
4490private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics)
4602var sourceDelegate = (NamedTypeSymbol)argument.Type;
4659private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null)
4694NamedTypeSymbol type,
5601NamedTypeSymbol containingType = this.ContainingType;
5635NamedTypeSymbol type,
5803private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
5812private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
5826NamedTypeSymbol coClassType = type.ComImportCoClass;
5838private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
5921NamedTypeSymbol interfaceType,
5922NamedTypeSymbol coClassType,
6019NamedTypeSymbol typeContainingConstructors,
6158private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
6164private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, bool allowProtectedConstructorsOfBaseType, out ImmutableArray<MethodSymbol> allInstanceConstructors, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
6171type = type.GetNonErrorGuess() as NamedTypeSymbol ?? type;
6178private static ConstantValue FoldParameterlessValueTypeConstructor(NamedTypeSymbol type)
6286var type = GetWellKnownType(WellKnownType.System_ReadOnlySpan_T, diagnostics, node).Construct(GetSpecialType(SpecialType.System_Byte, diagnostics, node));
6719var type = (NamedTypeSymbol)sym;
7033var namedType = ((NamedTypeSymbol)type).ConstructedFrom;
7224var type = (NamedTypeSymbol)symbol;
7438NamedTypeSymbol type = fieldSymbol.ContainingType;
7539NamedTypeSymbol enumType = null;
7559enumType = (NamedTypeSymbol)fieldType;
7564NamedTypeSymbol underlyingType = enumType.EnumUnderlyingType;
7583var containingType = this.ContainingType;
8032var int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
8104NamedTypeSymbol int32 = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
9093internal NamedTypeSymbol? GetMethodGroupDelegateType(BoundMethodGroup node)
9182internal NamedTypeSymbol? GetMethodGroupOrLambdaDelegateType(
9241var delegateType = Compilation.GetWellKnownType(wkDelegateType);
9274static bool checkConstraints(CSharpCompilation compilation, ConversionsBase conversions, NamedTypeSymbol delegateType, ImmutableArray<TypeWithAnnotations> typeArguments)
Binder\Binder_InterpolatedString.cs (17)
41var stringType = GetSpecialType(SpecialType.System_String, diagnostics, node);
55var intType = GetSpecialType(SpecialType.System_Int32, diagnostics, node);
281var interpolatedStringHandlerType = Compilation.GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_DefaultInterpolatedStringHandler);
312var interpolatedStringHandlerType = Compilation.GetWellKnownType(WellKnownType.System_Runtime_CompilerServices_DefaultInterpolatedStringHandler);
371var @string = GetSpecialType(SpecialType.System_String, diagnostics, rootSyntax);
411NamedTypeSymbol interpolatedStringHandlerType,
430NamedTypeSymbol interpolatedStringHandlerType,
457NamedTypeSymbol interpolatedStringHandlerType,
489NamedTypeSymbol interpolatedStringHandlerType,
565var intType = GetSpecialType(SpecialType.System_Int32, diagnostics, syntax);
576var boolType = GetSpecialType(SpecialType.System_Boolean, diagnostics, syntax);
671static void populateArguments(SyntaxNode syntax, ImmutableArray<BoundInterpolatedStringArgumentPlaceholder> additionalConstructorArguments, int baseStringLength, int numFormatHoles, NamedTypeSymbol intType, ArrayBuilder<BoundExpression> argumentsBuilder)
685var objectType = GetSpecialType(SpecialType.System_Object, diagnostics, unconvertedInterpolatedString.Syntax);
830var expected = builderPatternExpectsBool == true ? Compilation.GetSpecialType(SpecialType.System_Boolean) : Compilation.GetSpecialType(SpecialType.System_Void);
860Debug.Assert(interpolatedStringParameter is { Type: NamedTypeSymbol { IsInterpolatedStringHandlerType: true } }
865Type: ArrayTypeSymbol { ElementType: NamedTypeSymbol { IsInterpolatedStringHandlerType: true } },
1043(NamedTypeSymbol)interpolatedStringParameter.Type,
Binder\Binder_Lookup.cs (69)
189this.LookupMembersInInterface(result, (NamedTypeSymbol)type, name, arity, basesBeingResolved, options, originalBinder, diagnose, ref useSiteInfo);
700var namedType = (NamedTypeSymbol)symbol;
811PooledHashSet<NamedTypeSymbol> visited = null;
821NamedTypeSymbol namedType = currentType as NamedTypeSymbol;
875NamedTypeSymbol type,
912NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
916foreach (var iface in type.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
957private void GetWellKnownWinRTMemberInterfaces(out NamedTypeSymbol idictSymbol, out NamedTypeSymbol iroDictSymbol, out NamedTypeSymbol iListSymbol, out NamedTypeSymbol iCollectionSymbol, out NamedTypeSymbol inccSymbol, out NamedTypeSymbol inpcSymbol)
967private static bool ShouldAddWinRTMembersForInterface(NamedTypeSymbol iface, NamedTypeSymbol idictSymbol, NamedTypeSymbol iroDictSymbol, NamedTypeSymbol iListSymbol, NamedTypeSymbol iCollectionSymbol, NamedTypeSymbol inccSymbol, NamedTypeSymbol inpcSymbol)
969var iFaceOriginal = iface.OriginalDefinition;
1014NamedTypeSymbol type,
1036private static ImmutableArray<NamedTypeSymbol> GetBaseInterfaces(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1045return ImmutableArray<NamedTypeSymbol>.Empty;
1052return ImmutableArray<NamedTypeSymbol>.Empty;
1068var cycleGuard = ConsList<NamedTypeSymbol>.Empty.Prepend(type.OriginalDefinition);
1072var result = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1073var visited = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.ConsiderEverything);
1082foreach (var candidate in result)
1089static void addAllInterfaces(NamedTypeSymbol @interface, HashSet<NamedTypeSymbol> visited, ArrayBuilder<NamedTypeSymbol> result, ConsList<TypeSymbol> basesBeingResolved, ConsList<NamedTypeSymbol> cycleGuard)
1091NamedTypeSymbol originalDefinition;
1097ImmutableArray<NamedTypeSymbol> baseInterfaces = @interface.GetDeclaredInterfaces(basesBeingResolved);
1104var baseInterface = baseInterfaces[i];
1117ImmutableArray<NamedTypeSymbol> interfaces,
1130HashSet<NamedTypeSymbol> seenInterfaces = null;
1133seenInterfaces = new HashSet<NamedTypeSymbol>(Symbols.SymbolEqualityComparer.IgnoringNullable);
1136foreach (NamedTypeSymbol baseInterface in interfaces)
1150private void LookupMembersInInterface(LookupResult current, NamedTypeSymbol type, string name, int arity, ConsList<TypeSymbol> basesBeingResolved, LookupOptions options, Binder originalBinder, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1187private static bool IsDerivedType(NamedTypeSymbol baseType, NamedTypeSymbol derivedType, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1193for (NamedTypeSymbol b = derivedType.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo); (object)b != null; b = b.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1200PooledHashSet<NamedTypeSymbol> visited = null;
1202for (var b = (NamedTypeSymbol)derivedType.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited);
1204b = (NamedTypeSymbol)b.GetNextBaseTypeNoUseSiteDiagnostics(basesBeingResolved, compilation, ref visited))
1238var hiddenContainer = sym.ContainingType;
1244var hidingContainer = hidingSym.ContainingType;
1297return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1301return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers(name);
1325return ((NamedTypeSymbol)nsOrType).GetEarlyAttributeDecodingMembers();
1339while (symbol is not null and not NamedTypeSymbol { AssociatedFileIdentifier: not null })
1356var symbolFileIdentifier = ((NamedTypeSymbol)symbol).AssociatedFileIdentifier.GetValueOrDefault();
1772NamedTypeSymbol namedType = (NamedTypeSymbol)symbol;
1972private void AddWinRTMembersLookupSymbolsInfo(LookupSymbolsInfo result, NamedTypeSymbol type, LookupOptions options, Binder originalBinder, TypeSymbol accessThroughType)
1974NamedTypeSymbol idictSymbol, iroDictSymbol, iListSymbol, iCollectionSymbol, inccSymbol, inpcSymbol;
1978foreach (var iface in type.AllInterfacesNoUseSiteDiagnostics)
1989PooledHashSet<NamedTypeSymbol> visited = null;
1998NamedTypeSymbol namedType = type as NamedTypeSymbol;
2024foreach (var baseInterface in type.AllInterfacesNoUseSiteDiagnostics)
2040NamedTypeSymbol effectiveBaseClass = type.EffectiveBaseClassNoUseSiteDiagnostics;
2043foreach (var baseInterface in type.AllEffectiveInterfacesNoUseSiteDiagnostics)
Binder\Binder_Patterns.cs (11)
224var systemRangeType = GetWellKnownType(WellKnownType.System_Range, diagnostics, node);
383var systemIndexType = GetWellKnownType(WellKnownType.System_Index, diagnostics, node);
996ShouldUseITupleForRecursivePattern(node, declType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
1105var objectType = Compilation.GetSpecialType(SpecialType.System_Object);
1132var objectType = Compilation.GetSpecialType(SpecialType.System_Object);
1170foundField = CheckIsTupleElement(subpatternSyntax.NameColon.Name, (NamedTypeSymbol)declType, name, i, diagnostics);
1190[NotNullWhen(true)] out NamedTypeSymbol? iTupleType,
1228[NotNullWhen(true)] out NamedTypeSymbol? iTupleType,
1275bool hasBaseInterface(TypeSymbol type, NamedTypeSymbol possibleBaseInterface)
1287private static FieldSymbol? CheckIsTupleElement(SyntaxNode node, NamedTypeSymbol tupleType, string name, int tupleIndex, BindingDiagnosticBag diagnostics)
1392ShouldUseITuple(node, strippedInputType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
Binder\Binder_Symbols.cs (36)
553var type = (NamedTypeSymbol)constructedType.Type;
568var type = BindPredefinedTypeSymbol(predefinedType, diagnostics);
732return NamedTypeSymbol.CreateTuple(syntax.Location,
788int reserved = NamedTypeSymbol.IsTupleElementNameReserved(name);
807private NamedTypeSymbol BindPredefinedTypeSymbol(PredefinedTypeSyntax node, BindingDiagnosticBag diagnostics)
989private NamedTypeSymbol BindNativeIntegerSymbolIfAny(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
1207NamedTypeSymbol unconstructedType = LookupGenericTypeName(
1209NamedTypeSymbol resultType;
1257private NamedTypeSymbol LookupGenericTypeName(
1297NamedTypeSymbol type = lookupResultSymbol as NamedTypeSymbol;
1370private NamedTypeSymbol ConstructNamedTypeUnlessTypeArgumentOmitted(SyntaxNode typeSyntax, NamedTypeSymbol type, SeparatedSyntaxList<TypeSyntax> typeArgumentsSyntax, ImmutableArray<TypeWithAnnotations> typeArguments, BindingDiagnosticBag diagnostics)
1551private NamedTypeSymbol ConstructNamedType(
1552NamedTypeSymbol type,
1595((NamedTypeSymbol)left).IsUnboundGenericType;
1602left = ((NamedTypeSymbol)left).OriginalDefinition;
1621var namedTypeRight = right.Symbol as NamedTypeSymbol;
1632internal NamedTypeSymbol GetSpecialType(SpecialType typeId, BindingDiagnosticBag diagnostics, SyntaxNode node)
1637internal static NamedTypeSymbol GetSpecialType(CSharpCompilation compilation, SpecialType typeId, SyntaxNode node, BindingDiagnosticBag diagnostics)
1639NamedTypeSymbol typeSymbol = compilation.GetSpecialType(typeId);
1645internal static NamedTypeSymbol GetSpecialType(CSharpCompilation compilation, SpecialType typeId, Location location, BindingDiagnosticBag diagnostics)
1647NamedTypeSymbol typeSymbol = compilation.GetSpecialType(typeId);
1727internal NamedTypeSymbol GetWellKnownType(WellKnownType type, BindingDiagnosticBag diagnostics, SyntaxNode node)
1736internal NamedTypeSymbol GetWellKnownType(WellKnownType type, BindingDiagnosticBag diagnostics, Location location)
1745internal static NamedTypeSymbol GetWellKnownType(CSharpCompilation compilation, WellKnownType type, BindingDiagnosticBag diagnostics, SyntaxNode node)
1750internal static NamedTypeSymbol GetWellKnownType(CSharpCompilation compilation, WellKnownType type, BindingDiagnosticBag diagnostics, Location location)
1752NamedTypeSymbol typeSymbol = compilation.GetWellKnownType(type);
1762internal NamedTypeSymbol GetWellKnownType(WellKnownType type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1764NamedTypeSymbol typeSymbol = this.Compilation.GetWellKnownType(type);
2157Compilation.IsAttributeType((NamedTypeSymbol)first) &&
2158Compilation.IsAttributeType((NamedTypeSymbol)second))
2221Emit.NoPia.EmbeddedTypesManager.IsValidEmbeddableType((NamedTypeSymbol)singleResult, where, diagnostics.DiagnosticBag);
2593var forwardedType =
Binder\ForEachLoopBinder.cs (12)
658nullableValueGetter = nullableValueGetter.AsMember((NamedTypeSymbol)collectionExprType);
894NamedTypeSymbol collectionType = (NamedTypeSymbol)builder.CollectionType;
952moveNextMethod = moveNextAsync.AsMember((NamedTypeSymbol)enumeratorType);
964builder.CurrentPropertyGetter = currentPropertyGetter.AsMember((NamedTypeSymbol)enumeratorType);
1548NamedTypeSymbol implementedIEnumerable = GetIEnumerableOfT(type, isAsync, Compilation, ref useSiteInfo, out foundMultiple);
1557var implementedNonGeneric = this.Compilation.GetSpecialType(SpecialType.System_Collections_IEnumerable);
1575internal static NamedTypeSymbol GetIEnumerableOfT(TypeSymbol type, bool isAsync, CSharpCompilation compilation, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool foundMultiple)
1577NamedTypeSymbol implementedIEnumerable = null;
1595private static void GetIEnumerableOfT(ImmutableArray<NamedTypeSymbol> interfaces, bool isAsync, CSharpCompilation compilation, ref NamedTypeSymbol result, ref bool foundMultiple)
1604foreach (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);
342NamedTypeSymbol containingType, // the symbol's containing type
353var originalContainingType = containingType.OriginalDefinition;
354var withinType = within as NamedTypeSymbol;
416NamedTypeSymbol withinType,
418NamedTypeSymbol originalContainingType,
459var current = withinType.OriginalDefinition;
494NamedTypeSymbol originalContainingType)
496Debug.Assert(within is NamedTypeSymbol || within is AssemblySymbol);
498var withinType = within as NamedTypeSymbol;
514NamedTypeSymbol withinType,
515NamedTypeSymbol originalContainingType)
523var current = withinType.OriginalDefinition;
545NamedTypeSymbol baseType,
553PooledHashSet<NamedTypeSymbol> interfacesLookedAt = null;
554ArrayBuilder<NamedTypeSymbol> baseInterfaces = null;
559interfacesLookedAt = PooledHashSet<NamedTypeSymbol>.GetInstance();
560baseInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
563PooledHashSet<NamedTypeSymbol> visited = null;
605NamedTypeSymbol currentBase = baseInterfaces.Pop();
624foreach (var candidate in interfacesLookedAt)
635static void getBaseInterfaces(TypeSymbol derived, ArrayBuilder<NamedTypeSymbol> baseInterfaces, PooledHashSet<NamedTypeSymbol> interfacesLookedAt, ConsList<TypeSymbol> basesBeingResolved)
642ImmutableArray<NamedTypeSymbol> declaredInterfaces;
650case NamedTypeSymbol namedType:
659foreach (var @interface in declaredInterfaces)
661NamedTypeSymbol definition = @interface.OriginalDefinition;
696internal static ErrorCode GetProtectedMemberInSealedTypeError(NamedTypeSymbol containingType)
Binder\Semantics\Conversions\ConversionsBase.cs (52)
924var d = derivedType as NamedTypeSymbol;
930foreach (var iface in d.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
1201var nt = (NamedTypeSymbol)destination;
1228var nt = (NamedTypeSymbol)destination;
1259var nt = (NamedTypeSymbol)destination;
1402var delegateType = (NamedTypeSymbol)type;
1510private static LambdaConversionResult IsAnonymousFunctionCompatibleWithExpressionTree(UnboundLambda anonymousFunction, NamedTypeSymbol type)
1543var multicastDelegateType = corLibrary.GetSpecialType(SpecialType.System_MulticastDelegate);
1559return IsAnonymousFunctionCompatibleWithExpressionTree(anonymousFunction, (NamedTypeSymbol)type);
1757private static bool HasIdentityConversionToAny(NamedTypeSymbol type, ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)> targetTypes)
2431NamedTypeSymbol destinationAgg = (NamedTypeSymbol)destination;
2671var derivedType = this.corLibrary.GetDeclaredSpecialType(SpecialType.System_MulticastDelegate);
2683var sourceDelegate = sourceType.GetInternalDelegateType();
2689var destinationDelegate = destinationType.GetInternalDelegateType();
2764var effectiveBaseClass = source.EffectiveBaseClass(ref useSiteInfo);
2794foreach (var i in source.AllEffectiveInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
2814var d = derivedType as NamedTypeSymbol;
2820foreach (var i in d.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
2849NamedTypeSymbol? s = source as NamedTypeSymbol;
2850NamedTypeSymbol? d = destination as NamedTypeSymbol;
2868NamedTypeSymbol? s = source as NamedTypeSymbol;
2869NamedTypeSymbol? d = destination as NamedTypeSymbol;
2883private bool HasVariantConversion(NamedTypeSymbol source, NamedTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2914private ThreeState HasVariantConversionQuick(NamedTypeSymbol source, NamedTypeSymbol destination)
2924NamedTypeSymbol typeSymbol = source.OriginalDefinition;
2933private bool HasVariantConversionNoCycleCheck(NamedTypeSymbol source, NamedTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
3012static bool isTypeIEquatable(NamedTypeSymbol type)
3317for (var type = t.EffectiveBaseClass(ref useSiteInfo); (object)type != null; type = type.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3364for (var type = t.EffectiveBaseClass(ref useSiteInfo); (object)type != null; type = type.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3430var sourceType = (NamedTypeSymbol)source;
3431var destinationType = (NamedTypeSymbol)destination;
3432var original = sourceType.OriginalDefinition;
3515foreach (var iface in this.corLibrary.GetDeclaredSpecialType(SpecialType.System_Array).AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
3532if (HasExplicitReferenceConversion(sourceArray.ElementType, ((NamedTypeSymbol)destination).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo).Type, ref useSiteInfo))
3552var sourceElement = ((NamedTypeSymbol)source).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo).Type;
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,
250foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
265foreach ((NamedTypeSymbol declaringType, TypeParameterSymbol constrainedToTypeOpt) in d)
276NamedTypeSymbol declaringType,
870private NamedTypeSymbol MakeNullableType(TypeSymbol type)
872var nullable = this.corLibrary.GetDeclaredSpecialType(SpecialType.System_Nullable_T);
946var d = ArrayBuilder<(NamedTypeSymbol ParticipatingType, TypeParameterSymbol ConstrainedToTypeOpt)>.GetInstance();
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (64)
58private static readonly ObjectPool<PooledDictionary<NamedTypeSymbol, NamedTypeSymbol>> s_poolInstance
59= PooledDictionary<NamedTypeSymbol, NamedTypeSymbol>.CreatePool(Symbols.SymbolEqualityComparer.IgnoringNullable);
61internal static PooledDictionary<NamedTypeSymbol, NamedTypeSymbol> GetInstance()
134private readonly NamedTypeSymbol _constructedContainingTypeOfMethod;
172NamedTypeSymbol constructedContainingTypeOfMethod,
317NamedTypeSymbol constructedContainingTypeOfMethod,
641var destination = (NamedTypeSymbol)target.Type;
812var destination = (NamedTypeSymbol)formalType.Type;
968NamedTypeSymbol n => n.DelegateInvokeMethod,
1291var delegateType = target.Type.GetDelegateType();
1349NamedTypeSymbol n => (n.DelegateInvokeMethod, false),
1448var delegateType = target.Type.GetDelegateType();
1630ExactOrBoundsInference(kind, ((NamedTypeSymbol)source.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0], ((NamedTypeSymbol)target.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0], ref useSiteInfo);
1688var namedSource = source.Type as NamedTypeSymbol;
1694var namedTarget = target.Type as NamedTypeSymbol;
1763private void ExactTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1924return ((NamedTypeSymbol)target).TypeArgumentWithDefinitionUseSiteDiagnostics(0, ref useSiteInfo);
1975var constructedTarget = target as NamedTypeSymbol;
1995var constructedSource = source as NamedTypeSymbol;
2034private bool LowerBoundClassInference(TypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2056NamedTypeSymbol sourceBase = null;
2079private bool LowerBoundInterfaceInference(TypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2097ImmutableArray<NamedTypeSymbol> allInterfaces;
2120NamedTypeSymbol matchingInterface = GetInterfaceInferenceBound(allInterfaces, target);
2129internal static ImmutableArray<NamedTypeSymbol> ModuloReferenceTypeNullabilityDifferences(ImmutableArray<NamedTypeSymbol> interfaces, VarianceKind variance)
2133foreach (var @interface in interfaces)
2135if (dictionary.TryGetValue(@interface, out var found))
2137var merged = (NamedTypeSymbol)found.MergeEquivalentTypes(@interface, variance);
2151private void LowerBoundTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2378var constructedSource = source as NamedTypeSymbol;
2394var constructedTarget = target as NamedTypeSymbol;
2431private bool UpperBoundClassInference(NamedTypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2445var targetBase = target.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
2460private bool UpperBoundInterfaceInference(NamedTypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2486ImmutableArray<NamedTypeSymbol> allInterfaces = target.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
2491NamedTypeSymbol bestInterface = GetInterfaceInferenceBound(allInterfaces, source);
2501private void UpperBoundTypeArgumentInference(NamedTypeSymbol source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2764var resultType = functionType.GetInternalDelegateType();
2767var expressionOfTType = compilation.GetWellKnownType(WellKnownType.System_Linq_Expressions_Expression_T);
2854private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2909var fixedDelegate = (NamedTypeSymbol)GetFixedDelegateOrFunctionPointer(target);
2948private static NamedTypeSymbol GetInterfaceInferenceBound(ImmutableArray<NamedTypeSymbol> interfaces, NamedTypeSymbol target)
2951NamedTypeSymbol matchingInterface = null;
2952foreach (var currentInterface in interfaces)
Binder\Semantics\OverloadResolution\OverloadResolution.cs (31)
258Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt = null;
497Debug.Assert(unmanagedCallingConventionTypes.All(u => FunctionPointerTypeSymbol.IsCallingConventionModifier((NamedTypeSymbol)u)));
669private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
671Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMap = new Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>>();
675NamedTypeSymbol containingType = member.ContainingType;
687private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
824Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt,
883NamedTypeSymbol memberContainingType = member.ContainingType;
886NamedTypeSymbol otherType = pair.Key;
1110NamedTypeSymbol memberContainingType = member.ContainingType;
1113NamedTypeSymbol otherContainingType = otherMember.ContainingType;
1298var currentType = result.LeastOverriddenMember.ContainingType;
1311if (currentType.IsInterfaceType() && type.IsInterfaceType() && currentType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo).Contains((NamedTypeSymbol)type))
1367var type = result.LeastOverriddenMember.ContainingType;
2329var n1 = t1 as NamedTypeSymbol;
2330var n2 = t2 as NamedTypeSymbol;
2536NamedTypeSymbol d;
2559y = ((NamedTypeSymbol)y).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
2638var destination = (NamedTypeSymbol)targetType;
2789return BetterConversionTargetCore(((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
2790((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type,
2803NamedTypeSymbol d1;
2807NamedTypeSymbol d2;
2896private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType, Conversion conv)
2918NamedTypeSymbol d1;
2922NamedTypeSymbol d2;
3680&& parameters.ParameterTypes[argumentPosition].Type is NamedTypeSymbol { IsInterpolatedStringHandlerType: true, IsValueType: true })
BoundTree\UnboundLambda.cs (36)
146var delegateType = Type.GetDelegateType();
164internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol) =>
303NamedTypeSymbol? taskType = null;
304var delegateReturnType = delegateType?.GetDelegateType()?.DelegateInvokeMethod?.ReturnType as NamedTypeSymbol;
317var resultType = taskType?.Arity == 0 ?
332var taskTypeT = taskType?.Arity == 1 ?
450public BoundLambda Bind(NamedTypeSymbol delegateType, bool isExpressionTree)
456public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
469public TypeWithAnnotations InferReturnType(ConversionsBase conversions, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool inferredFromFunctionType)
495Constraint = "Avoid " + nameof(ConcurrentDictionary<(NamedTypeSymbol, bool), BoundLambda>) + " which has a large default size, but this cache is normally small.")]
496private ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>? _bindingCache;
512_bindingCache = ImmutableDictionary<(NamedTypeSymbol Type, bool IsExpressionLambda), BoundLambda>.Empty.WithComparers(BindingCacheComparer.Instance);
577public BoundLambda Bind(NamedTypeSymbol delegateType, bool isTargetExpressionTree)
613private static MethodSymbol? DelegateInvokeMethod(NamedTypeSymbol? delegateType)
661internal NamedTypeSymbol? InferDelegateType()
735private BoundLambda ReallyBind(NamedTypeSymbol delegateType, bool inExpressionTree)
857internal LambdaSymbol CreateLambdaSymbol(NamedTypeSymbol delegateType, Symbol containingSymbol)
891NamedTypeSymbol? delegateType,
966public BoundLambda BindForReturnTypeInference(NamedTypeSymbol delegateType)
987public readonly NamedTypeSymbol? TaskLikeReturnTypeOpt;
991private ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations> parameterTypes, ImmutableArray<RefKind> parameterRefKinds, NamedTypeSymbol? taskLikeReturnTypeOpt)
1038public static ReturnInferenceCacheKey Create(NamedTypeSymbol? delegateType, bool isAsync)
1040GetFields(delegateType, isAsync, out var parameterTypes, out var parameterRefKinds, out var taskLikeReturnTypeOpt);
1049NamedTypeSymbol? delegateType,
1053out NamedTypeSymbol? taskLikeReturnTypeOpt)
1081var delegateReturnType = invoke.ReturnType as NamedTypeSymbol;
1150var delegateType = (NamedTypeSymbol?)lambda.Type;
1157NamedTypeSymbol? delegateType,
1171var t = (inferredReturnType.HadExpressionlessReturn || inferredReturnType.NumExpressions == 0)
1374private sealed class BindingCacheComparer : IEqualityComparer<(NamedTypeSymbol Type, bool IsExpressionTree)>
1378public bool Equals([AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) x, [AllowNull] (NamedTypeSymbol Type, bool IsExpressionTree) y)
1381public int GetHashCode([DisallowNull] (NamedTypeSymbol Type, bool IsExpressionTree) obj)
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;
Emitter\Model\PEModuleBuilder.cs (40)
26internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
48private Dictionary<FieldSymbol, NamedTypeSymbol> _fixedImplementationTypes;
209internal sealed override IEnumerable<Cci.INestedTypeDefinition> GetSynthesizedNestedTypes(NamedTypeSymbol container)
488internal virtual NamedTypeSymbol GetDynamicOperationContextType(NamedTypeSymbol contextType)
556yield return ((NamedTypeSymbol)member).GetCciAdapter();
636internal static HashSet<NamedTypeSymbol> GetForwardedTypes(SourceAssemblySymbol sourceAssembly, ArrayBuilder<Cci.ExportedType>? builder)
638var seenTopLevelForwardedTypes = new HashSet<NamedTypeSymbol>();
653var exportedNamesMap = new Dictionary<string, NamedTypeSymbol>(StringOrdinalComparer.Instance);
657var type = (NamedTypeSymbol)exportedType.Type.GetInternalSymbol();
686NamedTypeSymbol contender;
718HashSet<NamedTypeSymbol> seenTopLevelTypes,
719CommonAssemblyWellKnownAttributeData<NamedTypeSymbol> wellKnownAttributeData,
725var stack = ArrayBuilder<(NamedTypeSymbol type, int parentIndex)>.GetInstance();
728IEnumerable<NamedTypeSymbol> orderedForwardedTypes = wellKnownAttributeData.ForwardedTypes;
735foreach (NamedTypeSymbol forwardedType in orderedForwardedTypes)
737NamedTypeSymbol originalDefinition = forwardedType.OriginalDefinition;
770ImmutableArray<NamedTypeSymbol> nested = type.GetTypeMembers(); // Ordered.
795private NamedTypeSymbol GetUntranslatedSpecialType(SpecialType specialType, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
799var typeSymbol = SourceModule.ContainingAssembly.GetSpecialType(specialType);
827var namedType = typeRef.GetInternalSymbol() as NamedTypeSymbol;
936NamedTypeSymbol namedTypeSymbol,
997NamedTypeSymbol container = namedTypeSymbol.ContainingType;
1041else if (namedTypeSymbol.NativeIntegerUnderlyingType is NamedTypeSymbol underlyingType)
1058private void CheckTupleUnderlyingType(NamedTypeSymbol namedTypeSymbol, SyntaxNode syntaxNodeOpt, DiagnosticBag diagnostics)
1064var declaredBase = namedTypeSymbol.BaseTypeNoUseSiteDiagnostics;
1093public static bool IsGenericType(NamedTypeSymbol toCheck)
1133return Translate((NamedTypeSymbol)typeSymbol, syntaxNodeOpt, diagnostics);
1307NamedTypeSymbol container = methodSymbol.ContainingType;
1381NamedTypeSymbol container = methodSymbol.ContainingType;
1520public NamedTypeSymbol SetFixedImplementationType(SourceMemberFieldSymbol field)
1524Interlocked.CompareExchange(ref _fixedImplementationTypes, new Dictionary<FieldSymbol, NamedTypeSymbol>(), null);
1529NamedTypeSymbol result;
1613NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1634NamedTypeSymbol byteType = Compilation.GetSpecialType(SpecialType.System_Byte);
1697NamedTypeSymbol booleanType = Compilation.GetSpecialType(SpecialType.System_Boolean);
1947public sealed override ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(DiagnosticBag diagnostics)
1952internal virtual ImmutableArray<NamedTypeSymbol> GetEmbeddedTypes(BindingDiagnosticBag diagnostics)
FlowAnalysis\EmptyStructTypeCache.cs (18)
25private SmallDictionary<NamedTypeSymbol, bool> _cache;
34private SmallDictionary<NamedTypeSymbol, bool> Cache
38return _cache ?? (_cache = new SmallDictionary<NamedTypeSymbol, bool>(Symbols.SymbolEqualityComparer.ConsiderEverything));
86return IsEmptyStructType(type, ConsList<NamedTypeSymbol>.Empty);
94private bool IsEmptyStructType(TypeSymbol type, ConsList<NamedTypeSymbol> typesWithMembersOfThisType)
96var nts = type as NamedTypeSymbol;
116private bool CheckStruct(ConsList<NamedTypeSymbol> typesWithMembersOfThisType, NamedTypeSymbol nts)
122typesWithMembersOfThisType = new ConsList<NamedTypeSymbol>(nts, typesWithMembersOfThisType);
132var nts = type.OriginalDefinition as NamedTypeSymbol;
140private bool CheckStructInstanceFields(ConsList<NamedTypeSymbol> typesWithMembersOfThisType, NamedTypeSymbol type)
170var nts = type as NamedTypeSymbol;
179public IEnumerable<FieldSymbol> GetStructFields(NamedTypeSymbol type, bool includeStatic)
197private FieldSymbol GetActualField(Symbol member, NamedTypeSymbol type)
FlowAnalysis\NullableWalker.cs (74)
973static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
1057var type = method.ContainingType;
1791if (node is BoundLambda boundLambda && originalSymbol is LambdaSymbol l && updatedSymbol is NamedTypeSymbol n)
2925type = ((NamedTypeSymbol)returnType.Type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics.Single();
3372return type.IsErrorType() || type.IsDynamic() || type.HasUseSiteError || (type.IsAnonymousType && canIgnoreAnonymousType((NamedTypeSymbol)type));
3374static bool canIgnoreAnonymousType(NamedTypeSymbol type)
3390(LambdaSymbol l, NamedTypeSymbol n) _ when n.IsDelegateType() => AreLambdaAndNewDelegateSimilar(l, n),
3398private static bool AreLambdaAndNewDelegateSimilar(LambdaSymbol l, NamedTypeSymbol n)
3576var containingType = constructor?.ContainingType;
4035var members = ((NamedTypeSymbol)type).GetMembersUnordered();
4082var anonymousType = (NamedTypeSymbol)node.Type;
4170NamedTypeSymbol spanType => getSpanElementType(spanType),
4258NamedTypeSymbol spanType => setSpanElementType(spanType, inferredType),
4266static TypeWithAnnotations getSpanElementType(NamedTypeSymbol namedType)
4273static TypeSymbol setSpanElementType(NamedTypeSymbol namedType, TypeWithAnnotations elementType)
5032var containingType = this._symbol?.ContainingType;
5053for (NamedTypeSymbol baseType = effectiveBase(type); !(baseType is null); baseType = baseType.BaseTypeNoUseSiteDiagnostics)
5058foreach (NamedTypeSymbol interfaceType in inheritedInterfaces(type))
5064static NamedTypeSymbol effectiveBase(TypeSymbol type) => type switch
5070static ImmutableArray<NamedTypeSymbol> inheritedInterfaces(TypeSymbol type) => type switch
5074_ => ImmutableArray<NamedTypeSymbol>.Empty,
5774var wellKnownType = wellKnownMethod.ContainingType;
5776var constructedType = wellKnownType.Construct(ImmutableArray.Create(parameterType));
6386var type = method.ContainingType;
7332var containingType = type as NamedTypeSymbol;
7352var symbolContainer = symbol.ContainingType;
7377foreach (var @interface in containingType.AllInterfacesNoUseSiteDiagnostics)
7403bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
7574var tupleOpt = (NamedTypeSymbol?)node.Type;
7607NamedTypeSymbol tupleType,
7615Debug.Assert(values.Length == (useRestField ? Math.Min(tupleType.TupleElements.Length, NamedTypeSymbol.ValueTupleRestPosition) : tupleType.TupleElements.Length));
7623n = Math.Min(n, NamedTypeSymbol.ValueTupleRestPosition - 1);
7631values.Length == NamedTypeSymbol.ValueTupleRestPosition &&
7632tupleType.GetMembers(NamedTypeSymbol.ValueTupleRestFieldName).FirstOrDefault() is FieldSymbol restField)
7634var argOrdinal = getArgumentOrdinalFromParameterOrdinal(NamedTypeSymbol.ValueTupleRestPosition - 1);
7682var valueTuple = operandType as NamedTypeSymbol;
7689var targetElements = ((NamedTypeSymbol)targetType).TupleElements;
7807private void ReportNullabilityMismatchWithTargetDelegate(Location location, NamedTypeSymbol delegateType, BoundLambda lambda)
7997NamedTypeSymbol { TypeKind: TypeKind.Delegate, DelegateInvokeMethod: { Parameters: { } parameters } signature } => (signature, parameters),
8006var delegateType = targetType.GetDelegateType();
8702Action<NamedTypeSymbol>? analysisCompletion;
8704var delegateType = (NamedTypeSymbol)node.Type;
8732TypeWithState setAnalyzedNullability(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, Action<NamedTypeSymbol>? analysisCompletion, bool isTargetTyped)
8749void setAnalyzedNullabilityAsContinuation(BoundDelegateCreationExpression node, Action<NamedTypeSymbol>? analysisCompletion)
8755var delegateType = (NamedTypeSymbol)resultTypeWithAnnotations.Type;
8763Action<NamedTypeSymbol>? visitMethodGroupArgument(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group)
8771Action<NamedTypeSymbol>? analyzeMethodGroupConversion(BoundDelegateCreationExpression node, NamedTypeSymbol delegateType, BoundMethodGroup group, bool isTargetTyped)
8792Action<NamedTypeSymbol>? analyzeMethodGroupConversionAsContinuation(BoundDelegateCreationExpression node, BoundMethodGroup group)
8794return (NamedTypeSymbol delegateType) =>
8800Action<NamedTypeSymbol>? visitLambdaArgument(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
8807Action<NamedTypeSymbol>? analyzeLambdaConversion(NamedTypeSymbol delegateType, BoundLambda lambda, bool isTargetTyped)
8824Action<NamedTypeSymbol> analyzeLambdaConversionAsContinuation(BoundLambda lambda)
8826return (NamedTypeSymbol delegateType) => analyzeLambdaConversion(delegateType, lambda, isTargetTyped: false);
8829Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
8843Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
8863Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg)
8865return (NamedTypeSymbol delegateType) => analyzeDelegateConversion(delegateType, arg, isTargetTyped: false);
8966private void VisitLambda(BoundLambda node, NamedTypeSymbol? delegateTypeOpt, Optional<LocalState> initialState = default)
9516if (expr.Type is NamedTypeSymbol { IsTupleType: true } tupleType)
9948valueProperty = getValue?.AsMember((NamedTypeSymbol)containingType)?.AssociatedSymbol;
10524var reinferredGetResult = _visitResult.RValueType.Type is NamedTypeSymbol taskAwaiterType
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),
71NamedTypeSymbol tuple8Type = underlyingTupleTypeChain.Peek();
72var tuple8Ctor = (MethodSymbol?)NamedTypeSymbol.GetWellKnownMemberInType(tuple8Type.OriginalDefinition,
73NamedTypeSymbol.GetTupleCtor(NamedTypeSymbol.ValueTupleRestPosition),
85(underlyingTupleTypeChain.Count - 1) * (NamedTypeSymbol.ValueTupleRestPosition - 1),
86NamedTypeSymbol.ValueTupleRestPosition - 1)
Lowering\StateMachineRewriter\StateMachineFieldSymbol.cs (4)
30public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, bool isPublic, bool isThis)
36public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeSymbol type, string name, SynthesizedLocalKind synthesizedKind, int slotIndex, bool isPublic)
41public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeSymbol type, string name, LocalSlotDebugInfo slotDebugInfo, int slotIndex, bool isPublic) :
46public StateMachineFieldSymbol(NamedTypeSymbol stateMachineType, TypeWithAnnotations type, string name, LocalSlotDebugInfo slotDebugInfo, int slotIndex, bool isPublic)
Symbols\AssemblySymbol.cs (30)
325internal abstract NamedTypeSymbol? LookupDeclaredTopLevelMetadataType(ref MetadataTypeName emittedName);
337internal abstract NamedTypeSymbol LookupDeclaredOrForwardedTopLevelMetadataType(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies);
344public NamedTypeSymbol? ResolveForwardedType(string fullyQualifiedMetadataName)
358internal virtual NamedTypeSymbol? TryLookupForwardedMetadataTypeWithCycleDetection(ref MetadataTypeName emittedName, ConsList<AssemblySymbol>? visitedAssemblies)
375internal abstract IEnumerable<NamedTypeSymbol> GetAllTopLevelForwardedTypes();
383internal abstract NamedTypeSymbol GetDeclaredSpecialType(SpecialType type);
389internal virtual void RegisterDeclaredSpecialType(NamedTypeSymbol corType)
409internal virtual NamedTypeSymbol GetNativeIntegerType(NamedTypeSymbol underlyingType)
567internal NamedTypeSymbol GetSpecialType(SpecialType type)
584internal NamedTypeSymbol ObjectType
597internal NamedTypeSymbol GetPrimitiveType(Microsoft.Cci.PrimitiveTypeCode type)
608public NamedTypeSymbol? GetTypeByMetadataName(string fullyQualifiedMetadataName)
615var result = this.GetTypeByMetadataName(fullyQualifiedMetadataName, includeReferences: false, isWellKnownType: false, conflicts: out var _);
646internal NamedTypeSymbol? GetTypeByMetadataName(
655NamedTypeSymbol? type;
766var symbol = (NamedTypeSymbol?)GetTypeByReflectionType(nestedTypes[i].AsType());
805NamedTypeSymbol? symbol = GetTopLevelTypeByMetadataName(ref mdName, assemblyId, includeReferences: true, isWellKnownType: false, conflicts: out var _);
822private NamedTypeSymbol? ApplyGenericArguments(NamedTypeSymbol symbol, Type[] typeArguments, ref int currentTypeArgument)
849internal NamedTypeSymbol? GetTopLevelTypeByMetadataName(
868NamedTypeSymbol? result;
893NamedTypeSymbol? corLibCandidate = GetTopLevelTypeByMetadataName(CorLibrary, ref metadataName, assemblyOpt);
928NamedTypeSymbol? candidate = GetTopLevelTypeByMetadataName(assembly, ref metadataName, assemblyOpt);
977bool isValidCandidate([NotNullWhen(true)] NamedTypeSymbol? candidate, bool isWellKnownType)
985private bool IsInCorLib(NamedTypeSymbol type)
990private bool IsValidWellKnownType(NamedTypeSymbol? result)
1003private static NamedTypeSymbol? GetTopLevelTypeByMetadataName(AssemblySymbol assembly, ref MetadataTypeName metadataName, AssemblyIdentity? assemblyOpt)
1010var result = assembly.LookupDeclaredTopLevelMetadataType(ref metadataName);
Symbols\BaseTypeAnalysis.cs (14)
17internal static bool TypeDependsOn(NamedTypeSymbol depends, NamedTypeSymbol on)
32private static void TypeDependsClosure(NamedTypeSymbol type, CSharpCompilation currentCompilation, HashSet<Symbol> partialClosure)
44foreach (var bt in type.GetDeclaredInterfaces(null))
62internal static bool StructDependsOn(NamedTypeSymbol depends, NamedTypeSymbol on)
77private static void StructDependsClosure(NamedTypeSymbol type, HashSet<Symbol> partialClosure, NamedTypeSymbol on)
102StructDependsClosure((NamedTypeSymbol)fieldType, partialClosure, on);
123internal static ManagedKind GetManagedKind(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
150static (bool definitelyManaged, bool hasGenerics) dependsOnDefinitelyManagedType(NamedTypeSymbol type, HashSet<Symbol> partialClosure, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
194NamedTypeSymbol fieldNamedType = fieldType as NamedTypeSymbol;
244private static (ThreeState isManaged, bool hasGenerics) IsManagedTypeHelper(NamedTypeSymbol type)
Symbols\ConstraintsHelper.cs (33)
112ImmutableArray<NamedTypeSymbol> interfaces;
114NamedTypeSymbol effectiveBaseClass = corLibrary.GetSpecialType(typeParameter.HasValueTypeConstraint ? SpecialType.System_ValueType : SpecialType.System_Object);
119interfaces = ImmutableArray<NamedTypeSymbol>.Empty;
124var interfacesBuilder = ArrayBuilder<NamedTypeSymbol>.GetInstance();
134NamedTypeSymbol constraintEffectiveBase;
198AddInterface(interfacesBuilder, (NamedTypeSymbol)constraintType.Type);
204constraintEffectiveBase = (NamedTypeSymbol)constraintType.Type;
246constraintEffectiveBase = (NamedTypeSymbol)constraintType.Type;
544((NamedTypeSymbol)type).CheckConstraints(args);
554this NamedTypeSymbol tuple,
573var underlyingTupleTypeChain = ArrayBuilder<NamedTypeSymbol>.GetInstance();
574NamedTypeSymbol.GetUnderlyingTypeChain(tuple, underlyingTupleTypeChain);
577foreach (var underlyingTuple in underlyingTupleTypeChain)
595offset += NamedTypeSymbol.ValueTupleRestIndex;
611var location = ordinal == NamedTypeSymbol.ValueTupleRestIndex ? typeSyntax.Location : elementLocations[ordinal + offset];
625this NamedTypeSymbol type,
666public static bool CheckConstraints(this NamedTypeSymbol type, in CheckConstraintsArgs args)
707private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved)
731foreach (var i in array)
782NamedTypeSymbol type,
988if (typeArgument.Type is NamedTypeSymbol { IsInterface: true } iface && SelfOrBaseHasStaticAbstractMember(iface, ref useSiteInfo, out Symbol member))
1264conversions.HasBoxingConversion(typeArgument.Type.IsNullableType() ? ((NamedTypeSymbol)typeArgument.Type).ConstructedFrom : typeArgument.Type,
1295private static bool SelfOrBaseHasStaticAbstractMember(NamedTypeSymbol iface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol memberWithoutImplementation)
1308foreach (var baseInterface in iface.InterfacesAndTheirBaseInterfacesNoUseSiteDiagnostics.Keys)
1342private static void AddInterfaces(ArrayBuilder<NamedTypeSymbol> builder, ImmutableArray<NamedTypeSymbol> interfaces)
1344foreach (var @interface in interfaces)
1350private static void AddInterface(ArrayBuilder<NamedTypeSymbol> builder, NamedTypeSymbol @interface)
1371return SatisfiesPublicParameterlessConstructor((NamedTypeSymbol)typeArgument, synthesizedIfMissing: true);
1383return SatisfiesPublicParameterlessConstructor((NamedTypeSymbol)typeArgument, synthesizedIfMissing: false);
1400private static ConstructorConstraintError SatisfiesPublicParameterlessConstructor(NamedTypeSymbol type, bool synthesizedIfMissing)
1463public 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(string 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();
208var thisDelegateType = GetInternalDelegateType();
209var otherDelegateType = otherType.GetInternalDelegateType();
Symbols\Metadata\PE\PENamedTypeSymbol.cs (53)
72private NamedTypeSymbol _lazyBaseType = ErrorTypeSymbol.UnknownResultType;
73private ImmutableArray<NamedTypeSymbol> _lazyInterfaces = default(ImmutableArray<NamedTypeSymbol>);
74private NamedTypeSymbol _lazyDeclaredBaseType = ErrorTypeSymbol.UnknownResultType;
75private ImmutableArray<NamedTypeSymbol> _lazyDeclaredInterfaces = default(ImmutableArray<NamedTypeSymbol>);
132internal NamedTypeSymbol lazyEnumUnderlyingType;
143internal NamedTypeSymbol lazyComImportCoClassType = ErrorTypeSymbol.UnknownResultType;
458internal override NamedTypeSymbol BaseTypeNoUseSiteDiagnostics
471internal override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol> basesBeingResolved = null)
475ImmutableInterlocked.InterlockedCompareExchange(ref _lazyInterfaces, MakeAcyclicInterfaces(), default(ImmutableArray<NamedTypeSymbol>));
481internal override ImmutableArray<NamedTypeSymbol> GetInterfacesToEmit()
486internal override NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved)
491private NamedTypeSymbol GetDeclaredBaseType(bool skipTransformsIfNecessary)
495var baseType = MakeDeclaredBaseType();
509baseType = (NamedTypeSymbol)NullableTypeDecoder.TransformType(TypeWithAnnotations.Create(decodedType), _handle, moduleSymbol, accessSymbol: this, nullableContext: this).Type;
518internal override ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved)
522ImmutableInterlocked.InterlockedCompareExchange(ref _lazyDeclaredInterfaces, MakeDeclaredInterfaces(), default(ImmutableArray<NamedTypeSymbol>));
528private NamedTypeSymbol MakeDeclaredBaseType()
538return (NamedTypeSymbol)new MetadataDecoder(moduleSymbol, this).GetTypeOfToken(token);
550private ImmutableArray<NamedTypeSymbol> MakeDeclaredInterfaces()
559var symbols = ArrayBuilder<NamedTypeSymbol>.GetInstance(interfaceImpls.Count);
571var namedTypeSymbol = typeSymbol as NamedTypeSymbol ?? new UnsupportedMetadataTypeSymbol(); // interface list contains a bad type
578return ImmutableArray<NamedTypeSymbol>.Empty;
582return ImmutableArray.Create<NamedTypeSymbol>(new UnsupportedMetadataTypeSymbol(mrEx));
586public override NamedTypeSymbol ConstructedFrom
602public override NamedTypeSymbol ContainingType
606return _container as NamedTypeSymbol;
667public override NamedTypeSymbol EnumUnderlyingType
1193NamedTypeSymbol underlyingType = null;
1222underlyingType = (NamedTypeSymbol)type;
1531internal override ImmutableArray<NamedTypeSymbol> GetTypeMembersUnordered()
1536public override ImmutableArray<NamedTypeSymbol> GetTypeMembers()
1542private ImmutableArray<NamedTypeSymbol> GetMemberTypesPrivate()
1544var builder = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1573public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name)
1581return StaticCast<NamedTypeSymbol>.From(t);
1584return ImmutableArray<NamedTypeSymbol>.Empty;
1587public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name, int arity)
1810private NamedTypeSymbol MakeAcyclicBaseType()
1812NamedTypeSymbol declaredBase = GetDeclaredBaseType(null);
1829private ImmutableArray<NamedTypeSymbol> MakeAcyclicInterfaces()
2302internal override NamedTypeSymbol ComImportCoClass
2320var coClassType = ((object)type != null && (type.TypeKind == TypeKind.Class || type.IsErrorType())) ? (NamedTypeSymbol)type : null;
2463protected override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
2491internal override NamedTypeSymbol AsNativeInteger()
2502internal override NamedTypeSymbol NativeIntegerUnderlyingType => null;
2543protected sealed override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData)
2588internal sealed override NamedTypeSymbol AsNativeInteger() => throw ExceptionUtilities.Unreachable();
2590internal sealed override NamedTypeSymbol NativeIntegerUnderlyingType => null;
2636var 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;
677public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers();
685public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name);
693public abstract override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name, int arity);
776internal abstract NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved);
778internal abstract ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved);
814NamedTypeSymbol other = t2 as NamedTypeSymbol;
818var thisOriginalDefinition = this.OriginalDefinition;
819var otherOriginalDefinition = other.OriginalDefinition;
853private bool EqualsComplicatedCases(NamedTypeSymbol other, TypeCompareKind comparison)
909bool tupleNamesEquals(NamedTypeSymbol other, TypeCompareKind comparison)
989NamedTypeSymbol result = haveChanges ? this.WithTypeArguments(allTypeArguments.ToImmutable()) : this;
994internal NamedTypeSymbol WithTypeArguments(ImmutableArray<TypeWithAnnotations> allTypeArguments)
996var definition = this.OriginalDefinition;
1012bool haveChanges = MergeEquivalentTypeArguments(this, (NamedTypeSymbol)other, variance, allTypeParameters, allTypeArguments);
1014NamedTypeSymbol result;
1028return IsTupleType ? MergeTupleNames((NamedTypeSymbol)other, result) : result;
1038NamedTypeSymbol typeA,
1039NamedTypeSymbol typeB,
1050var definition = typeA.OriginalDefinition;
1113public NamedTypeSymbol Construct(params TypeSymbol[] typeArguments)
1124public NamedTypeSymbol Construct(ImmutableArray<TypeSymbol> typeArguments)
1134public NamedTypeSymbol Construct(IEnumerable<TypeSymbol> typeArguments)
1143public NamedTypeSymbol ConstructUnboundGenericType()
1148internal NamedTypeSymbol GetUnboundGenericTypeOrSelf()
1172private NamedTypeSymbol ConstructWithoutModifiers(ImmutableArray<TypeSymbol> typeArguments, bool unbound)
1188internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments)
1193internal NamedTypeSymbol Construct(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1230protected virtual NamedTypeSymbol ConstructCore(ImmutableArray<TypeWithAnnotations> typeArguments, bool unbound)
1242for (var current = this; !ReferenceEquals(current, null); current = current.ContainingType)
1273var outer = ContainingType;
1294var outer = ContainingType;
1313var outer = ContainingType;
1332public new virtual NamedTypeSymbol OriginalDefinition
1358internal virtual NamedTypeSymbol AsMember(NamedTypeSymbol newOwner)
1387NamedTypeSymbol currentType = this;
1432NamedTypeSymbol @base = this.BaseTypeNoUseSiteDiagnostics;
1469var @base = this.BaseTypeNoUseSiteDiagnostics;
1533var baseType = this.BaseTypeNoUseSiteDiagnostics;
1602internal virtual NamedTypeSymbol ComImportCoClass
1662typeToCheck = ((NamedTypeSymbol)typeToCheck).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestPosition - 1].Type;
1666arity = (typeToCheck as NamedTypeSymbol)?.Arity ?? 0;
1668if (arity > 0 && arity < ValueTupleRestPosition && ((NamedTypeSymbol)typeToCheck).IsTupleTypeOfCardinality(out tupleCardinality))
1687internal abstract NamedTypeSymbol AsNativeInteger();
1694internal abstract NamedTypeSymbol NativeIntegerUnderlyingType { get; }
Symbols\Retargeting\RetargetingSymbolTranslator.cs (58)
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
839public ImmutableArray<NamedTypeSymbol> Retarget(ImmutableArray<NamedTypeSymbol> sequence)
841var result = ArrayBuilder<NamedTypeSymbol>.GetInstance(sequence.Length);
843foreach (var nts in sequence)
910var containingType = method.ContainingType;
911var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
958var containingType = property.ContainingType;
959var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
974var containingType = @event.ContainingType;
975var retargetedType = Retarget(containingType, RetargetOptions.RetargetPrimitiveTypesByName);
983private MethodSymbol FindMethodInRetargetedType(MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
990private readonly NamedTypeSymbol _retargetedType;
993private RetargetedTypeMethodFinder(RetargetingModuleSymbol retargetingModule, NamedTypeSymbol retargetedType, MethodSymbol toFind) :
1000public static MethodSymbol Find(RetargetingSymbolTranslator translator, MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
1017NamedTypeSymbol retargetedType,
1078NamedTypeSymbol containingType = _toFind.ContainingType;
1079NamedTypeSymbol retargetedContainingType = _retargetedType;
1097private PropertySymbol FindPropertyInRetargetedType(PropertySymbol property, NamedTypeSymbol retargetedType, IEqualityComparer<PropertySymbol> retargetedPropertyComparer)
1137private EventSymbol FindEventInRetargetedType(EventSymbol @event, NamedTypeSymbol retargetedType)
1197NamedTypeSymbol oldAttributeType = oldAttribute.AttributeClass;
1198NamedTypeSymbol newAttributeType;
1366public override Symbol VisitNamedType(NamedTypeSymbol symbol, RetargetOptions options)
Symbols\Source\SourceComplexParameterSymbol.cs (5)
610internal override void EarlyDecodeWellKnownAttributeType(NamedTypeSymbol attributeType, AttributeSyntax attributeSyntax)
633internal override (CSharpAttributeData?, BoundAttribute?) EarlyDecodeWellKnownAttribute(ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
697private (CSharpAttributeData?, BoundAttribute?) EarlyDecodeAttributeForDefaultParameterValue(AttributeDescription description, ref EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation> arguments)
963((NamedTypeSymbol)arg.TypeInternal).EnumUnderlyingType.SpecialType :
1238if (Type is not NamedTypeSymbol { IsInterpolatedStringHandlerType: true } handlerType)
Symbols\Source\SourceMemberContainerSymbol.cs (41)
197private static readonly Dictionary<string, ImmutableArray<NamedTypeSymbol>> s_emptyTypeMembers = new Dictionary<string, ImmutableArray<NamedTypeSymbol>>(EmptyComparer.Instance);
198private Dictionary<string, ImmutableArray<NamedTypeSymbol>>? _lazyTypeMembers;
247var containingType = this.ContainingType;
290if (((NamedTypeSymbol)containingSymbol).IsInterface)
561var discarded = this.EnumUnderlyingType;
734public sealed override NamedTypeSymbol? ContainingType
738return _containingSymbol as NamedTypeSymbol;
1252internal override ImmutableArray<NamedTypeSymbol> GetTypeMembersUnordered()
1257public override ImmutableArray<NamedTypeSymbol> GetTypeMembers()
1262public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name)
1264ImmutableArray<NamedTypeSymbol> members;
1270return ImmutableArray<NamedTypeSymbol>.Empty;
1273public override ImmutableArray<NamedTypeSymbol> GetTypeMembers(string name, int arity)
1278private Dictionary<string, ImmutableArray<NamedTypeSymbol>> GetTypeMembersDictionary()
1296private Dictionary<string, ImmutableArray<NamedTypeSymbol>> MakeTypeMembers(BindingDiagnosticBag diagnostics)
1298var symbols = ArrayBuilder<NamedTypeSymbol>.GetInstance();
1333foreach (var t in symbols)
1584if (member is NamedTypeSymbol type)
1726var baseType = BaseTypeNoUseSiteDiagnostics;
1795bool hasBaseTypeOrInterface(Func<NamedTypeSymbol, bool> predicate)
2295BaseTypeAnalysis.StructDependsOn((NamedTypeSymbol)type, this) &&
2568var instanceMap = new Dictionary<NamedTypeSymbol, NamedTypeSymbol>(ReferenceEqualityComparer.Instance);
2574var type = (NamedTypeSymbol)f.Type;
2585private static bool InfiniteFlatteningGraph(SourceMemberContainerTypeSymbol top, NamedTypeSymbol t, Dictionary<NamedTypeSymbol, NamedTypeSymbol> instanceMap)
2588var tOriginal = t.OriginalDefinition;
2589if (instanceMap.TryGetValue(tOriginal, out var oldInstance))
2603var type = (NamedTypeSymbol)f.Type;
2719private static void AddNestedTypesToDictionary(Dictionary<string, ImmutableArray<Symbol>> membersByName, Dictionary<string, ImmutableArray<NamedTypeSymbol>> typesByName)
2724ImmutableArray<NamedTypeSymbol> types = pair.Value;
3305ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
4231var currentBaseType = this.BaseTypeNoUseSiteDiagnostics;
5014var baseType = BaseTypeNoUseSiteDiagnostics;
5019foreach (var @interface in GetInterfacesToEmit())
5052NamedTypeSymbol baseType = this.BaseTypeNoUseSiteDiagnostics;
5128public 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
45var tmp = ContainingType.BaseTypeNoUseSiteDiagnostics;
49var acyclicBase = this.MakeAcyclicBaseType(diagnostics);
65internal sealed override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol> basesBeingResolved)
71return ImmutableArray<NamedTypeSymbol>.Empty;
76if (ImmutableInterlocked.InterlockedCompareExchange(ref _lazyInterfaces, acyclicInterfaces, default(ImmutableArray<NamedTypeSymbol>)).IsDefault)
88var localBase = this.BaseTypeNoUseSiteDiagnostics;
167MultiDictionary<NamedTypeSymbol, NamedTypeSymbol>.ValueSet set = pair.Value;
169foreach (var @interface in set)
176NamedTypeSymbol other = pair.Key;
177foreach (var @interface in set)
211private SourceLocation FindBaseRefSyntax(NamedTypeSymbol baseSym)
254internal Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> GetDeclaredBases(ConsList<TypeSymbol> basesBeingResolved)
269internal override NamedTypeSymbol GetDeclaredBaseType(ConsList<TypeSymbol> basesBeingResolved)
274internal override ImmutableArray<NamedTypeSymbol> GetDeclaredInterfaces(ConsList<TypeSymbol> basesBeingResolved)
279private Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> MakeDeclaredBases(ConsList<TypeSymbol> basesBeingResolved, BindingDiagnosticBag diagnostics)
284return new Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>>(null, ImmutableArray<NamedTypeSymbol>.Empty);
290var baseInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
292NamedTypeSymbol baseType = null;
295var interfaceLocations = SpecializedSymbolCollections.GetPooledSymbolDictionaryInstance<NamedTypeSymbol, SourceLocation>();
299Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> one = MakeOneDeclaredBases(newBasesBeingResolved, decl, diagnostics);
302var partBase = one.Item1;
357foreach (var t in partInterfaces)
371var type = DeclaringCompilation.GetWellKnownType(WellKnownType.System_IEquatable_T).Construct(this);
403foreach (var i in baseInterfacesRO)
422return new Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>>(baseType, baseInterfacesRO);
437private Tuple<NamedTypeSymbol, ImmutableArray<NamedTypeSymbol>> MakeOneDeclaredBases(ConsList<TypeSymbol> newBasesBeingResolved, SingleTypeDeclaration decl, BindingDiagnosticBag diagnostics)
445NamedTypeSymbol localBase = null;
446var localInterfaces = ArrayBuilder<NamedTypeSymbol>.GetInstance();
525localBase = (NamedTypeSymbol)baseType;
550foreach (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;
763NamedTypeSymbol current = declaredBase;
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;
324var attributeTypesBuilder = new NamedTypeSymbol[totalAttributesCount];
340ImmutableArray<NamedTypeSymbol> boundAttributeTypes = attributeTypesBuilder.AsImmutableOrNull();
536var boundTypeSymbol = (NamedTypeSymbol)boundType.Type;
746ImmutableArray<NamedTypeSymbol> boundAttributeTypes,
759var arguments = new EarlyDecodeWellKnownAttributeArguments<EarlyWellKnownAttributeBinder, NamedTypeSymbol, AttributeSyntax, AttributeLocation>();
764NamedTypeSymbol boundAttributeType = boundAttributeTypes[i];
793private void EarlyDecodeWellKnownAttributeTypes(ImmutableArray<NamedTypeSymbol> attributeTypes, ImmutableArray<AttributeSyntax> attributeSyntaxList)
800var attributeType = attributeTypes[i];
830HashSet<NamedTypeSymbol> uniqueAttributeTypes = new HashSet<NamedTypeSymbol>();
871HashSet<NamedTypeSymbol> uniqueAttributeTypes)
875NamedTypeSymbol 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)
329internal AsyncForwardEntryPoint(CSharpCompilation compilation, NamedTypeSymbol containingType, MethodSymbol userMain) :
433internal ScriptEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType) :
522internal SubmissionEntryPoint(NamedTypeSymbol containingType, TypeWithAnnotations returnType, TypeSymbol submissionArrayType) :
Symbols\Tuples\TupleTypeSymbol.cs (54)
30internal static NamedTypeSymbol CreateTuple(
53NamedTypeSymbol underlyingType = getTupleUnderlyingType(elementTypesWithAnnotations, syntax, compilation, diagnostics);
68var constructedType = CreateTuple(underlyingType, elementNames, errorPositions, elementLocations, locations);
80static NamedTypeSymbol getTupleUnderlyingType(ImmutableArray<TypeWithAnnotations> elementTypes, CSharpSyntaxNode? syntax, CSharpCompilation compilation, BindingDiagnosticBag? diagnostics)
86NamedTypeSymbol firstTupleType = compilation.GetWellKnownType(GetTupleType(remainder));
92NamedTypeSymbol? chainedTupleType = null;
106public static NamedTypeSymbol CreateTuple(
107NamedTypeSymbol tupleCompatibleType,
117internal NamedTypeSymbol WithTupleDataFrom(NamedTypeSymbol original)
127internal NamedTypeSymbol? TupleUnderlyingType
133internal NamedTypeSymbol WithElementTypes(ImmutableArray<TypeWithAnnotations> newElementTypes)
138NamedTypeSymbol firstTupleType;
139NamedTypeSymbol? chainedTupleType;
140if (Arity < NamedTypeSymbol.ValueTupleRestPosition)
148var underlyingType = this;
151underlyingType = ((NamedTypeSymbol)underlyingType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[NamedTypeSymbol.ValueTupleRestIndex].Type);
153while (underlyingType.Arity >= NamedTypeSymbol.ValueTupleRestPosition);
167internal NamedTypeSymbol WithElementNames(ImmutableArray<string?> newElementNames,
177private NamedTypeSymbol WithTupleData(TupleExtraData newData)
202protected abstract NamedTypeSymbol WithTupleDataCore(TupleExtraData newData);
210internal static void GetUnderlyingTypeChain(NamedTypeSymbol underlyingTupleType, ArrayBuilder<NamedTypeSymbol> underlyingTupleTypeChain)
212NamedTypeSymbol currentType = underlyingTupleType;
217if (currentType.Arity == NamedTypeSymbol.ValueTupleRestPosition)
219currentType = (NamedTypeSymbol)currentType.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[NamedTypeSymbol.ValueTupleRestPosition - 1].Type;
238private static NamedTypeSymbol ConstructTupleUnderlyingType(NamedTypeSymbol firstTupleType, NamedTypeSymbol? chainedTupleTypeOpt, ImmutableArray<TypeWithAnnotations> elementTypes)
246NamedTypeSymbol currentSymbol = firstTupleType.Construct(ImmutableArray.Create(elementTypes, (chainLength - 1) * (ValueTupleRestPosition - 1), remainder));
258private static void ReportUseSiteAndObsoleteDiagnostics(CSharpSyntaxNode? syntax, BindingDiagnosticBag diagnostics, NamedTypeSymbol firstTupleType)
274NamedTypeSymbol firstTupleType = compilation.GetWellKnownType(GetTupleType(remainder));
279NamedTypeSymbol chainedTupleType = compilation.GetWellKnownType(GetTupleType(ValueTupleRestPosition));
493internal static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember, BindingDiagnosticBag diagnostics, SyntaxNode? syntax)
522static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember)
585NamedTypeSymbol currentValueTuple = this;
717var oldUnderlying = currentValueTuple;
718currentValueTuple = (NamedTypeSymbol)oldUnderlying.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestIndex].Type;
744NamedTypeSymbol container = getNestedTupleUnderlyingType(this, fieldChainLength - 1).OriginalDefinition;
794static NamedTypeSymbol getNestedTupleUnderlyingType(NamedTypeSymbol topLevelUnderlyingType, int depth)
796NamedTypeSymbol found = topLevelUnderlyingType;
799found = (NamedTypeSymbol)found.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[ValueTupleRestPosition - 1].Type;
860private TypeSymbol MergeTupleNames(NamedTypeSymbol other, NamedTypeSymbol mergedType)
924internal NamedTypeSymbol TupleUnderlyingType { get; }
926internal TupleExtraData(NamedTypeSymbol underlyingType)
936internal TupleExtraData(NamedTypeSymbol underlyingType, ImmutableArray<string?> elementNames,
974public ImmutableArray<TypeWithAnnotations> TupleElementTypesWithAnnotations(NamedTypeSymbol tuple)
984static ImmutableArray<TypeWithAnnotations> collectTupleElementTypesWithAnnotations(NamedTypeSymbol tuple)
1006public ImmutableArray<FieldSymbol> TupleElements(NamedTypeSymbol tuple)
1016ImmutableArray<FieldSymbol> collectTupleElementFields(NamedTypeSymbol tuple)
Symbols\TypeSymbol.cs (59)
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);
728var interfaceType = interfaceMember.ContainingType;
807NamedTypeSymbol interfaceType = interfaceMember.ContainingType;
1005if (implementingType is NamedTypeSymbol named &&
1099private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1147ImmutableArray<NamedTypeSymbol> allInterfaces = implementingType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1233NamedTypeSymbol implementingInterface = inplementingAccessor1.ContainingType;
1254ImmutableArray<NamedTypeSymbol> allInterfaces,
1259var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1261foreach (var interfaceType in allInterfaces)
1278(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1280NamedTypeSymbol previousContainingType = previous.ContainingType;
1312MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases = interfaceType.InterfacesAndTheirBaseInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
1371internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1375NamedTypeSymbol containingType = interfaceMember.ContainingType;
2032var @interface = interfaceMember.ContainingType;
2096var @interface = interfaceMember.ContainingType;
Symbols\TypeSymbolExtensions.cs (53)
20foreach (NamedTypeSymbol @interface in subType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo))
153RoslynDebug.Assert(type is NamedTypeSymbol); //not testing Kind because it may be an ErrorType
155return ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0];
193public static NamedTypeSymbol? GetEnumUnderlyingType(this TypeSymbol? type)
195return (type is NamedTypeSymbol namedType) ? namedType.EnumUnderlyingType : null;
206var underlyingType = type.GetEnumUnderlyingType();
308return type.Kind == SymbolKind.NamedType && ((NamedTypeSymbol)type).IsInterface;
378public static NamedTypeSymbol? GetDelegateType(this TypeSymbol? type)
383type = ((NamedTypeSymbol)type).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type;
386return type.IsDelegateType() ? (NamedTypeSymbol)type : null;
419if (_type.OriginalDefinition is NamedTypeSymbol type)
459if (!(type is NamedTypeSymbol t))
536elementTypes = ((NamedTypeSymbol)type).TupleElementTypesWithAnnotations;
628return !IsAsRestrictive((NamedTypeSymbol)type, sym, ref useSiteInfo);
703var containingType = current.ContainingType;
801var typeArguments = ((NamedTypeSymbol)current).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics;
954var parent1 = s1.ContainingType;
964for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
976var parent2 = s2.ContainingType;
988var parent1 = s1.ContainingType;
1006for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
1066NamedTypeSymbol parent1 = s1.ContainingType;
1073var parent1OriginalDefinition = parent1.OriginalDefinition;
1074for (var parent2 = s2.ContainingType; (object)parent2 != null; parent2 = parent2.ContainingType)
1095return type is NamedTypeSymbol { IsUnboundGenericType: true };
1098public static bool IsTopLevelType(this NamedTypeSymbol type)
1279return type is NamedTypeSymbol
1290return type is NamedTypeSymbol
1301return type is NamedTypeSymbol
1373internal static string? GetFileLocalTypeMetadataNamePrefix(this NamedTypeSymbol type)
1411return ((NamedTypeSymbol)type).EnumUnderlyingType.SpecialType.IsValidVolatileFieldType();
1476internal static int ComputeHashCode(this NamedTypeSymbol type)
1518static bool wasConstructedForAnnotations(NamedTypeSymbol type)
1551public static TypeSymbol AsDynamicIfNoPia(this TypeSymbol type, NamedTypeSymbol containingType)
1556public static bool TryAsDynamicIfNoPia(this TypeSymbol type, NamedTypeSymbol containingType, [NotNullWhen(true)] out TypeSymbol? result)
1593internal static ImmutableArray<TypeParameterSymbol> GetAllTypeParameters(this NamedTypeSymbol type)
1610internal static void GetAllTypeParameters(this NamedTypeSymbol type, ArrayBuilder<TypeParameterSymbol> result)
1612var containingType = type.ContainingType;
1625internal static TypeParameterSymbol? FindEnclosingTypeParameter(this NamedTypeSymbol type, string name)
1682internal static bool HasNameQualifier(this NamedTypeSymbol type, string qualifiedName)
1739var namedType = type as NamedTypeSymbol;
1757if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1770if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1780if (!(type is NamedTypeSymbol { Arity: 1 } namedType))
1798internal static bool IsCustomTaskType(this NamedTypeSymbol type, [NotNullWhen(true)] out object? builderArgument)
1831var namedType = (NamedTypeSymbol)type;
1872private static bool NormalizeTaskTypesInNamedType(CSharpCompilation compilation, ref NamedTypeSymbol type)
1895var originalType = type;
1896var originalDefinition = originalType.OriginalDefinition;
1908var taskType = compilation.GetWellKnownType(
2068return 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);
200private static TypeSymbol GetNextDeclaredBase(NamedTypeSymbol type, ConsList<TypeSymbol> basesBeingResolved, CSharpCompilation compilation, ref PooledHashSet<NamedTypeSymbol> visited)
216var nextType = type.GetDeclaredBaseType(basesBeingResolved);
225var origType = type.OriginalDefinition;
234visited = visited ?? PooledHashSet<NamedTypeSymbol>.GetInstance();
245private static void SetKnownToHaveNoDeclaredBaseCycles(ref PooledHashSet<NamedTypeSymbol> visited)
249foreach (var v in visited)
259private static NamedTypeSymbol GetDefaultBaseOrNull(NamedTypeSymbol type, CSharpCompilation compilation)
Microsoft.CodeAnalysis.CSharp.ExpressionEvaluator.ExpressionCompiler.UnitTests (39)