Binder\Binder.cs (19)
240internal virtual Symbol? ContainingMemberOrLambda
426var member = this.ContainingMemberOrLambda;
444var containingMember = this.ContainingMemberOrLambda;
592internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNode node, bool hasBaseReceiver)
602internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
616internal void ReportDiagnosticsIfObsolete(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
634Symbol symbol,
637Symbol? containingMember,
661Symbol leastOverriddenSymbol = symbol.GetLeastOverriddenMember(containingType);
700Symbol symbol,
703Symbol? containingMember,
713internal static ObsoleteDiagnosticKind ReportDiagnosticsIfObsoleteInternal(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol? containingMember, BinderFlags location)
744internal static void ReportDiagnosticsIfObsoleteInternal(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol containingMember, BinderFlags location)
785Symbol symbol,
793Symbol symbol,
802Symbol symbol,
930var currentContainer = scope.ContainingMemberOrLambda;
Binder\Binder.ValueChecks.cs (24)
33internal Symbol Symbol { get; }
57private MethodInfo(Symbol symbol, MethodSymbol? method, MethodSymbol? setMethod)
93Symbol symbol = ReferenceEquals(Symbol, Method) && method is not null ? method : Symbol;
842Symbol otherSymbol = null;
877(object)otherSymbol == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(otherSymbol),
1670Symbol containing = this.ContainingMemberOrLambda;
1879private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol)
1983var containing = this.ContainingMemberOrLambda;
2138var containingMember = ContainingMemberOrLambda;
2154private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics,
2155Symbol propertyOrEventSymbolOpt = null)
2363Symbol? symbol = methodInvocationInfo.MethodInfo.Symbol;
2443BindingDiagnosticBag diagnostics, bool isRefEscape, Symbol symbolForReporting)
2457var symbol = methodInvocationInfo.MethodInfo.Symbol;
2523Symbol symbolForReporting)
2820static bool hasRefLikeReturn(Symbol symbol)
3084Symbol symbol,
3096var symbol = argument switch
3127Symbol symbolForReporting,
3138SafeContext localScopeDepth, BindingDiagnosticBag diagnostics, Symbol symbolForReporting)
3145var symbol = methodInvocationInfo.MethodInfo.Symbol;
3224Symbol symbolForReporting)
3367public override Symbol ContainingSymbol
3601private static void ReportReadOnlyError(Symbol symbol, SyntaxNode node, BindValueKind kind, bool checkingReceiver, BindingDiagnosticBag diagnostics)
Binder\Binder_Attributes.cs (7)
30ImmutableArray<Binder> binders, ImmutableArray<AttributeSyntax> attributesToBind, Symbol ownerSymbol, NamedTypeSymbol[] boundAttributeTypes,
138internal BoundAttribute BindAttribute(AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
155private static BoundAttribute BindAttributeCore(Binder binder, AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
528Symbol namedArgumentNameSymbol = BindNamedAttributeArgumentName(namedArgument, attributeType, diagnostics, out wasError, out resultKind);
592private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
601Symbol resultSymbol = this.ResultSymbol(result, name, 0, identifierName, diagnostics, false, out wasError, qualifierOpt: null);
607private TypeSymbol BindNamedAttributeArgumentType(AttributeArgumentSyntax namedArgument, Symbol namedArgumentNameSymbol, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
Binder\Binder_Crefs.cs (81)
18internal ImmutableArray<Symbol> BindCref(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
20ImmutableArray<Symbol> symbols = BindCrefInternal(syntax, out ambiguityWinner, diagnostics);
26private ImmutableArray<Symbol> BindCrefInternal(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
45private ImmutableArray<Symbol> BindTypeCref(TypeCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
61return ImmutableArray.Create<Symbol>(result);
64private ImmutableArray<Symbol> BindQualifiedCref(QualifiedCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
100private ImmutableArray<Symbol> BindMemberCref(MemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
111return ImmutableArray<Symbol>.Empty;
114ImmutableArray<Symbol> result;
146private ImmutableArray<Symbol> BindNameMemberCref(NameMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
176return ImmutableArray<Symbol>.Empty;
179ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText, arity, syntax.Parameters != null, diagnostics);
184return ImmutableArray<Symbol>.Empty;
197private ImmutableArray<Symbol> BindIndexerMemberCref(IndexerMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
201ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, WellKnownMemberNames.Indexer, memberNameText: WellKnownMemberNames.Indexer, arity, syntax.Parameters != null, diagnostics);
206return ImmutableArray<Symbol>.Empty;
223private ImmutableArray<Symbol> BindExtensionMemberCref(ExtensionMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
230return ImmutableArray<Symbol>.Empty;
254return ImmutableArray<Symbol>.Empty;
259ImmutableArray<Symbol> sortedSymbols = computeSortedAndFilteredCrefExtensionMembers(namedContainer, memberName, extensionArity, arity, extensionTypeArguments, diagnostics, syntax);
271ImmutableArray<Symbol> computeSortedAndFilteredCrefExtensionMembers(NamedTypeSymbol container, string name, int extensionArity, int arity, TypeArgumentListSyntax? extensionTypeArguments, BindingDiagnosticBag diagnostics, ExtensionMemberCrefSyntax syntax)
296ArrayBuilder<Symbol>? sortedSymbolsBuilder = null;
329foreach (var candidate in candidates)
346sortedSymbolsBuilder ??= ArrayBuilder<Symbol>.GetInstance();
356return ImmutableArray<Symbol>.Empty;
372private ImmutableArray<Symbol> BindOperatorMemberCref(OperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
381return ImmutableArray<Symbol>.Empty;
384ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
389return ImmutableArray<Symbol>.Empty;
447private ImmutableArray<Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
460return ImmutableArray<Symbol>.Empty;
474ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
479return ImmutableArray<Symbol>.Empty;
491return ImmutableArray<Symbol>.Empty;
512private ImmutableArray<Symbol> ComputeSortedCrefMembers(CSharpSyntaxNode syntax, NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, BindingDiagnosticBag diagnostics)
520private ImmutableArray<Symbol> ComputeSortedCrefMembers(NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, CSharpSyntaxNode syntax,
525ArrayBuilder<Symbol> builder;
543builder = ArrayBuilder<Symbol>.GetInstance();
555builder = ArrayBuilder<Symbol>.GetInstance();
630return ImmutableArray<Symbol>.Empty;
633builder = ArrayBuilder<Symbol>.GetInstance(numInstanceConstructors);
638return ImmutableArray<Symbol>.Empty;
659private ImmutableArray<Symbol> ProcessCrefMemberLookupResults(
660ImmutableArray<Symbol> symbols,
665out Symbol? ambiguityWinner,
675ArrayBuilder<Symbol> candidates = ArrayBuilder<Symbol>.GetInstance();
679ImmutableArray<Symbol> results = PerformCrefOverloadResolution(candidates, parameterSymbols, arity, memberSyntax, out ambiguityWinner, diagnostics);
810private ImmutableArray<Symbol> ProcessParameterlessCrefMemberLookupResults(
811ImmutableArray<Symbol> symbols,
815out Symbol? ambiguityWinner,
825foreach (Symbol s in symbols)
856Symbol symbol = symbols[0];
863ArrayBuilder<Symbol> unwrappedSymbols = ArrayBuilder<Symbol>.GetInstance(symbols.Length);
865foreach (Symbol wrapped in symbols)
908return ImmutableArray.Create<Symbol>(ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, symbol));
915private void GetCrefOverloadResolutionCandidates(ImmutableArray<Symbol> symbols, int arity, TypeArgumentListSyntax? typeArgumentListSyntax, ArrayBuilder<Symbol> candidates)
917foreach (Symbol candidate in symbols)
919Symbol constructedCandidate = ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, candidate);
941private static ImmutableArray<Symbol> PerformCrefOverloadResolution(ArrayBuilder<Symbol> candidates, ImmutableArray<ParameterSymbol> parameterSymbols, int arity, MemberCrefSyntax memberSyntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
943ArrayBuilder<Symbol>? viable = null;
945foreach (Symbol candidate in candidates)
953Symbol signatureMember;
1017viable = ArrayBuilder<Symbol>.GetInstance();
1044return ImmutableArray<Symbol>.Empty;
1064private Symbol ConstructWithCrefTypeParameters(int arity, TypeArgumentListSyntax? typeArgumentListSyntax, Symbol symbol)
Binder\Binder_Expressions.cs (88)
37var memberOpt = this.ContainingMemberOrLambda?.ContainingNonLambdaMember();
113return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty);
121return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNode);
129return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNodes);
137return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty);
145return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty, childNode);
151private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols)
164private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode)
177private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false)
219ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
320if (op.NoCommonTypeError == ErrorCode.ERR_InvalidQM && trueArg is Symbol trueSymbol && falseArg is Symbol falseSymbol)
861node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(BindToTypeForErrorRecovery(BindValue(node.Expression, BindingDiagnosticBag.Discarded, BindValueKind.RefersToLocation))),
1048argumentSyntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty,
1332Symbol container = this.ContainingMemberOrLambda;
1507internal void ReportFieldContextualKeywordConflictIfAny(Symbol? symbol, SyntaxNode syntax, SyntaxToken identifier, BindingDiagnosticBag diagnostics)
1641var members = ArrayBuilder<Symbol>.GetInstance();
1642Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, node, name, node.Arity, members, diagnostics, out isError, qualifierOpt: null); // reports diagnostics in result.
1767void reportPrimaryConstructorParameterShadowing(SimpleNameSyntax node, Symbol symbol, string name, bool invoked, LookupResult lookupResult, ArrayBuilder<Symbol> members, BindingDiagnosticBag diagnostics)
1879private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members)
1972private bool IsBadLocalOrParameterCapture(Symbol symbol, TypeSymbol type, RefKind refKind)
1989private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError)
2275private bool ReportSimpleProgramLocalReferencedOutsideOfTopLevelStatement(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics)
2292private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics)
2328var containingMember = ContainingMember();
2363internal Symbol ContainingMember()
2393var containingMember = this.ContainingMemberOrLambda;
2472var symbol = this.BindNamespaceAliasSymbol(node, diagnostics);
2476private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol)
3294internal static void CheckRestrictedTypeInAsyncMethod(Symbol containingSymbol, TypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
3311foreach (Symbol member in ContainingType?.GetMembers(identifier) ?? ImmutableArray<Symbol>.Empty)
3432where TMember : Symbol
4516ImmutableArray<Symbol>.Empty,
4555ImmutableArray<Symbol>.Empty,
4887symbols: ImmutableArray<Symbol>.Empty,
4898symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
4941symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
5260return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType());
5469return new BoundBadExpression(node, LookupResultKind.NotInvocable, StaticCast<Symbol>.From(type.InstanceConstructors), ImmutableArray.Create(argument), type);
5516return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, StaticCast<Symbol>.From(type.InstanceConstructors), childNodes, type);
5613return new BoundBadExpression(node, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(type), children.ToImmutableAndFree(), type) { WasCompilerGenerated = wasCompilerGenerated };
6142private static ImmutableSegmentedDictionary<string, Symbol> GetMembersRequiringInitialization(MethodSymbol constructor)
6147return ImmutableSegmentedDictionary<string, Symbol>.Empty;
6159ImmutableSegmentedDictionary<string, Symbol> requiredMembers = GetMembersRequiringInitialization(constructor);
6181var memberSymbol = assignmentOperator.Left switch
6197if (!requiredMembersBuilder.TryGetValue(memberSymbol.Name, out var requiredMember))
6219private static void ReportMembersRequiringInitialization(SyntaxNode creationSyntax, ImmutableSegmentedDictionary<string, Symbol>.Builder requiredMembersBuilder, BindingDiagnosticBag diagnostics)
6449return BadExpression(elementInitializer, LookupResultKind.NotInvocable, ImmutableArray<Symbol>.Empty, boundElementInitializerExpressions);
6900ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
7080return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol>.Empty, children, interfaceType);
7508Symbol leftSymbol;
7829ArrayBuilder<Symbol> symbols = lookupResult.Symbols;
7834Symbol sym = ResultSymbol(lookupResult, rightName, rightArity, node, diagnostics, false, out wasError, ns, options);
8023if (resolution.IsNonMethodExtensionMember(out Symbol? extensionMember))
8040private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics)
8114var members = ArrayBuilder<Symbol>.GetInstance();
8212ReportQueryLookupFailed(node, boundLeft, plainName, ImmutableArray<Symbol>.Empty, diagnostics);
8274return this.BindMemberAccessBadResult(syntax, node.Name, node.ReceiverOpt, node.LookupError, StaticCast<Symbol>.From(node.Methods), node.ResultKind);
8285ImmutableArray<Symbol> symbols,
8291foreach (var s in symbols)
8317var symbolOpt = symbols.Length == 1 ? symbols[0] : null;
8321(object)symbolOpt == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(symbolOpt),
8326private TypeSymbol GetNonMethodMemberType(Symbol symbolOpt)
8417var members = ArrayBuilder<Symbol>.GetInstance();
8420Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, right, plainName, arity, members, diagnostics, out wasError,
8805foreach (var member in lookupResult.Symbols)
9033private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics)
9085static bool isNotImplementableInstanceMember(Symbol symbol)
9141Symbol symbol,
9189private Symbol GetSymbolOrMethodOrPropertyGroup(LookupResult result, SyntaxNode node, string plainName, int arity, ArrayBuilder<Symbol> methodOrPropertyGroup, BindingDiagnosticBag diagnostics, out bool wasError, NamespaceOrTypeSymbol qualifierOpt)
9199Symbol other = null; // different member type from 'methodOrPropertyGroup'
9204foreach (var symbol in result.Symbols)
9271private static bool IsMethodOrPropertyGroup(ArrayBuilder<Symbol> members)
9275var member = members[0];
9609return new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes, CreateErrorType(), hasErrors: true);
9955foreach (Symbol symbol in lookupResult.Symbols)
10372foreach (var candidate in lookupResult.Symbols)
10427foreach (var candidate in lookupResult.Symbols)
10868Symbol extensionMember = singleLookupResult.Symbol;
10971private static bool IsStaticInstanceMismatchForUniqueSignatureFromMethodGroup(BoundExpression receiver, Symbol extensionMember)
11081Symbol extensionMember = singleLookupResult.Symbol;
11316return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnostics, getErrorLocation());
11423internal static bool MethodOrLambdaRequiresValue(Symbol symbol, CSharpCompilation compilation)
Binder\Binder_Lookup.cs (57)
217foreach (var candidate in candidates)
376Symbol existingDefinition = submissionSymbols.Symbols.First();
410Symbol firstSymbol = submissionSymbols.Symbols.First();
521foreach (Symbol member in members)
574Symbol symbolWithoutSuffix;
580Symbol symbolWithSuffix = null;
640private bool IsAmbiguousResult(LookupResult result, out Symbol resultSymbol)
666private Symbol ResolveMultipleSymbolsInAttributeTypeLookup(ArrayBuilder<Symbol> symbols)
685var srcSymbol = symbols[best.Index];
686var mdSymbol = symbols[secondBest.Index];
698private static bool NameAndArityMatchRecursively(Symbol x, Symbol y)
718static bool isRoot(Symbol symbol) => symbol is null || symbol is NamespaceSymbol { IsGlobalNamespace: true };
721private bool IsSingleViableAttributeType(LookupResult result, out Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
737private SingleLookupResult GenerateNonViableAttributeTypeResult(Symbol symbol, DiagnosticInfo diagInfo, bool diagnose)
747private bool CheckAttributeTypeViability(Symbol symbol, bool diagnose, ref DiagnosticInfo diagInfo, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
834foreach (Symbol member in members)
904var other = GetNearestOtherSymbol(basesBeingResolved, type);
959var allMembers = new HashSet<Symbol>(comparer);
960var conflictingMembers = new HashSet<Symbol>(comparer);
965foreach (var sym in result.Symbols)
990foreach (var sym in tmp.Symbols)
1004foreach (var sym in result.Symbols)
1013foreach (var sym in allMembers)
1054private static Symbol GetNearestOtherSymbol(ConsList<TypeSymbol> list, TypeSymbol type)
1303var sym = hiddenSymbols[i];
1309var hidingSym = hidingSymbols[j];
1354private static bool IsMethodOrIndexer(Symbol symbol)
1359internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, string name, LookupOptions options, Binder originalBinder)
1363return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1371return ImmutableArray<Symbol>.Empty;
1383internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, LookupOptions options, Binder originalBinder)
1387return StaticCast<Symbol>.From(nsOrType.GetTypeMembersUnordered());
1395return ImmutableArray<Symbol>.Empty;
1403private bool IsInScopeOfAssociatedSyntaxTree(Symbol symbol)
1451internal SingleLookupResult CheckViability(Symbol symbol, int arity, LookupOptions options, TypeSymbol accessThroughType, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1460var unwrappedSymbol = symbol.Kind == SymbolKind.Alias
1511var unwrappedSymbols = ImmutableArray.Create<Symbol>(unwrappedSymbol);
1536diagInfo = new CSDiagnosticInfo(ErrorCode.ERR_BadAccess, new[] { unwrappedSymbol }, ImmutableArray.Create<Symbol>(unwrappedSymbol), additionalLocations: ImmutableArray<Location>.Empty);
1610private CSDiagnosticInfo MakeCallMethodsDirectlyDiagnostic(Symbol symbol)
1647/// Does not consider <see cref="Symbol.CanBeReferencedByName"/> - that is left to the caller.
1649internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, LookupSymbolsInfo info, TypeSymbol accessThroughType, AliasSymbol aliasSymbol = null)
1715private bool IsCrefAccessible(Symbol symbol)
1720private static bool IsEffectivelyPrivate(Symbol symbol)
1722for (Symbol s = symbol; (object)s != null; s = s.ContainingSymbol)
1737internal bool IsAccessible(Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, TypeSymbol accessThroughType = null, ConsList<TypeSymbol> basesBeingResolved = null)
1743internal bool IsAccessible(Symbol symbol, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1756internal bool IsAccessible(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1768/// Should only be called by <see cref="IsAccessible(Symbol, TypeSymbol, out bool, ref CompoundUseSiteInfo{AssemblySymbol}, ConsList{TypeSymbol})"/>,
1771internal virtual bool IsAccessibleHelper(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved)
1777internal bool IsNonInvocableMember(Symbol symbol)
1793private bool IsInvocableMember(Symbol symbol)
1818private static bool IsInstance(Symbol symbol)
1835private static bool WrongArity(Symbol symbol, int arity, bool diagnose, LookupOptions options, out DiagnosticInfo diagInfo)
2021foreach (var symbol in candidateMembers)
2033foreach (var symbol in candidateMembers)
Binder\Binder_Patterns.cs (10)
335out Symbol? variableSymbol, out BoundExpression? variableAccess);
371lengthAccess = new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType(), hasErrors: true) { WasCompilerGenerated = true };
848hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
873out Symbol? variableSymbol,
1035ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess);
1300foreach (var symbol in tupleType.GetMembers(name))
1332Symbol foundSymbol = BindTypeOrAliasOrKeyword(node.VarKeyword, node, diagnostics, out bool isVar).Symbol;
1362variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
1514Symbol? symbol = null;
1540private Symbol? BindPropertyPatternMember(
Binder\Binder_Query.cs (6)
302state.selectOrGroup, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty,
736yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), CreateErrorType());
742yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), yExpression.Type);
803field2Value = new BoundBadExpression(field2Value.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(field2Value), field2Value.Type, true);
959receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.NotAValue, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(receiver), CreateErrorType());
981receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.NotAValue, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(receiver), CreateErrorType());
Binder\Binder_QueryErrors.cs (3)
29ImmutableArray<Symbol> symbols,
164internal static void ReportQueryInferenceFailed(CSharpSyntaxNode queryClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics)
213private static bool ReportQueryInferenceFailedSelectMany(FromClauseSyntax fromClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics)
Binder\Binder_Symbols.cs (57)
196Symbol symbol = null;
350private NamespaceOrTypeSymbol GetContainingNamespaceOrNonExtensionType(Symbol symbol)
361internal Symbol BindNamespaceAliasSymbol(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
376Symbol bindingResult = ResultSymbol(result, plainName, 0, node, diagnostics, false, out wasError, qualifierOpt: null, options: LookupOptions.NamespaceAliasesOnly);
587var bindingResult = BindNamespaceAliasSymbol(node.Alias, diagnostics);
886Symbol bindingResult = null;
964foreach (var s in result.Symbols)
985foreach (var s in result.Symbols)
1059Symbol.ReportUseSiteDiagnostic(info, diagnostics, node.Location);
1092private static Symbol UnwrapAliasNoDiagnostics(Symbol symbol, ConsList<TypeSymbol> basesBeingResolved = null)
1124private Symbol UnwrapAlias(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1130private Symbol UnwrapAlias(Symbol symbol, out AliasSymbol alias, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1288Symbol lookupResultSymbol = ResultSymbol(lookupResult, plainName, arity, node, diagnostics, (basesBeingResolved != null), out wasError, qualifierOpt, options);
1317ImmutableArray.Create<Symbol>(lookupResultSymbol),
1429ArrayBuilder<Symbol> members,
1473ImmutableArray<TypeWithAnnotations> typeArguments, bool invoked, ArrayBuilder<Symbol> members, BindingDiagnosticBag diagnostics)
1507receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Ambiguous, ImmutableArray<Symbol>.Empty, ImmutableArray.Create(receiver), receiver.Type, hasErrors: true).MakeCompilerGenerated();
1517receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes: [receiver], receiver.Type, hasErrors: true).MakeCompilerGenerated();
1542ArrayBuilder<Symbol> members, TypeSymbol receiverType,
1575foreach (Symbol symbol in lookupResult.Symbols)
1613private static readonly Func<Symbol, MethodSymbol> s_toMethodSymbolFunc = s => (MethodSymbol)s;
1614private static readonly Func<Symbol, PropertySymbol> s_toPropertySymbolFunc = s => (PropertySymbol)s;
1722internal Symbol GetSpecialTypeMember(SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1727internal static Symbol GetSpecialTypeMember(CSharpCompilation compilation, SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1729Symbol memberSymbol;
1736where TSymbol : Symbol
1776private static UseSiteInfo<AssemblySymbol> GetUseSiteInfoForWellKnownMemberOrContainingType(Symbol symbol)
1791internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode node)
1796internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxToken token)
1807internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, Location location)
1859internal Symbol GetWellKnownTypeMember(WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1868internal static Symbol GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1873Symbol memberSymbol = GetWellKnownTypeMember(compilation, member, out useSiteInfo, isOptional);
1882internal static Symbol GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, out UseSiteInfo<AssemblySymbol> useSiteInfo, bool isOptional = false)
1884Symbol memberSymbol = compilation.GetWellKnownTypeMember(member);
1925private class ConsistentSymbolOrder : IComparer<Symbol>
1928public int Compare(Symbol fst, Symbol snd)
1950internal Symbol ResultSymbol(
1961Symbol symbol = resultSymbol(result, simpleName, arity, where, diagnostics, suppressUseSiteDiagnostics, out wasError, qualifierOpt, options);
1979Symbol resultSymbol(
2018var srcSymbol = symbols[best.Index];
2019var mdSymbol = symbols[secondBest.Index];
2077var first = symbols[best.Index];
2078var second = symbols[secondBest.Index];
2080Debug.Assert(!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything) || options.IsAttributeTypeLookup(),
2083Debug.Assert(!Symbol.Equals(first, second, TypeCompareKind.ConsiderEverything) || !Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2239!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2294var singleResult = symbols[0];
2402private static AssemblySymbol GetContainingAssembly(Symbol symbol)
2522private BestSymbolInfo GetBestSymbolInfo(ArrayBuilder<Symbol> symbols, out BestSymbolInfo secondBest)
2530var symbol = symbols[i];
2568private static BestSymbolLocation GetLocation(CSharpCompilation compilation, Symbol symbol)
Binder\BinderFactory.BinderFactoryVisitor.cs (10)
24private Symbol _memberOpt;
27internal void Initialize(BinderFactory factory, int position, CSharpSyntaxNode memberDeclarationOpt, Symbol memberOpt)
436Symbol containingSymbol = binder.ContainingMemberOrLambda;
560private Symbol GetMemberSymbol(string memberName, TextSpan memberSpan, NamedTypeSymbol container, SymbolKind kind)
566foreach (Symbol sym in sourceMemberContainerTypeSymbol.GetMembersToMatchAgainstDeclarationSpan())
573if (sym.Name == memberName && checkSymbol(sym, memberSpan, kind, out Symbol result))
581foreach (Symbol sym in container.GetMembers(memberName))
583if (checkSymbol(sym, memberSpan, kind, out Symbol result))
592bool checkSymbol(Symbol sym, TextSpan memberSpan, SymbolKind kind, out Symbol result)
Binder\BindingDiagnosticBag.cs (7)
87internal void AddDependencies(Symbol? symbol)
95internal bool ReportUseSite(Symbol? symbol, SyntaxNode node)
100internal bool ReportUseSite(Symbol? symbol, SyntaxToken token)
105internal bool ReportUseSite(Symbol? symbol, Location location)
108internal bool ReportUseSite<TData>(Symbol? symbol, Func<TData, Location> getLocation, TData data)
151return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnosticBag, location);
174internal CSDiagnosticInfo Add(ErrorCode code, Location location, ImmutableArray<Symbol> symbols, params object[] args)
Binder\InMethodBinder.cs (10)
27private SmallDictionary<string, Symbol> _lazyDefinitionMap;
49private static void RecordDefinition<T>(SmallDictionary<string, Symbol> declarationMap, ImmutableArray<T> definitions) where T : Symbol
51foreach (Symbol s in definitions)
72internal override Symbol ContainingMemberOrLambda
243private static bool ReportConflictWithParameter(Symbol parameter, Symbol newSymbol, string name, Location newLocation, BindingDiagnosticBag diagnostics)
331internal override bool EnsureSingleDefinition(Symbol symbol, string name, Location location, BindingDiagnosticBag diagnostics)
355map = new SmallDictionary<string, Symbol>();
362Symbol existingDeclaration;
Binder\LookupResult.cs (17)
17internal delegate SingleLookupResult LookupFilter(Symbol sym);
68private readonly ArrayBuilder<Symbol> _symbolList;
79_symbolList = new ArrayBuilder<Symbol>();
109internal Symbol SingleSymbolOrDefault
117internal ArrayBuilder<Symbol> Symbols
155internal static SingleLookupResult Good(Symbol symbol)
160internal static SingleLookupResult WrongArity(Symbol symbol, DiagnosticInfo error)
170internal static SingleLookupResult NotReferencable(Symbol symbol, DiagnosticInfo error)
175internal static SingleLookupResult StaticInstanceMismatch(Symbol symbol, DiagnosticInfo error)
180internal static SingleLookupResult Inaccessible(Symbol symbol, DiagnosticInfo error)
185internal static SingleLookupResult NotInvocable(Symbol unwrappedSymbol, Symbol symbol, bool diagnose)
191internal static SingleLookupResult NotLabel(Symbol symbol, DiagnosticInfo error)
196internal static SingleLookupResult NotTypeOrNamespace(Symbol symbol, DiagnosticInfo error)
201internal static SingleLookupResult NotTypeOrNamespace(Symbol unwrappedSymbol, Symbol symbol, bool diagnose)
208internal static SingleLookupResult NotAnAttributeType(Symbol symbol, DiagnosticInfo error)
Binder\Semantics\AccessCheck.cs (11)
25Symbol symbol,
38Symbol symbol,
53Symbol symbol,
67internal static bool IsEffectivelyPublicOrInternal(Symbol symbol, out bool isInternal)
134Symbol symbol,
135Symbol within, // must be assembly or named type symbol
223private static bool IsNamedTypeAccessible(NamedTypeSymbol type, Symbol within, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
259Symbol within)
300Symbol within,
345Symbol within,
494Symbol within,
Binder\Semantics\OverloadResolution\OverloadResolution.cs (60)
66where TMember : Symbol
80where TMember : Symbol
196where TMember : Symbol
321where TMember : Symbol
360where TMember : Symbol
440where TMember : Symbol
492private static readonly ObjectPool<PooledHashSet<Symbol>> s_HiddenSymbolsSetPool = PooledHashSet<Symbol>.CreatePool(Microsoft.CodeAnalysis.CSharp.Symbols.SymbolEqualityComparer.AllIgnoreOptions);
495where TMember : Symbol
497PooledHashSet<Symbol> hiddenSymbols = null;
508foreach (Symbol hidden in getHiddenMembers(result.LeastOverriddenMember.ConstructedFrom()))
540static ImmutableArray<Symbol> getHiddenMembers(Symbol member)
551return ImmutableArray<Symbol>.Empty;
582BoundExpression receiverOpt) where TMember : Symbol
608private static void RemoveStaticInstanceMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, bool requireStatic) where TMember : Symbol
626private static void RemoveMethodsNotDeclaredStatic<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
642private void RemoveConstraintViolations<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
663private void RemoveCallingConventionMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, in CallingConventionInfo expectedConvention) where TMember : Symbol
686var member = (MethodSymbol)(Symbol)result.Member;
792private bool FailsConstraintChecks<TMember>(TMember member, out ArrayBuilder<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
852bool isFunctionPointerConversion) where TMember : Symbol
868var method = (MethodSymbol)(Symbol)result.Member;
900private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
918private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
1067where TMember : Symbol
1235where TMember : Symbol
1296public static bool IsValidParams(Binder binder, Symbol member, bool disallowExpandedNonArrayParams, out TypeWithAnnotations definitionElementType)
1380Symbol member,
1381Symbol moreDerivedOverride,
1413where TMember : Symbol
1437where TMember : Symbol
1457private static bool HidesByName(Symbol member)
1471where TMember : Symbol
1497where TMember : Symbol
1620where TMember : Symbol
1663where TMember : Symbol
1781where TMember : Symbol
1790where TMember : Symbol
1851where TMember : Symbol
1942where TMember : Symbol
2093where TMember : Symbol
2133where TMember : Symbol
2678where TMember : Symbol
2698private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
3831Symbol member,
3876out bool hasAnyRefOmittedArgument) where TMember : Symbol
4024Options options) where TMember : Symbol
4037out bool hasAnyRefOmittedArgument) where TMember : Symbol
4095where TMember : Symbol
4176where TMember : Symbol
4244where TMember : Symbol
4343var methodForTypeParameters = isNewExtensionMember ? leastOverriddenMember.OriginalDefinition : leastOverriddenMember;
4401where TMember : Symbol
4450(MethodSymbol)(Symbol)member,
4470Symbol candidate, // method or property
4675Symbol candidate, // method or property
4751private static bool TypeContainsTypeParameterFromContainer(Symbol container, TypeSymbol parameterType)
4761private static TMember GetConstructedFrom<TMember>(TMember member) where TMember : Symbol
4768return (TMember)(Symbol)(member as MethodSymbol).ConstructedFrom;
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (25)
26internal class OverloadResolutionResult<TMember> where TMember : Symbol
204bool isParamsModifierValidation = false) where T : Symbol
215var symbols = StaticCast<Symbol>.From(memberGroup);
580private static void ReportUnsupportedMetadata(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstUnsupported)
592Symbol.ReportUseSiteDiagnostic(diagInfo, diagnostics, location);
595private static void ReportWrongCallingConvention(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstSupported, MethodSymbol target)
622ImmutableArray<Symbol> symbols,
641ImmutableArray<Symbol> symbols,
656Symbol symbol = staticInstanceMismatch.Member;
710var method = (MethodSymbol)(Symbol)mismatch.Member;
740ImmutableArray<Symbol> symbols,
793ImmutableArray<Symbol> symbols)
813ImmutableArray<Symbol> symbols)
846ImmutableArray<Symbol> symbols)
881ImmutableArray<Symbol> symbols,
926ImmutableArray<Symbol> symbols,
1045MethodSymbol method = (MethodSymbol)(Symbol)result.Member;
1085ImmutableArray<Symbol> symbols,
1154ImmutableArray<Symbol> symbols,
1379static Symbol unwrapIfParamsCollection(MemberResolutionResult<TMember> badArg, ParameterSymbol parameter, bool isLastParameter)
1391private bool HadAmbiguousWorseMethods(BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isQuery, BoundExpression receiver, string name)
1455private bool HadAmbiguousBestMethods(BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location)
1507private static DiagnosticInfoWithSymbols CreateAmbiguousCallDiagnosticInfo(Symbol first, Symbol second, ImmutableArray<Symbol> symbols)
CommandLine\CSharpCompiler.cs (6)
247Symbol? entryPoint = comp.ScriptClass;
386var symbol = diag switch
388{ Code: (int)ErrorCode.ERR_BadAccess, Arguments: [Symbol s] } => s,
389{ Code: (int)ErrorCode.ERR_InaccessibleGetter, Arguments: [Symbol s] } => s,
390{ Code: (int)ErrorCode.ERR_InaccessibleSetter, Arguments: [Symbol s] } => s,
391{ Code: (int)ErrorCode.ERR_ImplicitImplementationOfInaccessibleInterfaceMember, Arguments: [_, Symbol s, _] } => s,
Compilation\AttributeSemanticModel.cs (11)
19private readonly Symbol? _attributeTarget;
24Symbol? attributeTarget,
28ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt = null)
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)
108ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
Compilation\CSharpCompilation.cs (30)
319internal bool IsRuntimeAsyncEnabledIn(Symbol? symbol)
1224internal new Symbol? GetAssemblyOrModuleSymbol(MetadataReference reference)
1245return (TSymbol?)(object?)symbol.GetSymbol<Symbol>();
1785internal Symbol GetSpecialTypeMember(SpecialMember specialMember)
1814ImmutableArray<Symbol>.Empty,
2093var taskCandidates = taskEntryPoints.SelectAsArray(s => (Symbol)s.Candidate);
2096foreach (var candidate in taskCandidates)
2167symbols: viableEntryPoints.OfType<Symbol>().AsImmutable(),
2191ArrayBuilder<MethodSymbol> entryPointCandidates, IEnumerable<Symbol> members)
2193foreach (var member in members)
2210static void addIfCandidate(ArrayBuilder<MethodSymbol> entryPointCandidates, Symbol member)
2457Symbol? symbol0 = symbol.EnsureCSharpSymbolOrNull(nameof(symbol));
2458Symbol? within0 = within.EnsureCSharpSymbolOrNull(nameof(within));
2995private void GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, bool includeEarlierStages, BindingDiagnosticBag builder, Predicate<Symbol>? symbolFilter, CancellationToken cancellationToken)
3127private static bool IsDefinedOrImplementedInSourceTree(Symbol symbol, SyntaxTree tree, TextSpan? span)
3233filterOpt: filterTree is object ? (Predicate<Symbol>?)(s => IsDefinedOrImplementedInSourceTree(s, filterTree, filterSpan)) : (Predicate<Symbol>?)null,
3275private ReadOnlyBindingDiagnostic<AssemblySymbol> GetSourceDeclarationDiagnostics(SyntaxTree? syntaxTree = null, TextSpan? filterSpanWithinTree = null, Func<IEnumerable<Diagnostic>, SyntaxTree, TextSpan?, IEnumerable<Diagnostic>>? locationFilterOpt = null, Predicate<Symbol>? symbolFilter = null, CancellationToken cancellationToken = default)
3683foreach (var childSymbol in symbol.GetMembers())
4736internal IEnumerable<Symbol> GetSymbolsWithNameCore(string name, SymbolFilter filter = SymbolFilter.TypeAndMember, CancellationToken cancellationToken = default)
4799internal bool ShouldEmitNullableAttributes(Symbol symbol)
4825static Symbol getExplicitAccessibilitySymbol(Symbol symbol)
4851internal void SymbolDeclaredEvent(Symbol symbol)
4917var sustainedLowLatency = GetWellKnownTypeMember(WellKnownMember.System_Runtime_GCLatencyMode__SustainedLowLatency);
4951public IEnumerable<Symbol> GetSymbolsWithName()
4953var result = new HashSet<Symbol>();
4965HashSet<Symbol> set)
5019ArrayBuilder<MergedNamespaceOrTypeDeclaration> spine, MergedTypeDeclaration current, HashSet<Symbol> set)
5027foreach (var member in container.GetMembers())
Compilation\CSharpSemanticModel.cs (141)
168internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols);
178internal abstract ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken));
280protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
287crefSymbols = default(ImmutableArray<Symbol>);
299crefSymbols = ImmutableArray.Create<Symbol>(binder.BindType(expression, BindingDiagnosticBag.Discarded).Type);
325internal static ImmutableArray<Symbol> BindCref(CrefSyntax crefSyntax, Binder binder)
327Symbol unusedAmbiguityWinner;
337ImmutableArray<Symbol> symbols = BindCref(crefSyntax, binder);
368private static SymbolInfo GetCrefSymbolInfo(OneOrMany<Symbol> symbols, SymbolInfoOptions options, bool hasParameterList)
724ImmutableArray<Symbol> crefSymbols;
1054ImmutableArray<Symbol> crefSymbols;
1201ImmutableArray<Symbol> crefSymbols;
1669foreach (Symbol symbol in lookupResult.Symbols)
1701Symbol uniqueSymbol;
1763Symbol singleSymbol = binder.ResultSymbol(lookupResult, name, arity, this.Root, BindingDiagnosticBag.Discarded, true, out wasError, container, options);
1771foreach (var symbol in lookupResult.Symbols)
1779foreach (var symbol in lookupResult.Symbols)
1789private Symbol RemapSymbolIfNecessary(Symbol symbol)
1807internal abstract Symbol RemapSymbolIfNecessaryCore(Symbol symbol);
1824public bool IsAccessible(int position, Symbol symbol)
1876Constraint = "Provide " + nameof(ArrayBuilder<Symbol>) + " capacity to reduce number of allocations.")]
1913OneOrMany<Symbol> symbols = GetSemanticSymbols(
1914boundExpr, boundNodeForSyntacticParent, binderOpt, options, out bool isDynamic, out LookupResultKind resultKind, out ImmutableArray<Symbol> unusedMemberGroup);
1920ImmutableArray<Symbol> unusedHighestMemberGroup;
1921OneOrMany<Symbol> highestSymbols = GetSemanticSymbols(
1960return SymbolInfoFactory.Create(ImmutableArray<Symbol>.Empty, LookupResultKind.Empty, isDynamic);
1966var builder = ArrayBuilder<Symbol>.GetInstance(symbols.Count);
1967foreach (Symbol symbol in symbols)
1988private static SymbolInfo GetSymbolInfoForSubpattern(Symbol subpatternSymbol)
2003private static void AddUnwrappingErrorTypes(ArrayBuilder<Symbol> builder, Symbol s)
2283internal ImmutableArray<Symbol> GetMemberGroupForNode(
2292ImmutableArray<Symbol> memberGroup;
2299return ImmutableArray<Symbol>.Empty;
2321internal static SymbolInfo GetSymbolInfoForSymbol(Symbol symbol, SymbolInfoOptions options)
2326Symbol unwrapped = UnwrapAlias(symbol);
2335var symbols = OneOrMany<Symbol>.Empty;
2353var symbolToReturn = ((options & SymbolInfoOptions.ResolveAliases) != 0) ? unwrapped : symbol;
2359internal static CSharpTypeInfo GetTypeInfoForSymbol(Symbol symbol)
2369protected static Symbol UnwrapAlias(Symbol symbol)
2374protected static OneOrMany<Symbol> UnwrapAliases(OneOrMany<Symbol> symbols)
2378foreach (Symbol symbol in symbols)
2387ArrayBuilder<Symbol> builder = ArrayBuilder<Symbol>.GetInstance();
2388foreach (Symbol symbol in symbols)
3352private OneOrMany<Symbol> GetSemanticSymbols(
3359out ImmutableArray<Symbol> memberGroup)
3361memberGroup = ImmutableArray<Symbol>.Empty;
3362OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
3418var typeSymbol = boundType.AliasOpt ?? (Symbol)boundType.Type;
3470symbols = OneOrMany.Create<Symbol>(invocation.FunctionPointer);
3499symbols = originalIndexersOpt.IsDefault ? OneOrMany.Create<Symbol>(indexerAccess.Indexer) : StaticCast<Symbol>.From(OneOrMany.Create(originalIndexersOpt));
3514symbols = OneOrMany<Symbol>.Empty;
3519symbols = OneOrMany.Create<Symbol>(methodSymbol);
3525boundNode.ExpressionSymbol is Symbol accessSymbol &&
3531symbols = OneOrMany.Create<Symbol>(parentOperator.Event);
3544symbols = OneOrMany.Create<Symbol>(ReducedExtensionMethodSymbol.Create(symbol));
3629var builder = ArrayBuilder<Symbol>.GetInstance();
3640memberGroup = dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3648memberGroup = collectionInit.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3656memberGroup = dynamicIndexer.ApplicableIndexers.Cast<PropertySymbol, Symbol>();
3668memberGroup = objectCreation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3679symbols = OneOrMany.Create<Symbol>(boundObjectCreation.Constructor);
3683symbols = StaticCast<Symbol>.From(OneOrMany.Create(boundObjectCreation.ConstructorsGroup));
3687memberGroup = boundObjectCreation.ConstructorsGroup.Cast<MethodSymbol, Symbol>();
3695var containingMember = binder.ContainingMember();
3698symbols = thisParam != null ? OneOrMany.Create<Symbol>(thisParam) : OneOrMany<Symbol>.Empty;
3707symbols = OneOrMany.Create<Symbol>(fromEndIndexExpression.MethodOpt);
3717symbols = OneOrMany.Create<Symbol>(rangeExpression.MethodOpt);
3724if (boundNode.ExpressionSymbol is Symbol symbol)
3742private static ParameterSymbol GetThisParameter(TypeSymbol typeOfThis, NamedTypeSymbol containingType, Symbol containingMember, out LookupResultKind resultKind)
3805private static void GetSymbolsAndResultKind(BoundUnaryOperator unaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3821symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(unaryOperator.Operand.Type.StrippedType(),
3828private static void GetSymbolsAndResultKind(BoundIncrementOperator increment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3845symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(opType,
3852private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3878symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(objectType,
3896private static Symbol GetIntrinsicOperatorSymbol(BinaryOperatorKind op, bool isDynamic, TypeSymbol leftType, TypeSymbol rightType, TypeSymbol returnType, bool isChecked)
3925private static void GetSymbolsAndResultKind(BoundCompoundAssignmentOperator compoundAssignment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3951private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out OneOrMany<Symbol> symbols, out LookupResultKind resultKind)
3960symbols = StaticCast<Symbol>.From(OneOrMany.Create(originalCandidates));
3965symbols = OneOrMany<Symbol>.Empty;
3978ref OneOrMany<Symbol> symbols,
3979ref ImmutableArray<Symbol> memberGroup)
4031ref OneOrMany<Symbol> symbols,
4032ref ImmutableArray<Symbol> memberGroup)
4072symbols = OneOrMany.Create<Symbol>(constructorOpt);
4076symbols = StaticCast<Symbol>.From(OneOrMany.Create(candidateConstructors));
4081memberGroup = candidateConstructors.Cast<MethodSymbol, Symbol>();
4122PooledHashSet<Symbol> hiddenSymbols = null;
4125Symbol symbol = iSymbol.GetSymbol();
4131foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4135hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4143foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4147hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4215HashSet<Symbol> hiddenSymbols = new HashSet<Symbol>();
4220foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4228foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4244private OneOrMany<Symbol> GetMethodGroupSemanticSymbols(
4250out ImmutableArray<Symbol> memberGroup)
4254OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4326symbols = OneOrMany.Create((Symbol)method);
4338symbols = OneOrMany.Create(dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>());
4344ImmutableArray<Symbol> myMethodGroup = memberGroup;
4397private OneOrMany<Symbol> GetPropertyGroupSemanticSymbols(
4402out ImmutableArray<Symbol> propertyGroup)
4406OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4415propertyGroup = boundNode.Properties.Cast<PropertySymbol, Symbol>();
4432symbols = OneOrMany.Create<Symbol>(indexer.Indexer);
4438symbols = StaticCast<Symbol>.From(OneOrMany.Create(indexer.OriginalIndexersOpt));
4445ImmutableArray<Symbol> myPropertyGroup = propertyGroup;
4573internal static ImmutableArray<Symbol> GetReducedAndFilteredMethodGroupSymbols(Binder binder, BoundMethodGroup node)
4575var members = ArrayBuilder<Symbol>.GetInstance();
4576var filteredMembers = ArrayBuilder<Symbol>.GetInstance();
4603var otherSymbol = node.LookupSymbolOpt;
4682ArrayBuilder<Symbol> members,
4683ArrayBuilder<Symbol> filteredMembers,
4684Symbol member,
4689Symbol? substitutedMember = member.GetReducedAndFilteredSymbol(typeArguments, receiverType, compilation, checkFullyInferred: false);
4708ArrayBuilder<Symbol> members,
4709ArrayBuilder<Symbol> filteredMembers,
4721Symbol member = singleResult.Symbol;
4752private static OneOrMany<Symbol> CreateReducedAndFilteredSymbolsFromOriginals(BoundCall call, CSharpCompilation compilation)
4773var methodBuilder = ArrayBuilder<Symbol>.GetInstance();
4774var filteredMethodBuilder = ArrayBuilder<Symbol>.GetInstance();
4788private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundCall call)
4802return OneOrMany.Create<Symbol>(method);
4805private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundDelegateCreationExpression delegateCreation, BoundExpression receiverOpt)
4815return OneOrMany.Create<Symbol>(method);
Compilation\InitializerSemanticModel.cs (10)
27Symbol symbol,
30ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt = null) :
59internal static InitializerSemanticModel Create(PublicSemanticModel containingSemanticModel, ParameterSyntax syntax, ParameterSymbol parameterSymbol, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt)
69internal static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, Symbol owner, EqualsValueClauseSyntax syntax, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt, int position)
259ref ImmutableDictionary<Symbol, Symbol> remappedSymbols)
Compilation\MemberSemanticModel.cs (26)
29private readonly Symbol _memberSymbol;
37private ImmutableDictionary<Symbol, Symbol> _lazyRemappedSymbols;
38private readonly ImmutableDictionary<Symbol, Symbol> _parentRemappedSymbolsOpt;
48Symbol memberSymbol,
51ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt)
85internal Symbol MemberSymbol
163internal ImmutableDictionary<Symbol, Symbol> GetRemappedSymbols()
192internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
206ImmutableDictionary<Symbol, Symbol> ignored = null;
721private T GetRemappedSymbol<T>(T originalSymbol) where T : Symbol
726if (_lazyRemappedSymbols.TryGetValue(originalSymbol, out Symbol? remappedSymbol))
1234internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
1475protected void UnguardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
1483protected void GuardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
2047ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols);
2342internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
2353if (_lazyRemappedSymbols.TryGetValue(symbol, out var remappedSymbol))
Compilation\SpeculativeSemanticModelWithMemberModel.cs (15)
48ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
57static Symbol? getAttributeTargetFromPosition(int position, SyntaxTreeSemanticModel model)
74Symbol owner,
77ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
90Symbol owner,
93ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt,
106ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt,
460internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
500internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
565internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
Compilation\SyntaxTreeSemanticModel.cs (18)
284var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: (options & SymbolInfoOptions.PreserveAliases) != 0);
322var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: false); // Don't care about aliases here.
330private Symbol GetSemanticInfoSymbolInNonMemberContext(CSharpSyntaxNode node, bool bindVarAsAliasFirst)
356Symbol result = bindVarAsAliasFirst
397internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
403return model == null ? ImmutableArray<Symbol>.Empty : model.GetMemberGroupWorker(node, options, cancellationToken);
738internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
1400foreach (var symbol in collection)
1778private Symbol GetDeclaredMember(NamespaceOrTypeSymbol container, TextSpan declarationSpan, bool isKnownToBeANamespace, string name = null)
1806Symbol zeroWidthMatch = null;
1807foreach (var symbol in collection)
1813var result = GetDeclaredMember(namedType, declarationSpan, isKnownToBeANamespace, name);
1830Symbol partial = symbol.GetPartialImplementationPart();
1864var result = this.GetDeclaredMember(container, declarationSyntax.Span, isKnownToBeANamespace: false, declarationSyntax.Identifier.ValueText);
2346private static BoundNode GetBoundRoot(MemberSemanticModel memberModel, out Symbol member)
2398private Symbol GetDeclaredMemberSymbol(CSharpSyntaxNode declarationSyntax)
2437internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
Compiler\ClsComplianceChecker.cs (36)
32private readonly ConcurrentDictionary<Symbol, Compliance> _declaredOrInheritedCompliance;
52_declaredOrInheritedCompliance = new ConcurrentDictionary<Symbol, Compliance>(Symbols.SymbolEqualityComparer.ConsiderEverything);
212foreach (var m in symbol.GetMembersUnordered())
230foreach (var m in symbol.GetMembersUnordered())
267foreach (var m in symbol.GetMembersUnordered())
420private bool VisitTypeOrMember(Symbol symbol, Compliance compliance)
497private void CheckForNonCompliantAbstractMember(Symbol symbol)
541private void CheckForCompliantWithinNonCompliant(Symbol symbol)
585private void CheckForAttributeWithArrayArgument(Symbol symbol)
680Symbol container = parameters[0].ContainingSymbol;
683Symbol associated = ((MethodSymbol)container).AssociatedSymbol;
711private void CheckReturnTypeCompliance(Symbol symbol)
784private bool CheckForDeclarationWithoutAssemblyDeclaration(Symbol symbol, Compliance compliance)
807MultiDictionary<string, Symbol> seenByName = new MultiDictionary<string, Symbol>(CaseInsensitiveComparison.Comparer);
823foreach (Symbol member in @interface.GetMembersUnordered())
838foreach (Symbol member in baseType.GetMembersUnordered())
855foreach (Symbol member in symbol.GetMembers())
884private void CheckSymbolDistinctness(Symbol symbol, string symbolName, MultiDictionary<string, Symbol>.ValueSet sameNameSymbols)
891foreach (Symbol other in sameNameSymbols)
906foreach (Symbol other in sameNameSymbols)
927private void CheckName(Symbol symbol)
960private bool DoNotVisit(Symbol symbol)
973private bool IsSyntacticallyFilteredOut(Symbol symbol)
1114private Compliance GetDeclaredOrInheritedCompliance(Symbol symbol)
1127Symbol associated = method.AssociatedSymbol;
1170private Compliance GetInheritedCompliance(Symbol symbol)
1174Symbol containing = (Symbol)symbol.ContainingType ?? symbol.ContainingAssembly;
1184private bool? GetDeclaredCompliance(Symbol symbol, out Location attributeLocation)
1220private static bool IsAccessibleOutsideAssembly(Symbol symbol)
1233private static bool IsAccessibleIfContainerIsAccessible(Symbol symbol)
1267private static bool IsImplicitClass(Symbol symbol)
1316private static bool TryGetCollisionErrorCode(Symbol x, Symbol y, out ErrorCode code)
Compiler\DocumentationCommentCompiler.cs (23)
138internal static string GetDocumentationCommentXml(Symbol symbol, bool processIncludes, CancellationToken cancellationToken)
199foreach (var s in symbol.GetMembers())
242foreach (Symbol member in symbol.GetMembers())
274foreach (Symbol member in extension.GetMembers())
343Symbol symbolForDocComment = underlyingMethod.IsAccessor()
363static bool hasDocumentationTrivia(Symbol symbol)
383public override void DefaultVisit(Symbol symbol)
400Symbol? implementationPart = symbol.GetPartialImplementationPart();
426var symbolForDocComments = symbol is SynthesizedRecordPropertySymbol ? symbol.ContainingType : symbol;
462private static bool ShouldSkip(Symbol symbol)
532Symbol symbol,
628Symbol symbol,
737private static Location GetLocationInTreeReportingDocumentationCommentDiagnostics(Symbol symbol)
753private static ImmutableArray<ParameterSymbol> GetParameters(Symbol symbol)
776private static ImmutableArray<TypeParameterSymbol> GetTypeParameters(Symbol symbol)
794private static bool RequiresDocumentationComment(Symbol symbol)
825private bool TryGetDocumentationCommentNodes(Symbol symbol, out DocumentationMode maxDocumentationMode, out ImmutableArray<DocumentationCommentTriviaSyntax> nodes)
1209Symbol ambiguityWinner;
1210ImmutableArray<Symbol> symbols = binder.BindCref(crefSyntax, out ambiguityWinner, diagnostics);
1212Symbol symbol;
1266Symbol memberSymbol,
1299ImmutableArray<Symbol> referencedSymbols = binder.BindXmlNameAttribute(syntax, ref useSiteInfo);
1324foreach (Symbol referencedSymbol in referencedSymbols)
Emitter\Model\PEModuleBuilder.cs (23)
29protected readonly ConcurrentDictionary<Symbol, Cci.IModuleReference> AssemblyOrModuleSymbolToModuleRefMap = new ConcurrentDictionary<Symbol, Cci.IModuleReference>();
30private readonly ConcurrentDictionary<Symbol, object> _genericInstanceMap = new ConcurrentDictionary<Symbol, object>(Symbols.SymbolEqualityComparer.ConsiderEverything);
237foreach (var member in symbol.GetMembers())
357foreach (var member in symbol.GetMembers())
380foreach (var member in symbol.GetMembers())
444private void AddSymbolLocation(MultiDictionary<Cci.DebugSourceDocument, Cci.DefinitionWithLocation> result, Symbol symbol)
471private Location GetSmallestSourceLocationOrNull(Symbol symbol)
560foreach (var member in ns.GetMembers())
593foreach (var member in symbol.GetMembers())
822Symbol.ReportUseSiteDiagnostic(info,
1071private object GetCciAdapter(Symbol symbol)
1392var container = param.ContainingSymbol;
1428private static bool ContainerIsGeneric(Symbol container)
1491internal SynthesizedAttributeData SynthesizeIsReadOnlyAttribute(Symbol symbol)
1524internal SynthesizedAttributeData SynthesizeExtensionMarkerAttribute(Symbol symbol, string markerName)
1535internal SynthesizedAttributeData SynthesizeIsUnmanagedAttribute(Symbol symbol)
1546internal SynthesizedAttributeData SynthesizeIsByRefLikeAttribute(Symbol symbol)
1562internal SynthesizedAttributeData SynthesizeNullableAttributeIfNecessary(Symbol symbol, byte? nullableContextValue, TypeWithAnnotations type)
1622internal SynthesizedAttributeData SynthesizeNullableContextAttribute(Symbol symbol, byte value)
1647internal SynthesizedAttributeData SynthesizeNativeIntegerAttribute(Symbol symbol, TypeSymbol type)
1990Symbol.ReportUseSiteDiagnostic(info, diagnostics, syntaxNode.Location);
Errors\CSDiagnosticInfo.cs (4)
24: this(code, Array.Empty<object>(), ImmutableArray<Symbol>.Empty, ImmutableArray<Location>.Empty)
29: this(code, args, ImmutableArray<Symbol>.Empty, ImmutableArray<Location>.Empty)
33internal CSDiagnosticInfo(ErrorCode code, ImmutableArray<Symbol> symbols, object[] args)
38internal CSDiagnosticInfo(ErrorCode code, object[] args, ImmutableArray<Symbol> symbols, ImmutableArray<Location> additionalLocations)
FlowAnalysis\DataFlowsInWalker.cs (10)
25private readonly HashSet<Symbol> _dataFlowsIn = new HashSet<Symbol>();
27private DataFlowsInWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
28HashSet<Symbol> unassignedVariables, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes)
33internal static HashSet<Symbol> Analyze(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
34HashSet<Symbol> unassignedVariables, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes, out bool? succeeded)
42return badRegion ? new HashSet<Symbol>() : result;
50private HashSet<Symbol> Analyze(ref bool badRegion)
103protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
FlowAnalysis\DataFlowsOutWalker.cs (16)
27private DataFlowsOutWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<Symbol> unassignedVariables, ImmutableArray<ISymbol> dataFlowsIn)
33internal static HashSet<Symbol> Analyze(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<Symbol> unassignedVariables, ImmutableArray<ISymbol> dataFlowsIn)
46return badRegion ? new HashSet<Symbol>() : result;
54private readonly HashSet<Symbol> _dataFlowsOut = new HashSet<Symbol>();
58private readonly HashSet<Symbol> _assignedInside = new HashSet<Symbol>();
61private HashSet<Symbol> Analyze(ref bool badRegion)
80Symbol variableSymbol = variable.GetSymbol();
91protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
114private Symbol GetNodeSymbol(BoundNode node)
207Symbol variable = GetNodeSymbol(node);
252protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
FlowAnalysis\DefiniteAssignment.cs (44)
60private readonly HashSet<Symbol>? initiallyAssignedVariables;
82private readonly PooledHashSet<Symbol> _writtenVariables = PooledHashSet<Symbol>.GetInstance();
114private readonly PooledDictionary<Symbol, Location> _unsafeAddressTakenVariables = PooledDictionary<Symbol, Location>.GetInstance();
119private readonly PooledHashSet<Symbol> _capturedVariables = PooledHashSet<Symbol>.GetInstance();
121private readonly PooledHashSet<Symbol> _capturedInside = PooledHashSet<Symbol>.GetInstance();
122private readonly PooledHashSet<Symbol> _capturedOutside = PooledHashSet<Symbol>.GetInstance();
169Symbol member,
194Symbol member,
198HashSet<Symbol>? initiallyAssignedVariables = null)
216Symbol member,
220HashSet<Symbol> initiallyAssignedVariables,
235Symbol member,
284protected Symbol GetNonMemberSymbol(int slot)
344var save = CurrentSymbol;
494Symbol associatedPropertyOrEvent = field.AssociatedSymbol;
686foreach (Symbol captured in _capturedVariables)
708private void CheckCaptured(Symbol variable, ParameterSymbol? rangeVariableUnderlyingParameter = null)
711Symbol.IsCaptured(rangeVariableUnderlyingParameter ?? variable, sourceMethod))
722private void NoteCaptured(Symbol variable)
737protected IEnumerable<Symbol> GetCapturedInside() => _capturedInside.ToArray();
738protected IEnumerable<Symbol> GetCapturedOutside() => _capturedOutside.ToArray();
739protected IEnumerable<Symbol> GetCaptured() => _capturedVariables.ToArray();
740protected IEnumerable<Symbol> GetUnsafeAddressTaken() => _unsafeAddressTakenVariables.Keys.ToArray();
745private void NotePrimaryConstructorParameterReadIfNeeded(Symbol symbol)
754Symbol variable,
850protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
1066protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member)
1152protected void CheckAssigned(Symbol symbol, SyntaxNode node)
1171private void ReportUnassignedIfNotCapturedInLocalFunction(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration = true)
1188protected virtual void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
1257void addDiagnosticForStructThis(Symbol thisParameter, int thisSlot)
1309var associatedSymbol = fieldSymbol.AssociatedSymbol;
1482private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression)
1806Symbol current = CurrentSymbol;
1850Symbol containing = current.ContainingSymbol;
2429var oldSymbol = this.CurrentSymbol;
2547Symbol variable = UseNonFieldSymbolUnsafely(operand);
2659foreach (var symbol in namedType.GetMembersUnordered())
2707Symbol receiver = UseNonFieldSymbolUnsafely(node.ReceiverOpt);
FlowAnalysis\LocalDataFlowPass.cs (9)
36Symbol? member,
48Symbol member,
75protected int VariableSlot(Symbol symbol, int containingSlot = 0)
100protected virtual int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
161private int DescendThroughTupleRestFields(ref Symbol symbol, int containingSlot, bool forceContainingSlotsToExist)
204protected abstract bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member);
227if (TryGetReceiverAndMember(node, out BoundExpression? receiver, out Symbol? member))
239protected int MakeMemberSlot(BoundExpression? receiverOpt, Symbol member)
262protected static bool HasInitializer(Symbol field) => field switch
FlowAnalysis\NullableWalker.cs (124)
461Symbol? symbol,
678var alreadyWarnedMembers = PooledHashSet<Symbol>.GetInstance();
679foreach (var member in method.ContainingType.GetMembersUnordered())
723void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member, LocalState state, int thisSlot, Location? exitLocation, ImmutableArray<string> membersWithStateEnforcedByRequiredMembers, bool forcePropertyAnalysis)
742Symbol symbol;
748symbol = (Symbol?)(f.AssociatedSymbol as PropertySymbol) ?? f;
809var info = new CSDiagnosticInfo(errorCode, new object[] { symbol.Kind.Localize(), symbol.Name }, ImmutableArray<Symbol>.Empty, additionalLocations: symbol.Locations);
820foreach (var member in getMembersNeedingDefaultInitialState())
827var memberToInitialize = member;
881ImmutableArray<Symbol> getMembersNeedingDefaultInitialState()
885return ImmutableArray<Symbol>.Empty;
925static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
930=> ImmutableArray<Symbol>.Empty,
944var symbolToInitialize = getFieldSymbolToBeInitialized(symbol);
948return OneOrMany<Symbol>.Empty;
963static ImmutableArray<Symbol> getAllTypeAndRequiredMembers(TypeSymbol containingType)
966var baseRequiredMembers = containingType.BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
973var builder = ArrayBuilder<Symbol>.GetInstance(members.Length + baseRequiredMembers.Count);
997static OneOrMany<Symbol> getAllMembersToBeDefaulted(Symbol requiredMember, bool filterOverridingProperties)
1011return OneOrMany<Symbol>.Empty;
1019foreach (var member in property.ContainingType.GetMembers(notNullMemberName))
1029static Symbol getFieldSymbolToBeInitialized(Symbol requiredMember)
1062foreach (var member in method.ContainingType.GetMembers(memberName))
1110void enforceMemberNotNullWhenIfAffected(SyntaxNode? syntaxOpt, bool sense, ImmutableArray<Symbol> members, LocalState state, LocalState otherState)
1112foreach (var member in members)
1129foreach (var member in method.ContainingType.GetMembers(memberName))
1138private void ReportFailedMemberNotNullIfNeeded(SyntaxNode? syntaxOpt, bool sense, Symbol member, LocalState state)
1147private bool FailsMemberNotNullExpectation(Symbol member, LocalState state)
1183foreach (var member in type.GetMembers(memberName))
1198private int GetSlotForMemberPostCondition(Symbol member)
1497internal static VariableState? GetAfterInitializersState(CSharpCompilation compilation, Symbol? symbol, BoundNode constructorBody)
1567Symbol? symbol,
1582Symbol? symbol,
1589ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1598Symbol? symbol,
1662ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1667var symbol = variables.Symbol;
1704private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1706var remappedSymbolsBuilder = ImmutableDictionary.CreateBuilder<Symbol, Symbol>(Symbols.SymbolEqualityComparer.ConsiderEverything, Symbols.SymbolEqualityComparer.ConsiderEverything);
1818Symbol? symbol,
1875Symbol? symbol,
1908private void RecordNullableAnalysisData(Symbol? symbol, bool requiredAnalysis)
1935private void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
1958if (lambdaIsExactMatch || Symbol.Equals(originalSymbol, updatedSymbol, TypeCompareKind.ConsiderEverything))
2010var symbol = variable.Symbol;
2043protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member)
2211var container = method.ContainingSymbol;
2222protected override int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
2346var containingSymbol = parameterOpt?.ContainingSymbol;
2713private bool IsSlotMember(int slot, Symbol possibleMember)
2725private void InheritNullableStateOfMember(int targetContainerSlot, int valueContainerSlot, Symbol member, bool isDefaultValue, int skipSlot)
2854var symbol = AsMemberOfType(targetType, variable.Symbol);
2861private static TypeSymbol GetTypeOrReturnType(Symbol symbol) => symbol.GetTypeOrReturnType().Type;
2864private TypeWithAnnotations GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
2899private NullableFlowState GetDefaultState(Symbol symbol)
2914var member = variable.Symbol;
3337if (Symbol.IsCaptured(variables[slot].Symbol, localFunc))
3356var symbol = variables[variables.RootSlot(slot)].Symbol;
3357if (Symbol.IsCaptured(symbol, localFunc))
3403var oldSymbol = this._symbol;
3405var oldCurrentSymbol = this.CurrentSymbol;
3756private static bool AreCloseEnough(Symbol original, Symbol updated)
4333Symbol? symbol = getTargetMember(containingType, objectInitializer);
4336ArgumentsCompletionDelegate<Symbol>? argumentsCompletion = null;
4346invokedAsExtensionMethod: false, member: (Symbol?)null, delayCompletionForTargetMember: delayCompletionForType);
4349Action<int, Symbol>? initializationCompletion = null;
4372ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4373Action<int, Symbol>? initializationCompletion,
4394ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4395Action<int, Symbol>? initializationCompletion)
4399Symbol? symbol = getTargetMember(containingType, (BoundObjectInitializerMember)node.Left);
4411static Symbol? getTargetMember(TypeSymbol containingType, BoundObjectInitializerMember objectInitializer)
4413var symbol = objectInitializer.MemberSymbol;
4425int getOrCreateSlot(int containingSlot, Symbol symbol)
4430Action<int, Symbol>? visitNestedInitializer(int containingSlot, TypeSymbol containingType, Symbol symbol, BoundObjectInitializerExpressionBase initializer, bool delayCompletionForType)
4440Action<int, Symbol>? completeNestedInitializerAnalysis(
4441Symbol symbol, BoundObjectInitializerExpressionBase initializer, int slot, Action<int, TypeSymbol>? nestedCompletion,
4462Action<int, Symbol>? completeNestedInitializerAnalysisAsContinuation(BoundObjectInitializerExpressionBase initializer, Action<int, TypeSymbol>? nestedCompletion)
4464return (int containingSlot, Symbol symbol) =>
4472Action<int, Symbol>? visitMemberAssignment(BoundAssignmentOperator node, int containingSlot, Symbol symbol, bool delayCompletionForType, Func<TypeWithAnnotations, TypeWithState>? conversionCompletion = null)
4505Action<int, Symbol>? visitMemberAssignmentAsContinuation(BoundAssignmentOperator node, Func<TypeWithAnnotations, TypeWithState> conversionCompletion)
4507return (int containingSlot, Symbol symbol) =>
5756foreach (var member in getMembers(expressionType))
5773static IEnumerable<Symbol> getMembers(TypeSymbol type)
5776foreach (var member in type.GetMembers())
5781foreach (var member in baseType.GetMembers())
5786foreach (var member in interfaceType.GetMembers())
6801var implementationMethod = baseType.FindImplementationForInterfaceMember(constructedMethod);
7003private FlowAnalysisAnnotations GetRValueAnnotations(Symbol? symbol)
7179where TMember : Symbol
7187private delegate (TMember? member, bool returnNotNull) ArgumentsCompletionDelegate<TMember>(ImmutableArray<VisitResult> argumentResults, ImmutableArray<ParameterSymbol> parametersOpt, TMember? member) where TMember : Symbol;
7202where TMember : Symbol
7644foreach (Symbol member in type.GetMembers(memberName))
8280where TMember : Symbol
8286var definition = member.GetIsNewExtensionMember() ? member.OriginalDefinition : member.ConstructedFrom();
8665private static Symbol AsMemberOfType(TypeSymbol? type, Symbol symbol)
8711if (tryAsMemberOfSingleType(containingType, out var result))
8727if (tryAsMemberOfSingleType(containingType, out var result))
8742bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
8749var symbolDef = symbol.OriginalDefinition;
9012int targetSlot = GetNullableOfTValueSlot(containingType, containingSlot, out Symbol? symbol);
10586private FlowAnalysisAnnotations GetObjectInitializerMemberLValueAnnotations(Symbol memberSymbol)
11330var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.FieldSymbol);
11359Symbol? updatedProperty;
11459var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.EventSymbol);
11464private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member)
11513private SpecialMember? GetNullableOfTMember(Symbol member)
11533private int GetNullableOfTValueSlot(TypeSymbol containingType, int containingSlot, out Symbol? valueProperty, bool forceSlotEvenIfEmpty = false)
13487private sealed class ExpressionAndSymbolEqualityComparer : IEqualityComparer<(BoundNode? expr, Symbol symbol)>
13493public bool Equals((BoundNode? expr, Symbol symbol) x, (BoundNode? expr, Symbol symbol) y)
13504public int GetHashCode((BoundNode? expr, Symbol symbol) obj)
FlowAnalysis\NullableWalker.SnapshotManager.cs (19)
31private readonly ImmutableDictionary<(BoundNode?, Symbol), Symbol> _updatedSymbolsMap;
35private SnapshotManager(ImmutableArray<SharedWalkerState> walkerSharedStates, ImmutableArray<(int position, Snapshot snapshot)> incrementalSnapshots, ImmutableDictionary<(BoundNode?, Symbol), Symbol> updatedSymbolsMap)
74if (_updatedSymbolsMap.TryGetValue((null, lambda), out var updatedDelegate))
82internal bool TryGetUpdatedSymbol(BoundNode node, Symbol symbol, [NotNullWhen(true)] out Symbol? updatedSymbol)
148private readonly ImmutableDictionary<(BoundNode?, Symbol), Symbol>.Builder _updatedSymbolMap = ImmutableDictionary.CreateBuilder<(BoundNode?, Symbol), Symbol>(ExpressionAndSymbolEqualityComparer.Instance, Symbols.SymbolEqualityComparer.ConsiderEverything);
166private readonly PooledDictionary<Symbol, int> _symbolToSlot = PooledDictionary<Symbol, int>.GetInstance();
181internal int EnterNewWalker(Symbol symbol)
220internal void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
228internal void RemoveSymbolIfPresent(BoundNode node, Symbol symbol)
233private static (BoundNode?, Symbol) GetKey(BoundNode node, Symbol symbol)
FlowAnalysis\NullableWalker.Variables.cs (13)
38internal readonly Symbol? Symbol;
48internal readonly ImmutableDictionary<Symbol, TypeWithAnnotations> VariableTypes;
50internal VariablesSnapshot(int id, VariablesSnapshot? container, Symbol? symbol, ImmutableArray<KeyValuePair<VariableIdentifier, int>> variableSlot, ImmutableDictionary<Symbol, TypeWithAnnotations> variableTypes)
59internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
118internal readonly Symbol? Symbol;
128private readonly PooledDictionary<Symbol, TypeWithAnnotations> _variableTypes = SpecializedSymbolCollections.GetPooledSymbolDictionaryInstance<Symbol, TypeWithAnnotations>();
140internal static Variables Create(Symbol? symbol)
183private Variables(int id, Variables? container, Symbol? symbol)
297internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
303internal void SetType(Symbol symbol, TypeWithAnnotations type)
353private Variables GetVariablesContainingSymbol(Symbol symbol)
FlowAnalysis\ReadWriteWalker.cs (25)
22CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes,
23out IEnumerable<Symbol> readInside,
24out IEnumerable<Symbol> writtenInside,
25out IEnumerable<Symbol> readOutside,
26out IEnumerable<Symbol> writtenOutside,
27out IEnumerable<Symbol> captured,
28out IEnumerable<Symbol> unsafeAddressTaken,
29out IEnumerable<Symbol> capturedInside,
30out IEnumerable<Symbol> capturedOutside,
40readInside = writtenInside = readOutside = writtenOutside = captured = unsafeAddressTaken = capturedInside = capturedOutside = Enumerable.Empty<Symbol>();
65private readonly HashSet<Symbol> _readInside = new HashSet<Symbol>();
66private readonly HashSet<Symbol> _writtenInside = new HashSet<Symbol>();
67private readonly HashSet<Symbol> _readOutside = new HashSet<Symbol>();
68private readonly HashSet<Symbol> _writtenOutside = new HashSet<Symbol>();
70private ReadWriteWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
78Symbol current = CurrentSymbol;
107Symbol containing = current.ContainingSymbol;
130protected override void NoteRead(Symbol variable, ParameterSymbol rangeVariableUnderlyingParameter = null)
137protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
175private void NoteReceiverReadOrWritten(BoundFieldAccess expr, HashSet<Symbol> readOrWritten)
183private void NoteExpressionReadOrWritten(BoundExpression receiver, HashSet<Symbol> readOrWritten)
Generated\BoundNodes.xml.Generated.cs (66)
511public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type, bool hasErrors)
521public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
532public Symbol? VariableSymbol { get; }
538public BoundDeconstructValuePlaceholder Update(Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
961public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false)
974public ImmutableArray<Symbol?> Symbols { get; }
980public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type)
6074public BoundMethodGroup(SyntaxNode syntax, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false)
6093public Symbol? LookupSymbolOpt { get; }
6101public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6743public BoundObjectInitializerMember(SyntaxNode syntax, Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type, bool hasErrors = false)
6764public Symbol? MemberSymbol { get; }
6778public BoundObjectInitializerMember Update(Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type)
8094protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8105public Symbol? Variable { get; }
8111public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8133public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8147public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8174public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8188public BoundListPattern(SyntaxNode syntax, ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8218public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8325public BoundPositionalSubpattern(SyntaxNode syntax, Symbol? symbol, BoundPattern pattern, bool hasErrors = false)
8334public Symbol? Symbol { get; }
8339public BoundPositionalSubpattern Update(Symbol? symbol, BoundPattern pattern)
8383public BoundPropertySubpatternMember(SyntaxNode syntax, BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type, bool hasErrors = false)
8395public Symbol? Symbol { get; }
8401public BoundPropertySubpatternMember Update(BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type)
8626protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8637public Symbol VariableSymbol { get; }
8643public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8655public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8669public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8681public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8695public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, bool hasErrors)
8702public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression)
8710public Symbol? VariableSymbol { get; }
8716public OutDeconstructVarPendingInference Update(Symbol? variableSymbol, bool isDiscardExpression)
10876Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
10943ImmutableArray<Symbol?> symbols = this.VisitSymbols<Symbol?>(node.Symbols);
11874Symbol? lookupSymbolOpt = this.VisitSymbol(node.LookupSymbolOpt);
11996Symbol? memberSymbol = this.VisitSymbol(node.MemberSymbol);
12244Symbol? variable = this.VisitSymbol(node.Variable);
12254Symbol? variable = this.VisitSymbol(node.Variable);
12265Symbol? variable = this.VisitSymbol(node.Variable);
12297Symbol? symbol = this.VisitSymbol(node.Symbol);
12309Symbol? symbol = this.VisitSymbol(node.Symbol);
12356Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12363Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12370Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
12408private readonly ImmutableDictionary<Symbol, Symbol>.Builder _remappedSymbols;
12410public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
12472Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
12638ImmutableArray<Symbol?> symbols = GetUpdatedArray(node, node.Symbols);
14068Symbol? lookupSymbolOpt = GetUpdatedSymbol(node, node.LookupSymbolOpt);
14341Symbol? memberSymbol = GetUpdatedSymbol(node, node.MemberSymbol);
14902Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14913Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14925Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14960Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
14967Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
15036Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15054Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15072Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (8)
351return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
382return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
909private BoundExpression InitializerMemberSetter(Symbol symbol)
924private BoundExpression InitializerMemberGetter(Symbol symbol)
951var sym = ((BoundObjectInitializerMember)a.Left).MemberSymbol;
1091return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1098return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1130return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ExtensionMethodBodyRewriter.cs (12)
23private ImmutableDictionary<Symbol, Symbol> _symbolMap;
38_symbolMap = ImmutableDictionary<Symbol, Symbol>.Empty.WithComparers(ReferenceEqualityComparer.Instance, ReferenceEqualityComparer.Instance);
51private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenMethodSymbol rewritten, ReadOnlySpan<ParameterSymbol> rewrittenParameters)
53ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
73private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenLambdaOrLocalFunctionSymbol rewritten)
123ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (6)
204private MethodSymbol? GetLocalOrParameterStoreLogger(TypeSymbol variableType, Symbol targetSymbol, bool? refAssignmentSourceIsLocal, SyntaxNode syntax)
392if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex))
413private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression)
441Symbol targetSymbol,
490private BoundExpression VariableRead(Symbol localOrParameterSymbol)
602if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex))
Lowering\LocalRewriter\LocalRewriter.cs (3)
593return new BoundBadExpression(syntax, LookupResultKind.NotReferencable, ImmutableArray<Symbol?>.Empty, children, resultType);
596private bool TryGetWellKnownTypeMember<TSymbol>(SyntaxNode? syntax, WellKnownMember member, [NotNullWhen(true)] out TSymbol? symbol, bool isOptional = false, Location? location = null) where TSymbol : Symbol
1144private BoundExpression ConvertReceiverForExtensionMemberIfNeeded(Symbol member, BoundExpression receiver, bool markAsChecked)
Lowering\LocalRewriter\LocalRewriter_Event.cs (5)
128clearCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(removeDelegate), ErrorTypeSymbol.UnknownResultType);
170marshalCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, marshalArguments, ErrorTypeSymbol.UnknownResultType);
265getOrCreateCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(fieldAccess), ErrorTypeSymbol.UnknownResultType);
287return new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(getOrCreateCall), ErrorTypeSymbol.UnknownResultType);
333return new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(node.Event),
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (4)
217var property = left.MemberSymbol;
389newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
407callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
419rewrittenObjectCreation = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, node.Type);
Lowering\StateMachineRewriter\IteratorAndAsyncCaptureWalker.cs (17)
30private readonly OrderedSet<Symbol> _variablesToHoist = new OrderedSet<Symbol>();
38private MultiDictionary<Symbol, SyntaxNode> _lazyDisallowedCaptures;
46private IteratorAndAsyncCaptureWalker(CSharpCompilation compilation, MethodSymbol method, BoundNode node, HashSet<Symbol> initiallyAssignedVariables, bool isRuntimeAsync)
58public static OrderedSet<Symbol> Analyze(CSharpCompilation compilation, MethodSymbol method, BoundNode node, bool isRuntimeAsync, DiagnosticBag diagnostics)
85var variable = kvp.Key;
120var variablesToHoist = new OrderedSet<Symbol>();
126var symbol = v.Symbol;
143private static bool HoistInDebugBuild(Symbol symbol)
162var symbol = variableBySlot[i].Symbol;
216private void CaptureVariable(Symbol variable, SyntaxNode syntax)
234(_lazyDisallowedCaptures ??= new MultiDictionary<Symbol, SyntaxNode>()).Add(variable, syntax);
277protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
369private readonly HashSet<Symbol> _localsInScope;
379_localsInScope = new HashSet<Symbol>();
408private void AddVariable(Symbol local)
443private void Capture(Symbol s, SyntaxNode syntax)
Lowering\StateMachineRewriter\StateMachineRewriter.cs (10)
30protected IReadOnlyDictionary<Symbol, CapturedSymbolReplacement>? nonReusableLocalProxies;
33protected IOrderedReadOnlySet<Symbol>? hoistedVariables;
34protected Dictionary<Symbol, CapturedSymbolReplacement>? initialParameters;
86protected abstract BoundStatement GenerateStateMachineCreation(LocalSymbol stateMachineVariable, NamedTypeSymbol frameType, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies);
114initialParameters = new Dictionary<Symbol, CapturedSymbolReplacement>();
137IEnumerable<Symbol> variablesToHoist,
138out IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies,
142var proxiesBuilder = new Dictionary<Symbol, CapturedSymbolReplacement>();
151foreach (var variable in variablesToHoist)
306protected BoundStatement GenerateParameterStorage(LocalSymbol stateMachineVariable, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies)
Lowering\SyntheticBoundNodeFactory.cs (9)
241return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true);
323public Symbol? WellKnownMember(WellKnownMember wm, bool isOptional)
325Symbol? wellKnownMember = Binder.GetWellKnownTypeMember(Compilation, wm, Diagnostics, syntax: Syntax, isOptional: true);
336public Symbol WellKnownMember(WellKnownMember wm)
358public Symbol SpecialMember(SpecialMember sm)
360var result = SpecialMember(sm, isOptional: false);
365public Symbol? SpecialMember(SpecialMember sm, bool isOptional = false)
367Symbol specialMember = Compilation.GetSpecialTypeMember(sm);
802return new BoundBadExpression(Syntax, default(LookupResultKind), ImmutableArray<Symbol?>.Empty, args.AsImmutable(), receiver);
Symbols\AliasSymbol.cs (6)
53private readonly Symbol _containingSymbol;
55protected AliasSymbol(string aliasName, Symbol containingSymbol, ImmutableArray<Location> locations, bool isExtern)
73internal static AliasSymbol CreateCustomDebugInfoAlias(NamespaceOrTypeSymbol targetSymbol, SyntaxToken aliasToken, Symbol containingSymbol, bool isExtern)
206public sealed override Symbol ContainingSymbol
243public override bool Equals(Symbol? obj, TypeCompareKind compareKind)
436internal AliasSymbolFromResolvedTarget(NamespaceOrTypeSymbol target, string aliasName, Symbol containingSymbol, ImmutableArray<Location> locations, bool isExtern)
Symbols\Attributes\AttributeData.cs (6)
213internal void DecodeSecurityAttribute<T>(Symbol targetSymbol, CSharpCompilation compilation, ref DecodeWellKnownAttributeArguments<AttributeSyntax, CSharpAttributeData, AttributeLocation> arguments)
288foreach (Symbol foundMember in type.GetMembers(memberName))
337private DeclarativeSecurityAction DecodeSecurityAttributeAction(Symbol targetSymbol, CSharpCompilation compilation, AttributeSyntax? nodeOpt, out bool hasErrors, BindingDiagnosticBag diagnostics)
380private DeclarativeSecurityAction DecodeSecurityAction(TypedConstant typedValue, Symbol targetSymbol, AttributeSyntax? nodeOpt, BindingDiagnosticBag diagnostics, out bool hasErrors)
651foreach (var member in AttributeClass.GetMembers(memberName))
670internal bool ShouldEmitAttribute(Symbol target, bool isReturnType, bool emittingAssemblyAttributesInNetModule)
Symbols\Compilation_WellKnownMembers.cs (12)
32private Symbol?[]? _lazyWellKnownTypeMembers;
77internal Symbol? GetWellKnownTypeMember(WellKnownMember member)
88var wellKnownTypeMembers = new Symbol[(int)WellKnownMember.Count];
102Symbol? result = null;
247internal static Symbol? GetRuntimeMember(NamedTypeSymbol declaringType, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
253internal static Symbol? GetRuntimeMember(ImmutableArray<Symbol> members, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
259Symbol? result = null;
290foreach (var member in members)
298!(member.DeclaredAccessibility == Accessibility.Public || (accessWithinOpt is object && Symbol.IsSymbolAccessible(member, accessWithinOpt))))
420var wellKnownMember = Binder.GetWellKnownTypeMember(this, arg.Key, useSiteInfo: out _, isOptional: true);
701var member = Binder.GetWellKnownTypeMember(this, attributeCtor,
Symbols\ConstraintsHelper.cs (10)
898this Symbol constructedContainingSymbol,
950Symbol containingSymbol,
1056Symbol constructedContainingSymbol,
1093if (typeArgument.Type is NamedTypeSymbol { IsInterface: true } iface && SelfOrBaseHasStaticAbstractMember(iface, ref useSiteInfo, out Symbol member))
1120static bool errorIfNotSatisfiesConstructorConstraint(Symbol containingSymbol, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder)
1144Symbol containingSymbol,
1167Symbol containingSymbol,
1410private static bool SelfOrBaseHasStaticAbstractMember(NamedTypeSymbol iface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol memberWithoutImplementation)
1414foreach (Symbol m in iface.GetMembers())
1425foreach (Symbol m in baseInterface.GetMembers())
Symbols\ExtendedErrorTypeSymbol.cs (11)
25private readonly ImmutableArray<Symbol> _candidateSymbols; // Best guess at what user meant, but was wrong.
52private ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, string name, int arity, DiagnosticInfo? errorInfo, bool unreported, bool variableUsedBeforeDeclaration, ImmutableArray<Symbol> candidateSymbols, LookupResultKind resultKind)
69internal ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, Symbol guessSymbol, LookupResultKind resultKind, DiagnosticInfo errorInfo, bool unreported = false)
70: this(containingSymbol, ImmutableArray.Create<Symbol>(guessSymbol), resultKind, errorInfo, GetArity(guessSymbol), unreported)
74internal ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, ImmutableArray<Symbol> candidateSymbols, LookupResultKind resultKind, DiagnosticInfo errorInfo, int arity, bool unreported = false)
88private static ImmutableArray<Symbol> UnwrapErrorCandidates(ImmutableArray<Symbol> candidateSymbols)
115public override ImmutableArray<Symbol> CandidateSymbols => _candidateSymbols.NullToEmpty();
151public override Symbol? ContainingSymbol
270foreach (Symbol sym in oldError._candidateSymbols)
312private static int GetArity(Symbol symbol)
Symbols\MemberSymbolExtensions.cs (55)
26internal static bool HasParamsParameter(this Symbol member)
35internal static ImmutableArray<ParameterSymbol> GetParameters(this Symbol member)
53internal static ImmutableArray<TypeWithAnnotations> GetParameterTypes(this Symbol member)
68internal static bool GetIsVararg(this Symbol member)
83internal static bool GetIsNewExtensionMember(this Symbol member)
106internal static bool TryGetInstanceExtensionParameter(this Symbol symbol, [NotNullWhen(true)] out ParameterSymbol? extensionParameter)
121internal static int GetMemberArityIncludingExtension(this Symbol member)
131internal static ImmutableArray<TypeParameterSymbol> GetTypeParametersIncludingExtension<TMember>(this TMember member) where TMember : Symbol
152where TMember : Symbol
181internal static ImmutableArray<ParameterSymbol> GetParametersIncludingExtensionParameter(this Symbol symbol, bool skipExtensionIfStatic)
195internal static int GetParameterCountIncludingExtensionParameter(this Symbol symbol)
205internal static TMember ConstructIncludingExtension<TMember>(this TMember member, ImmutableArray<TypeWithAnnotations> typeArguments) where TMember : Symbol
220return (TMember)(Symbol)method.Construct(typeArguments[extension.Arity..]);
223return (TMember)(Symbol)method;
226return (TMember)(Symbol)method.Construct(typeArguments);
239return (TMember)(Symbol)property;
248internal static Symbol? GetReducedAndFilteredSymbol(this Symbol member, ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol receiverType, CSharpCompilation compilation, bool checkFullyInferred)
318internal static ImmutableArray<RefKind> GetParameterRefKinds(this Symbol member)
333internal static int GetParameterCount(this Symbol member)
349internal static bool HasParameterContainingPointerType(this Symbol member)
362public static bool IsEventOrPropertyWithImplementableNonPublicAccessor(this Symbol symbol)
395public static bool IsAccessor(this Symbol symbol)
402var propertyOrEvent = methodSymbol.AssociatedSymbol;
411public static bool IsOperator(this Symbol symbol)
416public static bool IsIndexer(this Symbol symbol)
421public static bool IsIndexedProperty(this Symbol symbol)
426public static bool IsUserDefinedConversion(this Symbol symbol)
453public static int CustomModifierCount(this Symbol m)
502internal static Symbol SymbolAsMember(this Symbol s, NamedTypeSymbol newOwner)
524internal static int GetMemberArity(this Symbol symbol)
557internal static ImmutableArray<TypeParameterSymbol> GetMemberTypeParameters(this Symbol symbol)
575internal static ImmutableArray<TypeSymbol> GetMemberTypeArgumentsNoUseSiteDiagnostics(this Symbol symbol)
768internal static bool IsExplicitInterfaceImplementation(this Symbol member)
783internal static bool IsPartialMember(this Symbol member)
795internal static bool IsPartialImplementation(this Symbol member)
807internal static bool IsPartialDefinition(this Symbol member)
820internal static Symbol? GetPartialImplementationPart(this Symbol member)
832internal static Symbol? GetPartialDefinitionPart(this Symbol member)
845internal static bool ContainsTupleNames(this Symbol member)
862internal static ImmutableArray<Symbol> GetExplicitInterfaceImplementations(this Symbol member)
867return ((MethodSymbol)member).ExplicitInterfaceImplementations.Cast<MethodSymbol, Symbol>();
869return ((PropertySymbol)member).ExplicitInterfaceImplementations.Cast<PropertySymbol, Symbol>();
871return ((EventSymbol)member).ExplicitInterfaceImplementations.Cast<EventSymbol, Symbol>();
873return ImmutableArray<Symbol>.Empty;
877internal static Symbol GetOverriddenMember(this Symbol member)
892internal static Symbol GetLeastOverriddenMember(this Symbol member, NamedTypeSymbol accessingTypeOpt)
913internal static bool IsFieldOrFieldLikeEvent(this Symbol member, out FieldSymbol field)
929internal static string GetMemberCallerName(this Symbol member)
Symbols\Metadata\PE\PENamedTypeSymbol.cs (39)
55private ImmutableArray<Symbol> _lazyMembersInDeclarationOrder;
61private Dictionary<string, ImmutableArray<Symbol>> _lazyMembersByName;
493foreach (var member in @this.ContainingType.GetMembers(method.Name))
577Symbol s = _container;
831public override Symbol ContainingSymbol
1140public override ImmutableArray<Symbol> GetMembers()
1194ImmutableArray<Symbol> staticFields = GetMembers();
1304ImmutableArray<Symbol> members = GetMembers();
1407internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1412internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1417private class DeclarationOrderTypeSymbolComparer : IComparer<Symbol>
1423public int Compare(Symbol x, Symbol y)
1513ArrayBuilder<Symbol> members = null;
1519members = ArrayBuilder<Symbol>.GetInstance();
1568ArrayBuilder<Symbol> nonFieldMembers = ArrayBuilder<Symbol>.GetInstance();
1644Symbol previous = null;
1646foreach (var s in members)
1654Symbol current = s;
1689members = ArrayBuilder<Symbol>.GetInstance();
1690foreach (var member in _lazyMembersInDeclarationOrder)
1700Dictionary<string, ImmutableArray<Symbol>> membersDict = GroupByName(members);
1733internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1737ImmutableArray<Symbol> m;
1740m = ImmutableArray<Symbol>.Empty;
1746public override ImmutableArray<Symbol> GetMembers(string name)
1750ImmutableArray<Symbol> m;
1753m = ImmutableArray<Symbol>.Empty;
1760m = m.Concat(StaticCast<Symbol>.From(t));
2343private PooledDictionary<MethodDefinitionHandle, PEMethodSymbol> CreateMethods(ArrayBuilder<Symbol> members)
2378private void CreateProperties(Dictionary<MethodDefinitionHandle, PEMethodSymbol> methodHandleToSymbol, ArrayBuilder<Symbol> members)
2418ArrayBuilder<Symbol> members)
2469private static Dictionary<string, ImmutableArray<Symbol>> GroupByName(ArrayBuilder<Symbol> symbols)
2849private static int GetIndexOfFirstMember(ImmutableArray<Symbol> members, SymbolKind kind)
2866private static IEnumerable<TSymbol> GetMembers<TSymbol>(ImmutableArray<Symbol> members, SymbolKind kind, int offset = -1)
2867where TSymbol : Symbol
2876var member = members[i];
Symbols\NamedTypeSymbol.cs (31)
28private static readonly ImmutableSegmentedDictionary<string, Symbol> RequiredMembersErrorSentinel = ImmutableSegmentedDictionary<string, Symbol>.Empty.Add("<error sentinel>", null!);
34private ImmutableSegmentedDictionary<string, Symbol> _lazyRequiredMembers = default;
210ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(name);
217internal static void AddOperators(ArrayBuilder<MethodSymbol> operators, ImmutableArray<Symbol> candidates)
219foreach (var candidate in candidates)
265ImmutableArray<Symbol> instanceCandidates = includeInstance
267: ImmutableArray<Symbol>.Empty;
268ImmutableArray<Symbol> staticCandidates = includeStatic
270: ImmutableArray<Symbol>.Empty;
278foreach (Symbol candidate in instanceCandidates)
286foreach (Symbol candidate in staticCandidates)
307ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(WellKnownMemberNames.Indexer);
317foreach (Symbol candidate in candidates)
352foreach (var member in members)
591internal ImmutableSegmentedDictionary<string, Symbol> AllRequiredMembers
599return ImmutableSegmentedDictionary<string, Symbol>.Empty;
613bool success = tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? builder);
616? builder?.ToImmutable() ?? BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty
621bool tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? requiredMembersBuilder)
629var baseAllRequiredMembers = BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
632foreach (var member in GetMembersUnordered())
647if (baseAllRequiredMembers.TryGetValue(member.Name, out var existingMember))
684public abstract override ImmutableArray<Symbol> GetMembers();
691public abstract override ImmutableArray<Symbol> GetMembers(string name);
700internal virtual ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
727internal virtual IEnumerable<Symbol> GetInstanceFieldsAndEvents()
732protected static Func<Symbol, bool> IsInstanceFieldOrEvent = symbol =>
778internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers();
788internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name);
1476internal override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
Symbols\NativeIntegerTypeSymbol.cs (22)
27private ImmutableArray<Symbol> _lazyMembers;
43public override Symbol ContainingSymbol => _underlyingType.ContainingSymbol;
70public override ImmutableArray<Symbol> GetMembers()
78ImmutableArray<Symbol> makeMembers(ImmutableArray<Symbol> underlyingMembers)
80var builder = ArrayBuilder<Symbol>.GetInstance();
81foreach (var underlyingMember in underlyingMembers)
141public override ImmutableArray<Symbol> GetMembers(string name) => GetMembers().WhereAsArray((member, name) => member.Name == name, name);
153internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers() => throw ExceptionUtilities.Unreachable();
155internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name) => throw ExceptionUtilities.Unreachable();
250internal static bool EqualsHelper<TSymbol>(TSymbol symbol, Symbol? other, TypeCompareKind comparison, Func<TSymbol, Symbol> getUnderlyingSymbol)
251where TSymbol : Symbol
270internal static void VerifyEquality(Symbol symbolA, Symbol symbolB)
354public override Symbol ContainingSymbol => _container;
399public override Symbol? AssociatedSymbol => _associatedSymbol;
408public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol.UnderlyingMethod);
447public override Symbol ContainingSymbol => _container;
467public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingParameter);
500public override Symbol ContainingSymbol => _container;
516public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingProperty);
Symbols\ObsoleteAttributeHelpers.cs (9)
59private static ThreeState GetObsoleteContextState(Symbol symbol, bool forceComplete, Func<Symbol, ThreeState> getStateFromSymbol)
66var associatedSymbol = ((FieldSymbol)symbol).AssociatedSymbol;
98internal static ObsoleteDiagnosticKind GetObsoleteDiagnosticKind(Symbol symbol, Symbol containingMember, bool forceComplete = false)
130static ObsoleteDiagnosticKind getDiagnosticKind(Symbol containingMember, bool forceComplete, Func<Symbol, ThreeState> getStateFromSymbol)
152internal static DiagnosticInfo CreateObsoleteDiagnostic(Symbol symbol, BinderFlags location)
158static DiagnosticInfo createObsoleteDiagnostic(Symbol symbol, BinderFlags location)
Symbols\OverriddenOrHiddenMembersHelpers.cs (71)
84private static OverriddenOrHiddenMembersResult MakeOverriddenOrHiddenMembersWorker(Symbol member)
97Symbol associatedPropertyOrEvent = accessor.AssociatedSymbol;
134ArrayBuilder<Symbol> hiddenBuilder;
135ImmutableArray<Symbol> overriddenMembers;
138ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
142private static void FindOverriddenOrHiddenMembers(Symbol member, NamedTypeSymbol containingType, bool memberIsFromSomeCompilation,
143out ArrayBuilder<Symbol> hiddenBuilder,
144out ImmutableArray<Symbol> overriddenMembers)
146Symbol bestMatch = null;
151Symbol knownOverriddenMember = member switch
180public static Symbol FindFirstHiddenMemberIfAny(Symbol member, bool memberIsFromSomeCompilation)
182ArrayBuilder<Symbol> hiddenBuilder;
186Symbol result = hiddenBuilder?.FirstOrDefault();
249ArrayBuilder<Symbol> hiddenBuilder = null;
253foreach (Symbol hiddenByProperty in hiddenOrOverriddenByProperty.HiddenMembers)
283ImmutableArray<Symbol> overriddenAccessors = ImmutableArray<Symbol>.Empty;
291ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
341ArrayBuilder<Symbol> hiddenBuilder = null;
345foreach (Symbol hiddenByEvent in hiddenOrOverriddenByEvent.HiddenMembers)
373ImmutableArray<Symbol> overriddenAccessors = ImmutableArray<Symbol>.Empty;
383ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
409internal static OverriddenOrHiddenMembersResult MakeInterfaceOverriddenOrHiddenMembers(Symbol member, bool memberIsFromSomeCompilation)
419ArrayBuilder<Symbol> hiddenBuilder = null;
428Symbol currTypeBestMatch;
430ArrayBuilder<Symbol> currTypeHiddenBuilder;
492ImmutableArray<Symbol> overriddenMembers = ImmutableArray<Symbol>.Empty;
496ArrayBuilder<Symbol> hiddenAndRelatedBuilder = null;
497foreach (Symbol hidden in hiddenBuilder)
508ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
533Symbol member,
536Symbol knownOverriddenMember,
538out Symbol currTypeBestMatch,
540out ArrayBuilder<Symbol> hiddenBuilder)
551IEqualityComparer<Symbol> exactMatchComparer = memberIsFromSomeCompilation
555IEqualityComparer<Symbol> fallbackComparer = memberIsFromSomeCompilation
562foreach (Symbol otherMember in currType.GetMembers(member.Name))
674Symbol minCustomModifierMatch = currTypeBestMatch;
676foreach (Symbol otherMember in currType.GetMembers(member.Name))
707Symbol overridingMember,
708Symbol representativeMember,
709out ImmutableArray<Symbol> overriddenMembers,
710ref ArrayBuilder<Symbol> hiddenBuilder)
712overriddenMembers = ImmutableArray<Symbol>.Empty;
723ArrayBuilder<Symbol> overriddenBuilder = ArrayBuilder<Symbol>.GetInstance();
733overriddenMembers = ImmutableArray.Create<Symbol>(representativeMember);
753private static void AddHiddenMemberIfApplicable(ref ArrayBuilder<Symbol> hiddenBuilder, Symbol hidingMember, Symbol hiddenMember)
789private static void FindOtherOverriddenMethodsInContainingType(Symbol representativeMember, bool overridingMemberIsFromSomeCompilation, ArrayBuilder<Symbol> overriddenBuilder)
796foreach (Symbol otherMember in representativeMember.ContainingType.GetMembers(representativeMember.Name))
851private static void FindOtherHiddenMembersInContainingType(Symbol hidingMember, Symbol representativeMember, ref ArrayBuilder<Symbol> hiddenBuilder)
858IEqualityComparer<Symbol> comparer = MemberSignatureComparer.CSharpCustomModifierOverrideComparer;
859foreach (Symbol otherMember in representativeMember.ContainingType.GetMembers(representativeMember.Name))
871private static bool CanOverrideOrHide(Symbol member)
887private static bool TypeOrReturnTypeHasCustomModifiers(Symbol member)
909private static int CustomModifierCount(Symbol member)
991foreach (Symbol otherMethod in method.ContainingType.GetMembers(method.Name))
1032foreach (Symbol otherMember in currType.GetMembers(method.Name))
1070private static bool IsOverriddenSymbolAccessible(Symbol overridden, NamedTypeSymbol overridingContainingType)
Symbols\Retargeting\RetargetingSymbolTranslator.cs (42)
31private readonly ConcurrentDictionary<Symbol, Symbol> _symbolMap =
32new ConcurrentDictionary<Symbol, Symbol>(concurrencyLevel: 2, capacity: 4);
34private readonly Func<Symbol, RetargetingMethodSymbol> _createRetargetingMethod;
35private readonly Func<Symbol, RetargetingNamespaceSymbol> _createRetargetingNamespace;
36private readonly Func<Symbol, RetargetingTypeParameterSymbol> _createRetargetingTypeParameter;
37private readonly Func<Symbol, RetargetingNamedTypeSymbol> _createRetargetingNamedType;
38private readonly Func<Symbol, FieldSymbol> _createRetargetingField;
39private readonly Func<Symbol, RetargetingPropertySymbol> _createRetargetingProperty;
40private readonly Func<Symbol, RetargetingEventSymbol> _createRetargetingEvent;
42private RetargetingMethodSymbol CreateRetargetingMethod(Symbol symbol)
48private RetargetingNamespaceSymbol CreateRetargetingNamespace(Symbol symbol)
54private RetargetingNamedTypeSymbol CreateRetargetingNamedType(Symbol symbol)
60private FieldSymbol CreateRetargetingField(Symbol symbol)
86private RetargetingPropertySymbol CreateRetargetingProperty(Symbol symbol)
92private RetargetingEventSymbol CreateRetargetingEvent(Symbol symbol)
98private RetargetingTypeParameterSymbol CreateRetargetingTypeParameter(Symbol symbol)
105: CSharpSymbolVisitor<RetargetOptions, Symbol>
118private ConcurrentDictionary<Symbol, Symbol> SymbolMap
162public Symbol Retarget(Symbol symbol)
827public ImmutableArray<Symbol> Retarget(ImmutableArray<Symbol> arr)
1029foreach (var retargetedMember in retargetedType.GetMembers(method.Name))
1095foreach (var retargetedMember in retargetedType.GetMembers(property.Name))
1114foreach (var retargetedMember in retargetedType.GetMembers(@event.Name))
1317public override Symbol VisitModule(ModuleSymbol symbol, RetargetOptions options)
1324public override Symbol VisitNamespace(NamespaceSymbol symbol, RetargetOptions options)
1329public override Symbol VisitNamedType(NamedTypeSymbol symbol, RetargetOptions options)
1334public override Symbol VisitArrayType(ArrayTypeSymbol symbol, RetargetOptions options)
1339public override Symbol VisitPointerType(PointerTypeSymbol symbol, RetargetOptions options)
1344public override Symbol VisitFunctionPointerType(FunctionPointerTypeSymbol symbol, RetargetOptions argument)
1349public override Symbol VisitMethod(MethodSymbol symbol, RetargetOptions options)
1354public override Symbol VisitParameter(ParameterSymbol symbol, RetargetOptions options)
1359public override Symbol VisitField(FieldSymbol symbol, RetargetOptions options)
1364public override Symbol VisitProperty(PropertySymbol symbol, RetargetOptions argument)
1369public override Symbol VisitTypeParameter(TypeParameterSymbol symbol, RetargetOptions options)
1374public override Symbol VisitErrorType(ErrorTypeSymbol symbol, RetargetOptions options)
1379public override Symbol VisitEvent(EventSymbol symbol, RetargetOptions options)
1384public override Symbol VisitDynamicType(DynamicTypeSymbol symbol, RetargetOptions argument)
Symbols\Source\ParameterHelpers.cs (17)
22Symbol owner,
30return MakeParameters<ParameterSyntax, SourceParameterSymbol, Symbol>(
41parameterCreationFunc: static (Binder context, Symbol owner, TypeWithAnnotations parameterType,
66Symbol owner,
70var parameterCreationFunc = static (Binder context, Symbol owner, TypeWithAnnotations parameterType,
181where TOwningSymbol : Symbol
263where TOwningSymbol : Symbol
484internal static void EnsureNullableAttributeExists(PEModuleBuilder moduleBuilder, Symbol container, ImmutableArray<ParameterSymbol> parameters)
489internal static void EnsureNullableAttributeExists(CSharpCompilation? compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation)
501private static void EnsureNullableAttributeExists(CSharpCompilation compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation, PEModuleBuilder? moduleBuilder)
522internal static void CheckUnderspecifiedGenericExtension(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics)
544static void reportUnusedExtensionTypeParameters(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics, NamedTypeSymbol extension, ParameterSymbol extensionParameter, PooledHashSet<TypeParameterSymbol> usedTypeParameters)
825Symbol? owner,
832Symbol? containingSymbol,
897Symbol owner,
1100internal static MethodSymbol FindContainingGenericMethod(Symbol symbol)
1102for (Symbol current = symbol; (object)current != null; current = current.ContainingSymbol)
Symbols\Source\SourceMemberContainerSymbol.cs (193)
182private static readonly ObjectPool<PooledDictionary<Symbol, Symbol>> s_duplicateRecordMemberSignatureDictionary =
183PooledDictionary<Symbol, Symbol>.CreatePool(MemberSignatureComparer.RecordAPISignatureComparer);
205private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? _lazyMembersDictionary;
206private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? _lazyEarlyAttributeDecodingMembersDictionary;
212private ImmutableArray<Symbol> _lazyMembersFlattened;
293Symbol containingSymbol = this.ContainingSymbol;
549internal override void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
653ImmutableArray<Symbol> members = this.GetMembersUnordered();
659foreach (var member in members)
667foreach (var member in members)
740foreach (var member in membersAndInitializers.NonTypeMembers)
784public sealed override Symbol ContainingSymbol
916for (Symbol? container = this.ContainingType; !(container is null); container = container.ContainingType)
1069internal readonly ImmutableArray<Symbol> NonTypeMembers;
1078ImmutableArray<Symbol> nonTypeMembers,
1401private void CheckMemberNameDistinctFromType(Symbol member, BindingDiagnosticBag diagnostics)
1431static void checkContainingTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1439static void checkExtendedTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1472internal static bool HasAsyncMethodBuilderAttribute(Symbol symbol, [NotNullWhen(true)] out TypeSymbol? builderArgument)
1494internal override ImmutableArray<Symbol> GetMembersUnordered()
1508public override ImmutableArray<Symbol> GetMembers()
1530public sealed override ImmutableArray<Symbol> GetMembers(string name)
1532ImmutableArray<Symbol> members;
1538return ImmutableArray<Symbol>.Empty;
1549internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1556return ImmutableArray<Symbol>.Empty;
1569foreach (var m in this.GetMembers())
1599internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1611internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1613ImmutableArray<Symbol> result;
1614return GetEarlyAttributeDecodingMembersDictionary().TryGetValue(name.AsMemory(), out result) ? result : ImmutableArray<Symbol>.Empty;
1617private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetEarlyAttributeDecodingMembersDictionary()
1621if (Volatile.Read(ref _lazyMembersDictionary) is Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> result)
1631Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
1654private static Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> ToNameKeyedDictionary(ImmutableArray<Symbol> symbols)
1658return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(1, ReadOnlyMemoryOfCharComparer.Instance)
1666return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(ReadOnlyMemoryOfCharComparer.Instance);
1676foreach (var item in symbols)
1679var dictionary = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(accumulator.Count, ReadOnlyMemoryOfCharComparer.Instance);
1684dictionary.Add(pair.Key, pair.Value is ArrayBuilder<Symbol> arrayBuilder
1686: ImmutableArray.Create((Symbol)pair.Value));
1730internal void AssertMemberExposure(Symbol member, bool forDiagnostics = false)
1799static bool isMemberInCompleteMemberList(MembersAndInitializers? membersAndInitializers, Symbol member)
1806protected Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByName()
1816private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByNameSlow()
1834internal override IEnumerable<Symbol> GetInstanceFieldsAndEvents()
1838IEnumerable<Symbol> result = membersAndInitializers.NonTypeMembers.Where(IsInstanceFieldOrEvent);
1985foreach (var member in GetMembersAndInitializers().NonTypeMembers)
1999foreach (var member in GetMembers("Clone"))
2009Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2058Symbol? lastSym = typesByName?.TryGetValue(name, out var types) == true ? types.FirstOrDefault() : null;
2062foreach (var symbol in pair.Value)
2266BindingDiagnosticBag diagnostics, Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName)
2279foreach (var symbol in members)
2335Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2405Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2407ImmutableArray<Symbol> membersUnordered,
2422Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName;
2423ImmutableArray<Symbol> membersUnordered;
2434static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<string, NamedTypeSymbol> grouping)
2436Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName = null;
2437ImmutableArray<Symbol> membersUnordered = [];
2444Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByNameToMerge = ((SourceMemberContainerTypeSymbol)extension).GetMembersByName();
2464membersByName = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(membersByName, ReadOnlyMemoryOfCharComparer.Instance);
2494static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2504var membersBuilder = ArrayBuilder<Symbol>.GetInstance(existingMembers.Length + newMembers.Length);
2505var membersUnorderedBuilder = ArrayBuilder<Symbol>.GetInstance(membersUnordered.Length + newMembers.Length);
2510foreach (var member in newMembers)
2512Symbol toAdd = member.SymbolAsMember(extension);
2531foreach (var member in this.GetMembersUnordered())
2552foreach (var dup in GetMembers(tp.Name))
2563Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2564ImmutableArray<Symbol> membersUnordered,
2569foreach (Symbol symbol in membersUnordered)
2638foreach (var member in valuesByName)
2673var symbol = field.AssociatedSymbol ?? field;
2695foreach (var member in valuesByName)
2715Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2757Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2796Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2799if (membersByName.TryGetValue(operatorName1.AsMemory(), out ImmutableArray<Symbol> candidates))
2930foreach (var member in GetMembersUnordered())
2947foreach (var member in GetMembersUnordered())
2975foreach (var m in this.GetMembersUnordered())
3019foreach (var m in t.GetMembersUnordered())
3123private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> MakeAllMembers()
3125Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
3147Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
3152ImmutableArray<Symbol> typesAsSymbols = StaticCast<Symbol>.From(types);
3154ImmutableArray<Symbol> membersForName;
3168public ArrayBuilder<Symbol> NonTypeMembersWithPartialImplementations = ArrayBuilder<Symbol>.GetInstance();
3229public readonly ImmutableArray<Symbol> NonTypeMembersWithPartialImplementations;
3238private ImmutableArray<Symbol> _lazyNonTypeMembers;
3247ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations,
3307public ImmutableArray<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container)
3320private ArrayBuilder<Symbol>? NonTypeMembers;
3429public IReadOnlyCollection<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container, DeclaredMembersAndInitializers declaredMembers)
3431return NonTypeMembers ?? (IReadOnlyCollection<Symbol>)declaredMembers.GetNonTypeMembers(container);
3434public void AddNonTypeMember(SourceMemberContainerTypeSymbol container, Symbol member, DeclaredMembersAndInitializers declaredMembers)
3439NonTypeMembers = ArrayBuilder<Symbol>.GetInstance(declaredNonTypeMembers.Length + 1);
3446public void SetNonTypeMembers(ArrayBuilder<Symbol> members)
3581private void MergePartialMembersAndInitializeNonTypeMembers(ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations, ref ImmutableArray<Symbol> nonTypeMembers)
3585foreach (Symbol member in nonTypeMembersWithPartialImplementations)
3605var nonTypeMembersBuilder = ArrayBuilder<Symbol>.GetInstance(nonTypeMembersWithPartialImplementations.Length);
3700ImmutableArray<Symbol> nonTypeMembersToCheck;
3719foreach (var member in nonTypeMembersToCheck)
3746internal ImmutableArray<Symbol> GetMembersToMatchAgainstDeclarationSpan()
3762internal ImmutableArray<Symbol> GetCandidateMembersForLookup(string name)
3770ImmutableArray<Symbol> nonTypeMembersToCheck;
3793ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3794ArrayBuilder<Symbol>? memberBuilder = null;
3796foreach (var member in nonTypeMembersToCheck)
3805memberBuilder ??= ArrayBuilder<Symbol>.GetInstance(types.Length + 1);
3855foreach (var member in type.GetMembers())
3968ArrayBuilder<Symbol> nonTypeMembers,
3972var membersBySignature = new Dictionary<Symbol, Symbol>(MemberSignatureComparer.PartialMethodsComparer);
3978if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
3980foreach (var symbol in arrayBuilder)
3984if (!membersBySignature.TryGetValue(symbol, out var prev))
4024var symbol = (Symbol)pair.Value;
4029foreach (var symbol in membersBySignature.Values)
4087if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4089foreach (var symbol in arrayBuilder)
4096fixupNotMergedPartialProperty((Symbol)pair.Value);
4100static void fixupNotMergedPartialProperty(Symbol symbol)
4109static void mergePartialMethods(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol currentMethod, SourceOrdinaryMethodSymbol prevMethod, BindingDiagnosticBag diagnostics)
4129static void mergePartialProperties(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol currentProperty, SourcePropertySymbol prevProperty, BindingDiagnosticBag diagnostics)
4153void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertyAccessorSymbol? currentAccessor, SourcePropertyAccessorSymbol? prevAccessor)
4178static void mergePartialConstructors(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol currentConstructor, SourceConstructorSymbol prevConstructor, BindingDiagnosticBag diagnostics)
4198static void mergePartialEvents(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol currentEvent, SourceEventSymbol prevEvent, BindingDiagnosticBag diagnostics)
4219static void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourceEventAccessorSymbol? currentAccessor, SourceEventAccessorSymbol? prevAccessor)
4234private static void FixPartialMethod(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol part1, SourceOrdinaryMethodSymbol part2)
4256private static void FixPartialProperty(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol part1, SourcePropertySymbol part2)
4284private static void FixPartialConstructor(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol part1, SourceConstructorSymbol part2)
4306private static void FixPartialEvent(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol part1, SourceEventSymbol part2)
4327private static void Remove(ArrayBuilder<Symbol> symbols, Symbol symbol)
4331Symbol s = symbols[i];
4349Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4370foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4400Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4409foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4437var locationFrom = (Symbol)(getNotSet ? propertySymbol.GetMethod : propertySymbol.SetMethod) ?? propertySymbol;
4446var locationFrom = (Symbol?)(isAdder ? propertySymbol.AddMethod : propertySymbol.RemoveMethod) ?? propertySymbol;
4557private static void CheckInterfaceMembers(ImmutableArray<Symbol> nonTypeMembers, BindingDiagnosticBag diagnostics)
4559foreach (var member in nonTypeMembers)
4565private static void CheckInterfaceMember(Symbol member, BindingDiagnosticBag diagnostics)
4612private static void CheckExtensionMembers(ImmutableArray<Symbol> members, BindingDiagnosticBag diagnostics)
4614foreach (var member in members)
4621static void checkExtensionMember(Symbol member, BindingDiagnosticBag diagnostics)
4630internal static bool IsAllowedExtensionMember(Symbol member)
4676ArrayBuilder<Symbol> members,
4680foreach (var s in members)
4722var symbol = initializer.FieldOpt.AssociatedSymbol ?? initializer.FieldOpt;
4750var members = ArrayBuilder<Symbol>.GetInstance(membersSoFar.Count + 1);
4770var fieldsByName = PooledDictionary<string, Symbol>.GetInstance();
4772foreach (var member in membersSoFar)
4868void addDeconstruct(SynthesizedPrimaryConstructor ctor, ImmutableArray<Symbol> positionalMembers)
4891if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingDeconstructMethod))
4939if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingConstructor))
4970MethodSymbol addPrintMembersMethod(IEnumerable<Symbol> userDefinedMembers)
4992if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingPrintMembersMethod))
5063if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingToStringMethod))
5086var objectToString = this.DeclaringCompilation.GetSpecialTypeMember(SpecialMember.System_Object__ToString);
5090foreach (var member in currentBaseType.GetSimpleNonTypeMembers(WellKnownMemberNames.ObjectToString))
5106ImmutableArray<Symbol> addProperties(ImmutableArray<ParameterSymbol> recordParameters)
5108var existingOrAddedMembers = ArrayBuilder<Symbol>.GetInstance(recordParameters.Length);
5123if (!memberSignatures.TryGetValue(targetProperty, out var existingMember)
5188bool checkMemberNotHidden(Symbol symbol, ParameterSymbol param)
5222if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingHashCodeMethod))
5252if (!memberSignatures.TryGetValue(targetProperty, out Symbol? existingEqualityContractProperty))
5321if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingEqualsMethod))
5346void reportStaticOrNotOverridableAPIInRecord(Symbol symbol, BindingDiagnosticBag diagnostics)
5387foreach (var member in membersSoFar)
5469foreach (var synthesizedMember in synthesizedMembers)
5847private void AddAccessorIfAvailable(ArrayBuilder<Symbol> symbols, MethodSymbol? accessorOpt)
5896foreach (var member in GetMembersUnordered())
6010foreach (var member in this.GetMembersUnordered())
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (32)
100foreach (var abstractMember in this.AbstractMembers)
134foreach (var interfaceMember in @interface.GetMembers())
158MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = this.GetExplicitImplementationForInterfaceMember(interfaceMember);
178var implementingMember = implementingMemberAndDiagnostics.Symbol;
229var info = new CSDiagnosticInfo(ErrorCode.ERR_MixingWinRTEventWithRegular, args, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<Location>(this.GetFirstLocation()));
237var associatedPropertyOrEvent = interfaceMemberKind == SymbolKind.Method ? ((MethodSymbol)interfaceMember).AssociatedSymbol : null;
385private bool ReportAccessorOfInterfacePropertyOrEvent(Symbol interfacePropertyOrEvent)
395Symbol implementingPropertyOrEvent;
399MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = this.GetExplicitImplementationForInterfaceMember(interfacePropertyOrEvent);
528foreach (var member in this.GetMembersUnordered())
670private void CheckNewModifier(Symbol symbol, bool isNew, BindingDiagnosticBag diagnostics)
702foreach (var hiddenMember in currType.GetMembers(symbol.Name))
742Symbol overridingMember,
779Symbol associatedPropertyOrEvent = null;
868void checkSingleOverriddenMember(Symbol overridingMember, Symbol overriddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
929var leastOverriddenMember = overriddenMember.GetLeastOverriddenMember(overriddenMember.ContainingType);
1203private bool IsValidOverrideReturnType(Symbol overridingSymbol, TypeWithAnnotations overridingReturnType, TypeWithAnnotations overriddenReturnType, BindingDiagnosticBag diagnostics)
1537Symbol overriddenMember,
1538Symbol overridingMember)
1569Symbol hidingMember,
1599foreach (var hiddenMember in hiddenMembers)
1649private static bool IsShadowingSynthesizedRecordMember(Symbol hidingMember)
1658private static bool AddHidingAbstractDiagnostic(Symbol hidingMember, Location hidingMemberLocation, Symbol hiddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
1693var associatedPropertyOrEvent = ((MethodSymbol)hidingMember).AssociatedSymbol;
1724private static bool OverrideHasCorrectAccessibility(Symbol overridden, Symbol overriding)
1812SynthesizeInterfaceMemberImplementation(SymbolAndDiagnostics implementingMemberAndDiagnostics, Symbol interfaceMember)
1822Symbol implementingMember = implementingMemberAndDiagnostics.Symbol;
Symbols\SubstitutedNamedTypeSymbol.cs (32)
27private static readonly Func<Symbol, NamedTypeSymbol, Symbol> s_symbolAsMemberFunc = SymbolExtensions.SymbolAsMember;
38private readonly Symbol _newContainer;
53private ConcurrentCache<string, ImmutableArray<Symbol>> _lazyMembersByNameCache;
55private ImmutableArray<Symbol> _lazyMembers;
57protected SubstitutedNamedTypeSymbol(Symbol newContainer, TypeMap map, NamedTypeSymbol originalDefinition, NamedTypeSymbol constructedFrom = null, bool unbound = false, TupleExtraData tupleData = null)
126public sealed override Symbol ContainingSymbol
189internal abstract override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
236public sealed override ImmutableArray<Symbol> GetMembers()
243var builder = ArrayBuilder<Symbol>.GetInstance();
248foreach (var t in OriginalDefinition.GetMembers())
258foreach (var t in OriginalDefinition.GetMembers())
271private ArrayBuilder<Symbol> AddOrWrapTupleMembersIfNecessary(ArrayBuilder<Symbol> builder)
276var replacedFields = new HashSet<Symbol>(ReferenceEqualityComparer.Instance);
278foreach (var existingMember in existingMembers)
292internal sealed override ImmutableArray<Symbol> GetMembersUnordered()
294var builder = ArrayBuilder<Symbol>.GetInstance();
298foreach (var t in OriginalDefinition.GetMembersUnordered())
308foreach (var t in OriginalDefinition.GetMembersUnordered())
319public sealed override ImmutableArray<Symbol> GetMembers(string name)
321if (_unbound) return StaticCast<Symbol>.From(GetTypeMembers(name));
323ImmutableArray<Symbol> result;
333private ImmutableArray<Symbol> GetMembersWorker(string name)
348var builder = ArrayBuilder<Symbol>.GetInstance(originalMembers.Length);
349foreach (var t in originalMembers)
358void cacheResult(ImmutableArray<Symbol> result)
364(_lazyMembersByNameCache = new ConcurrentCache<string, ImmutableArray<Symbol>>(8));
392internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
399internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
403var builder = ArrayBuilder<Symbol>.GetInstance();
404foreach (var t in OriginalDefinition.GetEarlyAttributeDecodingMembers(name))
Symbols\Symbol.cs (27)
51internal virtual void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
108public abstract Symbol ContainingSymbol { get; }
117Symbol container = this.ContainingSymbol;
148for (var container = this.ContainingSymbol; (object)container != null; container = container.ContainingSymbol)
171var container = this.ContainingSymbol;
342var container = this.ContainingSymbol;
362public Symbol OriginalDefinition
370protected virtual Symbol OriginalSymbolDefinition
764public static bool operator ==(Symbol left, Symbol right)
786public static bool operator !=(Symbol left, Symbol right)
809return this.Equals(obj as Symbol, SymbolEqualityComparer.Default.CompareKind);
812public bool Equals(Symbol other)
819return this.Equals(other as Symbol, compareKind);
823public virtual bool Equals(Symbol other, TypeCompareKind compareKind)
834public static bool Equals(Symbol first, Symbol second, TypeCompareKind compareKind)
959internal static void ForceCompleteMemberConditionally(SourceLocation? locationOpt, Predicate<Symbol>? filter, Symbol member, CancellationToken cancellationToken)
1341internal static bool GetUnificationUseSiteDiagnosticRecursive<T>(ref DiagnosticInfo result, ImmutableArray<T> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes) where T : TypeSymbol
1354internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeWithAnnotations> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1367internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<CustomModifier> modifiers, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1380internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<ParameterSymbol> parameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1394internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeParameterSymbol> typeParameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1719internal static bool IsCaptured(Symbol variable, SourceMethodSymbol containingSymbol)
1770for (var currentFunction = variable.ContainingSymbol;
Symbols\SymbolExtensions.cs (56)
24public static bool IsCompilationOutputWinMdObj(this Symbol symbol)
39public static bool IsNestedType([NotNullWhen(true)] this Symbol? symbol)
87public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
92public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeWithAnnotations type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
97internal static void AddUseSiteInfo(this Symbol? symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool addDiagnostics = true)
120public static LocalizableErrorArgument GetKindText(this Symbol symbol)
129internal static NamespaceOrTypeSymbol? ContainingNamespaceOrType(this Symbol symbol)
131var containingSymbol = symbol.ContainingSymbol;
145internal static Symbol? ContainingNonLambdaMember(this Symbol? containingMember)
157internal static ParameterSymbol? EnclosingThisSymbol(this Symbol containingMember)
159Symbol symbol = containingMember;
199public static Symbol ConstructedFrom(this Symbol symbol)
219public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, TypeSymbol type)
228public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, ImmutableArray<TypeSymbol> types)
233private static readonly Func<TypeSymbol, Symbol, bool, bool> s_hasInvalidTypeParameterFunc =
236private static bool HasInvalidTypeParameter(TypeSymbol type, Symbol? containingSymbol)
240var symbol = type.ContainingSymbol;
253public static bool IsTypeOrTypeAlias(this Symbol symbol)
273internal static bool CompilationAllowsUnsafe(this Symbol symbol)
278internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, BindingDiagnosticBag diagnostics)
283internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, BindingDiagnosticBag diagnostics)
286internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, DiagnosticBag? diagnostics)
300public static bool IsHiddenByCodeAnalysisEmbeddedAttribute(this Symbol symbol)
317public static bool MustCallMethodsDirectly(this Symbol symbol)
330public static int GetArity(this Symbol? symbol)
346internal static CSharpSyntaxNode GetNonNullSyntaxNode(this Symbol? symbol)
354Symbol? containingSymbol = symbol.ContainingSymbol;
371internal static Symbol? EnsureCSharpSymbolOrNull(this ISymbol? symbol, string paramName)
430internal static TypeWithAnnotations GetTypeOrReturnType(this Symbol symbol)
462internal static FlowAnalysisAnnotations GetFlowAnalysisAnnotations(this Symbol? symbol)
474internal static void GetTypeOrReturnType(this Symbol symbol, out RefKind refKind, out TypeWithAnnotations returnType,
525internal static bool IsImplementableInterfaceMember(this Symbol symbol)
530internal static bool RequiresInstanceReceiver(this Symbol symbol)
543private static TISymbol? GetPublicSymbol<TISymbol>(this Symbol? symbol)
550internal static ISymbol? GetPublicSymbol(this Symbol? symbol)
675internal static IEnumerable<ISymbol?> GetPublicSymbols(this IEnumerable<Symbol?> symbols)
680private static ImmutableArray<TISymbol> GetPublicSymbols<TISymbol>(this ImmutableArray<Symbol> symbols)
691internal static ImmutableArray<ISymbol> GetPublicSymbols(this ImmutableArray<Symbol> symbols)
698return GetPublicSymbols<IPropertySymbol>(StaticCast<Symbol>.From(symbols));
703return GetPublicSymbols<ITypeSymbol>(StaticCast<Symbol>.From(symbols));
708return GetPublicSymbols<INamedTypeSymbol>(StaticCast<Symbol>.From(symbols));
713return GetPublicSymbols<ILocalSymbol>(StaticCast<Symbol>.From(symbols));
718return GetPublicSymbols<IEventSymbol>(StaticCast<Symbol>.From(symbols));
723return GetPublicSymbols<ITypeParameterSymbol>(StaticCast<Symbol>.From(symbols));
728return GetPublicSymbols<IParameterSymbol>(StaticCast<Symbol>.From(symbols));
733return GetPublicSymbols<IMethodSymbol>(StaticCast<Symbol>.From(symbols));
738return GetPublicSymbols<IAssemblySymbol>(StaticCast<Symbol>.From(symbols));
743return GetPublicSymbols<IFieldSymbol>(StaticCast<Symbol>.From(symbols));
748return GetPublicSymbols<INamespaceSymbol>(StaticCast<Symbol>.From(symbols));
753where TSymbol : Symbol
759internal static Symbol? GetSymbol(this ISymbol? symbol)
761return symbol.GetSymbol<Symbol>();
812internal static bool IsRequired(this Symbol symbol) => symbol is FieldSymbol { IsRequired: true } or PropertySymbol { IsRequired: true };
817internal static int GetOverloadResolutionPriority(this Symbol symbol)
Symbols\Tuples\TupleTypeSymbol.cs (29)
486internal static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember, BindingDiagnosticBag diagnostics, SyntaxNode? syntax)
488Symbol? member = GetWellKnownMemberInType(type, relativeMember);
515static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember)
564public TMember? GetTupleMemberSymbolForUnderlyingMember<TMember>(TMember? underlyingMemberOpt) where TMember : Symbol
569protected ArrayBuilder<Symbol> MakeSynthesizedTupleMembers(ImmutableArray<Symbol> currentMembers, HashSet<Symbol>? replacedFields = null)
576var members = ArrayBuilder<Symbol>.GetInstance(currentMembers.Length);
590foreach (Symbol member in currentMembers)
798static void collectTargetTupleFields(int arity, ImmutableArray<Symbol> members, ArrayBuilder<FieldSymbol?> fieldsForElements)
809static Symbol? getWellKnownMemberInType(ImmutableArray<Symbol> members, WellKnownMember relativeMember)
818static ImmutableArray<Symbol> getOriginalFields(ImmutableArray<Symbol> members)
820var fields = ArrayBuilder<Symbol>.GetInstance();
821foreach (var member in members)
912private SmallDictionary<Symbol, Symbol>? _lazyUnderlyingDefinitionToMemberMap;
1013foreach (var member in tuple.GetMembers())
1044internal SmallDictionary<Symbol, Symbol> UnderlyingDefinitionToMemberMap
1050SmallDictionary<Symbol, Symbol> computeDefinitionToMemberMap()
1052var map = new SmallDictionary<Symbol, Symbol>(ReferenceEqualityComparer.Instance);
1059var member = members[i];
1099public TMember? GetTupleMemberSymbolForUnderlyingMember<TMember>(TMember? underlyingMemberOpt) where TMember : Symbol
1106Symbol underlyingMemberDefinition = underlyingMemberOpt.OriginalDefinition;
1114if (UnderlyingDefinitionToMemberMap.TryGetValue(underlyingMemberDefinition, out Symbol? result))
Symbols\TypeSymbol.cs (131)
42private ImmutableHashSet<Symbol> _lazyAbstractMembers;
60private ConcurrentDictionary<Symbol, SymbolAndDiagnostics> _implementationForInterfaceMemberMap;
62public ConcurrentDictionary<Symbol, SymbolAndDiagnostics> ImplementationForInterfaceMemberMap
73map = new ConcurrentDictionary<Symbol, SymbolAndDiagnostics>(concurrencyLevel: 1, capacity: 1, comparer: SymbolEqualityComparer.ConsiderEverything);
83internal MultiDictionary<Symbol, Symbol> explicitInterfaceImplementationMap;
146protected sealed override Symbol OriginalSymbolDefinition
298public sealed override bool Equals(Symbol other, TypeCompareKind compareKind)
442public Symbol FindImplementationForInterfaceMember(Symbol interfaceMember)
531internal abstract bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
732internal SymbolAndDiagnostics FindImplementationForInterfaceMemberInNonInterfaceWithDiagnostics(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
783internal Symbol FindImplementationForInterfaceMemberInNonInterface(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
788private SymbolAndDiagnostics ComputeImplementationAndDiagnosticsForInterfaceMember(Symbol interfaceMember, bool ignoreImplementationInInterfaces, out bool implementationInInterfacesMightChangeResult)
791var implementingMember = ComputeImplementationForInterfaceMember(interfaceMember, this, diagnostics, ignoreImplementationInInterfaces, out implementationInInterfacesMightChangeResult);
814private static Symbol ComputeImplementationForInterfaceMember(Symbol interfaceMember, TypeSymbol implementingType, BindingDiagnosticBag diagnostics,
842Symbol implicitImpl = null;
843Symbol closestMismatch = null;
858MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = currType.GetExplicitImplementationForInterfaceMember(interfaceMember);
890if (IsExplicitlyImplementedViaAccessors(checkPendingExplicitImplementations, interfaceMember, currType, ref useSiteInfo, out Symbol currTypeExplicitImpl))
928Symbol currTypeImplicitImpl;
929Symbol currTypeCloseMismatch;
966Symbol originalImplicitImpl = implicitImpl;
976Symbol defaultImpl = null;
1066private static Symbol FindMostSpecificImplementationInInterfaces(Symbol interfaceMember, TypeSymbol implementingType,
1081Symbol defaultImpl = FindMostSpecificImplementationInBases(interfaceMember,
1083ref useSiteInfo, out Symbol conflict1, out Symbol conflict2);
1119private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1121MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1138out var _, out var _);
1141Symbol result = implementingMember.Single();
1160private static Symbol FindMostSpecificImplementationInBases(
1161Symbol interfaceMember,
1164out Symbol conflictingImplementation1,
1165out Symbol conflictingImplementation2)
1189Symbol accessorImpl1 = findMostSpecificImplementationInBases(interfaceAccessor1 ?? interfaceAccessor2, allInterfaces, ref useSiteInfo,
1190out Symbol conflictingAccessorImplementation11, out Symbol conflictingAccessorImplementation12);
1220Symbol accessorImpl2 = findMostSpecificImplementationInBases(interfaceAccessor2, allInterfaces, ref useSiteInfo,
1221out Symbol conflictingAccessorImplementation21, out Symbol conflictingAccessorImplementation22);
1251static Symbol findImplementationInInterface(Symbol interfaceMember, Symbol inplementingAccessor1, Symbol implementingAccessor2 = null)
1261MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1272static Symbol findMostSpecificImplementationInBases(
1273Symbol interfaceMember,
1276out Symbol conflictingImplementation1,
1277out Symbol conflictingImplementation2)
1279var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1289MultiDictionary<Symbol, Symbol>.ValueSet candidate = FindImplementationInInterface(interfaceMember, interfaceType);
1298(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1299Symbol previous = methodSet.First();
1351Symbol result;
1361MultiDictionary<Symbol, Symbol>.ValueSet methodSet = implementations[0].MethodSet;
1391internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1405return new MultiDictionary<Symbol, Symbol>.ValueSet(interfaceMember);
1414private static (MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) GetImplementableAccessors(Symbol interfaceMember)
1475private static bool IsExplicitlyImplementedViaAccessors(bool checkPendingExplicitImplementations, Symbol interfaceMember, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol implementingMember)
1479Symbol associated1;
1480Symbol associated2;
1512private static bool TryGetExplicitImplementationAssociatedPropertyOrEvent(bool checkPendingExplicitImplementations, MethodSymbol interfaceAccessor, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol associated)
1518MultiDictionary<Symbol, Symbol>.ValueSet set = currType.GetExplicitImplementationForInterfaceMember(interfaceAccessor);
1521Symbol implementation = set.Single();
1557ref Symbol implicitImpl)
1562Symbol associatedInterfacePropertyOrEvent = interfaceMethod.AssociatedSymbol;
1573Symbol implementingPropertyOrEvent = implementingType.FindImplementationForInterfaceMemberInNonInterface(associatedInterfacePropertyOrEvent,
1639private static void ReportDefaultInterfaceImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1687private static void ReportImplicitImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1742foreach (Symbol member in implicitImpl.ContainingType.GetMembers(implicitImpl.Name))
1782internal static void CheckModifierMismatchOnImplementingMember(TypeSymbol implementingType, Symbol implementingMember, Symbol interfaceMember, bool isExplicit, BindingDiagnosticBag diagnostics)
1980static void checkRefStructInterfacesFeatureAvailabilityOnUnscopedRefAttribute(Symbol implementingSymbol, BindingDiagnosticBag diagnostics)
1999private static void ReportImplicitImplementationMismatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol closestMismatch, BindingDiagnosticBag diagnostics)
2076internal static bool HaveInitOnlyMismatch(Symbol one, Symbol other)
2094private static Location GetInterfaceLocation(Symbol interfaceMember, TypeSymbol implementingType)
2154internal static Location GetImplicitImplementationDiagnosticLocation(Symbol interfaceMember, TypeSymbol implementingType, Symbol member)
2184Symbol interfaceMember,
2187out Symbol implicitImpl,
2188out Symbol closeMismatch)
2200foreach (Symbol member in currType.GetMembers(interfaceMember.Name))
2257private static bool IsInterfaceMemberImplementation(Symbol candidateMember, Symbol interfaceMember, bool implementingTypeIsFromSomeCompilation)
2286protected MultiDictionary<Symbol, Symbol>.ValueSet GetExplicitImplementationForInterfaceMember(Symbol interfaceMember)
2302private MultiDictionary<Symbol, Symbol> MakeExplicitInterfaceImplementationMap()
2304var map = new MultiDictionary<Symbol, Symbol>(ExplicitInterfaceImplementationTargetMemberEqualityComparer.Instance);
2305foreach (var member in this.GetMembersUnordered())
2307foreach (var interfaceMember in member.GetExplicitInterfaceImplementations())
2373protected class ExplicitInterfaceImplementationTargetMemberEqualityComparer : IEqualityComparer<Symbol>
2378public bool Equals(Symbol x, Symbol y)
2384public int GetHashCode(Symbol obj)
2397internal ImmutableHashSet<Symbol> AbstractMembers
2409private ImmutableHashSet<Symbol> ComputeAbstractMembers()
2411var abstractMembers = ImmutableHashSet.Create<Symbol>();
2412var overriddenMembers = ImmutableHashSet.Create<Symbol>();
2414foreach (var member in this.GetMembersUnordered())
2421Symbol overriddenMember = null;
2449foreach (var baseAbstractMember in this.BaseTypeNoUseSiteDiagnostics.AbstractMembers)
2490public static bool operator ==(Symbol left, TypeSymbol right)
2494public static bool operator !=(Symbol left, TypeSymbol right)
2498public static bool operator ==(TypeSymbol left, Symbol right)
2502public static bool operator !=(TypeSymbol left, Symbol right)
Symbols\TypeSymbolExtensions.cs (12)
20public Symbol? Symbol;
552private static bool IsNamespaceName(Symbol symbol, string[] names)
674public static bool IsAtLeastAsVisibleAs(this TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
698private static bool IsTypeLessVisibleThan(TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1003internal static bool IsAsRestrictive(this Symbol s1, Symbol sym2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1012for (Symbol s2 = sym2; s2.Kind != SymbolKind.Namespace; s2 = s2.ContainingSymbol)
1208public static bool ContainsTypeParameter(this TypeSymbol type, Symbol typeParameterContainer)
1216private static readonly Func<TypeSymbol, Symbol, bool, bool> s_isTypeParameterWithSpecificContainerPredicate =
1741internal static TypeParameterSymbol? FindEnclosingTypeParameter(this Symbol methodOrType, string name)
1778var container = type.ContainingSymbol;
2087Symbol declaringSymbol,