Binder\Binder.cs (19)
271internal virtual Symbol? ContainingMemberOrLambda
463var member = this.ContainingMemberOrLambda;
481var containingMember = this.ContainingMemberOrLambda;
631internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNode node, bool hasBaseReceiver)
641internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
655internal void ReportDiagnosticsIfObsolete(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
673Symbol symbol,
676Symbol? containingMember,
700Symbol leastOverriddenSymbol = symbol.GetLeastOverriddenMember(containingType);
739Symbol symbol,
742Symbol? containingMember,
752internal static ObsoleteDiagnosticKind ReportDiagnosticsIfObsoleteInternal(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol? containingMember, BinderFlags location)
783internal static void ReportDiagnosticsIfObsoleteInternal(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol containingMember, BinderFlags location)
832Symbol symbol,
840Symbol symbol,
849Symbol symbol,
977var currentContainer = scope.ContainingMemberOrLambda;
Binder\Binder.ValueChecks.cs (24)
31internal Symbol Symbol { get; }
48private MethodInfo(Symbol symbol, MethodSymbol? method)
72Symbol symbol = ReferenceEquals(Symbol, Method) && method is not null ? method : Symbol;
856Symbol otherSymbol = null;
892(object)otherSymbol == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(otherSymbol),
1716Symbol containing = this.ContainingMemberOrLambda;
1934private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol)
2038var containing = this.ContainingMemberOrLambda;
2195var containingMember = ContainingMemberOrLambda;
2211private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics,
2212Symbol propertyOrEventSymbolOpt = null)
2416Symbol? symbol = methodInvocationInfo.MethodInfo.Symbol;
2495BindingDiagnosticBag diagnostics, bool isRefEscape, Symbol symbolForReporting)
2509var symbol = methodInvocationInfo.MethodInfo.Symbol;
2574Symbol symbolForReporting)
2845static bool hasRefLikeReturn(Symbol symbol)
3115Symbol symbol,
3127var symbol = argument switch
3157Symbol symbolForReporting,
3167bool checkInvocationArgMixingWithOldRules(SyntaxNode syntax, ref readonly MethodInvocationInfo methodInvocationInfo, BindingDiagnosticBag diagnostics, Symbol symbolForReporting)
3174var symbol = methodInvocationInfo.MethodInfo.Symbol;
3252Symbol symbolForReporting)
3395public override Symbol ContainingSymbol
3632private 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)
530Symbol namedArgumentNameSymbol = BindNamedAttributeArgumentName(namedArgument, attributeType, diagnostics, out wasError, out resultKind);
600private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
609Symbol resultSymbol = this.ResultSymbol(result, name, 0, identifierName, diagnostics, false, out wasError, qualifierOpt: null);
615private TypeSymbol BindNamedAttributeArgumentType(AttributeArgumentSyntax namedArgument, Symbol namedArgumentNameSymbol, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
Binder\Binder_Crefs.cs (80)
19internal ImmutableArray<Symbol> BindCref(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
21ImmutableArray<Symbol> symbols = BindCrefInternal(syntax, out ambiguityWinner, diagnostics);
27private ImmutableArray<Symbol> BindCrefInternal(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
46private ImmutableArray<Symbol> BindTypeCref(TypeCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
62return ImmutableArray.Create<Symbol>(result);
65private ImmutableArray<Symbol> BindQualifiedCref(QualifiedCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
101private ImmutableArray<Symbol> BindMemberCref(MemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
112return ImmutableArray<Symbol>.Empty;
115ImmutableArray<Symbol> result;
147private ImmutableArray<Symbol> BindNameMemberCref(NameMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
177return ImmutableArray<Symbol>.Empty;
180ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText, arity, syntax.Parameters != null, diagnostics);
185return ImmutableArray<Symbol>.Empty;
198private ImmutableArray<Symbol> BindIndexerMemberCref(IndexerMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
202ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, WellKnownMemberNames.Indexer, memberNameText: WellKnownMemberNames.Indexer, arity, syntax.Parameters != null, diagnostics);
207return ImmutableArray<Symbol>.Empty;
224private ImmutableArray<Symbol> BindExtensionMemberCref(ExtensionMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
255return ImmutableArray<Symbol>.Empty;
260ImmutableArray<Symbol> sortedSymbols = computeSortedAndFilteredCrefExtensionMembers(containerOpt, memberName, extensionArity, arity, extensionTypeArguments, diagnostics, syntax);
272ImmutableArray<Symbol> computeSortedAndFilteredCrefExtensionMembers(NamespaceOrTypeSymbol? containerOpt, string name, int extensionArity, int arity, TypeArgumentListSyntax? extensionTypeArguments, BindingDiagnosticBag diagnostics, ExtensionMemberCrefSyntax syntax)
297ArrayBuilder<Symbol>? sortedSymbolsBuilder = null;
333foreach (var candidate in candidates)
351sortedSymbolsBuilder ??= ArrayBuilder<Symbol>.GetInstance();
361return ImmutableArray<Symbol>.Empty;
394private ImmutableArray<Symbol> BindOperatorMemberCref(OperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
403return ImmutableArray<Symbol>.Empty;
406ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
411return ImmutableArray<Symbol>.Empty;
469private ImmutableArray<Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
482return ImmutableArray<Symbol>.Empty;
496ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
501return ImmutableArray<Symbol>.Empty;
513return ImmutableArray<Symbol>.Empty;
534private ImmutableArray<Symbol> ComputeSortedCrefMembers(CSharpSyntaxNode syntax, NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, BindingDiagnosticBag diagnostics)
542private ImmutableArray<Symbol> ComputeSortedCrefMembers(NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, CSharpSyntaxNode syntax,
547ArrayBuilder<Symbol> builder;
565builder = ArrayBuilder<Symbol>.GetInstance();
577builder = ArrayBuilder<Symbol>.GetInstance();
652return ImmutableArray<Symbol>.Empty;
655builder = ArrayBuilder<Symbol>.GetInstance(numInstanceConstructors);
660return ImmutableArray<Symbol>.Empty;
681private ImmutableArray<Symbol> ProcessCrefMemberLookupResults(
682ImmutableArray<Symbol> symbols,
687out Symbol? ambiguityWinner,
697ArrayBuilder<Symbol> candidates = ArrayBuilder<Symbol>.GetInstance();
701ImmutableArray<Symbol> results = PerformCrefOverloadResolution(candidates, parameterSymbols, arity, memberSyntax, out ambiguityWinner, diagnostics);
832private ImmutableArray<Symbol> ProcessParameterlessCrefMemberLookupResults(
833ImmutableArray<Symbol> symbols,
837out Symbol? ambiguityWinner,
847foreach (Symbol s in symbols)
878Symbol symbol = symbols[0];
885ArrayBuilder<Symbol> unwrappedSymbols = ArrayBuilder<Symbol>.GetInstance(symbols.Length);
887foreach (Symbol wrapped in symbols)
932return ImmutableArray.Create<Symbol>(ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, symbol));
939private void GetCrefOverloadResolutionCandidates(ImmutableArray<Symbol> symbols, int arity, TypeArgumentListSyntax? typeArgumentListSyntax, ArrayBuilder<Symbol> candidates)
941foreach (Symbol candidate in symbols)
943Symbol constructedCandidate = ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, candidate);
965private static ImmutableArray<Symbol> PerformCrefOverloadResolution(ArrayBuilder<Symbol> candidates, ImmutableArray<ParameterSymbol> parameterSymbols, int arity, MemberCrefSyntax memberSyntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
967ArrayBuilder<Symbol>? viable = null;
969foreach (Symbol candidate in candidates)
977Symbol signatureMember;
1041viable = ArrayBuilder<Symbol>.GetInstance();
1068return ImmutableArray<Symbol>.Empty;
1088private Symbol ConstructWithCrefTypeParameters(int arity, TypeArgumentListSyntax? typeArgumentListSyntax, Symbol symbol)
Binder\Binder_Expressions.cs (99)
44var memberOpt = this.ContainingMemberOrLambda?.ContainingNonLambdaMember();
120return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty);
128return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNode);
136return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNodes);
144return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty);
152return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty, childNode);
158private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols)
171private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode)
196private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false)
238ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
351if (op.NoCommonTypeError == ErrorCode.ERR_InvalidQM && trueArg is Symbol trueSymbol && falseArg is Symbol falseSymbol)
896node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(BindToTypeForErrorRecovery(BindValue(node.Expression, BindingDiagnosticBag.Discarded, BindValueKind.RefersToLocation))),
1083argumentSyntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty,
1367Symbol container = this.ContainingMemberOrLambda;
1564internal void ReportFieldContextualKeywordConflictIfAny(Symbol? symbol, SyntaxNode syntax, SyntaxToken identifier, BindingDiagnosticBag diagnostics)
1703var members = ArrayBuilder<Symbol>.GetInstance();
1704Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, node, name, node.Arity, members, diagnostics, out isError, qualifierOpt: null); // reports diagnostics in result.
1835private ParameterSymbol GetShadowedPrimaryConstructorParameter(SimpleNameSyntax node, Symbol symbol, bool invoked, ArrayBuilder<Symbol> membersOpt)
1879var singleSymbol = lookupResult.IsSingleViable ? lookupResult.Symbols[0] : null;
1948private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members)
2041private bool IsBadLocalOrParameterCapture(Symbol symbol, TypeSymbol type, RefKind refKind)
2058private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError)
2352private bool ReportSimpleProgramLocalReferencedOutsideOfTopLevelStatement(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics)
2369private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics)
2405var containingMember = ContainingMember();
2440internal Symbol ContainingMember()
2470var containingMember = this.ContainingMemberOrLambda;
2549var symbol = this.BindNamespaceAliasSymbol(node, diagnostics);
2553private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol)
3371internal static void CheckRestrictedTypeInAsyncMethod(Symbol containingSymbol, TypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
3388foreach (Symbol member in ContainingType?.GetMembers(identifier) ?? ImmutableArray<Symbol>.Empty)
3509where TMember : Symbol
4597ImmutableArray<Symbol>.Empty,
4636ImmutableArray<Symbol>.Empty,
4980symbols: ImmutableArray<Symbol>.Empty,
4991symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
5034symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
5356return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType());
5648return new BoundBadExpression(node, LookupResultKind.NotInvocable, StaticCast<Symbol>.From(type.InstanceConstructors), ImmutableArray.Create(argument), type);
5695return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, StaticCast<Symbol>.From(type.InstanceConstructors), childNodes, type);
5792return new BoundBadExpression(node, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(type), children.ToImmutableAndFree(), type) { WasCompilerGenerated = wasCompilerGenerated };
6298private static ImmutableSegmentedDictionary<string, Symbol> GetMembersRequiringInitialization(MethodSymbol constructor)
6303return ImmutableSegmentedDictionary<string, Symbol>.Empty;
6315ImmutableSegmentedDictionary<string, Symbol> requiredMembers = GetMembersRequiringInitialization(constructor);
6337var memberSymbol = assignmentOperator.Left switch
6353if (!requiredMembersBuilder.TryGetValue(memberSymbol.Name, out var requiredMember))
6375private static void ReportMembersRequiringInitialization(SyntaxNode creationSyntax, ImmutableSegmentedDictionary<string, Symbol>.Builder requiredMembersBuilder, BindingDiagnosticBag diagnostics)
6604return BadExpression(elementInitializer, LookupResultKind.NotInvocable, ImmutableArray<Symbol>.Empty, boundElementInitializerExpressions);
7063ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
7243return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol>.Empty, children, interfaceType);
7736Symbol leftSymbol = lookupResult.IsSingleViable ? lookupResult.Symbols[0] : null;
8074ArrayBuilder<Symbol> symbols = lookupResult.Symbols;
8079Symbol sym = ResultSymbol(lookupResult, rightName, rightArity, node, diagnostics, false, out wasError, ns, options);
8269if (resolution.IsNonMethodExtensionMember(out Symbol? extensionMember))
8286private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics)
8360var members = ArrayBuilder<Symbol>.GetInstance();
8458ReportQueryLookupFailed(node, boundLeft, plainName, ImmutableArray<Symbol>.Empty, diagnostics);
8524return this.BindMemberAccessBadResult(syntax, node.Name, node.ReceiverOpt, node.LookupError, StaticCast<Symbol>.From(node.Methods), node.ResultKind);
8535ImmutableArray<Symbol> symbols,
8541foreach (var s in symbols)
8567var symbolOpt = symbols.Length == 1 ? symbols[0] : null;
8571(object)symbolOpt == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(symbolOpt),
8576private TypeSymbol GetNonMethodMemberType(Symbol symbolOpt)
8656var members = ArrayBuilder<Symbol>.GetInstance();
8659Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, right, plainName, arity, members, diagnostics, out wasError,
8973foreach (var member in lookupResult.Symbols)
9005ImmutableArray<Symbol> symbols = lookupResult.Symbols.ToImmutable();
9016errorInfo = OverloadResolutionResult<Symbol>.CreateAmbiguousCallDiagnosticInfo(binder.Compilation, representativeMethod, representativeProperty, symbols, isExtension: true);
9047where TSymbol : Symbol
9262foreach (var member in lookupResult.Symbols)
9427var candidates = ArrayBuilder<Symbol>.GetInstance();
9438foreach (Symbol candidate in candidates)
9583var candidates = ArrayBuilder<Symbol>.GetInstance();
9679var candidates = ArrayBuilder<Symbol>.GetInstance();
9721static void filterIntIndexerCandidates(ArrayBuilder<Symbol> candidates, ref ArrayBuilder<PropertySymbol>? filteredCandidates,
9724foreach (var candidate in candidates)
9737static void filterSliceCandidates(ArrayBuilder<Symbol> candidates, ref ArrayBuilder<MethodSymbol>? filteredCandidates,
9740foreach (var candidate in candidates)
10007private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics)
10059static bool isNotImplementableInstanceMember(Symbol symbol)
10120Symbol symbol,
10173private Symbol GetSymbolOrMethodOrPropertyGroup(LookupResult result, SyntaxNode node, string plainName, int arity, ArrayBuilder<Symbol> methodOrPropertyGroup, BindingDiagnosticBag diagnostics, out bool wasError, NamespaceOrTypeSymbol qualifierOpt)
10183Symbol other = null; // different member type from 'methodOrPropertyGroup'
10188foreach (var symbol in result.Symbols)
10255private static bool IsMethodOrPropertyGroup(ArrayBuilder<Symbol> members)
10259var member = members[0];
10601return new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes, CreateErrorType(), hasErrors: true);
10932foreach (Symbol symbol in lookupResult.Symbols)
11881var extensionMember = singleLookupResult.Symbol;
11985private static bool IsStaticInstanceMismatchForUniqueSignatureFromMethodGroup(BoundExpression receiver, Symbol extensionMember)
12095var extensionMember = singleLookupResult.Symbol;
12331return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnostics, getErrorLocation());
12441internal static bool MethodOrLambdaRequiresValue(Symbol symbol, CSharpCompilation compilation)
Binder\Binder_Lookup.cs (61)
220var extensionCandidates = ArrayBuilder<Symbol>.GetInstance();
223foreach (var candidate in extensionCandidates)
251var extensionCandidates = ArrayBuilder<Symbol>.GetInstance();
254foreach (var candidate in extensionCandidates)
403Symbol existingDefinition = submissionSymbols.Symbols.First();
437Symbol firstSymbol = submissionSymbols.Symbols.First();
548foreach (Symbol member in members)
601Symbol symbolWithoutSuffix;
607Symbol symbolWithSuffix = null;
667private bool IsAmbiguousResult(LookupResult result, out Symbol resultSymbol)
693private Symbol ResolveMultipleSymbolsInAttributeTypeLookup(ArrayBuilder<Symbol> symbols)
712var srcSymbol = symbols[best.Index];
713var mdSymbol = symbols[secondBest.Index];
725private static bool NameAndArityMatchRecursively(Symbol x, Symbol y)
745static bool isRoot(Symbol symbol) => symbol is null || symbol is NamespaceSymbol { IsGlobalNamespace: true };
748private bool IsSingleViableAttributeType(LookupResult result, out Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
764private SingleLookupResult GenerateNonViableAttributeTypeResult(Symbol symbol, DiagnosticInfo diagInfo, bool diagnose)
774private bool CheckAttributeTypeViability(Symbol symbol, bool diagnose, ref DiagnosticInfo diagInfo, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
854ArrayBuilder<Symbol> members,
870foreach (Symbol member in members)
940var other = GetNearestOtherSymbol(basesBeingResolved, type);
995var allMembers = new HashSet<Symbol>(comparer);
996var conflictingMembers = new HashSet<Symbol>(comparer);
1001foreach (var sym in result.Symbols)
1026foreach (var sym in tmp.Symbols)
1040foreach (var sym in result.Symbols)
1049foreach (var sym in allMembers)
1090private static Symbol GetNearestOtherSymbol(ConsList<TypeSymbol> list, TypeSymbol type)
1339var sym = hiddenSymbols[i];
1345var hidingSym = hidingSymbols[j];
1390private static bool IsMethodOrIndexer(Symbol symbol)
1395internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, string name, LookupOptions options, Binder originalBinder)
1399return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1407return ImmutableArray<Symbol>.Empty;
1419internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, LookupOptions options, Binder originalBinder)
1423return StaticCast<Symbol>.From(nsOrType.GetTypeMembersUnordered());
1431return ImmutableArray<Symbol>.Empty;
1439private bool IsInScopeOfAssociatedSyntaxTree(Symbol symbol)
1487internal SingleLookupResult CheckViability(Symbol symbol, int arity, LookupOptions options, TypeSymbol accessThroughType, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1496var unwrappedSymbol = symbol.Kind == SymbolKind.Alias
1547var unwrappedSymbols = ImmutableArray.Create<Symbol>(unwrappedSymbol);
1572diagInfo = new CSDiagnosticInfo(ErrorCode.ERR_BadAccess, new[] { unwrappedSymbol }, ImmutableArray.Create<Symbol>(unwrappedSymbol), additionalLocations: ImmutableArray<Location>.Empty);
1646private CSDiagnosticInfo MakeCallMethodsDirectlyDiagnostic(Symbol symbol)
1683/// Does not consider <see cref="Symbol.CanBeReferencedByName"/> - that is left to the caller.
1685internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, LookupSymbolsInfo info, TypeSymbol accessThroughType, AliasSymbol aliasSymbol = null)
1751private bool IsCrefAccessible(Symbol symbol)
1756private static bool IsEffectivelyPrivate(Symbol symbol)
1758for (Symbol s = symbol; (object)s != null; s = s.ContainingSymbol)
1773internal bool IsAccessible(Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, TypeSymbol accessThroughType = null, ConsList<TypeSymbol> basesBeingResolved = null)
1779internal bool IsAccessible(Symbol symbol, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1792internal bool IsAccessible(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1804/// Should only be called by <see cref="IsAccessible(Symbol, TypeSymbol, out bool, ref CompoundUseSiteInfo{AssemblySymbol}, ConsList{TypeSymbol})"/>,
1807internal virtual bool IsAccessibleHelper(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved)
1813internal bool IsNonInvocableMember(Symbol symbol)
1829internal static bool IsInvocableMember(Symbol symbol, ConsList<FieldSymbol> fieldsBeingBound)
1854private static bool IsInstance(Symbol symbol)
1871internal static bool WrongArity(Symbol symbol, int arity, bool diagnose, LookupOptions options, out DiagnosticInfo diagInfo)
2057foreach (var symbol in candidateMembers)
2069foreach (var symbol in candidateMembers)
Binder\Binder_Patterns.cs (17)
61static bool isSuitableProperty(Symbol m, [NotNullWhen(true)] out PropertySymbol? valueProperty)
86private delegate bool IsSuitableUnionProperty(Symbol m, [NotNullWhen(true)] out PropertySymbol? member);
171foreach (var m in declaringType.GetMembers(memberName))
190internal static bool IsUnionTypeValueProperty(NamedTypeSymbol unionType, Symbol symbol)
192return Symbol.Equals(Binder.GetUnionTypeValuePropertyNoUseSiteDiagnostics(unionType), symbol, TypeCompareKind.AllIgnoreOptions);
211static bool isSuitableProperty(Symbol m, [NotNullWhen(true)] out PropertySymbol? hasValueProperty)
321foreach (var m in possiblyConstructedOrSubstitutedType.GetMembers(WellKnownMemberNames.TryGetValueMethodName))
531return Symbol.Equals(Binder.GetUnionTypeHasValueProperty(unionType), property, TypeCompareKind.AllIgnoreOptions);
887out Symbol? variableSymbol, out BoundExpression? variableAccess);
1554hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
1582out Symbol? variableSymbol,
1758ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess);
2031foreach (var symbol in tupleType.GetMembers(name))
2065Symbol foundSymbol = BindTypeOrAliasOrKeyword(node.VarKeyword, node, diagnostics, out bool isVar).Symbol;
2098variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
2305Symbol? symbol = null;
2350private Symbol? BindPropertyPatternMember(
Binder\Binder_Query.cs (6)
302state.selectOrGroup, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty,
741yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), CreateErrorType());
747yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), yExpression.Type);
808field2Value = new BoundBadExpression(field2Value.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(field2Value), field2Value.Type, true);
964receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.NotAValue, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(receiver), CreateErrorType());
986receiver = 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 (58)
198Symbol symbol = null;
354private NamespaceOrTypeSymbol GetContainingNamespaceOrNonExtensionType(Symbol symbol)
365internal Symbol BindNamespaceAliasSymbol(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
380Symbol bindingResult = ResultSymbol(result, plainName, 0, node, diagnostics, false, out wasError, qualifierOpt: null, options: LookupOptions.NamespaceAliasesOnly);
591var bindingResult = BindNamespaceAliasSymbol(node.Alias, diagnostics);
890Symbol bindingResult = null;
968foreach (var s in result.Symbols)
989foreach (var s in result.Symbols)
1063Symbol.ReportUseSiteDiagnostic(info, diagnostics, node.Location);
1096private static Symbol UnwrapAliasNoDiagnostics(Symbol symbol, ConsList<TypeSymbol> basesBeingResolved = null)
1128private Symbol UnwrapAlias(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1134private Symbol UnwrapAlias(Symbol symbol, out AliasSymbol alias, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1293Symbol lookupResultSymbol = ResultSymbol(lookupResult, plainName, arity, node, diagnostics, (basesBeingResolved != null), out wasError, qualifierOpt, options);
1322ImmutableArray.Create<Symbol>(lookupResultSymbol),
1444ArrayBuilder<Symbol> members,
1488ImmutableArray<TypeWithAnnotations> typeArguments, bool invoked, ArrayBuilder<Symbol> members, BindingDiagnosticBag diagnostics)
1522receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Ambiguous, ImmutableArray<Symbol>.Empty, ImmutableArray.Create(receiver), receiver.Type, hasErrors: true).MakeCompilerGenerated();
1532receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes: [AdjustBadExpressionChild(receiver)], receiver.Type, hasErrors: true).MakeCompilerGenerated();
1539Symbol colorColorValueSymbol = GetValueSymbolIfTypeOrValueReceiver(receiver);
1557ArrayBuilder<Symbol> members, TypeSymbol receiverType,
1590foreach (Symbol symbol in lookupResult.Symbols)
1628private static readonly Func<Symbol, MethodSymbol> s_toMethodSymbolFunc = s => (MethodSymbol)s;
1629private static readonly Func<Symbol, PropertySymbol> s_toPropertySymbolFunc = s => (PropertySymbol)s;
1738internal Symbol GetSpecialTypeMember(SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1743internal static Symbol GetSpecialTypeMember(CSharpCompilation compilation, SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1745Symbol memberSymbol;
1752where TSymbol : Symbol
1792private static UseSiteInfo<AssemblySymbol> GetUseSiteInfoForWellKnownMemberOrContainingType(Symbol symbol)
1807internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode node)
1812internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxToken token)
1823internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, Location location)
1894internal Symbol GetWellKnownTypeMember(WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1903internal static Symbol GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1908Symbol memberSymbol = GetWellKnownTypeMember(compilation, member, out useSiteInfo, isOptional);
1918internal static Symbol? GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, out UseSiteInfo<AssemblySymbol> useSiteInfo, bool isOptional = false)
1920Symbol? memberSymbol = compilation.GetWellKnownTypeMember(member);
1962private class ConsistentSymbolOrder : IComparer<Symbol>
1965public int Compare(Symbol fst, Symbol snd)
1987internal Symbol ResultSymbol(
1998Symbol symbol = resultSymbol(result, simpleName, arity, where, diagnostics, suppressUseSiteDiagnostics, out wasError, qualifierOpt, options);
2016Symbol resultSymbol(
2055var srcSymbol = symbols[best.Index];
2056var mdSymbol = symbols[secondBest.Index];
2114var first = symbols[best.Index];
2115var second = symbols[secondBest.Index];
2117Debug.Assert(!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything) || options.IsAttributeTypeLookup(),
2120Debug.Assert(!Symbol.Equals(first, second, TypeCompareKind.ConsiderEverything) || !Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2276!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2331var singleResult = symbols[0];
2439private static AssemblySymbol GetContainingAssembly(Symbol symbol)
2559private BestSymbolInfo GetBestSymbolInfo(ArrayBuilder<Symbol> symbols, out BestSymbolInfo secondBest)
2567var symbol = symbols[i];
2605private static BestSymbolLocation GetLocation(CSharpCompilation compilation, Symbol symbol)
Binder\Binder_Unsafe.cs (9)
27internal void ReportDiagnosticsIfUnsafeMemberAccess(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node)
35internal void ReportDiagnosticsIfUnsafeMemberAccess(DiagnosticBag diagnostics, Symbol symbol, Location? location)
40private void ReportDiagnosticsIfUnsafeMemberAccess<T>(DiagnosticBag diagnostics, Symbol symbol, T arg, Func<T, Location?> location)
92static void checkTypeArgumentWithConstructorConstraint(Binder @this, TypeParameterSymbol typeParameter, NamedTypeSymbol typeArgument, Symbol targetSymbol, T arg, Func<T, Location?> location, DiagnosticBag diagnostics)
106private void ReportDiagnosticsIfUnsafeMemberAccess<T>(DiagnosticBag diagnostics, Symbol symbol, CallerUnsafeMode callerUnsafeMode, T arg, Func<T, Location?> location, bool forConstructorConstraint, ReadOnlySpan<object> additionalArgs = default)
125/// If this fails, call <see cref="ReportDiagnosticsIfUnsafeMemberAccess(BindingDiagnosticBag, Symbol, SyntaxNodeOrToken)"/> for the <paramref name="symbol"/> instead and add corresponding tests.
128internal void AssertNotUnsafeMemberAccess(Symbol symbol)
133/// <inheritdoc cref="AssertNotUnsafeMemberAccess(Symbol)"/>
135internal static void AssertNotUnsafeMemberAccess(Symbol symbol, bool shouldCheckConstraints = true)
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
233private static bool ReportConflictWithParameter(Symbol parameter, Symbol newSymbol, string name, Location newLocation, BindingDiagnosticBag diagnostics)
321internal override bool EnsureSingleDefinition(Symbol symbol, string name, Location location, BindingDiagnosticBag diagnostics)
345map = new SmallDictionary<string, Symbol>();
352Symbol existingDeclaration;
Binder\LookupResult.cs (19)
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)
317static bool isNonGenericVersusGeneric(Symbol firstSymbol, Symbol secondSymbol)
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;
584BoundExpression receiverOpt) where TMember : Symbol
610private static void RemoveStaticInstanceMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, bool requireStatic) where TMember : Symbol
628private static void RemoveMethodsNotDeclaredStatic<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
644private void RemoveConstraintViolations<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
665private void RemoveCallingConventionMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, in CallingConventionInfo expectedConvention) where TMember : Symbol
688var member = (MethodSymbol)(Symbol)result.Member;
794private bool FailsConstraintChecks<TMember>(TMember member, out ArrayBuilder<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
854bool isFunctionPointerConversion) where TMember : Symbol
870var method = (MethodSymbol)(Symbol)result.Member;
902private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
920private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
1069where TMember : Symbol
1237where TMember : Symbol
1304public static bool IsValidParams(Binder binder, Symbol member, bool disallowExpandedNonArrayParams, out TypeWithAnnotations definitionElementType)
1389Symbol member,
1390Symbol moreDerivedOverride,
1422where TMember : Symbol
1446where TMember : Symbol
1466private static bool HidesByName(Symbol member)
1480where TMember : Symbol
1506where TMember : Symbol
1629where TMember : Symbol
1672where TMember : Symbol
1790where TMember : Symbol
1799where TMember : Symbol
1860where TMember : Symbol
1951where TMember : Symbol
2102where TMember : Symbol
2142where TMember : Symbol
2685private static RefKind GetParameterBetternessRefKind<TMember>(ParameterSymbol parameter, TMember member) where TMember : Symbol
2700where TMember : Symbol
2720private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
3853Symbol member,
3898out bool hasAnyRefOmittedArgument) where TMember : Symbol
4046Options options) where TMember : Symbol
4059out bool hasAnyRefOmittedArgument) where TMember : Symbol
4117where TMember : Symbol
4198where TMember : Symbol
4266where TMember : Symbol
4365var methodForTypeParameters = isExtensionBlockMember ? leastOverriddenMember.OriginalDefinition : leastOverriddenMember;
4423where TMember : Symbol
4472(MethodSymbol)(Symbol)member,
4492Symbol candidate, // method or property
4697Symbol candidate, // method or property
4773private static bool TypeContainsTypeParameterFromContainer(Symbol container, TypeSymbol parameterType)
4783private static TMember GetConstructedFrom<TMember>(TMember member) where TMember : Symbol
4790return (TMember)(Symbol)(member as MethodSymbol).ConstructedFrom;
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (25)
26internal class OverloadResolutionResult<TMember> where TMember : Symbol
222bool isExtension = false) where T : Symbol
233var symbols = StaticCast<Symbol>.From(memberGroup);
603private static void ReportUnsupportedMetadata(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstUnsupported)
615Symbol.ReportUseSiteDiagnostic(diagInfo, diagnostics, location);
618private static void ReportWrongCallingConvention(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstSupported, MethodSymbol target)
645ImmutableArray<Symbol> symbols,
664ImmutableArray<Symbol> symbols,
679Symbol symbol = staticInstanceMismatch.Member;
733var method = (MethodSymbol)(Symbol)mismatch.Member;
763ImmutableArray<Symbol> symbols,
828ImmutableArray<Symbol> symbols)
848ImmutableArray<Symbol> symbols)
881ImmutableArray<Symbol> symbols)
916ImmutableArray<Symbol> symbols,
961ImmutableArray<Symbol> symbols,
1084MethodSymbol method = (MethodSymbol)(Symbol)result.Member;
1124ImmutableArray<Symbol> symbols,
1193ImmutableArray<Symbol> symbols,
1418static Symbol unwrapIfParamsCollection(MemberResolutionResult<TMember> badArg, ParameterSymbol parameter, bool isLastParameter)
1430private bool HadAmbiguousWorseMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isQuery, BoundExpression receiver, string name, bool isExtension)
1496private bool HadAmbiguousBestMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isExtension)
1552internal static DiagnosticInfoWithSymbols CreateAmbiguousCallDiagnosticInfo(CSharpCompilation compilation, Symbol first, Symbol second, ImmutableArray<Symbol> symbols, bool isExtension)
CommandLine\CSharpCompiler.cs (6)
247Symbol? entryPoint = comp.ScriptClass;
386var symbol = diag switch
388{ Code: (int)ErrorCode.ERR_BadAccess, Arguments: [Symbol s] } => s,
389{ Code: (int)ErrorCode.ERR_InaccessibleGetter, Arguments: [Symbol s] } => s,
390{ Code: (int)ErrorCode.ERR_InaccessibleSetter, Arguments: [Symbol s] } => s,
391{ Code: (int)ErrorCode.ERR_ImplicitImplementationOfInaccessibleInterfaceMember, Arguments: [_, Symbol s, _] } => s,
Compilation\AttributeSemanticModel.cs (11)
19private readonly Symbol? _attributeTarget;
24Symbol? attributeTarget,
28ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt = null)
39public static AttributeSemanticModel Create(PublicSemanticModel containingSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Symbol? attributeTarget, Binder rootBinder, ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
48public static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt, int position)
108ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
Compilation\CSharpCompilation.cs (30)
351internal bool IsRuntimeAsyncEnabledIn(Symbol? symbol)
1271internal new Symbol? GetAssemblyOrModuleSymbol(MetadataReference reference)
1292return (TSymbol?)(object?)symbol.GetSymbol<Symbol>();
1832internal Symbol GetSpecialTypeMember(SpecialMember specialMember)
1861ImmutableArray<Symbol>.Empty,
2140var taskCandidates = taskEntryPoints.SelectAsArray(s => (Symbol)s.Candidate);
2143foreach (var candidate in taskCandidates)
2214symbols: viableEntryPoints.OfType<Symbol>().AsImmutable(),
2238ArrayBuilder<MethodSymbol> entryPointCandidates, IEnumerable<Symbol> members)
2240foreach (var member in members)
2257static void addIfCandidate(ArrayBuilder<MethodSymbol> entryPointCandidates, Symbol member)
2504Symbol? symbol0 = symbol.EnsureCSharpSymbolOrNull(nameof(symbol));
2505Symbol? within0 = within.EnsureCSharpSymbolOrNull(nameof(within));
3042private void GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, bool includeEarlierStages, BindingDiagnosticBag builder, Predicate<Symbol>? symbolFilter, CancellationToken cancellationToken)
3181private static bool IsDefinedOrImplementedInSourceTree(Symbol symbol, SyntaxTree tree, TextSpan? span)
3353filterOpt: filterTree is object ? (Predicate<Symbol>?)(s => IsDefinedOrImplementedInSourceTree(s, filterTree, filterSpan)) : (Predicate<Symbol>?)null,
3395private 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)
3803foreach (var childSymbol in symbol.GetMembers())
4857internal IEnumerable<Symbol> GetSymbolsWithNameCore(string name, SymbolFilter filter = SymbolFilter.TypeAndMember, CancellationToken cancellationToken = default)
4920internal bool ShouldEmitNullableAttributes(Symbol symbol)
4946static Symbol getExplicitAccessibilitySymbol(Symbol symbol)
4972internal void SymbolDeclaredEvent(Symbol symbol)
5038var sustainedLowLatency = GetWellKnownTypeMember(WellKnownMember.System_Runtime_GCLatencyMode__SustainedLowLatency);
5072public IEnumerable<Symbol> GetSymbolsWithName()
5074var result = new HashSet<Symbol>();
5086HashSet<Symbol> set)
5140ArrayBuilder<MergedNamespaceOrTypeDeclaration> spine, MergedTypeDeclaration current, HashSet<Symbol> set)
5148foreach (var member in container.GetMembers())
Compilation\CSharpSemanticModel.cs (143)
169internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols);
179internal abstract ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken));
281protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
288crefSymbols = default(ImmutableArray<Symbol>);
300crefSymbols = ImmutableArray.Create<Symbol>(binder.BindType(expression, BindingDiagnosticBag.Discarded).Type);
326internal static ImmutableArray<Symbol> BindCref(CrefSyntax crefSyntax, Binder binder)
328Symbol unusedAmbiguityWinner;
338ImmutableArray<Symbol> symbols = BindCref(crefSyntax, binder);
369private static SymbolInfo GetCrefSymbolInfo(OneOrMany<Symbol> symbols, SymbolInfoOptions options, bool hasParameterList)
737ImmutableArray<Symbol> crefSymbols;
1067ImmutableArray<Symbol> crefSymbols;
1214ImmutableArray<Symbol> crefSymbols;
1685foreach (Symbol symbol in lookupResult.Symbols)
1717Symbol uniqueSymbol;
1779Symbol singleSymbol = binder.ResultSymbol(lookupResult, name, arity, this.Root, BindingDiagnosticBag.Discarded, true, out wasError, container, options);
1787foreach (var symbol in lookupResult.Symbols)
1795foreach (var symbol in lookupResult.Symbols)
1805private Symbol RemapSymbolIfNecessary(Symbol symbol)
1823internal abstract Symbol RemapSymbolIfNecessaryCore(Symbol symbol);
1840public bool IsAccessible(int position, Symbol symbol)
1892Constraint = "Provide " + nameof(ArrayBuilder<Symbol>) + " capacity to reduce number of allocations.")]
1929OneOrMany<Symbol> symbols = GetSemanticSymbols(
1930boundExpr, boundNodeForSyntacticParent, binderOpt, options, out bool isDynamic, out LookupResultKind resultKind, out ImmutableArray<Symbol> unusedMemberGroup);
1937ImmutableArray<Symbol> unusedHighestMemberGroup;
1938OneOrMany<Symbol> highestSymbols = GetSemanticSymbols(
1953ImmutableArray<Symbol> unusedHighestMemberGroup;
1954OneOrMany<Symbol> highestSymbols = GetSemanticSymbols(
1969return SymbolInfoFactory.Create(ImmutableArray<Symbol>.Empty, LookupResultKind.Empty, isDynamic);
1975var builder = ArrayBuilder<Symbol>.GetInstance(symbols.Count);
1976foreach (Symbol symbol in symbols)
1997private static SymbolInfo GetSymbolInfoForSubpattern(Symbol subpatternSymbol)
2012private 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;
3471symbols = OneOrMany.Create<Symbol>(invocation.FunctionPointer);
3500symbols = originalIndexersOpt.IsDefault ? OneOrMany.Create<Symbol>(indexerAccess.Indexer) : StaticCast<Symbol>.From(OneOrMany.Create(originalIndexersOpt));
3515symbols = OneOrMany<Symbol>.Empty;
3520symbols = OneOrMany.Create<Symbol>(methodSymbol);
3526boundNode.ExpressionSymbol is Symbol accessSymbol &&
3532symbols = OneOrMany.Create<Symbol>(parentOperator.Event);
3545symbols = OneOrMany.Create<Symbol>(ReducedExtensionMethodSymbol.Create(symbol));
3637var builder = ArrayBuilder<Symbol>.GetInstance();
3648memberGroup = dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3656memberGroup = collectionInit.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3664memberGroup = dynamicIndexer.ApplicableIndexers.Cast<PropertySymbol, Symbol>();
3676memberGroup = objectCreation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3687symbols = OneOrMany.Create<Symbol>(boundObjectCreation.Constructor);
3691symbols = StaticCast<Symbol>.From(OneOrMany.Create(boundObjectCreation.ConstructorsGroup));
3695memberGroup = boundObjectCreation.ConstructorsGroup.Cast<MethodSymbol, Symbol>();
3703var containingMember = binder.ContainingMember();
3706symbols = thisParam != null ? OneOrMany.Create<Symbol>(thisParam) : OneOrMany<Symbol>.Empty;
3715symbols = OneOrMany.Create<Symbol>(fromEndIndexExpression.MethodOpt);
3725symbols = OneOrMany.Create<Symbol>(rangeExpression.MethodOpt);
3732if (boundNode.ExpressionSymbol is Symbol symbol)
3750private static ParameterSymbol GetThisParameter(TypeSymbol typeOfThis, NamedTypeSymbol containingType, Symbol containingMember, out LookupResultKind resultKind)
3818private static void GetSymbolsAndResultKind(BoundUnaryOperator unaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3834symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(unaryOperator.Operand.Type.StrippedType(),
3841private static void GetSymbolsAndResultKind(BoundIncrementOperator increment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3858symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(opType,
3865private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3891symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(objectType,
3909private static Symbol GetIntrinsicOperatorSymbol(BinaryOperatorKind op, bool isDynamic, TypeSymbol leftType, TypeSymbol rightType, TypeSymbol returnType, bool isChecked)
3938private static void GetSymbolsAndResultKind(BoundCompoundAssignmentOperator compoundAssignment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3964private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out OneOrMany<Symbol> symbols, out LookupResultKind resultKind)
3973symbols = StaticCast<Symbol>.From(OneOrMany.Create(originalCandidates));
3978symbols = OneOrMany<Symbol>.Empty;
3991ref OneOrMany<Symbol> symbols,
3992ref ImmutableArray<Symbol> memberGroup)
4044ref OneOrMany<Symbol> symbols,
4045ref ImmutableArray<Symbol> memberGroup)
4085symbols = OneOrMany.Create<Symbol>(constructorOpt);
4089symbols = StaticCast<Symbol>.From(OneOrMany.Create(candidateConstructors));
4094memberGroup = candidateConstructors.Cast<MethodSymbol, Symbol>();
4135PooledHashSet<Symbol> hiddenSymbols = null;
4138Symbol symbol = iSymbol.GetSymbol();
4144foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4148hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4156foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4160hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4228HashSet<Symbol> hiddenSymbols = new HashSet<Symbol>();
4233foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4241foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4257private OneOrMany<Symbol> GetMethodGroupSemanticSymbols(
4263out ImmutableArray<Symbol> memberGroup)
4267OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4339symbols = OneOrMany.Create((Symbol)method);
4351symbols = OneOrMany.Create(dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>());
4357ImmutableArray<Symbol> myMethodGroup = memberGroup;
4410private OneOrMany<Symbol> GetPropertyGroupSemanticSymbols(
4415out ImmutableArray<Symbol> propertyGroup)
4419OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4428propertyGroup = boundNode.Properties.Cast<PropertySymbol, Symbol>();
4445symbols = OneOrMany.Create<Symbol>(indexer.Indexer);
4451symbols = StaticCast<Symbol>.From(OneOrMany.Create(indexer.OriginalIndexersOpt));
4458ImmutableArray<Symbol> myPropertyGroup = propertyGroup;
4586internal static ImmutableArray<Symbol> GetReducedAndFilteredMethodGroupSymbols(Binder binder, BoundMethodGroup node)
4588var members = ArrayBuilder<Symbol>.GetInstance();
4589var filteredMembers = ArrayBuilder<Symbol>.GetInstance();
4616var otherSymbol = node.LookupSymbolOpt;
4695ArrayBuilder<Symbol> members,
4696ArrayBuilder<Symbol> filteredMembers,
4697Symbol member,
4702Symbol? substitutedMember = member.GetReducedAndFilteredSymbol(typeArguments, receiverType, compilation, checkFullyInferred: false);
4721ArrayBuilder<Symbol> members,
4722ArrayBuilder<Symbol> filteredMembers,
4734Symbol member = singleResult.Symbol;
4765private static OneOrMany<Symbol> CreateReducedAndFilteredSymbolsFromOriginals(BoundCall call, CSharpCompilation compilation)
4786var methodBuilder = ArrayBuilder<Symbol>.GetInstance();
4787var filteredMethodBuilder = ArrayBuilder<Symbol>.GetInstance();
4801private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundCall call)
4815return OneOrMany.Create<Symbol>(method);
4818private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundDelegateCreationExpression delegateCreation, BoundExpression receiverOpt)
4828return 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;
728private T GetRemappedSymbol<T>(T originalSymbol) where T : Symbol
733if (_lazyRemappedSymbols.TryGetValue(originalSymbol, out Symbol? remappedSymbol))
1278internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
1519protected void UnguardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
1527protected void GuardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
2091ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols);
2391internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
2402if (_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,
470internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
510internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
575internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
Compilation\SyntaxTreeSemanticModel.cs (18)
284var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: (options & SymbolInfoOptions.PreserveAliases) != 0);
322var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: false); // Don't care about aliases here.
330private Symbol GetSemanticInfoSymbolInNonMemberContext(CSharpSyntaxNode node, bool bindVarAsAliasFirst)
356Symbol result = bindVarAsAliasFirst
397internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
403return model == null ? ImmutableArray<Symbol>.Empty : model.GetMemberGroupWorker(node, options, cancellationToken);
738internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
1400foreach (var symbol in collection)
1779private Symbol GetDeclaredMember(NamespaceOrTypeSymbol container, TextSpan declarationSpan, bool isKnownToBeANamespace, string name = null)
1807Symbol zeroWidthMatch = null;
1808foreach (var symbol in collection)
1814var result = GetDeclaredMember(namedType, declarationSpan, isKnownToBeANamespace, name);
1831Symbol partial = symbol.GetPartialImplementationPart();
1865var result = this.GetDeclaredMember(container, declarationSyntax.Span, isKnownToBeANamespace: false, declarationSyntax.Identifier.ValueText);
2347private static BoundNode GetBoundRoot(MemberSemanticModel memberModel, out Symbol member)
2399private Symbol GetDeclaredMemberSymbol(CSharpSyntaxNode declarationSyntax)
2450internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
Compiler\ClsComplianceChecker.cs (36)
32private readonly ConcurrentDictionary<Symbol, Compliance> _declaredOrInheritedCompliance;
52_declaredOrInheritedCompliance = new ConcurrentDictionary<Symbol, Compliance>(Symbols.SymbolEqualityComparer.ConsiderEverything);
212foreach (var m in symbol.GetMembersUnordered())
230foreach (var m in symbol.GetMembersUnordered())
267foreach (var m in symbol.GetMembersUnordered())
420private bool VisitTypeOrMember(Symbol symbol, Compliance compliance)
497private void CheckForNonCompliantAbstractMember(Symbol symbol)
541private void CheckForCompliantWithinNonCompliant(Symbol symbol)
585private void CheckForAttributeWithArrayArgument(Symbol symbol)
680Symbol container = parameters[0].ContainingSymbol;
683Symbol associated = ((MethodSymbol)container).AssociatedSymbol;
711private void CheckReturnTypeCompliance(Symbol symbol)
784private bool CheckForDeclarationWithoutAssemblyDeclaration(Symbol symbol, Compliance compliance)
807MultiDictionary<string, Symbol> seenByName = new MultiDictionary<string, Symbol>(CaseInsensitiveComparison.Comparer);
823foreach (Symbol member in @interface.GetMembersUnordered())
838foreach (Symbol member in baseType.GetMembersUnordered())
855foreach (Symbol member in symbol.GetMembers())
884private void CheckSymbolDistinctness(Symbol symbol, string symbolName, MultiDictionary<string, Symbol>.ValueSet sameNameSymbols)
891foreach (Symbol other in sameNameSymbols)
906foreach (Symbol other in sameNameSymbols)
927private void CheckName(Symbol symbol)
960private bool DoNotVisit(Symbol symbol)
973private bool IsSyntacticallyFilteredOut(Symbol symbol)
1114private Compliance GetDeclaredOrInheritedCompliance(Symbol symbol)
1127Symbol associated = method.AssociatedSymbol;
1170private Compliance GetInheritedCompliance(Symbol symbol)
1174Symbol containing = (Symbol)symbol.ContainingType ?? symbol.ContainingAssembly;
1184private bool? GetDeclaredCompliance(Symbol symbol, out Location attributeLocation)
1220private static bool IsAccessibleOutsideAssembly(Symbol symbol)
1233private static bool IsAccessibleIfContainerIsAccessible(Symbol symbol)
1267private static bool IsImplicitClass(Symbol symbol)
1316private static bool TryGetCollisionErrorCode(Symbol x, Symbol y, out ErrorCode code)
Compiler\DocumentationCommentCompiler.cs (23)
138internal static string GetDocumentationCommentXml(Symbol symbol, bool processIncludes, CancellationToken cancellationToken)
199foreach (var s in symbol.GetMembers())
242foreach (Symbol member in symbol.GetMembers())
274foreach (Symbol member in extension.GetMembers())
343Symbol symbolForDocComment = underlyingMethod.IsAccessor()
363static bool hasDocumentationTrivia(Symbol symbol)
383public override void DefaultVisit(Symbol symbol)
400Symbol? implementationPart = symbol.GetPartialImplementationPart();
426var symbolForDocComments = symbol is SynthesizedRecordPropertySymbol ? symbol.ContainingType : symbol;
462private static bool ShouldSkip(Symbol symbol)
532Symbol symbol,
628Symbol symbol,
737private static Location GetLocationInTreeReportingDocumentationCommentDiagnostics(Symbol symbol)
753private static ImmutableArray<ParameterSymbol> GetParameters(Symbol symbol)
776private static ImmutableArray<TypeParameterSymbol> GetTypeParameters(Symbol symbol)
794private static bool RequiresDocumentationComment(Symbol symbol)
825private bool TryGetDocumentationCommentNodes(Symbol symbol, out DocumentationMode maxDocumentationMode, out ImmutableArray<DocumentationCommentTriviaSyntax> nodes)
1213Symbol ambiguityWinner;
1214ImmutableArray<Symbol> symbols = binder.BindCref(crefSyntax, out ambiguityWinner, diagnostics);
1216Symbol symbol;
1270Symbol memberSymbol,
1303ImmutableArray<Symbol> referencedSymbols = binder.BindXmlNameAttribute(syntax, ref useSiteInfo);
1328foreach (Symbol referencedSymbol in referencedSymbols)
Emitter\Model\PEModuleBuilder.cs (24)
31protected readonly ConcurrentDictionary<Symbol, Cci.IModuleReference> AssemblyOrModuleSymbolToModuleRefMap = new ConcurrentDictionary<Symbol, Cci.IModuleReference>();
32private readonly ConcurrentDictionary<Symbol, object> _genericInstanceMap = new ConcurrentDictionary<Symbol, object>(Symbols.SymbolEqualityComparer.ConsiderEverything);
241foreach (var member in symbol.GetMembers())
361foreach (var member in symbol.GetMembers())
384foreach (var member in symbol.GetMembers())
451private void AddSymbolLocation(MultiDictionary<Cci.DebugSourceDocument, Cci.DefinitionWithLocation> result, Symbol symbol)
478private Location GetSmallestSourceLocationOrNull(Symbol symbol)
567foreach (var member in ns.GetMembers())
602foreach (var member in (symbol.IsNamespace ? symbol.GetMembers() : symbol.GetTypeMembers().Cast<NamedTypeSymbol, Symbol>()))
975Symbol.ReportUseSiteDiagnostic(info,
1224private object GetCciAdapter(Symbol symbol)
1545var container = param.ContainingSymbol;
1581private static bool ContainerIsGeneric(Symbol container)
1644internal SynthesizedAttributeData SynthesizeIsReadOnlyAttribute(Symbol symbol)
1677internal SynthesizedAttributeData SynthesizeExtensionMarkerAttribute(Symbol symbol, string markerName)
1688internal SynthesizedAttributeData SynthesizeIsUnmanagedAttribute(Symbol symbol)
1699internal SynthesizedAttributeData SynthesizeIsByRefLikeAttribute(Symbol symbol)
1715internal SynthesizedAttributeData SynthesizeNullableAttributeIfNecessary(Symbol symbol, byte? nullableContextValue, TypeWithAnnotations type)
1775internal SynthesizedAttributeData SynthesizeNullableContextAttribute(Symbol symbol, byte value)
1800internal SynthesizedAttributeData SynthesizeNativeIntegerAttribute(Symbol symbol, TypeSymbol type)
2162Symbol.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;
445Symbol associatedPropertyOrEvent = field.AssociatedSymbol;
637foreach (Symbol captured in _capturedVariables)
659private void CheckCaptured(Symbol variable, ParameterSymbol? rangeVariableUnderlyingParameter = null)
662Symbol.IsCaptured(rangeVariableUnderlyingParameter ?? variable, sourceMethod))
673private void NoteCaptured(Symbol variable)
688protected IEnumerable<Symbol> GetCapturedInside() => _capturedInside.ToArray();
689protected IEnumerable<Symbol> GetCapturedOutside() => _capturedOutside.ToArray();
690protected IEnumerable<Symbol> GetCaptured() => _capturedVariables.ToArray();
691protected IEnumerable<Symbol> GetUnsafeAddressTaken() => _unsafeAddressTakenVariables.Keys.ToArray();
696private void NotePrimaryConstructorParameterReadIfNeeded(Symbol symbol)
705Symbol variable,
801protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
1018protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member)
1104protected void CheckAssigned(Symbol symbol, SyntaxNode node)
1123private void ReportUnassignedIfNotCapturedInLocalFunction(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration = true)
1140protected virtual void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
1209void addDiagnosticForStructThis(Symbol thisParameter, int thisSlot)
1261var associatedSymbol = fieldSymbol.AssociatedSymbol;
1434private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression)
1758Symbol current = CurrentSymbol;
1802Symbol containing = current.ContainingSymbol;
2381var oldSymbol = this.CurrentSymbol;
2499Symbol variable = UseNonFieldSymbolUnsafely(operand);
2613foreach (var symbol in namedType.GetMembersUnordered())
2663Symbol 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 (121)
497Symbol? symbol,
713var alreadyWarnedMembers = PooledHashSet<Symbol>.GetInstance();
714foreach (var member in method.ContainingType.GetMembersUnordered())
758void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member, LocalState state, int thisSlot, Location? exitLocation, ImmutableArray<string> membersWithStateEnforcedByRequiredMembers, bool forcePropertyAnalysis)
777Symbol symbol;
783symbol = (Symbol?)(f.AssociatedSymbol as PropertySymbol) ?? f;
845var info = new CSDiagnosticInfo(errorCode, new object[] { symbol.Kind.Localize(), symbol.Name }, ImmutableArray<Symbol>.Empty, additionalLocations: symbol.Locations);
856foreach (var member in getMembersNeedingDefaultInitialState())
863var memberToInitialize = member;
917ImmutableArray<Symbol> getMembersNeedingDefaultInitialState()
921return ImmutableArray<Symbol>.Empty;
961static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
966=> ImmutableArray<Symbol>.Empty,
980var symbolToInitialize = getFieldSymbolToBeInitialized(symbol);
984return OneOrMany<Symbol>.Empty;
999static ImmutableArray<Symbol> getAllTypeAndRequiredMembers(TypeSymbol containingType)
1002var baseRequiredMembers = containingType.BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
1009var builder = ArrayBuilder<Symbol>.GetInstance(members.Length + baseRequiredMembers.Count);
1033static OneOrMany<Symbol> getAllMembersToBeDefaulted(Symbol requiredMember, bool filterOverridingProperties)
1047return OneOrMany<Symbol>.Empty;
1055foreach (var member in property.ContainingType.GetMembers(notNullMemberName))
1065static Symbol getFieldSymbolToBeInitialized(Symbol requiredMember)
1098foreach (var member in method.ContainingType.GetMembers(memberName))
1146void enforceMemberNotNullWhenIfAffected(SyntaxNode? syntaxOpt, bool sense, ImmutableArray<Symbol> members, LocalState state, LocalState otherState)
1148foreach (var member in members)
1165foreach (var member in method.ContainingType.GetMembers(memberName))
1174private void ReportFailedMemberNotNullIfNeeded(SyntaxNode? syntaxOpt, bool sense, Symbol member, LocalState state)
1183private bool FailsMemberNotNullExpectation(Symbol member, LocalState state)
1219foreach (var member in type.GetMembers(memberName))
1234private int GetSlotForMemberPostCondition(Symbol member)
1533internal static VariableState? GetAfterInitializersState(CSharpCompilation compilation, Symbol? symbol, BoundNode constructorBody)
1603Symbol? symbol,
1618Symbol? symbol,
1625ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1634Symbol? symbol,
1698ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1703var symbol = variables.Symbol;
1740private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1742var remappedSymbolsBuilder = ImmutableDictionary.CreateBuilder<Symbol, Symbol>(Symbols.SymbolEqualityComparer.ConsiderEverything, Symbols.SymbolEqualityComparer.ConsiderEverything);
1855Symbol? symbol,
1912Symbol? symbol,
1945private void RecordNullableAnalysisData(Symbol? symbol, bool requiredAnalysis)
1972private void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
1995if (lambdaIsExactMatch || Symbol.Equals(originalSymbol, updatedSymbol, TypeCompareKind.ConsiderEverything))
2047var symbol = variable.Symbol;
2100protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member)
2268var container = method.ContainingSymbol;
2279protected override int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
2403var containingSymbol = parameterOpt?.ContainingSymbol;
2770private bool IsSlotMember(int slot, Symbol possibleMember)
2790private void InheritNullableStateOfMember(int targetContainerSlot, int valueContainerSlot, Symbol member, bool isDefaultValue, int skipSlot)
2919var symbol = AsMemberOfType(targetType, variable.Symbol);
2926private static TypeSymbol GetTypeOrReturnType(Symbol symbol) => symbol.GetTypeOrReturnType().Type;
2929private TypeWithAnnotations GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
2964private NullableFlowState GetDefaultState(Symbol symbol)
2979var member = variable.Symbol;
3401if (Symbol.IsCaptured(variables[slot].Symbol, localFunc))
3420var symbol = variables[variables.RootSlot(slot)].Symbol;
3421if (Symbol.IsCaptured(symbol, localFunc))
3467var oldSymbol = this._symbol;
3469var oldCurrentSymbol = this.CurrentSymbol;
3845private static bool AreCloseEnough(Symbol original, Symbol updated)
4601ArgumentsCompletionDelegate<Symbol>? argumentsCompletion = null;
4603getSymbolAndParameters(objectInitializer, containingType, out Symbol? symbol, out ImmutableArray<ParameterSymbol> parameters);
4637InitializerCompletionAfterTargetType? setAnalyzedNullability(BoundAssignmentOperator node, BoundObjectInitializerMember objectInitializer, Symbol? updatedSymbol, ImmutableArray<VisitResult> argumentResults,
4638ArgumentsCompletionDelegate<Symbol>? argumentsCompletion, InitializerCompletionAfterUpdatedSymbol? initializationCompletion, bool delayCompletionForType)
4664ArgumentsCompletionDelegate<Symbol>? argumentsCompletion, InitializerCompletionAfterUpdatedSymbol? initializationCompletion)
4670getSymbolAndParameters(objectInitializer, containingType, out Symbol? symbol, out ImmutableArray<ParameterSymbol> parameters);
4691int getOrCreateSlot(int containingSlot, Symbol symbol)
4696InitializerCompletionAfterUpdatedSymbol? visitNestedInitializer(int containingSlot, TypeSymbol containingType, Symbol symbol, BoundObjectInitializerExpressionBase initializer, bool delayCompletionForType)
4707Symbol symbol, BoundObjectInitializerExpressionBase initializer, int slot, InitializerCompletionAfterTargetType? nestedCompletion,
4730return (int containingSlot, Symbol symbol) =>
4738InitializerCompletionAfterUpdatedSymbol? visitMemberAssignment(BoundAssignmentOperator node, int containingSlot, Symbol symbol, bool delayCompletionForType, Func<TypeWithAnnotations, TypeWithState>? conversionCompletion = null)
4773return (int containingSlot, Symbol symbol) =>
4780void getAdjustedArgumentsInfo(BoundObjectInitializerMember objectInitializer, TypeSymbol containingType, Symbol? symbol,
4808out Symbol? symbol, out ImmutableArray<ParameterSymbol> parametersOpt)
6075foreach (var member in getMembers(expressionType))
6092static IEnumerable<Symbol> getMembers(TypeSymbol type)
6095foreach (var member in type.GetMembers())
6100foreach (var member in baseType.GetMembers())
6105foreach (var member in interfaceType.GetMembers())
7026private static ImmutableArray<ParameterSymbol> AdjustParametersIfNeeded(ImmutableArray<ParameterSymbol> parameters, bool isExtensionBlockMember, Symbol member)
7040Symbol member, int argumentCount)
7065private static RefKind GetExtensionReceiverRefKind(Symbol member)
7190var implementationMethod = baseType.FindImplementationForInterfaceMember(constructedMethod);
7392private FlowAnalysisAnnotations GetRValueAnnotations(Symbol? symbol)
7568private delegate (TMember? member, bool returnNotNull) ArgumentsCompletionDelegate<TMember>(ImmutableArray<VisitResult> argumentResults, ImmutableArray<ParameterSymbol> parametersOpt, TMember? member) where TMember : Symbol;
7571private delegate void InitializerCompletionAfterUpdatedSymbol(int containingSlot, Symbol updatedSymbol);
7575where TMember : Symbol
7596where TMember : Symbol
8054foreach (Symbol member in type.GetMembers(memberName))
8080LocalState markMemberAsNotNull(int receiverSlot, ref LocalState state, Symbol member)
8717where TMember : Symbol
8723var definition = member.IsExtensionBlockMember() ? member.OriginalDefinition : member.ConstructedFrom();
9159private static Symbol AsMemberOfType(TypeSymbol? type, Symbol symbol)
9205if (tryAsMemberOfSingleType(containingType, out var result))
9221if (tryAsMemberOfSingleType(containingType, out var result))
9236bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
9243var symbolDef = symbol.OriginalDefinition;
9506int targetSlot = GetNullableOfTValueSlot(containingType, containingSlot, out Symbol? symbol);
11367private FlowAnalysisAnnotations GetObjectInitializerMemberLValueAnnotations(Symbol memberSymbol)
12129var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.FieldSymbol);
12188Symbol? updatedProperty;
12306var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.EventSymbol);
12311private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member)
12379private SpecialMember? GetNullableOfTMember(Symbol member)
12399private int GetNullableOfTValueSlot(TypeSymbol containingType, int containingSlot, out Symbol? valueProperty, bool forceSlotEvenIfEmpty = false)
14400private sealed class ExpressionAndSymbolEqualityComparer : IEqualityComparer<(BoundNode? expr, Symbol symbol)>
14406public bool Equals((BoundNode? expr, Symbol symbol) x, (BoundNode? expr, Symbol symbol) y)
14417public 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)
296internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
302internal void SetType(Symbol symbol, TypeWithAnnotations type)
352private 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 (72)
514public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type, bool hasErrors)
524public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
535public Symbol? VariableSymbol { get; }
541public BoundDeconstructValuePlaceholder Update(Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
986public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false)
1003public ImmutableArray<Symbol?> Symbols { get; }
1009public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type)
1114public BoundTypeOrValueExpression(SyntaxNode syntax, Binder binder, Symbol valueSymbol, TypeSymbol type, bool hasErrors)
1130public BoundTypeOrValueExpression(SyntaxNode syntax, Binder binder, Symbol valueSymbol, TypeSymbol type)
1144public Symbol ValueSymbol { get; }
1149public BoundTypeOrValueExpression Update(Binder binder, Symbol valueSymbol, TypeSymbol type)
6144public 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)
6163public Symbol? LookupSymbolOpt { get; }
6171public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6859public 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)
6880public Symbol? MemberSymbol { get; }
6894public 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)
8264protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8276public Symbol? Variable { get; }
8283public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8305public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType)
8319public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8346public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType)
8360public BoundListPattern(SyntaxNode syntax, ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8390public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType)
8503public BoundPositionalSubpattern(SyntaxNode syntax, Symbol? symbol, BoundPattern pattern, bool hasErrors = false)
8512public Symbol? Symbol { get; }
8517public BoundPositionalSubpattern Update(Symbol? symbol, BoundPattern pattern)
8561public BoundPropertySubpatternMember(SyntaxNode syntax, BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type, bool hasErrors = false)
8573public Symbol? Symbol { get; }
8579public BoundPropertySubpatternMember Update(BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type)
8808protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8819public Symbol VariableSymbol { get; }
8825public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8837public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8851public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8863public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8877public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, bool hasErrors)
8884public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression)
8892public Symbol? VariableSymbol { get; }
8898public OutDeconstructVarPendingInference Update(Symbol? variableSymbol, bool isDiscardExpression)
11139Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
11212ImmutableArray<Symbol?> symbols = this.VisitSymbols<Symbol?>(node.Symbols);
11237Symbol valueSymbol = this.VisitSymbol(node.ValueSymbol);
12150Symbol? lookupSymbolOpt = this.VisitSymbol(node.LookupSymbolOpt);
12277Symbol? memberSymbol = this.VisitSymbol(node.MemberSymbol);
12535Symbol? variable = this.VisitSymbol(node.Variable);
12545Symbol? variable = this.VisitSymbol(node.Variable);
12556Symbol? variable = this.VisitSymbol(node.Variable);
12588Symbol? symbol = this.VisitSymbol(node.Symbol);
12600Symbol? symbol = this.VisitSymbol(node.Symbol);
12647Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12654Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12661Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
12705private readonly ImmutableDictionary<Symbol, Symbol>.Builder _remappedSymbols;
12707public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
12769Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
12952ImmutableArray<Symbol?> symbols = GetUpdatedArray(node, node.Symbols);
12988Symbol valueSymbol = GetUpdatedSymbol(node, node.ValueSymbol);
14386Symbol? lookupSymbolOpt = GetUpdatedSymbol(node, node.LookupSymbolOpt);
14659Symbol? memberSymbol = GetUpdatedSymbol(node, node.MemberSymbol);
15231Symbol? variable = GetUpdatedSymbol(node, node.Variable);
15242Symbol? variable = GetUpdatedSymbol(node, node.Variable);
15254Symbol? variable = GetUpdatedSymbol(node, node.Variable);
15289Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
15296Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
15356Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15374Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15392Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (8)
358return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
389return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
931private BoundExpression InitializerMemberSetter(Symbol symbol)
958private BoundExpression InitializerMemberGetter(Symbol symbol)
997var sym = ((BoundObjectInitializerMember)a.Left).MemberSymbol;
1143return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1150return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1182return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ExtensionMethodBodyRewriter.cs (12)
23private ImmutableDictionary<Symbol, Symbol> _symbolMap;
38_symbolMap = ImmutableDictionary<Symbol, Symbol>.Empty.WithComparers(ReferenceEqualityComparer.Instance, ReferenceEqualityComparer.Instance);
51private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenMethodSymbol rewritten, ReadOnlySpan<ParameterSymbol> rewrittenParameters)
53ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
73private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenLambdaOrLocalFunctionSymbol rewritten)
123ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (6)
204private MethodSymbol? GetLocalOrParameterStoreLogger(TypeSymbol variableType, Symbol targetSymbol, bool? refAssignmentSourceIsLocal, SyntaxNode syntax)
394if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex))
415private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression)
443Symbol targetSymbol,
494private BoundExpression VariableRead(Symbol localOrParameterSymbol)
606if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex))
Lowering\LocalRewriter\LocalRewriter.cs (3)
603return new BoundBadExpression(syntax, LookupResultKind.NotReferencable, ImmutableArray<Symbol?>.Empty, children, resultType);
606private bool TryGetWellKnownTypeMember<TSymbol>(SyntaxNode? syntax, WellKnownMember member, [NotNullWhen(true)] out TSymbol? symbol, bool isOptional = false, Location? location = null) where TSymbol : Symbol
1151private 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);
345return new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(node.Event),
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (4)
222var property = left.MemberSymbol;
394newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
412callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
428rewrittenObjectCreation = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, node.Type);
Lowering\StateMachineRewriter\IteratorAndAsyncCaptureWalker.cs (17)
30private readonly OrderedSet<Symbol> _variablesToHoist = new OrderedSet<Symbol>();
38private MultiDictionary<Symbol, SyntaxNode> _lazyDisallowedCaptures;
46private IteratorAndAsyncCaptureWalker(CSharpCompilation compilation, MethodSymbol method, BoundNode node, HashSet<Symbol> initiallyAssignedVariables, bool isRuntimeAsync)
58public static OrderedSet<Symbol> Analyze(CSharpCompilation compilation, MethodSymbol method, BoundNode node, bool isRuntimeAsync, DiagnosticBag diagnostics)
85var variable = kvp.Key;
120var variablesToHoist = new OrderedSet<Symbol>();
126var symbol = v.Symbol;
143private static bool HoistInDebugBuild(Symbol symbol)
162var symbol = variableBySlot[i].Symbol;
216private void CaptureVariable(Symbol variable, SyntaxNode syntax)
234(_lazyDisallowedCaptures ??= new MultiDictionary<Symbol, SyntaxNode>()).Add(variable, syntax);
277protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
369private readonly HashSet<Symbol> _localsInScope;
379_localsInScope = new HashSet<Symbol>();
408private void AddVariable(Symbol local)
443private void Capture(Symbol s, SyntaxNode syntax)
Lowering\StateMachineRewriter\StateMachineRewriter.cs (10)
30protected IReadOnlyDictionary<Symbol, CapturedSymbolReplacement>? nonReusableLocalProxies;
33protected IOrderedReadOnlySet<Symbol>? hoistedVariables;
34protected Dictionary<Symbol, CapturedSymbolReplacement>? initialParameters;
86protected abstract BoundStatement GenerateStateMachineCreation(LocalSymbol stateMachineVariable, NamedTypeSymbol frameType, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies);
115initialParameters = new Dictionary<Symbol, CapturedSymbolReplacement>();
141IEnumerable<Symbol> variablesToHoist,
142out IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies,
146var proxiesBuilder = new Dictionary<Symbol, CapturedSymbolReplacement>();
155foreach (var variable in variablesToHoist)
310protected BoundStatement GenerateParameterStorage(LocalSymbol stateMachineVariable, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies)
Lowering\SyntheticBoundNodeFactory.cs (9)
246return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true);
328public Symbol? WellKnownMember(WellKnownMember wm, bool isOptional)
330Symbol? wellKnownMember = Binder.GetWellKnownTypeMember(Compilation, wm, Diagnostics, syntax: Syntax, isOptional: true);
341public Symbol WellKnownMember(WellKnownMember wm)
363public Symbol SpecialMember(SpecialMember sm)
365var result = SpecialMember(sm, isOptional: false);
370public Symbol? SpecialMember(SpecialMember sm, bool isOptional = false)
372Symbol specialMember = Compilation.GetSpecialTypeMember(sm);
823return new BoundBadExpression(Syntax, default(LookupResultKind), ImmutableArray<Symbol?>.Empty, args.AsImmutable(), receiver);
Symbols\AliasSymbol.cs (6)
54private readonly Symbol _containingSymbol;
56protected AliasSymbol(string aliasName, Symbol containingSymbol, ImmutableArray<Location> locations, bool isExtern)
74internal static AliasSymbol CreateCustomDebugInfoAlias(NamespaceOrTypeSymbol targetSymbol, SyntaxToken aliasToken, Symbol containingSymbol, bool isExtern)
209public sealed override Symbol ContainingSymbol
246public 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;
81internal Symbol? GetWellKnownTypeMember(WellKnownMember member)
92var wellKnownTypeMembers = new Symbol[(int)WellKnownMember.Count];
106Symbol? result = null;
251internal static Symbol? GetRuntimeMember(NamedTypeSymbol declaringType, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
257internal static Symbol? GetRuntimeMember(ImmutableArray<Symbol> members, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
263Symbol? result = null;
294foreach (var member in members)
302!(member.DeclaredAccessibility == Accessibility.Public || (accessWithinOpt is object && Symbol.IsSymbolAccessible(member, accessWithinOpt))))
424var wellKnownMember = Binder.GetWellKnownTypeMember(this, arg.Key, useSiteInfo: out _, isOptional: true);
729var member = Binder.GetWellKnownTypeMember(this, attributeCtor,
Symbols\ConstraintsHelper.cs (10)
896this Symbol constructedContainingSymbol,
948Symbol containingSymbol,
1054Symbol constructedContainingSymbol,
1091if (typeArgument.Type is NamedTypeSymbol { IsInterface: true } iface && SelfOrBaseHasStaticAbstractMember(iface, ref useSiteInfo, out Symbol member))
1118static bool errorIfNotSatisfiesConstructorConstraint(Symbol containingSymbol, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder)
1142Symbol containingSymbol,
1165Symbol containingSymbol,
1408private static bool SelfOrBaseHasStaticAbstractMember(NamedTypeSymbol iface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol memberWithoutImplementation)
1412foreach (Symbol m in iface.GetMembers())
1423foreach (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 IsExtensionBlockMember(this Symbol member)
106internal static bool TryGetInstanceExtensionParameter(this Symbol symbol, [NotNullWhen(true)] out ParameterSymbol? extensionParameter)
121internal static int GetMemberArityIncludingExtension(this Symbol member)
131internal static ImmutableArray<TypeParameterSymbol> GetTypeParametersIncludingExtension<TMember>(this TMember member) where TMember : Symbol
152where TMember : Symbol
181internal static ImmutableArray<ParameterSymbol> GetParametersIncludingExtensionParameter(this Symbol symbol, bool skipExtensionIfStatic)
195internal static int GetParameterCountIncludingExtensionParameter(this Symbol symbol)
205internal static TMember ConstructIncludingExtension<TMember>(this TMember member, ImmutableArray<TypeWithAnnotations> typeArguments) where TMember : Symbol
220return (TMember)(Symbol)method.Construct(typeArguments[extension.Arity..]);
223return (TMember)(Symbol)method;
226return (TMember)(Symbol)method.Construct(typeArguments);
239return (TMember)(Symbol)property;
248internal static Symbol? GetReducedAndFilteredSymbol(this Symbol member, ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol receiverType, CSharpCompilation compilation, bool checkFullyInferred)
323internal static ImmutableArray<RefKind> GetParameterRefKinds(this Symbol member)
338internal static int GetParameterCount(this Symbol member)
354internal static bool HasParameterContainingPointerType(this Symbol member)
373public static bool IsEventOrPropertyWithImplementableNonPublicAccessor(this Symbol symbol)
406public static bool IsAccessor(this Symbol symbol)
413var propertyOrEvent = methodSymbol.AssociatedSymbol;
422public static bool IsOperator(this Symbol symbol)
427public static bool IsIndexer(this Symbol symbol)
432public static bool IsIndexedProperty(this Symbol symbol)
437public static bool IsUserDefinedConversion(this Symbol symbol)
464public static int CustomModifierCount(this Symbol m)
513internal static Symbol SymbolAsMember(this Symbol s, NamedTypeSymbol newOwner)
535internal static int GetMemberArity(this Symbol symbol)
568internal static ImmutableArray<TypeParameterSymbol> GetMemberTypeParameters(this Symbol symbol)
586internal static ImmutableArray<TypeSymbol> GetMemberTypeArgumentsNoUseSiteDiagnostics(this Symbol symbol)
779internal static bool IsExplicitInterfaceImplementation(this Symbol member)
794internal static bool IsPartialMember(this Symbol member)
806internal static bool IsPartialImplementation(this Symbol member)
818internal static bool IsPartialDefinition(this Symbol member)
831internal static Symbol? GetPartialImplementationPart(this Symbol member)
843internal static Symbol? GetPartialDefinitionPart(this Symbol member)
856internal static bool ContainsTupleNames(this Symbol member)
873internal static ImmutableArray<Symbol> GetExplicitInterfaceImplementations(this Symbol member)
878return ((MethodSymbol)member).ExplicitInterfaceImplementations.Cast<MethodSymbol, Symbol>();
880return ((PropertySymbol)member).ExplicitInterfaceImplementations.Cast<PropertySymbol, Symbol>();
882return ((EventSymbol)member).ExplicitInterfaceImplementations.Cast<EventSymbol, Symbol>();
884return ImmutableArray<Symbol>.Empty;
888internal static Symbol GetOverriddenMember(this Symbol member)
903internal static Symbol GetLeastOverriddenMember(this Symbol member, NamedTypeSymbol accessingTypeOpt)
924internal static bool IsFieldOrFieldLikeEvent(this Symbol member, out FieldSymbol field)
940internal static string GetMemberCallerName(this Symbol member)
Symbols\MergedNamespaceSymbol.cs (13)
44private readonly CachingDictionary<ReadOnlyMemory<char>, Symbol> _cachedLookup;
49private ImmutableArray<Symbol> _allMembers;
94_cachedLookup = new CachingDictionary<ReadOnlyMemory<char>, Symbol>(SlowGetChildrenOfName, SlowGetChildNames, ReadOnlyMemoryOfCharComparer.Instance);
120internal override void ForceComplete(SourceLocation locationOpt, Predicate<Symbol> filter, CancellationToken cancellationToken)
133private ImmutableArray<Symbol> SlowGetChildrenOfName(ReadOnlyMemory<char> name)
136var otherSymbols = ArrayBuilder<Symbol>.GetInstance();
141foreach (Symbol childSymbol in namespaceSymbol.GetMembers(name))
181foreach (var child in ns.GetMembersUnordered())
214public override ImmutableArray<Symbol> GetMembers()
219var builder = ArrayBuilder<Symbol>.GetInstance();
227public override ImmutableArray<Symbol> GetMembers(ReadOnlyMemory<char> name)
248public override Symbol ContainingSymbol
294internal sealed override void GetAllExtensionMembers(ArrayBuilder<Symbol> members, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
Symbols\Metadata\PE\PENamedTypeSymbol.cs (39)
55private ImmutableArray<Symbol> _lazyMembersInDeclarationOrder;
61private Dictionary<string, ImmutableArray<Symbol>> _lazyMembersByName;
501foreach (var member in @this.ContainingType.GetMembers(method.Name))
585Symbol s = _container;
858public override Symbol ContainingSymbol
1348public override ImmutableArray<Symbol> GetMembers()
1402ImmutableArray<Symbol> staticFields = GetMembers();
1512ImmutableArray<Symbol> members = GetMembers();
1615internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1620internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1625private class DeclarationOrderTypeSymbolComparer : IComparer<Symbol>
1631public int Compare(Symbol x, Symbol y)
1721ArrayBuilder<Symbol> members = null;
1727members = ArrayBuilder<Symbol>.GetInstance();
1776ArrayBuilder<Symbol> nonFieldMembers = ArrayBuilder<Symbol>.GetInstance();
1852Symbol previous = null;
1854foreach (var s in members)
1862Symbol current = s;
1897members = ArrayBuilder<Symbol>.GetInstance();
1898foreach (var member in _lazyMembersInDeclarationOrder)
1908Dictionary<string, ImmutableArray<Symbol>> membersDict = GroupByName(members);
1941internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1945ImmutableArray<Symbol> m;
1948m = ImmutableArray<Symbol>.Empty;
1954public override ImmutableArray<Symbol> GetMembers(string name)
1958ImmutableArray<Symbol> m;
1961m = ImmutableArray<Symbol>.Empty;
1968m = m.Concat(StaticCast<Symbol>.From(t));
2568private PooledDictionary<MethodDefinitionHandle, PEMethodSymbol> CreateMethods(ArrayBuilder<Symbol> members)
2603private void CreateProperties(Dictionary<MethodDefinitionHandle, PEMethodSymbol> methodHandleToSymbol, ArrayBuilder<Symbol> members)
2643ArrayBuilder<Symbol> members)
2694private static Dictionary<string, ImmutableArray<Symbol>> GroupByName(ArrayBuilder<Symbol> symbols)
3069private static int GetIndexOfFirstMember(ImmutableArray<Symbol> members, SymbolKind kind)
3086private static IEnumerable<TSymbol> GetMembers<TSymbol>(ImmutableArray<Symbol> members, SymbolKind kind, int offset = -1)
3087where TSymbol : Symbol
3096var member = members[i];
Symbols\Metadata\PE\PEParameterSymbol.cs (13)
153private readonly Symbol _containingSymbol;
198Symbol nullableContext,
226Symbol nullableContext,
237Symbol containingSymbol,
242Symbol nullableContext,
317var accessSymbol = containingSymbol.Kind == SymbolKind.Property ? containingSymbol.ContainingSymbol : containingSymbol;
374static bool isExtensionMarkerParameter(Symbol containingSymbol, int ordinal)
396Symbol containingSymbol,
403Symbol nullableContext,
443Symbol containingSymbol,
449Symbol nullableContext,
532public override Symbol ContainingSymbol
1248public sealed override bool Equals(Symbol other, TypeCompareKind compareKind)
Symbols\NamedTypeSymbol.cs (40)
30private static readonly ImmutableSegmentedDictionary<string, Symbol> RequiredMembersErrorSentinel = ImmutableSegmentedDictionary<string, Symbol>.Empty.Add("<error sentinel>", null);
36private ImmutableSegmentedDictionary<string, Symbol> _lazyRequiredMembers = default;
212ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(name);
219internal static void AddOperators(ArrayBuilder<MethodSymbol> operators, ImmutableArray<Symbol> candidates)
221foreach (var candidate in candidates)
230internal static void AddOperators(ArrayBuilder<MethodSymbol> operators, ArrayBuilder<Symbol> candidates)
232foreach (var candidate in candidates)
278ImmutableArray<Symbol> instanceCandidates = includeInstance
280: ImmutableArray<Symbol>.Empty;
281ImmutableArray<Symbol> staticCandidates = includeStatic
283: ImmutableArray<Symbol>.Empty;
291foreach (Symbol candidate in instanceCandidates)
299foreach (Symbol candidate in staticCandidates)
320ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(WellKnownMemberNames.Indexer);
330foreach (Symbol candidate in candidates)
353private void DoGetExtensionMethods(ArrayBuilder<Symbol> methods, string? nameOpt, int arity, LookupOptions options, PooledHashSet<MethodSymbol>? implementationsToShadow)
359foreach (var member in members)
408internal void GetAllExtensionMembers(ArrayBuilder<Symbol> members, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
439void doGetExtensionMembers(ArrayBuilder<Symbol> members, string? name, string? alternativeName, int arity, LookupOptions options, ref PooledHashSet<MethodSymbol>? implementationsToShadow, ConsList<FieldSymbol> fieldsBeingBound)
453foreach (var candidate in candidates)
476static bool extensionMemberMatches(Symbol member, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
795internal ImmutableSegmentedDictionary<string, Symbol> AllRequiredMembers
803return ImmutableSegmentedDictionary<string, Symbol>.Empty;
817bool success = tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? builder);
820? builder?.ToImmutable() ?? BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty
825bool tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? requiredMembersBuilder)
833var baseAllRequiredMembers = BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
836foreach (var member in GetMembersUnordered())
851if (baseAllRequiredMembers.TryGetValue(member.Name, out var existingMember))
888public abstract override ImmutableArray<Symbol> GetMembers();
895public abstract override ImmutableArray<Symbol> GetMembers(string name);
904internal virtual ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
931internal virtual IEnumerable<Symbol> GetInstanceFieldsAndEvents()
936protected static Func<Symbol, bool> IsInstanceFieldOrEvent = symbol =>
982internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers();
992internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name);
1680internal override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1931foreach (var member in membersInterfaceForDefinition.GetMembers(WellKnownMemberNames.UnionFactoryMethodName))
1953foreach (var member in baseInterfaceForDefinition.GetMembers(WellKnownMemberNames.UnionFactoryMethodName))
Symbols\NativeIntegerTypeSymbol.cs (22)
28private ImmutableArray<Symbol> _lazyMembers;
44public override Symbol ContainingSymbol => _underlyingType.ContainingSymbol;
75public override ImmutableArray<Symbol> GetMembers()
83ImmutableArray<Symbol> makeMembers(ImmutableArray<Symbol> underlyingMembers)
85var builder = ArrayBuilder<Symbol>.GetInstance();
86foreach (var underlyingMember in underlyingMembers)
146public override ImmutableArray<Symbol> GetMembers(string name) => GetMembers().WhereAsArray((member, name) => member.Name == name, name);
158internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers() => throw ExceptionUtilities.Unreachable();
160internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name) => throw ExceptionUtilities.Unreachable();
257internal static bool EqualsHelper<TSymbol>(TSymbol symbol, Symbol? other, TypeCompareKind comparison, Func<TSymbol, Symbol> getUnderlyingSymbol)
258where TSymbol : Symbol
277internal static void VerifyEquality(Symbol symbolA, Symbol symbolB)
359public override Symbol ContainingSymbol => _container;
408public override Symbol? AssociatedSymbol => _associatedSymbol;
419public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol.UnderlyingMethod);
461public override Symbol ContainingSymbol => _container;
481public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingParameter);
517public override Symbol ContainingSymbol => _container;
535public 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))
1030foreach (Symbol otherMember in currType.GetMembers(method.Name))
1068private 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
492internal static void EnsureNullableAttributeExists(PEModuleBuilder moduleBuilder, Symbol container, ImmutableArray<ParameterSymbol> parameters)
497internal static void EnsureNullableAttributeExists(CSharpCompilation? compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation)
509private static void EnsureNullableAttributeExists(CSharpCompilation compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation, PEModuleBuilder? moduleBuilder)
530internal static void CheckUnderspecifiedGenericExtension(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics)
552static void reportUnusedExtensionTypeParameters(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics, NamedTypeSymbol extension, ParameterSymbol extensionParameter, PooledHashSet<TypeParameterSymbol> usedTypeParameters)
841Symbol? owner,
848Symbol? containingSymbol,
913Symbol owner,
1117internal static MethodSymbol FindContainingGenericMethod(Symbol symbol)
1119for (Symbol current = symbol; (object)current != null; current = current.ContainingSymbol)
Symbols\Source\SourceMemberContainerSymbol.cs (195)
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;
295Symbol containingSymbol = this.ContainingSymbol;
574internal override void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
678ImmutableArray<Symbol> members = this.GetMembersUnordered();
684foreach (var member in members)
692foreach (var member in members)
765foreach (var member in membersAndInitializers.NonTypeMembers)
809public sealed override Symbol ContainingSymbol
1003for (Symbol? container = this.ContainingType; !(container is null); container = container.ContainingType)
1164internal readonly ImmutableArray<Symbol> NonTypeMembers;
1173ImmutableArray<Symbol> nonTypeMembers,
1496private void CheckMemberNameDistinctFromType(Symbol member, BindingDiagnosticBag diagnostics)
1526static void checkContainingTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1534static void checkExtendedTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1567internal static bool HasAsyncMethodBuilderAttribute(Symbol symbol, [NotNullWhen(true)] out TypeSymbol? builderArgument)
1589internal override ImmutableArray<Symbol> GetMembersUnordered()
1603public override ImmutableArray<Symbol> GetMembers()
1625public sealed override ImmutableArray<Symbol> GetMembers(string name)
1627ImmutableArray<Symbol> members;
1633return ImmutableArray<Symbol>.Empty;
1644internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1651return ImmutableArray<Symbol>.Empty;
1664foreach (var m in this.GetMembers())
1694internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1706internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1708ImmutableArray<Symbol> result;
1709return GetEarlyAttributeDecodingMembersDictionary().TryGetValue(name.AsMemory(), out result) ? result : ImmutableArray<Symbol>.Empty;
1712private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetEarlyAttributeDecodingMembersDictionary()
1716if (Volatile.Read(ref _lazyMembersDictionary) is Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> result)
1726Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
1749private static Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> ToNameKeyedDictionary(ImmutableArray<Symbol> symbols)
1753return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(1, ReadOnlyMemoryOfCharComparer.Instance)
1761return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(ReadOnlyMemoryOfCharComparer.Instance);
1771foreach (var item in symbols)
1774var dictionary = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(accumulator.Count, ReadOnlyMemoryOfCharComparer.Instance);
1779dictionary.Add(pair.Key, pair.Value is ArrayBuilder<Symbol> arrayBuilder
1781: ImmutableArray.Create((Symbol)pair.Value));
1825internal void AssertMemberExposure(Symbol member, bool forDiagnostics = false)
1893static bool isMemberInCompleteMemberList(MembersAndInitializers? membersAndInitializers, Symbol member)
1900protected Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByName()
1910private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByNameSlow()
1928internal override IEnumerable<Symbol> GetInstanceFieldsAndEvents()
1932IEnumerable<Symbol> result = membersAndInitializers.NonTypeMembers.Where(IsInstanceFieldOrEvent);
2121foreach (var member in GetMembers())
2129foreach (var member in GetMembersAndInitializers().NonTypeMembers)
2143foreach (var member in GetMembers("Clone"))
2153Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2202Symbol? lastSym = typesByName?.TryGetValue(name, out var types) == true ? types.FirstOrDefault() : null;
2206foreach (var symbol in pair.Value)
2410BindingDiagnosticBag diagnostics, Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName)
2423foreach (var symbol in members)
2479Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2549Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2551ImmutableArray<Symbol> membersUnordered,
2566Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName;
2567ImmutableArray<Symbol> membersUnordered;
2578static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<string, NamedTypeSymbol> grouping)
2580Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName = null;
2581ImmutableArray<Symbol> membersUnordered = [];
2588Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByNameToMerge = ((SourceMemberContainerTypeSymbol)extension).GetMembersByName();
2608membersByName = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(membersByName, ReadOnlyMemoryOfCharComparer.Instance);
2638static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2648var membersBuilder = ArrayBuilder<Symbol>.GetInstance(existingMembers.Length + newMembers.Length);
2649var membersUnorderedBuilder = ArrayBuilder<Symbol>.GetInstance(membersUnordered.Length + newMembers.Length);
2654foreach (var member in newMembers)
2656Symbol toAdd = member.SymbolAsMember(extension);
2675foreach (var member in this.GetMembersUnordered())
2696foreach (var dup in GetMembers(tp.Name))
2707Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2708ImmutableArray<Symbol> membersUnordered,
2713foreach (Symbol symbol in membersUnordered)
2782foreach (var member in valuesByName)
2817var symbol = field.AssociatedSymbol ?? field;
2839foreach (var member in valuesByName)
2859Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2901Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2940Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2943if (membersByName.TryGetValue(operatorName1.AsMemory(), out ImmutableArray<Symbol> candidates))
3074foreach (var member in GetMembersUnordered())
3091foreach (var member in GetMembersUnordered())
3119foreach (var m in this.GetMembersUnordered())
3163foreach (var m in t.GetMembersUnordered())
3267private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> MakeAllMembers()
3269Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
3291Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
3296ImmutableArray<Symbol> typesAsSymbols = StaticCast<Symbol>.From(types);
3298ImmutableArray<Symbol> membersForName;
3312public ArrayBuilder<Symbol> NonTypeMembersWithPartialImplementations = ArrayBuilder<Symbol>.GetInstance();
3373public readonly ImmutableArray<Symbol> NonTypeMembersWithPartialImplementations;
3382private ImmutableArray<Symbol> _lazyNonTypeMembers;
3391ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations,
3451public ImmutableArray<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container)
3464private ArrayBuilder<Symbol>? NonTypeMembers;
3573public IReadOnlyCollection<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container, DeclaredMembersAndInitializers declaredMembers)
3575return NonTypeMembers ?? (IReadOnlyCollection<Symbol>)declaredMembers.GetNonTypeMembers(container);
3578public void AddNonTypeMember(SourceMemberContainerTypeSymbol container, Symbol member, DeclaredMembersAndInitializers declaredMembers)
3583NonTypeMembers = ArrayBuilder<Symbol>.GetInstance(declaredNonTypeMembers.Length + 1);
3590public void SetNonTypeMembers(ArrayBuilder<Symbol> members)
3731private void MergePartialMembersAndInitializeNonTypeMembers(ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations, ref ImmutableArray<Symbol> nonTypeMembers)
3735foreach (Symbol member in nonTypeMembersWithPartialImplementations)
3755var nonTypeMembersBuilder = ArrayBuilder<Symbol>.GetInstance(nonTypeMembersWithPartialImplementations.Length);
3761if (value is ArrayBuilder<Symbol> arrayBuilder)
3859ImmutableArray<Symbol> nonTypeMembersToCheck;
3878foreach (var member in nonTypeMembersToCheck)
3905internal ImmutableArray<Symbol> GetMembersToMatchAgainstDeclarationSpan()
3923internal ImmutableArray<Symbol> GetCandidateMembersForLookup(string name)
3933ImmutableArray<Symbol> nonTypeMembersToCheck;
3956ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3957ArrayBuilder<Symbol>? memberBuilder = null;
3959foreach (var member in nonTypeMembersToCheck)
3968memberBuilder ??= ArrayBuilder<Symbol>.GetInstance(types.Length + 1);
4018foreach (var member in type.GetMembers())
4140ArrayBuilder<Symbol> nonTypeMembers,
4144var membersBySignature = new Dictionary<Symbol, Symbol>(MemberSignatureComparer.PartialMethodsComparer);
4150if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4152foreach (var symbol in arrayBuilder)
4163if (!membersBySignature.TryGetValue(symbol, out var prev))
4200var symbol = (Symbol)pair.Value;
4211foreach (var symbol in membersBySignature.Values)
4265if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4267foreach (var symbol in arrayBuilder)
4274fixupNotMergedPartialProperty((Symbol)pair.Value);
4278static void fixupNotMergedPartialProperty(Symbol symbol)
4287static void mergePartialMethods(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol currentMethod, SourceOrdinaryMethodSymbol prevMethod, BindingDiagnosticBag diagnostics)
4307static void mergePartialProperties(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol currentProperty, SourcePropertySymbol prevProperty, BindingDiagnosticBag diagnostics)
4331void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertyAccessorSymbol? currentAccessor, SourcePropertyAccessorSymbol? prevAccessor)
4356static void mergePartialConstructors(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol currentConstructor, SourceConstructorSymbol prevConstructor, BindingDiagnosticBag diagnostics)
4376static void mergePartialEvents(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol currentEvent, SourceEventSymbol prevEvent, BindingDiagnosticBag diagnostics)
4397static void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourceEventAccessorSymbol? currentAccessor, SourceEventAccessorSymbol? prevAccessor)
4412private static void FixPartialMethod(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol part1, SourceOrdinaryMethodSymbol part2)
4434private static void FixPartialProperty(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol part1, SourcePropertySymbol part2)
4462private static void FixPartialConstructor(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol part1, SourceConstructorSymbol part2)
4484private static void FixPartialEvent(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol part1, SourceEventSymbol part2)
4505private static void Remove(ArrayBuilder<Symbol> symbols, Symbol symbol)
4509Symbol s = symbols[i];
4527Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4548foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4578Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4587foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4615var locationFrom = (Symbol)(getNotSet ? propertySymbol.GetMethod : propertySymbol.SetMethod) ?? propertySymbol;
4624var locationFrom = (Symbol?)(isAdder ? propertySymbol.AddMethod : propertySymbol.RemoveMethod) ?? propertySymbol;
4735private static void CheckInterfaceMembers(ImmutableArray<Symbol> nonTypeMembers, BindingDiagnosticBag diagnostics)
4737foreach (var member in nonTypeMembers)
4743private static void CheckInterfaceMember(Symbol member, BindingDiagnosticBag diagnostics)
4790private void CheckExtensionMembers(ImmutableArray<Symbol> members, LanguageVersion languageVersion, BindingDiagnosticBag diagnostics)
4792foreach (var member in members)
4799void checkExtensionMember(Symbol member, LanguageVersion languageVersion, BindingDiagnosticBag diagnostics)
4816internal static bool IsAllowedExtensionMember(Symbol member, LanguageVersion languageVersion)
4863ArrayBuilder<Symbol> members,
4867foreach (var s in members)
4909var symbol = initializer.FieldOpt.AssociatedSymbol ?? initializer.FieldOpt;
4937var members = ArrayBuilder<Symbol>.GetInstance(membersSoFar.Count + 1);
5050var fieldsByName = PooledDictionary<string, Symbol>.GetInstance();
5052foreach (var member in membersSoFar)
5147void addDeconstruct(SynthesizedPrimaryConstructor ctor, ImmutableArray<Symbol> positionalMembers)
5170if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingDeconstructMethod))
5218if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingConstructor))
5249MethodSymbol addPrintMembersMethod(IEnumerable<Symbol> userDefinedMembers)
5271if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingPrintMembersMethod))
5342if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingToStringMethod))
5365var objectToString = this.DeclaringCompilation.GetSpecialTypeMember(SpecialMember.System_Object__ToString);
5369foreach (var member in currentBaseType.GetSimpleNonTypeMembers(WellKnownMemberNames.ObjectToString))
5385ImmutableArray<Symbol> addProperties(ImmutableArray<ParameterSymbol> recordParameters)
5387var existingOrAddedMembers = ArrayBuilder<Symbol>.GetInstance(recordParameters.Length);
5402if (!memberSignatures.TryGetValue(targetProperty, out var existingMember)
5467bool checkMemberNotHidden(Symbol symbol, ParameterSymbol param)
5501if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingHashCodeMethod))
5531if (!memberSignatures.TryGetValue(targetProperty, out Symbol? existingEqualityContractProperty))
5600if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingEqualsMethod))
5625void reportStaticOrNotOverridableAPIInRecord(Symbol symbol, BindingDiagnosticBag diagnostics)
5666foreach (var member in membersSoFar)
5748foreach (var synthesizedMember in synthesizedMembers)
6128private void AddAccessorIfAvailable(ArrayBuilder<Symbol> symbols, MethodSymbol? accessorOpt)
6177foreach (var member in GetMembersUnordered())
6291foreach (var member in this.GetMembersUnordered())
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (35)
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);
534foreach (var member in this.GetMembersUnordered())
685private void CheckNewModifier(Symbol symbol, bool isNew, BindingDiagnosticBag diagnostics)
717foreach (var hiddenMember in currType.GetMembers(symbol.Name))
757Symbol overridingMember,
794Symbol associatedPropertyOrEvent = null;
883void checkSingleOverriddenMember(Symbol overridingMember, Symbol overriddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
944var leastOverriddenMember = overriddenMember.GetLeastOverriddenMember(this);
1234private bool IsValidOverrideReturnType(Symbol overridingSymbol, TypeWithAnnotations overridingReturnType, TypeWithAnnotations overriddenReturnType, BindingDiagnosticBag diagnostics)
1566Symbol? implementedMember,
1567Symbol? overridingMember,
1580var leastOverriddenMember = implementedMember ?? overridingMember.GetLeastOverriddenMember(overridingMember.ContainingType);
1590Symbol overriddenMember,
1591Symbol overridingMember)
1622Symbol hidingMember,
1652foreach (var hiddenMember in hiddenMembers)
1702private static bool IsShadowingSynthesizedRecordMember(Symbol hidingMember)
1711private static bool AddHidingAbstractDiagnostic(Symbol hidingMember, Location hidingMemberLocation, Symbol hiddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
1746var associatedPropertyOrEvent = ((MethodSymbol)hidingMember).AssociatedSymbol;
1777private static bool OverrideHasCorrectAccessibility(Symbol overridden, Symbol overriding)
1865SynthesizeInterfaceMemberImplementation(SymbolAndDiagnostics implementingMemberAndDiagnostics, Symbol interfaceMember)
1875Symbol implementingMember = implementingMemberAndDiagnostics.Symbol;
Symbols\SubstitutedNamedTypeSymbol.cs (32)
27private static readonly Func<Symbol, NamedTypeSymbol, Symbol> s_symbolAsMemberFunc = SymbolExtensions.SymbolAsMember;
38private readonly Symbol _newContainer;
53private ConcurrentCache<string, ImmutableArray<Symbol>> _lazyMembersByNameCache;
55private ImmutableArray<Symbol> _lazyMembers;
57protected SubstitutedNamedTypeSymbol(Symbol newContainer, TypeMap map, NamedTypeSymbol originalDefinition, NamedTypeSymbol constructedFrom = null, bool unbound = false, TupleExtraData tupleData = null)
126public sealed override Symbol ContainingSymbol
189internal abstract override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
240public sealed override ImmutableArray<Symbol> GetMembers()
247var builder = ArrayBuilder<Symbol>.GetInstance();
252foreach (var t in OriginalDefinition.GetMembers())
262foreach (var t in OriginalDefinition.GetMembers())
275private ArrayBuilder<Symbol> AddOrWrapTupleMembersIfNecessary(ArrayBuilder<Symbol> builder)
280var replacedFields = new HashSet<Symbol>(ReferenceEqualityComparer.Instance);
282foreach (var existingMember in existingMembers)
296internal sealed override ImmutableArray<Symbol> GetMembersUnordered()
298var builder = ArrayBuilder<Symbol>.GetInstance();
302foreach (var t in OriginalDefinition.GetMembersUnordered())
312foreach (var t in OriginalDefinition.GetMembersUnordered())
323public sealed override ImmutableArray<Symbol> GetMembers(string name)
325if (_unbound) return StaticCast<Symbol>.From(GetTypeMembers(name));
327ImmutableArray<Symbol> result;
337private ImmutableArray<Symbol> GetMembersWorker(string name)
352var builder = ArrayBuilder<Symbol>.GetInstance(originalMembers.Length);
353foreach (var t in originalMembers)
362void cacheResult(ImmutableArray<Symbol> result)
368(_lazyMembersByNameCache = new ConcurrentCache<string, ImmutableArray<Symbol>>(8));
396internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
403internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
407var builder = ArrayBuilder<Symbol>.GetInstance();
408foreach (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
780public static bool operator ==(Symbol left, Symbol right)
802public static bool operator !=(Symbol left, Symbol right)
825return this.Equals(obj as Symbol, SymbolEqualityComparer.Default.CompareKind);
828public bool Equals(Symbol other)
835return this.Equals(other as Symbol, compareKind);
839public virtual bool Equals(Symbol other, TypeCompareKind compareKind)
850public static bool Equals(Symbol first, Symbol second, TypeCompareKind compareKind)
975internal static void ForceCompleteMemberConditionally(SourceLocation? locationOpt, Predicate<Symbol>? filter, Symbol member, CancellationToken cancellationToken)
1356internal static bool GetUnificationUseSiteDiagnosticRecursive<T>(ref DiagnosticInfo result, ImmutableArray<T> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes) where T : TypeSymbol
1369internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeWithAnnotations> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1382internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<CustomModifier> modifiers, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1395internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<ParameterSymbol> parameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1409internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeParameterSymbol> typeParameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1748internal static bool IsCaptured(Symbol variable, SourceMethodSymbol containingSymbol)
1799for (var currentFunction = variable.ContainingSymbol;
Symbols\SymbolExtensions.cs (56)
25public static bool IsCompilationOutputWinMdObj(this Symbol symbol)
40public static bool IsNestedType([NotNullWhen(true)] this Symbol? symbol)
88public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
93public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeWithAnnotations type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
98internal static void AddUseSiteInfo(this Symbol? symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool addDiagnostics = true)
121public static LocalizableErrorArgument GetKindText(this Symbol symbol)
130internal static NamespaceOrTypeSymbol? ContainingNamespaceOrType(this Symbol symbol)
132var containingSymbol = symbol.ContainingSymbol;
146internal static Symbol? ContainingNonLambdaMember(this Symbol? containingMember)
158internal static ParameterSymbol? EnclosingThisSymbol(this Symbol containingMember)
160Symbol symbol = containingMember;
200public static Symbol ConstructedFrom(this Symbol symbol)
220public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, TypeSymbol type)
229public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, ImmutableArray<TypeSymbol> types)
234private static readonly Func<TypeSymbol, Symbol, bool, bool> s_hasInvalidTypeParameterFunc =
237private static bool HasInvalidTypeParameter(TypeSymbol type, Symbol? containingSymbol)
241var symbol = type.ContainingSymbol;
254public static bool IsTypeOrTypeAlias(this Symbol symbol)
274internal static bool CompilationAllowsUnsafe(this Symbol symbol)
279internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, BindingDiagnosticBag diagnostics)
284internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, BindingDiagnosticBag diagnostics)
287internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, DiagnosticBag? diagnostics)
301public static bool IsHiddenByCodeAnalysisEmbeddedAttribute(this Symbol symbol)
318public static bool MustCallMethodsDirectly(this Symbol symbol)
331public static int GetArity(this Symbol? symbol)
347internal static CSharpSyntaxNode GetNonNullSyntaxNode(this Symbol? symbol)
355Symbol? containingSymbol = symbol.ContainingSymbol;
372internal static Symbol? EnsureCSharpSymbolOrNull(this ISymbol? symbol, string paramName)
431internal static TypeWithAnnotations GetTypeOrReturnType(this Symbol symbol)
463internal static FlowAnalysisAnnotations GetFlowAnalysisAnnotations(this Symbol? symbol)
475internal static void GetTypeOrReturnType(this Symbol symbol, out RefKind refKind, out TypeWithAnnotations returnType,
526internal static bool IsImplementableInterfaceMember(this Symbol symbol)
531internal static bool RequiresInstanceReceiver(this Symbol symbol)
544private static TISymbol? GetPublicSymbol<TISymbol>(this Symbol? symbol)
551internal static ISymbol? GetPublicSymbol(this Symbol? symbol)
676internal static IEnumerable<ISymbol?> GetPublicSymbols(this IEnumerable<Symbol?> symbols)
681private static ImmutableArray<TISymbol> GetPublicSymbols<TISymbol>(this ImmutableArray<Symbol> symbols)
692internal static ImmutableArray<ISymbol> GetPublicSymbols(this ImmutableArray<Symbol> symbols)
699return GetPublicSymbols<IPropertySymbol>(StaticCast<Symbol>.From(symbols));
704return GetPublicSymbols<ITypeSymbol>(StaticCast<Symbol>.From(symbols));
709return GetPublicSymbols<INamedTypeSymbol>(StaticCast<Symbol>.From(symbols));
714return GetPublicSymbols<ILocalSymbol>(StaticCast<Symbol>.From(symbols));
719return GetPublicSymbols<IEventSymbol>(StaticCast<Symbol>.From(symbols));
724return GetPublicSymbols<ITypeParameterSymbol>(StaticCast<Symbol>.From(symbols));
729return GetPublicSymbols<IParameterSymbol>(StaticCast<Symbol>.From(symbols));
734return GetPublicSymbols<IMethodSymbol>(StaticCast<Symbol>.From(symbols));
739return GetPublicSymbols<IAssemblySymbol>(StaticCast<Symbol>.From(symbols));
744return GetPublicSymbols<IFieldSymbol>(StaticCast<Symbol>.From(symbols));
749return GetPublicSymbols<INamespaceSymbol>(StaticCast<Symbol>.From(symbols));
754where TSymbol : Symbol
760internal static Symbol? GetSymbol(this ISymbol? symbol)
762return symbol.GetSymbol<Symbol>();
813internal static bool IsRequired(this Symbol symbol) => symbol is FieldSymbol { IsRequired: true } or PropertySymbol { IsRequired: true };
818internal 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)
44private ImmutableHashSet<Symbol> _lazyAbstractMembers;
62private ConcurrentDictionary<Symbol, SymbolAndDiagnostics> _implementationForInterfaceMemberMap;
64public ConcurrentDictionary<Symbol, SymbolAndDiagnostics> ImplementationForInterfaceMemberMap
75map = new ConcurrentDictionary<Symbol, SymbolAndDiagnostics>(concurrencyLevel: 1, capacity: 1, comparer: SymbolEqualityComparer.ConsiderEverything);
85internal MultiDictionary<Symbol, Symbol> explicitInterfaceImplementationMap;
148protected sealed override Symbol OriginalSymbolDefinition
300public sealed override bool Equals(Symbol other, TypeCompareKind compareKind)
444public Symbol FindImplementationForInterfaceMember(Symbol interfaceMember)
533internal abstract bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
724internal SymbolAndDiagnostics FindImplementationForInterfaceMemberInNonInterfaceWithDiagnostics(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
775internal Symbol FindImplementationForInterfaceMemberInNonInterface(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
780private SymbolAndDiagnostics ComputeImplementationAndDiagnosticsForInterfaceMember(Symbol interfaceMember, bool ignoreImplementationInInterfaces, out bool implementationInInterfacesMightChangeResult)
783var implementingMember = ComputeImplementationForInterfaceMember(interfaceMember, this, diagnostics, ignoreImplementationInInterfaces, out implementationInInterfacesMightChangeResult);
806private static Symbol ComputeImplementationForInterfaceMember(Symbol interfaceMember, TypeSymbol implementingType, BindingDiagnosticBag diagnostics,
834Symbol implicitImpl = null;
835Symbol closestMismatch = null;
850MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = currType.GetExplicitImplementationForInterfaceMember(interfaceMember);
882if (IsExplicitlyImplementedViaAccessors(checkPendingExplicitImplementations, interfaceMember, currType, ref useSiteInfo, out Symbol currTypeExplicitImpl))
920Symbol currTypeImplicitImpl;
921Symbol currTypeCloseMismatch;
958Symbol originalImplicitImpl = implicitImpl;
968Symbol defaultImpl = null;
1058private static Symbol FindMostSpecificImplementationInInterfaces(Symbol interfaceMember, TypeSymbol implementingType,
1073Symbol defaultImpl = FindMostSpecificImplementationInBases(interfaceMember,
1075ref useSiteInfo, out Symbol conflict1, out Symbol conflict2);
1111private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1113MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1130out var _, out var _);
1133Symbol result = implementingMember.Single();
1152private static Symbol FindMostSpecificImplementationInBases(
1153Symbol interfaceMember,
1156out Symbol conflictingImplementation1,
1157out Symbol conflictingImplementation2)
1181Symbol accessorImpl1 = findMostSpecificImplementationInBases(interfaceAccessor1 ?? interfaceAccessor2, allInterfaces, ref useSiteInfo,
1182out Symbol conflictingAccessorImplementation11, out Symbol conflictingAccessorImplementation12);
1212Symbol accessorImpl2 = findMostSpecificImplementationInBases(interfaceAccessor2, allInterfaces, ref useSiteInfo,
1213out Symbol conflictingAccessorImplementation21, out Symbol conflictingAccessorImplementation22);
1243static Symbol findImplementationInInterface(Symbol interfaceMember, Symbol inplementingAccessor1, Symbol implementingAccessor2 = null)
1253MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1264static Symbol findMostSpecificImplementationInBases(
1265Symbol interfaceMember,
1268out Symbol conflictingImplementation1,
1269out Symbol conflictingImplementation2)
1271var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1281MultiDictionary<Symbol, Symbol>.ValueSet candidate = FindImplementationInInterface(interfaceMember, interfaceType);
1290(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1291Symbol previous = methodSet.First();
1343Symbol result;
1353MultiDictionary<Symbol, Symbol>.ValueSet methodSet = implementations[0].MethodSet;
1383internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1397return new MultiDictionary<Symbol, Symbol>.ValueSet(interfaceMember);
1406private static (MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) GetImplementableAccessors(Symbol interfaceMember)
1467private static bool IsExplicitlyImplementedViaAccessors(bool checkPendingExplicitImplementations, Symbol interfaceMember, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol implementingMember)
1471Symbol associated1;
1472Symbol associated2;
1504private static bool TryGetExplicitImplementationAssociatedPropertyOrEvent(bool checkPendingExplicitImplementations, MethodSymbol interfaceAccessor, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol associated)
1510MultiDictionary<Symbol, Symbol>.ValueSet set = currType.GetExplicitImplementationForInterfaceMember(interfaceAccessor);
1513Symbol implementation = set.Single();
1549ref Symbol implicitImpl)
1554Symbol associatedInterfacePropertyOrEvent = interfaceMethod.AssociatedSymbol;
1565Symbol implementingPropertyOrEvent = implementingType.FindImplementationForInterfaceMemberInNonInterface(associatedInterfacePropertyOrEvent,
1631private static void ReportDefaultInterfaceImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1679private static void ReportImplicitImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1734foreach (Symbol member in implicitImpl.ContainingType.GetMembers(implicitImpl.Name))
1774internal static void CheckModifierMismatchOnImplementingMember(TypeSymbol implementingType, Symbol implementingMember, Symbol interfaceMember, bool isExplicit, BindingDiagnosticBag diagnostics)
1989static void checkRefStructInterfacesFeatureAvailabilityOnUnscopedRefAttribute(Symbol implementingSymbol, BindingDiagnosticBag diagnostics)
2008private static void ReportImplicitImplementationMismatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol closestMismatch, BindingDiagnosticBag diagnostics)
2085internal static bool HaveInitOnlyMismatch(Symbol one, Symbol other)
2103private static Location GetInterfaceLocation(Symbol interfaceMember, TypeSymbol implementingType)
2163internal static Location GetImplicitImplementationDiagnosticLocation(Symbol interfaceMember, TypeSymbol implementingType, Symbol member)
2193Symbol interfaceMember,
2196out Symbol implicitImpl,
2197out Symbol closeMismatch)
2209foreach (Symbol member in currType.GetMembers(interfaceMember.Name))
2266private static bool IsInterfaceMemberImplementation(Symbol candidateMember, Symbol interfaceMember, bool implementingTypeIsFromSomeCompilation)
2295protected MultiDictionary<Symbol, Symbol>.ValueSet GetExplicitImplementationForInterfaceMember(Symbol interfaceMember)
2311private MultiDictionary<Symbol, Symbol> MakeExplicitInterfaceImplementationMap()
2313var map = new MultiDictionary<Symbol, Symbol>(ExplicitInterfaceImplementationTargetMemberEqualityComparer.Instance);
2314foreach (var member in this.GetMembersUnordered())
2316foreach (var interfaceMember in member.GetExplicitInterfaceImplementations())
2382protected class ExplicitInterfaceImplementationTargetMemberEqualityComparer : IEqualityComparer<Symbol>
2387public bool Equals(Symbol x, Symbol y)
2393public int GetHashCode(Symbol obj)
2406internal ImmutableHashSet<Symbol> AbstractMembers
2418private ImmutableHashSet<Symbol> ComputeAbstractMembers()
2420var abstractMembers = ImmutableHashSet.Create<Symbol>();
2421var overriddenMembers = ImmutableHashSet.Create<Symbol>();
2423foreach (var member in this.GetMembersUnordered())
2430Symbol overriddenMember = null;
2458foreach (var baseAbstractMember in this.BaseTypeNoUseSiteDiagnostics.AbstractMembers)
2499public static bool operator ==(Symbol left, TypeSymbol right)
2503public static bool operator !=(Symbol left, TypeSymbol right)
2507public static bool operator ==(TypeSymbol left, Symbol right)
2511public static bool operator !=(TypeSymbol left, Symbol right)
Symbols\TypeSymbolExtensions.cs (13)
20public Symbol? Symbol;
592private static bool IsNamespaceName(Symbol symbol, string[] names)
714public static bool IsAtLeastAsVisibleAs(this TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
719public static TypeSymbol? FindTypeLessVisibleThan(this TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
743private static bool IsTypeLessVisibleThan(TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1048internal static bool IsAsRestrictive(this Symbol s1, Symbol sym2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1057for (Symbol s2 = sym2; s2.Kind != SymbolKind.Namespace; s2 = s2.ContainingSymbol)
1253public static bool ContainsTypeParameter(this TypeSymbol type, Symbol typeParameterContainer)
1261private static readonly Func<TypeSymbol, Symbol, bool, bool> s_isTypeParameterWithSpecificContainerPredicate =
1824internal static TypeParameterSymbol? FindEnclosingTypeParameter(this Symbol methodOrType, string name)
1861var container = type.ContainingSymbol;
2170Symbol declaringSymbol,