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 (23)
33internal Symbol Symbol { get; }
57private MethodInfo(Symbol symbol, MethodSymbol? method, MethodSymbol? setMethod)
93Symbol symbol = ReferenceEquals(Symbol, Method) && method is not null ? method : Symbol;
621Symbol otherSymbol = null;
656(object)otherSymbol == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(otherSymbol),
1449Symbol containing = this.ContainingMemberOrLambda;
1658private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol)
1762var containing = this.ContainingMemberOrLambda;
1917var containingMember = ContainingMemberOrLambda;
1933private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics,
1934Symbol propertyOrEventSymbolOpt = null)
2147Symbol? symbol = methodInfo.Symbol;
2228BindingDiagnosticBag diagnostics, bool isRefEscape, Symbol symbolForReporting)
2236var symbol = methodInfo.Symbol;
2313Symbol symbolForReporting)
2597static bool hasRefLikeReturn(Symbol symbol)
2825Symbol symbol,
2837var symbol = argument switch
2888SafeContext localScopeDepth, BindingDiagnosticBag diagnostics, Symbol symbolForReporting)
2895var symbol = methodInfo.Symbol;
2985Symbol symbolForReporting)
3134public override Symbol ContainingSymbol
3366private 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 (82)
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
4507ImmutableArray<Symbol>.Empty,
4546ImmutableArray<Symbol>.Empty,
4878symbols: ImmutableArray<Symbol>.Empty,
4889symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
4932symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
5253return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType());
5462return new BoundBadExpression(node, LookupResultKind.NotInvocable, StaticCast<Symbol>.From(type.InstanceConstructors), ImmutableArray.Create(argument), type);
5509return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, StaticCast<Symbol>.From(type.InstanceConstructors), childNodes, type);
5606return new BoundBadExpression(node, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(type), children.ToImmutableAndFree(), type) { WasCompilerGenerated = wasCompilerGenerated };
6135private static ImmutableSegmentedDictionary<string, Symbol> GetMembersRequiringInitialization(MethodSymbol constructor)
6140return ImmutableSegmentedDictionary<string, Symbol>.Empty;
6152ImmutableSegmentedDictionary<string, Symbol> requiredMembers = GetMembersRequiringInitialization(constructor);
6174var memberSymbol = assignmentOperator.Left switch
6212private static void ReportMembersRequiringInitialization(SyntaxNode creationSyntax, ImmutableSegmentedDictionary<string, Symbol>.Builder requiredMembersBuilder, BindingDiagnosticBag diagnostics)
6442return BadExpression(elementInitializer, LookupResultKind.NotInvocable, ImmutableArray<Symbol>.Empty, boundElementInitializerExpressions);
6893ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
7073return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol>.Empty, children, interfaceType);
7501Symbol leftSymbol;
7822ArrayBuilder<Symbol> symbols = lookupResult.Symbols;
7827Symbol sym = ResultSymbol(lookupResult, rightName, rightArity, node, diagnostics, false, out wasError, ns, options);
8016if (resolution.IsNonMethodExtensionMember(out Symbol? extensionMember))
8033private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics)
8107var members = ArrayBuilder<Symbol>.GetInstance();
8205ReportQueryLookupFailed(node, boundLeft, plainName, ImmutableArray<Symbol>.Empty, diagnostics);
8267return this.BindMemberAccessBadResult(syntax, node.Name, node.ReceiverOpt, node.LookupError, StaticCast<Symbol>.From(node.Methods), node.ResultKind);
8278ImmutableArray<Symbol> symbols,
8284foreach (var s in symbols)
8310var symbolOpt = symbols.Length == 1 ? symbols[0] : null;
8314(object)symbolOpt == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(symbolOpt),
8319private TypeSymbol GetNonMethodMemberType(Symbol symbolOpt)
8410var members = ArrayBuilder<Symbol>.GetInstance();
8413Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, right, plainName, arity, members, diagnostics, out wasError,
8872var members = ArrayBuilder<Symbol>.GetInstance();
8874Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, node, rightName, arity, members, diagnostics, out wasError, qualifierOpt: null);
9080private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics)
9132static bool isNotImplementableInstanceMember(Symbol symbol)
9188Symbol symbol,
9236private Symbol GetSymbolOrMethodOrPropertyGroup(LookupResult result, SyntaxNode node, string plainName, int arity, ArrayBuilder<Symbol> methodOrPropertyGroup, BindingDiagnosticBag diagnostics, out bool wasError, NamespaceOrTypeSymbol qualifierOpt)
9246Symbol other = null; // different member type from 'methodOrPropertyGroup'
9318private static bool IsMethodOrPropertyGroup(ArrayBuilder<Symbol> members)
9656return new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes, CreateErrorType(), hasErrors: true);
10002foreach (Symbol symbol in lookupResult.Symbols)
11083Symbol extensionMember = singleLookupResult.Symbol;
11325return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnostics, getErrorLocation());
11432internal static bool MethodOrLambdaRequiresValue(Symbol symbol, CSharpCompilation compilation)
Binder\Binder_Lookup.cs (50)
217foreach (var candidate in candidates)
376Symbol existingDefinition = submissionSymbols.Symbols.First();
410Symbol firstSymbol = submissionSymbols.Symbols.First();
521foreach (Symbol member in members)
596Symbol symbolWithoutSuffix;
602Symbol symbolWithSuffix = null;
662private bool IsAmbiguousResult(LookupResult result, out Symbol resultSymbol)
688private Symbol ResolveMultipleSymbolsInAttributeTypeLookup(ArrayBuilder<Symbol> symbols)
720private static bool NameAndArityMatchRecursively(Symbol x, Symbol y)
740static bool isRoot(Symbol symbol) => symbol is null || symbol is NamespaceSymbol { IsGlobalNamespace: true };
743private bool IsSingleViableAttributeType(LookupResult result, out Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
759private SingleLookupResult GenerateNonViableAttributeTypeResult(Symbol symbol, DiagnosticInfo diagInfo, bool diagnose)
769private bool CheckAttributeTypeViability(Symbol symbol, bool diagnose, ref DiagnosticInfo diagInfo, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
856foreach (Symbol member in members)
926var other = GetNearestOtherSymbol(basesBeingResolved, type);
981var allMembers = new HashSet<Symbol>(comparer);
982var conflictingMembers = new HashSet<Symbol>(comparer);
1035foreach (var sym in allMembers)
1076private static Symbol GetNearestOtherSymbol(ConsList<TypeSymbol> list, TypeSymbol type)
1376private static bool IsMethodOrIndexer(Symbol symbol)
1381internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, string name, LookupOptions options, Binder originalBinder)
1385return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1393return ImmutableArray<Symbol>.Empty;
1405internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, LookupOptions options, Binder originalBinder)
1409return StaticCast<Symbol>.From(nsOrType.GetTypeMembersUnordered());
1417return ImmutableArray<Symbol>.Empty;
1425private bool IsInScopeOfAssociatedSyntaxTree(Symbol symbol)
1473internal SingleLookupResult CheckViability(Symbol symbol, int arity, LookupOptions options, TypeSymbol accessThroughType, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1482var unwrappedSymbol = symbol.Kind == SymbolKind.Alias
1533var unwrappedSymbols = ImmutableArray.Create<Symbol>(unwrappedSymbol);
1558diagInfo = new CSDiagnosticInfo(ErrorCode.ERR_BadAccess, new[] { unwrappedSymbol }, ImmutableArray.Create<Symbol>(unwrappedSymbol), additionalLocations: ImmutableArray<Location>.Empty);
1632private CSDiagnosticInfo MakeCallMethodsDirectlyDiagnostic(Symbol symbol)
1669/// Does not consider <see cref="Symbol.CanBeReferencedByName"/> - that is left to the caller.
1671internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, LookupSymbolsInfo info, TypeSymbol accessThroughType, AliasSymbol aliasSymbol = null)
1737private bool IsCrefAccessible(Symbol symbol)
1742private static bool IsEffectivelyPrivate(Symbol symbol)
1744for (Symbol s = symbol; (object)s != null; s = s.ContainingSymbol)
1759internal bool IsAccessible(Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, TypeSymbol accessThroughType = null, ConsList<TypeSymbol> basesBeingResolved = null)
1765internal bool IsAccessible(Symbol symbol, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1778internal bool IsAccessible(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1790/// Should only be called by <see cref="IsAccessible(Symbol, TypeSymbol, out bool, ref CompoundUseSiteInfo{AssemblySymbol}, ConsList{TypeSymbol})"/>,
1793internal virtual bool IsAccessibleHelper(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved)
1799internal bool IsNonInvocableMember(Symbol symbol)
1815private bool IsInvocableMember(Symbol symbol)
1840private static bool IsInstance(Symbol symbol)
1857private static bool WrongArity(Symbol symbol, int arity, bool diagnose, LookupOptions options, out DiagnosticInfo diagInfo)
2043foreach (var symbol in candidateMembers)
2055foreach (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 (49)
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;
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(
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),
2402private static AssemblySymbol GetContainingAssembly(Symbol symbol)
2522private BestSymbolInfo GetBestSymbolInfo(ArrayBuilder<Symbol> symbols, out BestSymbolInfo secondBest)
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 (61)
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
2092where TMember : Symbol
2115where TMember : Symbol
2155where TMember : Symbol
2617where TMember : Symbol
2641where TMember : Symbol
2701private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
3834Symbol member,
3879out bool hasAnyRefOmittedArgument) where TMember : Symbol
4027Options options) where TMember : Symbol
4040out bool hasAnyRefOmittedArgument) where TMember : Symbol
4098where TMember : Symbol
4179where TMember : Symbol
4247where TMember : Symbol
4346var methodForTypeParameters = isNewExtensionMember ? leastOverriddenMember.OriginalDefinition : leastOverriddenMember;
4404where TMember : Symbol
4453(MethodSymbol)(Symbol)member,
4473Symbol candidate, // method or property
4678Symbol candidate, // method or property
4754private static TMember GetConstructedFrom<TMember>(TMember member) where TMember : Symbol
4761return (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 (28)
1188internal new Symbol? GetAssemblyOrModuleSymbol(MetadataReference reference)
1209return (TSymbol?)(object?)symbol.GetSymbol<Symbol>();
1749internal Symbol GetSpecialTypeMember(SpecialMember specialMember)
1778ImmutableArray<Symbol>.Empty,
2066var taskCandidates = taskEntryPoints.SelectAsArray(s => (Symbol)s.Candidate);
2140symbols: viableEntryPoints.OfType<Symbol>().AsImmutable(),
2164ArrayBuilder<MethodSymbol> entryPointCandidates, IEnumerable<Symbol> members)
2166foreach (var member in members)
2183static void addIfCandidate(ArrayBuilder<MethodSymbol> entryPointCandidates, Symbol member)
2425Symbol? symbol0 = symbol.EnsureCSharpSymbolOrNull(nameof(symbol));
2426Symbol? within0 = within.EnsureCSharpSymbolOrNull(nameof(within));
2963private void GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, bool includeEarlierStages, BindingDiagnosticBag builder, Predicate<Symbol>? symbolFilter, CancellationToken cancellationToken)
3095private static bool IsDefinedOrImplementedInSourceTree(Symbol symbol, SyntaxTree tree, TextSpan? span)
3201filterOpt: filterTree is object ? (Predicate<Symbol>?)(s => IsDefinedOrImplementedInSourceTree(s, filterTree, filterSpan)) : (Predicate<Symbol>?)null,
3243private 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)
3640foreach (var childSymbol in symbol.GetMembers())
4693internal IEnumerable<Symbol> GetSymbolsWithNameCore(string name, SymbolFilter filter = SymbolFilter.TypeAndMember, CancellationToken cancellationToken = default)
4756internal bool ShouldEmitNullableAttributes(Symbol symbol)
4782static Symbol getExplicitAccessibilitySymbol(Symbol symbol)
4808internal void SymbolDeclaredEvent(Symbol symbol)
4874var sustainedLowLatency = GetWellKnownTypeMember(WellKnownMember.System_Runtime_GCLatencyMode__SustainedLowLatency);
4908public IEnumerable<Symbol> GetSymbolsWithName()
4910var result = new HashSet<Symbol>();
4922HashSet<Symbol> set)
4976ArrayBuilder<MergedNamespaceOrTypeDeclaration> spine, MergedTypeDeclaration current, HashSet<Symbol> set)
4984foreach (var member in container.GetMembers())
Compilation\CSharpSemanticModel.cs (139)
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);
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))
1233internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
1474protected void UnguardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
1482protected void GuardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
2046ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols);
2341internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
2352if (_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)
1403foreach (var symbol in collection)
1781private Symbol GetDeclaredMember(NamespaceOrTypeSymbol container, TextSpan declarationSpan, bool isKnownToBeANamespace, string name = null)
1809Symbol zeroWidthMatch = null;
1810foreach (var symbol in collection)
1816var result = GetDeclaredMember(namedType, declarationSpan, isKnownToBeANamespace, name);
1833Symbol partial = symbol.GetPartialImplementationPart();
1867var result = this.GetDeclaredMember(container, declarationSyntax.Span, isKnownToBeANamespace: false, declarationSyntax.Identifier.ValueText);
2349private static BoundNode GetBoundRoot(MemberSemanticModel memberModel, out Symbol member)
2401private Symbol GetDeclaredMemberSymbol(CSharpSyntaxNode declarationSyntax)
2440internal 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)
Emitter\Model\PEModuleBuilder.cs (21)
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);
357foreach (var member in symbol.GetMembers())
380foreach (var member in symbol.GetMembers())
441private void AddSymbolLocation(MultiDictionary<Cci.DebugSourceDocument, Cci.DefinitionWithLocation> result, Symbol symbol)
468private Location GetSmallestSourceLocationOrNull(Symbol symbol)
567foreach (var member in ns.GetMembers())
600foreach (var member in symbol.GetMembers())
823Symbol.ReportUseSiteDiagnostic(info,
1072private object GetCciAdapter(Symbol symbol)
1393var container = param.ContainingSymbol;
1429private static bool ContainerIsGeneric(Symbol container)
1492internal SynthesizedAttributeData SynthesizeIsReadOnlyAttribute(Symbol symbol)
1525internal SynthesizedAttributeData SynthesizeIsUnmanagedAttribute(Symbol symbol)
1536internal SynthesizedAttributeData SynthesizeIsByRefLikeAttribute(Symbol symbol)
1552internal SynthesizedAttributeData SynthesizeNullableAttributeIfNecessary(Symbol symbol, byte? nullableContextValue, TypeWithAnnotations type)
1612internal SynthesizedAttributeData SynthesizeNullableContextAttribute(Symbol symbol, byte value)
1637internal SynthesizedAttributeData SynthesizeNativeIntegerAttribute(Symbol symbol, TypeSymbol type)
1967Symbol.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;
2437var oldSymbol = this.CurrentSymbol;
2555Symbol variable = UseNonFieldSymbolUnsafely(operand);
2667foreach (var symbol in namedType.GetMembersUnordered())
2715Symbol 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 (123)
455Symbol? symbol,
672var alreadyWarnedMembers = PooledHashSet<Symbol>.GetInstance();
673foreach (var member in method.ContainingType.GetMembersUnordered())
717void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member, LocalState state, int thisSlot, Location? exitLocation, ImmutableArray<string> membersWithStateEnforcedByRequiredMembers, bool forcePropertyAnalysis)
736Symbol symbol;
742symbol = (Symbol?)(f.AssociatedSymbol as PropertySymbol) ?? f;
803var info = new CSDiagnosticInfo(errorCode, new object[] { symbol.Kind.Localize(), symbol.Name }, ImmutableArray<Symbol>.Empty, additionalLocations: symbol.Locations);
814foreach (var member in getMembersNeedingDefaultInitialState())
821var memberToInitialize = member;
875ImmutableArray<Symbol> getMembersNeedingDefaultInitialState()
879return ImmutableArray<Symbol>.Empty;
919static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
924=> ImmutableArray<Symbol>.Empty,
938var symbolToInitialize = getFieldSymbolToBeInitialized(symbol);
942return OneOrMany<Symbol>.Empty;
957static ImmutableArray<Symbol> getAllTypeAndRequiredMembers(TypeSymbol containingType)
960var baseRequiredMembers = containingType.BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
967var builder = ArrayBuilder<Symbol>.GetInstance(members.Length + baseRequiredMembers.Count);
991static OneOrMany<Symbol> getAllMembersToBeDefaulted(Symbol requiredMember, bool filterOverridingProperties)
1005return OneOrMany<Symbol>.Empty;
1013foreach (var member in property.ContainingType.GetMembers(notNullMemberName))
1023static Symbol getFieldSymbolToBeInitialized(Symbol requiredMember)
1056foreach (var member in method.ContainingType.GetMembers(memberName))
1104void enforceMemberNotNullWhenIfAffected(SyntaxNode? syntaxOpt, bool sense, ImmutableArray<Symbol> members, LocalState state, LocalState otherState)
1106foreach (var member in members)
1123foreach (var member in method.ContainingType.GetMembers(memberName))
1132private void ReportFailedMemberNotNullIfNeeded(SyntaxNode? syntaxOpt, bool sense, Symbol member, LocalState state)
1141private bool FailsMemberNotNullExpectation(Symbol member, LocalState state)
1177foreach (var member in type.GetMembers(memberName))
1192private int GetSlotForMemberPostCondition(Symbol member)
1491internal static VariableState? GetAfterInitializersState(CSharpCompilation compilation, Symbol? symbol, BoundNode constructorBody)
1561Symbol? symbol,
1576Symbol? symbol,
1583ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1592Symbol? symbol,
1656ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1661var symbol = variables.Symbol;
1698private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1700var remappedSymbolsBuilder = ImmutableDictionary.CreateBuilder<Symbol, Symbol>(Symbols.SymbolEqualityComparer.ConsiderEverything, Symbols.SymbolEqualityComparer.ConsiderEverything);
1812Symbol? symbol,
1869Symbol? symbol,
1902private void RecordNullableAnalysisData(Symbol? symbol, bool requiredAnalysis)
1929private void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
1952if (lambdaIsExactMatch || Symbol.Equals(originalSymbol, updatedSymbol, TypeCompareKind.ConsiderEverything))
2004var symbol = variable.Symbol;
2037protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member)
2205var container = method.ContainingSymbol;
2216protected override int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
2340var containingSymbol = parameterOpt?.ContainingSymbol;
2707private bool IsSlotMember(int slot, Symbol possibleMember)
2719private void InheritNullableStateOfMember(int targetContainerSlot, int valueContainerSlot, Symbol member, bool isDefaultValue, int skipSlot)
2848var symbol = AsMemberOfType(targetType, variable.Symbol);
2855private static TypeSymbol GetTypeOrReturnType(Symbol symbol) => symbol.GetTypeOrReturnType().Type;
2858private TypeWithAnnotations GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
2893private NullableFlowState GetDefaultState(Symbol symbol)
3331if (Symbol.IsCaptured(variables[slot].Symbol, localFunc))
3350var symbol = variables[variables.RootSlot(slot)].Symbol;
3351if (Symbol.IsCaptured(symbol, localFunc))
3397var oldSymbol = this._symbol;
3399var oldCurrentSymbol = this.CurrentSymbol;
3750private static bool AreCloseEnough(Symbol original, Symbol updated)
4327Symbol? symbol = getTargetMember(containingType, objectInitializer);
4330ArgumentsCompletionDelegate<Symbol>? argumentsCompletion = null;
4340invokedAsExtensionMethod: false, member: (Symbol?)null, delayCompletionForTargetMember: delayCompletionForType);
4343Action<int, Symbol>? initializationCompletion = null;
4366ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4367Action<int, Symbol>? initializationCompletion,
4388ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4389Action<int, Symbol>? initializationCompletion)
4393Symbol? symbol = getTargetMember(containingType, (BoundObjectInitializerMember)node.Left);
4405static Symbol? getTargetMember(TypeSymbol containingType, BoundObjectInitializerMember objectInitializer)
4407var symbol = objectInitializer.MemberSymbol;
4418int getOrCreateSlot(int containingSlot, Symbol symbol)
4423Action<int, Symbol>? visitNestedInitializer(int containingSlot, TypeSymbol containingType, Symbol symbol, BoundObjectInitializerExpressionBase initializer, bool delayCompletionForType)
4433Action<int, Symbol>? completeNestedInitializerAnalysis(
4434Symbol symbol, BoundObjectInitializerExpressionBase initializer, int slot, Action<int, TypeSymbol>? nestedCompletion,
4455Action<int, Symbol>? completeNestedInitializerAnalysisAsContinuation(BoundObjectInitializerExpressionBase initializer, Action<int, TypeSymbol>? nestedCompletion)
4457return (int containingSlot, Symbol symbol) =>
4465Action<int, Symbol>? visitMemberAssignment(BoundAssignmentOperator node, int containingSlot, Symbol symbol, bool delayCompletionForType, Func<TypeWithAnnotations, TypeWithState>? conversionCompletion = null)
4498Action<int, Symbol>? visitMemberAssignmentAsContinuation(BoundAssignmentOperator node, Func<TypeWithAnnotations, TypeWithState> conversionCompletion)
4500return (int containingSlot, Symbol symbol) =>
5749foreach (var member in getMembers(expressionType))
5766static IEnumerable<Symbol> getMembers(TypeSymbol type)
5769foreach (var member in type.GetMembers())
5774foreach (var member in baseType.GetMembers())
5779foreach (var member in interfaceType.GetMembers())
6793var implementationMethod = baseType.FindImplementationForInterfaceMember(constructedMethod);
6995private FlowAnalysisAnnotations GetRValueAnnotations(Symbol? symbol)
7176where TMember : Symbol
7184private delegate (TMember? member, bool returnNotNull) ArgumentsCompletionDelegate<TMember>(ImmutableArray<VisitResult> argumentResults, ImmutableArray<ParameterSymbol> parametersOpt, TMember? member) where TMember : Symbol;
7199where TMember : Symbol
7641foreach (Symbol member in type.GetMembers(memberName))
8277where TMember : Symbol
8283var definition = member.GetIsNewExtensionMember() ? member.OriginalDefinition : member.ConstructedFrom();
8662private static Symbol AsMemberOfType(TypeSymbol? type, Symbol symbol)
8707if (tryAsMemberOfSingleType(containingType, out var result))
8723if (tryAsMemberOfSingleType(containingType, out var result))
8738bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
8745var symbolDef = symbol.OriginalDefinition;
9008int targetSlot = GetNullableOfTValueSlot(containingType, containingSlot, out Symbol? symbol);
10574private FlowAnalysisAnnotations GetObjectInitializerMemberLValueAnnotations(Symbol memberSymbol)
11318var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.FieldSymbol);
11328Symbol? updatedProperty;
11441var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.EventSymbol);
11446private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member)
11495private SpecialMember? GetNullableOfTMember(Symbol member)
11515private int GetNullableOfTValueSlot(TypeSymbol containingType, int containingSlot, out Symbol? valueProperty, bool forceSlotEvenIfEmpty = false)
13463private sealed class ExpressionAndSymbolEqualityComparer : IEqualityComparer<(BoundNode? expr, Symbol symbol)>
13469public bool Equals((BoundNode? expr, Symbol symbol) x, (BoundNode? expr, Symbol symbol) y)
13480public 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)
6066public 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)
6085public Symbol? LookupSymbolOpt { get; }
6093public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6735public 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)
6756public Symbol? MemberSymbol { get; }
6770public 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)
8086protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8097public Symbol? Variable { get; }
8103public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8125public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8139public 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)
8166public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8180public 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)
8210public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8317public BoundPositionalSubpattern(SyntaxNode syntax, Symbol? symbol, BoundPattern pattern, bool hasErrors = false)
8326public Symbol? Symbol { get; }
8331public BoundPositionalSubpattern Update(Symbol? symbol, BoundPattern pattern)
8375public BoundPropertySubpatternMember(SyntaxNode syntax, BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type, bool hasErrors = false)
8387public Symbol? Symbol { get; }
8393public BoundPropertySubpatternMember Update(BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type)
8618protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8629public Symbol VariableSymbol { get; }
8635public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8647public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8661public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8673public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8687public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, bool hasErrors)
8694public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression)
8702public Symbol? VariableSymbol { get; }
8708public OutDeconstructVarPendingInference Update(Symbol? variableSymbol, bool isDiscardExpression)
10866Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
10933ImmutableArray<Symbol?> symbols = this.VisitSymbols<Symbol?>(node.Symbols);
11861Symbol? lookupSymbolOpt = this.VisitSymbol(node.LookupSymbolOpt);
11983Symbol? memberSymbol = this.VisitSymbol(node.MemberSymbol);
12231Symbol? variable = this.VisitSymbol(node.Variable);
12241Symbol? variable = this.VisitSymbol(node.Variable);
12252Symbol? variable = this.VisitSymbol(node.Variable);
12284Symbol? symbol = this.VisitSymbol(node.Symbol);
12296Symbol? symbol = this.VisitSymbol(node.Symbol);
12343Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12350Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12357Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
12395private readonly ImmutableDictionary<Symbol, Symbol>.Builder _remappedSymbols;
12397public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
12459Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
12625ImmutableArray<Symbol?> symbols = GetUpdatedArray(node, node.Symbols);
14045Symbol? lookupSymbolOpt = GetUpdatedSymbol(node, node.LookupSymbolOpt);
14318Symbol? memberSymbol = GetUpdatedSymbol(node, node.MemberSymbol);
14879Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14890Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14902Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14937Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
14944Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
15013Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15031Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15049Symbol? 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)
25private ImmutableDictionary<Symbol, Symbol> _symbolMap;
41_symbolMap = ImmutableDictionary<Symbol, Symbol>.Empty.WithComparers(ReferenceEqualityComparer.Instance, ReferenceEqualityComparer.Instance);
54private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenMethodSymbol rewritten, ReadOnlySpan<ParameterSymbol> rewrittenParameters)
56ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
76private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenLambdaOrLocalFunctionSymbol rewritten)
122ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (6)
204private MethodSymbol? GetLocalOrParameterStoreLogger(TypeSymbol variableType, Symbol targetSymbol, bool? refAssignmentSourceIsLocal, SyntaxNode syntax)
388if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex))
409private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression)
437Symbol targetSymbol,
485private BoundExpression VariableRead(Symbol localOrParameterSymbol)
583if (!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
1139private 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 (14)
30private readonly OrderedSet<Symbol> _variablesToHoist = new OrderedSet<Symbol>();
34private MultiDictionary<Symbol, SyntaxNode> _lazyDisallowedCaptures;
42private IteratorAndAsyncCaptureWalker(CSharpCompilation compilation, MethodSymbol method, BoundNode node, HashSet<Symbol> initiallyAssignedVariables)
53public static OrderedSet<Symbol> Analyze(CSharpCompilation compilation, MethodSymbol method, BoundNode node, DiagnosticBag diagnostics)
113var variablesToHoist = new OrderedSet<Symbol>();
136private static bool HoistInDebugBuild(Symbol symbol)
209private void CaptureVariable(Symbol variable, SyntaxNode syntax)
215(_lazyDisallowedCaptures ??= new MultiDictionary<Symbol, SyntaxNode>()).Add(variable, syntax);
258protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
350private readonly HashSet<Symbol> _localsInScope;
360_localsInScope = new HashSet<Symbol>();
389private void AddVariable(Symbol local)
424private 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);
689var 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)
105internal static bool TryGetInstanceExtensionParameter(this Symbol symbol, [NotNullWhen(true)] out ParameterSymbol? extensionParameter)
120internal static int GetMemberArityIncludingExtension(this Symbol member)
130internal static ImmutableArray<TypeParameterSymbol> GetTypeParametersIncludingExtension<TMember>(this TMember member) where TMember : Symbol
151where TMember : Symbol
180internal static ImmutableArray<ParameterSymbol> GetParametersIncludingExtensionParameter(this Symbol symbol, bool skipExtensionIfStatic)
194internal static int GetParameterCountIncludingExtensionParameter(this Symbol symbol)
204internal static TMember ConstructIncludingExtension<TMember>(this TMember member, ImmutableArray<TypeWithAnnotations> typeArguments) where TMember : Symbol
219return (TMember)(Symbol)method.Construct(typeArguments[extension.Arity..]);
222return (TMember)(Symbol)method;
225return (TMember)(Symbol)method.Construct(typeArguments);
238return (TMember)(Symbol)property;
247internal static Symbol? GetReducedAndFilteredSymbol(this Symbol member, ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol receiverType, CSharpCompilation compilation, bool checkFullyInferred)
317internal static ImmutableArray<RefKind> GetParameterRefKinds(this Symbol member)
332internal static int GetParameterCount(this Symbol member)
348internal static bool HasParameterContainingPointerType(this Symbol member)
361public static bool IsEventOrPropertyWithImplementableNonPublicAccessor(this Symbol symbol)
394public static bool IsAccessor(this Symbol symbol)
401var propertyOrEvent = methodSymbol.AssociatedSymbol;
410public static bool IsOperator(this Symbol symbol)
415public static bool IsIndexer(this Symbol symbol)
420public static bool IsIndexedProperty(this Symbol symbol)
425public static bool IsUserDefinedConversion(this Symbol symbol)
452public static int CustomModifierCount(this Symbol m)
501internal static Symbol SymbolAsMember(this Symbol s, NamedTypeSymbol newOwner)
523internal static int GetMemberArity(this Symbol symbol)
556internal static ImmutableArray<TypeParameterSymbol> GetMemberTypeParameters(this Symbol symbol)
574internal static ImmutableArray<TypeSymbol> GetMemberTypeArgumentsNoUseSiteDiagnostics(this Symbol symbol)
767internal static bool IsExplicitInterfaceImplementation(this Symbol member)
782internal static bool IsPartialMember(this Symbol member)
794internal static bool IsPartialImplementation(this Symbol member)
806internal static bool IsPartialDefinition(this Symbol member)
819internal static Symbol? GetPartialImplementationPart(this Symbol member)
831internal static Symbol? GetPartialDefinitionPart(this Symbol member)
844internal static bool ContainsTupleNames(this Symbol member)
861internal static ImmutableArray<Symbol> GetExplicitInterfaceImplementations(this Symbol member)
866return ((MethodSymbol)member).ExplicitInterfaceImplementations.Cast<MethodSymbol, Symbol>();
868return ((PropertySymbol)member).ExplicitInterfaceImplementations.Cast<PropertySymbol, Symbol>();
870return ((EventSymbol)member).ExplicitInterfaceImplementations.Cast<EventSymbol, Symbol>();
872return ImmutableArray<Symbol>.Empty;
876internal static Symbol GetOverriddenMember(this Symbol member)
891internal static Symbol GetLeastOverriddenMember(this Symbol member, NamedTypeSymbol accessingTypeOpt)
912internal static bool IsFieldOrFieldLikeEvent(this Symbol member, out FieldSymbol field)
928internal static string GetMemberCallerName(this Symbol member)
Symbols\Metadata\PE\PENamedTypeSymbol.cs (39)
55private ImmutableArray<Symbol> _lazyMembersInDeclarationOrder;
61private Dictionary<string, ImmutableArray<Symbol>> _lazyMembersByName;
425foreach (var member in @this.GetMembers(WellKnownMemberNames.ExtensionMarkerMethodName))
465foreach (var member in @this.ContainingType.GetMembers(method.Name))
548Symbol s = _container;
802public override Symbol ContainingSymbol
1094public override ImmutableArray<Symbol> GetMembers()
1148ImmutableArray<Symbol> staticFields = GetMembers();
1258ImmutableArray<Symbol> members = GetMembers();
1361internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1366internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1371private class DeclarationOrderTypeSymbolComparer : IComparer<Symbol>
1377public int Compare(Symbol x, Symbol y)
1467ArrayBuilder<Symbol> members = null;
1473members = ArrayBuilder<Symbol>.GetInstance();
1522ArrayBuilder<Symbol> nonFieldMembers = ArrayBuilder<Symbol>.GetInstance();
1598Symbol previous = null;
1608Symbol current = s;
1643members = ArrayBuilder<Symbol>.GetInstance();
1644foreach (var member in _lazyMembersInDeclarationOrder)
1654Dictionary<string, ImmutableArray<Symbol>> membersDict = GroupByName(members);
1687internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1691ImmutableArray<Symbol> m;
1694m = ImmutableArray<Symbol>.Empty;
1700public override ImmutableArray<Symbol> GetMembers(string name)
1704ImmutableArray<Symbol> m;
1707m = ImmutableArray<Symbol>.Empty;
1714m = m.Concat(StaticCast<Symbol>.From(t));
2240private PooledDictionary<MethodDefinitionHandle, PEMethodSymbol> CreateMethods(ArrayBuilder<Symbol> members)
2271private void CreateProperties(Dictionary<MethodDefinitionHandle, PEMethodSymbol> methodHandleToSymbol, ArrayBuilder<Symbol> members)
2303ArrayBuilder<Symbol> members)
2348private static Dictionary<string, ImmutableArray<Symbol>> GroupByName(ArrayBuilder<Symbol> symbols)
2705private static int GetIndexOfFirstMember(ImmutableArray<Symbol> members, SymbolKind kind)
2722private static IEnumerable<TSymbol> GetMembers<TSymbol>(ImmutableArray<Symbol> members, SymbolKind kind, int offset = -1)
2723where TSymbol : Symbol
2732var member = members[i];
Symbols\NamedTypeSymbol.cs (30)
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)
571internal ImmutableSegmentedDictionary<string, Symbol> AllRequiredMembers
579return ImmutableSegmentedDictionary<string, Symbol>.Empty;
593bool success = tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? builder);
596? builder?.ToImmutable() ?? BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty
601bool tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? requiredMembersBuilder)
609var baseAllRequiredMembers = BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
612foreach (var member in GetMembersUnordered())
664public abstract override ImmutableArray<Symbol> GetMembers();
671public abstract override ImmutableArray<Symbol> GetMembers(string name);
680internal virtual ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
707internal virtual IEnumerable<Symbol> GetInstanceFieldsAndEvents()
712protected static Func<Symbol, bool> IsInstanceFieldOrEvent = symbol =>
758internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers();
768internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name);
1456internal 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)
348public override Symbol ContainingSymbol => _container;
379public override Symbol? AssociatedSymbol => _associatedSymbol;
388public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol.UnderlyingMethod);
427public override Symbol ContainingSymbol => _container;
447public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingParameter);
480public override Symbol ContainingSymbol => _container;
496public 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 (186)
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;
290Symbol containingSymbol = this.ContainingSymbol;
546internal override void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
640ImmutableArray<Symbol> members = this.GetMembersUnordered();
646foreach (var member in members)
654foreach (var member in members)
727foreach (var member in membersAndInitializers.NonTypeMembers)
771public sealed override Symbol ContainingSymbol
903for (Symbol? container = this.ContainingType; !(container is null); container = container.ContainingType)
1056internal readonly ImmutableArray<Symbol> NonTypeMembers;
1065ImmutableArray<Symbol> nonTypeMembers,
1388private void CheckMemberNameDistinctFromType(Symbol member, BindingDiagnosticBag diagnostics)
1432internal static bool HasAsyncMethodBuilderAttribute(Symbol symbol, [NotNullWhen(true)] out TypeSymbol? builderArgument)
1454internal override ImmutableArray<Symbol> GetMembersUnordered()
1468public override ImmutableArray<Symbol> GetMembers()
1490public sealed override ImmutableArray<Symbol> GetMembers(string name)
1492ImmutableArray<Symbol> members;
1498return ImmutableArray<Symbol>.Empty;
1509internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1516return ImmutableArray<Symbol>.Empty;
1529foreach (var m in this.GetMembers())
1559internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1571internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1573ImmutableArray<Symbol> result;
1574return GetEarlyAttributeDecodingMembersDictionary().TryGetValue(name.AsMemory(), out result) ? result : ImmutableArray<Symbol>.Empty;
1577private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetEarlyAttributeDecodingMembersDictionary()
1581if (Volatile.Read(ref _lazyMembersDictionary) is Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> result)
1591Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
1614private static Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> ToNameKeyedDictionary(ImmutableArray<Symbol> symbols)
1618return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(1, ReadOnlyMemoryOfCharComparer.Instance)
1626return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(ReadOnlyMemoryOfCharComparer.Instance);
1636foreach (var item in symbols)
1639var dictionary = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(accumulator.Count, ReadOnlyMemoryOfCharComparer.Instance);
1644dictionary.Add(pair.Key, pair.Value is ArrayBuilder<Symbol> arrayBuilder
1646: ImmutableArray.Create((Symbol)pair.Value));
1690internal void AssertMemberExposure(Symbol member, bool forDiagnostics = false)
1759static bool isMemberInCompleteMemberList(MembersAndInitializers? membersAndInitializers, Symbol member)
1766protected Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByName()
1776private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByNameSlow()
1794internal override IEnumerable<Symbol> GetInstanceFieldsAndEvents()
1798IEnumerable<Symbol> result = membersAndInitializers.NonTypeMembers.Where(IsInstanceFieldOrEvent);
1945foreach (var member in GetMembersAndInitializers().NonTypeMembers)
1959foreach (var member in GetMembers("Clone"))
1969Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2018Symbol? lastSym = typesByName?.TryGetValue(name, out var types) == true ? types.FirstOrDefault() : null;
2022foreach (var symbol in pair.Value)
2227BindingDiagnosticBag diagnostics, Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName)
2240foreach (var symbol in members)
2296Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2365Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2367ImmutableArray<Symbol> membersUnordered,
2382Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName;
2383ImmutableArray<Symbol> membersUnordered;
2394static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<ExtensionGroupingKey, NamedTypeSymbol> grouping)
2396Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName = null;
2397ImmutableArray<Symbol> membersUnordered = [];
2404Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByNameToMerge = ((SourceMemberContainerTypeSymbol)extension).GetMembersByName();
2425membersByName = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(membersByName, ReadOnlyMemoryOfCharComparer.Instance);
2455static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2465var membersBuilder = ArrayBuilder<Symbol>.GetInstance(existingMembers.Length + newMembers.Length);
2466var membersUnorderedBuilder = ArrayBuilder<Symbol>.GetInstance(membersUnordered.Length + newMembers.Length);
2471foreach (var member in newMembers)
2473Symbol toAdd = member.SymbolAsMember(extension);
2541foreach (var member in this.GetMembersUnordered())
2562foreach (var dup in GetMembers(tp.Name))
2573Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2574ImmutableArray<Symbol> membersUnordered,
2579foreach (Symbol symbol in membersUnordered)
2648foreach (var member in valuesByName)
2683var symbol = field.AssociatedSymbol ?? field;
2705foreach (var member in valuesByName)
2725Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2767Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2806Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2809if (membersByName.TryGetValue(operatorName1.AsMemory(), out ImmutableArray<Symbol> candidates))
2940foreach (var member in GetMembersUnordered())
2957foreach (var member in GetMembersUnordered())
2985foreach (var m in this.GetMembersUnordered())
3029foreach (var m in t.GetMembersUnordered())
3133private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> MakeAllMembers()
3135Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
3157Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
3162ImmutableArray<Symbol> typesAsSymbols = StaticCast<Symbol>.From(types);
3164ImmutableArray<Symbol> membersForName;
3178public ArrayBuilder<Symbol> NonTypeMembersWithPartialImplementations = ArrayBuilder<Symbol>.GetInstance();
3239public readonly ImmutableArray<Symbol> NonTypeMembersWithPartialImplementations;
3248private ImmutableArray<Symbol> _lazyNonTypeMembers;
3257ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations,
3317public ImmutableArray<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container)
3330private ArrayBuilder<Symbol>? NonTypeMembers;
3439public IReadOnlyCollection<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container, DeclaredMembersAndInitializers declaredMembers)
3441return NonTypeMembers ?? (IReadOnlyCollection<Symbol>)declaredMembers.GetNonTypeMembers(container);
3444public void AddNonTypeMember(SourceMemberContainerTypeSymbol container, Symbol member, DeclaredMembersAndInitializers declaredMembers)
3449NonTypeMembers = ArrayBuilder<Symbol>.GetInstance(declaredNonTypeMembers.Length + 1);
3456public void SetNonTypeMembers(ArrayBuilder<Symbol> members)
3591private void MergePartialMembersAndInitializeNonTypeMembers(ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations, ref ImmutableArray<Symbol> nonTypeMembers)
3595foreach (Symbol member in nonTypeMembersWithPartialImplementations)
3615var nonTypeMembersBuilder = ArrayBuilder<Symbol>.GetInstance(nonTypeMembersWithPartialImplementations.Length);
3710ImmutableArray<Symbol> nonTypeMembersToCheck;
3729foreach (var member in nonTypeMembersToCheck)
3756internal ImmutableArray<Symbol> GetMembersToMatchAgainstDeclarationSpan()
3772internal ImmutableArray<Symbol> GetCandidateMembersForLookup(string name)
3780ImmutableArray<Symbol> nonTypeMembersToCheck;
3803ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3804ArrayBuilder<Symbol>? memberBuilder = null;
3806foreach (var member in nonTypeMembersToCheck)
3815memberBuilder ??= ArrayBuilder<Symbol>.GetInstance(types.Length + 1);
3869foreach (var member in type.GetMembers())
3996ArrayBuilder<Symbol> nonTypeMembers,
4000var membersBySignature = new Dictionary<Symbol, Symbol>(MemberSignatureComparer.PartialMethodsComparer);
4006if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4012if (!membersBySignature.TryGetValue(symbol, out var prev))
4052var symbol = (Symbol)pair.Value;
4057foreach (var symbol in membersBySignature.Values)
4115if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4124fixupNotMergedPartialProperty((Symbol)pair.Value);
4128static void fixupNotMergedPartialProperty(Symbol symbol)
4137static void mergePartialMethods(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol currentMethod, SourceOrdinaryMethodSymbol prevMethod, BindingDiagnosticBag diagnostics)
4157static void mergePartialProperties(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol currentProperty, SourcePropertySymbol prevProperty, BindingDiagnosticBag diagnostics)
4181void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertyAccessorSymbol? currentAccessor, SourcePropertyAccessorSymbol? prevAccessor)
4206static void mergePartialConstructors(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol currentConstructor, SourceConstructorSymbol prevConstructor, BindingDiagnosticBag diagnostics)
4226static void mergePartialEvents(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol currentEvent, SourceEventSymbol prevEvent, BindingDiagnosticBag diagnostics)
4247static void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourceEventAccessorSymbol? currentAccessor, SourceEventAccessorSymbol? prevAccessor)
4262private static void FixPartialMethod(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol part1, SourceOrdinaryMethodSymbol part2)
4284private static void FixPartialProperty(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol part1, SourcePropertySymbol part2)
4312private static void FixPartialConstructor(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol part1, SourceConstructorSymbol part2)
4334private static void FixPartialEvent(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol part1, SourceEventSymbol part2)
4355private static void Remove(ArrayBuilder<Symbol> symbols, Symbol symbol)
4359Symbol s = symbols[i];
4377Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4398foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4428Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4437foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4465var locationFrom = (Symbol)(getNotSet ? propertySymbol.GetMethod : propertySymbol.SetMethod) ?? propertySymbol;
4474var locationFrom = (Symbol?)(isAdder ? propertySymbol.AddMethod : propertySymbol.RemoveMethod) ?? propertySymbol;
4585private static void CheckInterfaceMembers(ImmutableArray<Symbol> nonTypeMembers, BindingDiagnosticBag diagnostics)
4587foreach (var member in nonTypeMembers)
4593private static void CheckInterfaceMember(Symbol member, BindingDiagnosticBag diagnostics)
4640private static void CheckExtensionMembers(ImmutableArray<Symbol> members, BindingDiagnosticBag diagnostics)
4642foreach (var member in members)
4649static void checkExtensionMember(Symbol member, BindingDiagnosticBag diagnostics)
4658internal static bool IsAllowedExtensionMember(Symbol member)
4704ArrayBuilder<Symbol> members,
4750var symbol = initializer.FieldOpt.AssociatedSymbol ?? initializer.FieldOpt;
4778var members = ArrayBuilder<Symbol>.GetInstance(membersSoFar.Count + 1);
4798var fieldsByName = PooledDictionary<string, Symbol>.GetInstance();
4800foreach (var member in membersSoFar)
4896void addDeconstruct(SynthesizedPrimaryConstructor ctor, ImmutableArray<Symbol> positionalMembers)
4919if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingDeconstructMethod))
4967if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingConstructor))
4998MethodSymbol addPrintMembersMethod(IEnumerable<Symbol> userDefinedMembers)
5020if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingPrintMembersMethod))
5091if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingToStringMethod))
5114var objectToString = this.DeclaringCompilation.GetSpecialTypeMember(SpecialMember.System_Object__ToString);
5118foreach (var member in currentBaseType.GetSimpleNonTypeMembers(WellKnownMemberNames.ObjectToString))
5134ImmutableArray<Symbol> addProperties(ImmutableArray<ParameterSymbol> recordParameters)
5136var existingOrAddedMembers = ArrayBuilder<Symbol>.GetInstance(recordParameters.Length);
5216bool checkMemberNotHidden(Symbol symbol, ParameterSymbol param)
5250if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingHashCodeMethod))
5280if (!memberSignatures.TryGetValue(targetProperty, out Symbol? existingEqualityContractProperty))
5349if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingEqualsMethod))
5374void reportStaticOrNotOverridableAPIInRecord(Symbol symbol, BindingDiagnosticBag diagnostics)
5415foreach (var member in membersSoFar)
5875private void AddAccessorIfAvailable(ArrayBuilder<Symbol> symbols, MethodSymbol? accessorOpt)
5916foreach (var member in GetMembersUnordered())
6030foreach (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 (31)
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);
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)
1714internal static bool IsCaptured(Symbol variable, SourceMethodSymbol containingSymbol)
1765for (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)
2153internal static Location GetImplicitImplementationDiagnosticLocation(Symbol interfaceMember, TypeSymbol implementingType, Symbol member)
2183Symbol interfaceMember,
2186out Symbol implicitImpl,
2187out Symbol closeMismatch)
2199foreach (Symbol member in currType.GetMembers(interfaceMember.Name))
2256private static bool IsInterfaceMemberImplementation(Symbol candidateMember, Symbol interfaceMember, bool implementingTypeIsFromSomeCompilation)
2285protected MultiDictionary<Symbol, Symbol>.ValueSet GetExplicitImplementationForInterfaceMember(Symbol interfaceMember)
2301private MultiDictionary<Symbol, Symbol> MakeExplicitInterfaceImplementationMap()
2303var map = new MultiDictionary<Symbol, Symbol>(ExplicitInterfaceImplementationTargetMemberEqualityComparer.Instance);
2304foreach (var member in this.GetMembersUnordered())
2306foreach (var interfaceMember in member.GetExplicitInterfaceImplementations())
2372protected class ExplicitInterfaceImplementationTargetMemberEqualityComparer : IEqualityComparer<Symbol>
2377public bool Equals(Symbol x, Symbol y)
2383public int GetHashCode(Symbol obj)
2396internal ImmutableHashSet<Symbol> AbstractMembers
2408private ImmutableHashSet<Symbol> ComputeAbstractMembers()
2410var abstractMembers = ImmutableHashSet.Create<Symbol>();
2411var overriddenMembers = ImmutableHashSet.Create<Symbol>();
2413foreach (var member in this.GetMembersUnordered())
2420Symbol overriddenMember = null;
2448foreach (var baseAbstractMember in this.BaseTypeNoUseSiteDiagnostics.AbstractMembers)
2489public static bool operator ==(Symbol left, TypeSymbol right)
2493public static bool operator !=(Symbol left, TypeSymbol right)
2497public static bool operator ==(TypeSymbol left, Symbol right)
2501public static bool operator !=(TypeSymbol left, Symbol right)
Symbols\TypeSymbolExtensions.cs (11)
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)
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,