Binder\Binder_Conversions.cs (7)
316if (conversion.IsUserDefined && conversion.Method is MethodSymbol method && method.IsStatic)
739private static void CheckValidScopedMethodConversion(SyntaxNode syntax, MethodSymbol lambdaOrMethod, TypeSymbol targetType, bool invokedAsExtensionMethod, BindingDiagnosticBag diagnostics)
741MethodSymbol? delegateMethod;
1046private bool MemberGroupFinalValidation(BoundExpression? receiverOpt, MethodSymbol methodSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod)
1274internal bool MethodIsCompatibleWithDelegateOrFunctionPointer(BoundExpression? receiverOpt, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, Location errorLocation, BindingDiagnosticBag diagnostics)
1280MethodSymbol delegateOrFuncPtrMethod = delegateType switch
1445MethodSymbol selectedMethod = conversion.Method;
Binder\Binder_Expressions.cs (72)
1276MethodSymbol method = this.ContainingMember() as MethodSymbol;
1781var containingMethod = this.ContainingMemberOrLambda as MethodSymbol;
1918(this.ContainingMember() is MethodSymbol { MethodKind: MethodKind.Constructor } containingMember && (object)containingMember != primaryCtor)) && // We are in a non-primary instance constructor
1939bool capture = (this.ContainingMember() is MethodSymbol containingMethod && (object)primaryCtor != containingMethod);
1948this.ContainingMemberOrLambda is MethodSymbol { MethodKind: MethodKind.AnonymousFunction or MethodKind.LocalFunction } &&
2380MethodSymbol symbolOpt = GetWellKnownTypeMember(WellKnownMember.System_Index__ctor, diagnostics, syntax: node) as MethodSymbol;
2390MethodSymbol symbolOpt = null;
2415symbolOpt = (MethodSymbol)GetWellKnownTypeMember(
2424symbolOpt = (MethodSymbol)GetWellKnownTypeMember(
2545ImmutableArray<MethodSymbol> originalUserDefinedConversions = conversion.OriginalUserDefinedConversions;
3029&& ((MethodSymbol)containingSymbol).IsAsync
4067MethodSymbol constructor,
4091MethodSymbol constructor,
4230MemberResolutionResult<MethodSymbol> memberResolutionResult;
4231ImmutableArray<MethodSymbol> candidateConstructors;
4243MethodSymbol resultMember = memberResolutionResult.Member;
4371static void validateRecordCopyConstructor(MethodSymbol constructor, NamedTypeSymbol baseType, MethodSymbol resultMember, Location errorLocation, BindingDiagnosticBag diagnostics)
4395internal static bool IsUserDefinedRecordCopyConstructor(MethodSymbol constructor)
5211MethodSymbol constructor,
5510applicableMethods: ImmutableArray<MethodSymbol>.Empty,
5571internal ImmutableArray<MethodSymbol> FilterInaccessibleConstructors(ImmutableArray<MethodSymbol> constructors, bool allowProtectedConstructorsOfBaseType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
5573ArrayBuilder<MethodSymbol> builder = null;
5577MethodSymbol constructor = constructors[i];
5583builder = ArrayBuilder<MethodSymbol>.GetInstance();
5596private bool IsConstructorAccessible(MethodSymbol constructor, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool allowProtectedConstructorsOfBaseType = false)
5661OverloadResolutionResult<MethodSymbol> overloadResolutionResult = OverloadResolutionResult<MethodSymbol>.GetInstance();
5701out MemberResolutionResult<MethodSymbol> memberResolutionResult,
5702out ImmutableArray<MethodSymbol> candidateConstructors,
5707var method = memberResolutionResult.Member;
6025out MemberResolutionResult<MethodSymbol> memberResolutionResult,
6026out ImmutableArray<MethodSymbol> candidateConstructors,
6031ImmutableArray<MethodSymbol> allInstanceConstructors;
6035OverloadResolutionResult<MethodSymbol> result = OverloadResolutionResult<MethodSymbol>.GetInstance();
6060OverloadResolutionResult<MethodSymbol> inaccessibleResult = OverloadResolutionResult<MethodSymbol>.GetInstance();
6080this.CoerceArguments<MethodSymbol>(result.ValidResult, analyzedArguments.Arguments, diagnostics, receiver: null);
6086default(MemberResolutionResult<MethodSymbol>); // Invalid results are not interesting - we have enough info in candidateConstructors.
6158private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
6160ImmutableArray<MethodSymbol> allInstanceConstructors;
6164private ImmutableArray<MethodSymbol> GetAccessibleConstructorsForOverloadResolution(NamedTypeSymbol type, bool allowProtectedConstructorsOfBaseType, out ImmutableArray<MethodSymbol> allInstanceConstructors, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
6837var method = resolution.MethodGroup.Methods[0];
6913lookupResult.Symbols.All(s => s.Kind == SymbolKind.Method) ? lookupResult.Symbols.SelectAsArray(s_toMethodSymbolFunc) : ImmutableArray<MethodSymbol>.Empty,
7061var builder = ArrayBuilder<MethodSymbol>.GetInstance();
7064var m = s as MethodSymbol;
7325var overloadResolutionResult = OverloadResolutionResult<MethodSymbol>.GetInstance();
8697var substring = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_String__Substring, diagnostics, syntax);
8728candidate is MethodSymbol method &&
8749void makeCall(SyntaxNode syntax, BoundExpression receiver, MethodSymbol method,
8830property.GetOwnOrInheritedGetMethod()?.OriginalDefinition is MethodSymbol getMethod &&
9031var method = node.LookupSymbolOpt as MethodSymbol;
9069var result = OverloadResolutionResult<MethodSymbol>.GetInstance();
9095var method = GetUniqueSignatureFromMethodGroup(node);
9109private MethodSymbol? GetUniqueSignatureFromMethodGroup(BoundMethodGroup node)
9111MethodSymbol? method = null;
9112foreach (var m in node.Methods)
9138foreach (var m in methodGroup.Methods)
9165static bool isCandidateUnique(ref MethodSymbol? method, MethodSymbol candidate)
9184MethodSymbol methodSymbol,
9304MethodSymbol invoke = possibleDelegateType.DelegateInvokeMethod();
9428return symbol is MethodSymbol method &&
Binder\Binder_Invocation.cs (27)
41private static ImmutableArray<MethodSymbol> GetOriginalMethods(OverloadResolutionResult<MethodSymbol> overloadResolutionResult)
51return ImmutableArray<MethodSymbol>.Empty;
54var builder = ArrayBuilder<MethodSymbol>.GetInstance();
266result = BindDynamicInvocation(node, boundExpression, analyzedArguments, ImmutableArray<MethodSymbol>.Empty, diagnostics, queryClause);
308ImmutableArray<MethodSymbol> applicableMethods,
524var overloadResolutionResult = OverloadResolutionResult<MethodSymbol>.GetInstance();
551private static bool HasApplicableConditionalMethod(OverloadResolutionResult<MethodSymbol> results)
588ImmutableArray<MethodSymbol> originalMethods;
733var localFunction = validResult.Member;
834(typeArgumentsOpt.IsDefault || ((MethodSymbol)(object)result.Member).CheckConstraints(new ConstraintsHelper.CheckConstraintsArgs(this.Compilation, this.Conversions, includeNullability: false, syntax.Location, candidateDiagnostics))))
938OverloadResolutionResult<MethodSymbol> result,
1014var method = methodResult.Member;
1194if (GetWellKnownTypeMember(Compilation, WellKnownMember.System_Runtime_InteropServices_UnknownWrapper__ctor, diagnostics, syntax: syntax) is MethodSymbol methodSymbol)
1203if (GetWellKnownTypeMember(Compilation, WellKnownMember.System_Runtime_InteropServices_DispatchWrapper__ctor, diagnostics, syntax: syntax) is MethodSymbol methodSymbol)
1471internal bool CheckImplicitThisCopyInReadOnlyMember(BoundExpression receiver, MethodSymbol method, BindingDiagnosticBag diagnostics)
1477ContainingMemberOrLambda is MethodSymbol containingMethod &&
1594ImmutableArray<MethodSymbol> methods,
1601MethodSymbol method;
1605var constructedMethods = ArrayBuilder<MethodSymbol>.GetInstance();
1606foreach (var m in methods)
1634private static bool IsUnboundGeneric(MethodSymbol method)
1644private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<MethodSymbol> methods)
1647foreach (var m in methods)
1838MethodSymbol method = new ErrorMethodSymbol(methodContainer, returnType, string.Empty);
1843var originalMethods = (expr.Kind == BoundKind.MethodGroup) ? ((BoundMethodGroup)expr).Methods : ImmutableArray<MethodSymbol>.Empty;
2045BuildArgumentsForErrorRecovery(analyzedArguments, StaticCast<MethodSymbol>.From(methods)),
Binder\Binder_Operators.cs (27)
122ImmutableArray<MethodSymbol> originalUserDefinedOperators;
284MethodSymbol method = isAddition ? eventSymbol.AddMethod : eventSymbol.RemoveMethod;
388MethodSymbol userDefinedOperator = null;
578ImmutableArray<MethodSymbol> originalUserDefinedOperators;
669out LookupResultKind resultKind, out ImmutableArray<MethodSymbol> originalUserDefinedOperators,
933ImmutableArray<MethodSymbol> originalUserDefinedOperators;
959MethodSymbol trueOperator = null, falseOperator = null;
1020private bool IsValidDynamicCondition(BoundExpression left, bool isNegative, BindingDiagnosticBag diagnostics, out MethodSymbol userDefinedOperator)
1072out MethodSymbol trueOperator,
1073out MethodSymbol falseOperator)
1127MethodSymbol definition;
1235private bool HasApplicableBooleanOperator(NamedTypeSymbol containingType, string name, TypeSymbol argumentType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out MethodSymbol @operator)
1242var op = operators[i];
1283out ImmutableArray<MethodSymbol> originalUserDefinedOperators)
1288originalUserDefinedOperators = default(ImmutableArray<MethodSymbol>);
1301var builder = ArrayBuilder<MethodSymbol>.GetInstance();
1304MethodSymbol method = analysisResult.Signature.Method;
1327originalUserDefinedOperators = ImmutableArray<MethodSymbol>.Empty;
1341private void ReportObsoleteAndFeatureAvailabilityDiagnostics(MethodSymbol operatorMethod, CSharpSyntaxNode node, BindingDiagnosticBag diagnostics)
1383out ImmutableArray<MethodSymbol> originalUserDefinedOperators)
1394var builder = ArrayBuilder<MethodSymbol>.GetInstance();
1397MethodSymbol method = analysisResult.Signature.Method;
1436originalUserDefinedOperators = ImmutableArray<MethodSymbol>.Empty;
2272originalUserDefinedOperatorsOpt: default(ImmutableArray<MethodSymbol>),
2278ImmutableArray<MethodSymbol> originalUserDefinedOperators;
2349private bool CheckConstraintLanguageVersionAndRuntimeSupportForOperator(SyntaxNode node, MethodSymbol? methodOpt, bool isUnsignedRightShift, TypeSymbol? constrainedToTypeOpt, BindingDiagnosticBag diagnostics)
2725ImmutableArray<MethodSymbol> originalUserDefinedOperators;
Binder\Binder_Patterns.cs (16)
967MethodSymbol? deconstructMethod = null;
996ShouldUseITupleForRecursivePattern(node, declType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
1039private MethodSymbol? BindDeconstructSubpatterns(
1048var deconstructMethod = deconstruct.ExpressionSymbol as MethodSymbol;
1191[NotNullWhen(true)] out MethodSymbol? iTupleGetLength,
1192[NotNullWhen(true)] out MethodSymbol? iTupleGetItem)
1229[NotNullWhen(true)] out MethodSymbol? iTupleGetLength,
1230[NotNullWhen(true)] out MethodSymbol? iTupleGetItem)
1260iTupleGetLength = (MethodSymbol?)Compilation.GetWellKnownTypeMember(WellKnownMember.System_Runtime_CompilerServices_ITuple__get_Length);
1261iTupleGetItem = (MethodSymbol?)Compilation.GetWellKnownTypeMember(WellKnownMember.System_Runtime_CompilerServices_ITuple__get_Item);
1367MethodSymbol? deconstructMethod = null;
1392ShouldUseITuple(node, strippedInputType, diagnostics, out var iTupleType, out var iTupleGetLength, out var iTupleGetItem))
1405deconstructMethod = deconstruct.ExpressionSymbol as MethodSymbol;
Binder\Binder_Statements.cs (38)
220var method = (MethodSymbol)this.ContainingMemberOrLambda;
479new SourceLabelSymbol((MethodSymbol)ContainingMemberOrLambda, node.Identifier);
634private bool ImplicitReturnIsOkay(MethodSymbol method)
745/// Checks for a Dispose method on <paramref name="expr"/> and returns its <see cref="MethodSymbol"/> if found.
750/// <returns>The <see cref="MethodSymbol"/> of the Dispose method if one is found, otherwise null.</returns>
751internal MethodSymbol TryFindDisposePatternMethod(BoundExpression expr, SyntaxNode syntaxNode, bool hasAwait, BindingDiagnosticBag diagnostics)
761out var disposeMethod);
1252MethodSymbol fixedPatternMethod = null;
1329private MethodSymbol GetFixedPatternMethodOpt(BoundExpression initializer, BindingDiagnosticBag additionalDiagnostics)
1338var result = PerformPatternMethodLookup(initializer, methodName, initializer.Syntax, additionalDiagnostics, out var patternMethodSymbol);
1366MethodSymbol patternMethodOpt,
1786return (member as MethodSymbol)?.MethodKind == (isStatic ?
2234ImmutableArray<MethodSymbol> originalUserDefinedConversions = conversion.OriginalUserDefinedConversions;
2605var best = this.UnaryOperatorOverloadResolution(UnaryOperatorKind.True, expr, node, diagnostics, out LookupResultKind resultKind, out ImmutableArray<MethodSymbol> originalUserDefinedOperators);
2831protected static bool IsInAsyncMethod(MethodSymbol method)
2838return IsInAsyncMethod(this.ContainingMemberOrLambda as MethodSymbol);
2844return symbol?.Kind == SymbolKind.Method && ((MethodSymbol)symbol).IsAsyncEffectivelyReturningTask(this.Compilation);
2850return symbol?.Kind == SymbolKind.Method && ((MethodSymbol)symbol).IsAsyncEffectivelyReturningGenericTask(this.Compilation);
2858var method = (MethodSymbol)symbol;
2867var symbol = this.ContainingMemberOrLambda as MethodSymbol;
3422var inferringLambda = this.ContainingMemberOrLambda is MethodSymbol method && (object)method.ReturnType == LambdaSymbol.ReturnTypeIsBeingInferred;
3605BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics);
3626if (isInstanceConstructor(out MethodSymbol constructorSymbol) &&
3657bool isInstanceConstructor(out MethodSymbol constructorSymbol)
3659if (this.ContainingMember() is MethodSymbol { IsStatic: false } method)
3671BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics);
3683initializerInvocation = BindImplicitConstructorInitializer((MethodSymbol)this.ContainingMember(), diagnostics, Compilation);
3691var constructorInitializer = new BoundExpressionStatement(ctorSyntax, initializerInvocation) { WasCompilerGenerated = ((MethodSymbol)ContainingMember()).IsImplicitlyDeclared };
3704MethodSymbol constructor, BindingDiagnosticBag diagnostics, CSharpCompilation compilation)
3816internal static BoundCall? GenerateBaseParameterlessConstructorInitializer(MethodSymbol constructor, BindingDiagnosticBag diagnostics)
3819MethodSymbol? baseConstructor = null;
3823foreach (MethodSymbol ctor in baseType.InstanceConstructors)
3884MethodSymbol? baseConstructor = SynthesizedRecordCopyCtor.FindCopyConstructor(baseType, containingType, ref useSiteInfo);
4000SyntaxNode syntaxNode, BindingDiagnosticBag diagnostics, out MethodSymbol result)
4061var patternMethodSymbol = call.Method;
Binder\ForEachLoopBinder.cs (35)
73(MethodSymbol)this.ContainingMemberOrLambda,
219MethodSymbol getEnumeratorMethod = builder.GetEnumeratorInfo?.Method;
460ImmutableArray<MethodSymbol> originalUserDefinedConversions = elementConversionClassification.OriginalUserDefinedConversions;
655MethodSymbol nullableValueGetter = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Nullable_T_get_Value, diagnostics, exprSyntax);
863MethodSymbol getEnumeratorMethod = builder.GetEnumeratorInfo.Method;
900MethodSymbol getEnumeratorMethod;
905getEnumeratorMethod = (MethodSymbol)GetWellKnownTypeMember(Compilation, WellKnownMember.System_Collections_Generic_IAsyncEnumerable_T__GetAsyncEnumerator,
921getEnumeratorMethod = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Collections_Generic_IEnumerable_T__GetEnumerator, diagnostics, errorLocationSyntax);
924MethodSymbol moveNextMethod = null;
927MethodSymbol specificGetEnumeratorMethod = getEnumeratorMethod.AsMember(collectionType);
942MethodSymbol currentPropertyGetter;
947MethodSymbol moveNextAsync = (MethodSymbol)GetWellKnownTypeMember(WellKnownMember.System_Collections_Generic_IAsyncEnumerator_T__MoveNextAsync,
955currentPropertyGetter = (MethodSymbol)GetWellKnownTypeMember(Compilation, WellKnownMember.System_Collections_Generic_IAsyncEnumerator_T__get_Current, diagnostics, errorLocationSyntax.Location, isOptional: false);
959currentPropertyGetter = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Collections_Generic_IEnumerator_T__get_Current, diagnostics, errorLocationSyntax);
971moveNextMethod = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Collections_IEnumerator__MoveNext, diagnostics, errorLocationSyntax);
986builder.CurrentPropertyGetter = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Collections_IEnumerator__get_Current, diagnostics, errorLocationSyntax);
1020MethodSymbol patternDisposeMethod = null;
1096builder.CurrentPropertyGetter = (MethodSymbol)GetSpecialTypeMember(SpecialMember.System_Collections_IEnumerator__get_Current, diagnostics, _syntax);
1173ArrayBuilder<MethodSymbol> candidateMethods = ArrayBuilder<MethodSymbol>.GetInstance();
1188MethodSymbol method = (MethodSymbol)member;
1199candidateMethods.Add((MethodSymbol)member);
1214private MethodArgumentInfo PerformForEachPatternOverloadResolution(TypeSymbol patternType, ArrayBuilder<MethodSymbol> candidateMethods, bool warningsOnly, BindingDiagnosticBag diagnostics, bool isAsync)
1218var overloadResolutionResult = OverloadResolutionResult<MethodSymbol>.GetInstance();
1232MethodSymbol result = null;
1308var result = overloadResolutionResult.ValidResult.Member;
1387MethodSymbol getEnumeratorMethod = builder.GetEnumeratorInfo.Method;
1446MethodSymbol currentPropertyGetterCandidate = ((PropertySymbol)lookupSymbol).GetOwnOrInheritedGetMethod();
1489private bool IsInvalidMoveNextMethod(MethodSymbol moveNextMethodCandidate, bool isAsync)
1705var resolvedMember = (MethodSymbol)GetSpecialTypeMember(member, diagnostics, syntax);
1713private MethodArgumentInfo BindDefaultArguments(MethodSymbol method, BoundExpression extensionReceiverOpt, bool expanded, SyntaxNode syntax, BindingDiagnosticBag diagnostics, bool assertMissingParametersAreOptional = true)
Binder\InMethodBinder.cs (5)
25private readonly MethodSymbol _methodSymbol;
30/// This map is used by <see cref="MethodCompiler.BindMethodBody(MethodSymbol, TypeCompilationState, BindingDiagnosticBag, bool, BoundNode?, bool, out ImportChain?, out bool, out bool, out MethodBodySemanticModel.InitialState)"/>
40public InMethodBinder(MethodSymbol owner, Binder enclosing)
272if (((MethodSymbol)newSymbol).MethodKind == MethodKind.LocalFunction)
300if (((MethodSymbol)newSymbol).MethodKind == MethodKind.LocalFunction)
Binder\Semantics\OverloadResolution\OverloadResolution.cs (37)
100public void ObjectCreationOverloadResolution(ImmutableArray<MethodSymbol> constructors, AnalyzedArguments arguments, OverloadResolutionResult<MethodSymbol> result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
118ArrayBuilder<MethodSymbol> methods,
122OverloadResolutionResult<MethodSymbol> result,
424if (typeof(TMember) != typeof(MethodSymbol))
432var member = (MethodSymbol)(Symbol)result.Member;
447if (typeof(TMember) != typeof(MethodSymbol))
468var member = (MethodSymbol)(Symbol)result.Member;
574private bool FailsConstraintChecks(MethodSymbol method, out ArrayBuilder<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt, CompoundUseSiteInfo<AssemblySymbol> template)
627Debug.Assert(typeof(TMember) == typeof(MethodSymbol));
637var method = (MethodSymbol)(Symbol)result.Member;
699private void AddConstructorToCandidateSet(MethodSymbol constructor, ArrayBuilder<MemberResolutionResult<MethodSymbol>> results,
708results.Add(new MemberResolutionResult<MethodSymbol>(constructor, constructor, MemberAnalysisResult.UnsupportedMetadata(), hasTypeArgumentInferredFromFunctionType: false));
730results.Add(new MemberResolutionResult<MethodSymbol>(constructor, constructor, result, hasTypeArgumentInferredFromFunctionType: false));
735MethodSymbol constructor,
773MethodSymbol constructor,
1133return ((MethodSymbol)member).HidesBaseMethodsByName;
1400ArrayBuilder<MemberResolutionResult<MethodSymbol>> results,
1401ImmutableArray<MethodSymbol> constructors,
1412foreach (MethodSymbol constructor in constructors)
2537MethodSymbol invoke;
2814MethodSymbol invoke1 = d1.DelegateInvokeMethod;
2815MethodSymbol invoke2 = d2.DelegateInvokeMethod;
2926MethodSymbol invoke1 = d1.DelegateInvokeMethod;
2927MethodSymbol invoke2 = d2.DelegateInvokeMethod;
3074MethodSymbol method,
3429MethodSymbol method;
3432if (member.Kind == SymbolKind.Method && (method = (MethodSymbol)(Symbol)member).Arity > 0)
3450MethodSymbol leastOverriddenMethod = (MethodSymbol)(Symbol)leastOverriddenMember;
3549MethodSymbol method,
3784if (ignoreOpenTypes && parameterType.ContainsTypeParameter(parameterContainer: (MethodSymbol)candidate))
3835return (TMember)(Symbol)(member as MethodSymbol).ConstructedFrom;
BoundTree\BoundObjectCreationExpression.cs (6)
12public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt,
15: this(syntax, constructor, ImmutableArray<MethodSymbol>.Empty, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, defaultArguments, constantValueOpt, initializerExpressionOpt, wasTargetTyped: false, type, hasErrors)
18public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded,
21return this.Update(constructor, ImmutableArray<MethodSymbol>.Empty, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, defaultArguments, constantValueOpt, initializerExpressionOpt, this.WasTargetTyped, type);
24public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments,
BoundTree\Constructors.cs (26)
87MethodSymbol method,
104MethodSymbol method,
120MethodSymbol method,
126ImmutableArray<MethodSymbol> originalMethods,
158public BoundCall Update(BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments)
163public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method)
168public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, BoundExpression arg0)
173public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, BoundExpression arg0, BoundExpression arg1)
178public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments)
202public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, params BoundExpression[] arguments)
206public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments)
376MethodSymbol? methodOpt,
379ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt,
397MethodSymbol? methodOpt,
410MethodSymbol? methodOpt,
434MethodSymbol logicalOperator,
435MethodSymbol trueOperator,
436MethodSymbol falseOperator,
439ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt,
460MethodSymbol logicalOperator,
461MethodSymbol trueOperator,
462MethodSymbol falseOperator,
690MethodSymbol? methodOpt,
702MethodSymbol? methodOpt,
715MethodSymbol? methodOpt,
728public BoundIncrementOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, TypeSymbol type)
CodeGen\EmitArrayInitializer.cs (6)
455var rosPointerCtor = (MethodSymbol?)Binder.GetWellKnownTypeMember(_module.Compilation, WellKnownMember.System_ReadOnlySpan_T__ctor_Pointer, _diagnostics, syntax: wrappedExpression.Syntax, isOptional: true);
625MethodSymbol? createSpan = (MethodSymbol?)Binder.GetWellKnownTypeMember(_module.Compilation, WellKnownMember.System_Runtime_CompilerServices_RuntimeHelpers__CreateSpanRuntimeFieldHandle, _diagnostics, syntax: wrappedExpression.Syntax, isOptional: true);
645var rosArrayCtor = (MethodSymbol?)Binder.GetWellKnownTypeMember(_module.Compilation, WellKnownMember.System_ReadOnlySpan_T__ctor_Array, _diagnostics, syntax: wrappedExpression.Syntax, isOptional: true);
CodeGen\EmitStatement.cs (18)
1510var sequenceEqualsTMethod = (MethodSymbol)Binder.GetWellKnownTypeMember(_module.Compilation,
1516var sequenceEqualsCharMethod = sequenceEqualsTMethod.Construct(Binder.GetSpecialType(_module.Compilation, SpecialType.System_Char, syntaxNode, _diagnostics));
1519var asSpanMethod = (MethodSymbol)Binder.GetWellKnownTypeMember(_module.Compilation, WellKnownMember.System_MemoryExtensions__AsSpan_String, _diagnostics, syntax: syntaxNode);
1525var stringEqualityMethod = _module.Compilation.GetSpecialTypeMember(SpecialMember.System_String__op_Equality) as MethodSymbol;
1605var spanTLengthMethod = (MethodSymbol)Binder.GetWellKnownTypeMember(_module.Compilation,
1610var spanCharLengthMethod = spanTLengthMethod.AsMember((NamedTypeSymbol)keyType);
1615var stringLengthMethod = _module.Compilation.GetSpecialTypeMember(SpecialMember.System_String__Length) as MethodSymbol;
1629var spanTIndexerMethod = (MethodSymbol)Binder.GetWellKnownTypeMember(_module.Compilation,
1635var spanCharLengthMethod = spanTIndexerMethod.AsMember((NamedTypeSymbol)keyType);
1641var stringCharsIndexer = _module.Compilation.GetSpecialTypeMember(SpecialMember.System_String__Chars) as MethodSymbol;
1671Debug.Assert(stringEqualityMethodRef == _module.Translate((MethodSymbol)_module.Compilation.GetSpecialTypeMember(SpecialMember.System_String__op_Equality), (CSharpSyntaxNode)syntaxNode, assertDiagnostics));
Compilation\CSharpCompilation.cs (25)
250internal bool IsNullableAnalysisEnabledIn(MethodSymbol method)
510var methodSymbol = (debugEntryPoint as Symbols.PublicModel.MethodSymbol)?.UnderlyingMethodSymbol;
1682internal new MethodSymbol? GetEntryPoint(CancellationToken cancellationToken)
1721var entryPointMethod = FindEntryPoint(simpleProgramEntryPointSymbol, cancellationToken, out diagnostics);
1741private MethodSymbol? FindEntryPoint(MethodSymbol? simpleProgramEntryPointSymbol, CancellationToken cancellationToken, out ImmutableBindingDiagnostic<AssemblySymbol> sealedDiagnostics)
1745var entryPointCandidates = ArrayBuilder<MethodSymbol>.GetInstance();
1792foreach (var main in entryPointCandidates)
1813var taskEntryPoints = ArrayBuilder<(bool IsValid, MethodSymbol Candidate, BindingDiagnosticBag SpecificDiagnostics)>.GetInstance();
1820bool checkValid(MethodSymbol candidate, bool isCandidate, BindingDiagnosticBag specificDiagnostics)
1838var viableEntryPoints = ArrayBuilder<MethodSymbol>.GetInstance();
1840foreach (var candidate in entryPointCandidates)
1925MethodSymbol? entryPoint = null;
1939foreach (var viableEntryPoint in viableEntryPoints)
1979ArrayBuilder<MethodSymbol> entryPointCandidates, IEnumerable<Symbol> members)
1983if (member is MethodSymbol method &&
1991internal bool ReturnsAwaitableToVoidOrInt(MethodSymbol method, BindingDiagnosticBag diagnostics)
2029internal (bool IsCandidate, bool IsTaskLike) HasEntryPointSignature(MethodSymbol method, BindingDiagnosticBag bag)
2083public readonly MethodSymbol? MethodSymbol;
2088public EntryPoint(MethodSymbol? methodSymbol, ImmutableBindingDiagnostic<AssemblySymbol> diagnostics)
2242private ConcurrentSet<MethodSymbol>? _moduleInitializerMethods;
2244internal void AddModuleInitializerMethod(MethodSymbol method)
2811if (symbol.Kind == SymbolKind.Method && symbol.IsImplicitlyDeclared && ((MethodSymbol)symbol).MethodKind == MethodKind.Constructor)
3356foreach (MethodSymbol method in _moduleInitializerMethods.OrderBy<MethodSymbol>(LexicalOrderSymbolComparer.Instance))
Compilation\CSharpSemanticModel.cs (48)
1668foreach (MethodSymbol extensionMethod in lookupResult.Symbols)
1670var reduced = extensionMethod.ReduceExtensionMethod(containingType, Compilation);
1784case MethodSymbol { MethodKind: MethodKind.LambdaMethod }:
3492var methodSymbol = eventAssignment.IsAddition ? eventSymbol.AddMethod : eventSymbol.RemoveMethod;
3523var symbol = conversion.SymbolOpt;
3621symbols = memberGroup = dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3628symbols = memberGroup = collectionInit.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3646symbols = memberGroup = objectCreation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3664memberGroup = boundObjectCreation.ConstructorsGroup.Cast<MethodSymbol, Symbol>();
3725return new ThisParameterSymbol(containingMember as MethodSymbol, typeOfThis);
3739thisParam = new ThisParameterSymbol(containingMember as MethodSymbol, containingType);
3746thisParam = new ThisParameterSymbol(containingMember as MethodSymbol, containingType);
3774thisParam = new ThisParameterSymbol(containingMember as MethodSymbol, typeOfThis);
3927private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out ImmutableArray<Symbol> symbols, out LookupResultKind resultKind)
3958MethodSymbol constructor = null;
4004MethodSymbol constructorOpt,
4021ImmutableArray<MethodSymbol> candidateConstructors;
4042candidateConstructors = ImmutableArray<MethodSymbol>.Empty;
4057memberGroup = candidateConstructors.Cast<MethodSymbol, Symbol>();
4180private static ImmutableArray<MethodSymbol> FilterOverriddenOrHiddenMethods(ImmutableArray<MethodSymbol> methods)
4189foreach (MethodSymbol method in methods)
4239methodGroup = GetReducedAndFilteredMethodGroupSymbols(binder, boundNode).Cast<MethodSymbol, Symbol>();
4282var method = conversion.SymbolOpt;
4304symbols = dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
4539internal static ImmutableArray<MethodSymbol> GetReducedAndFilteredMethodGroupSymbols(Binder binder, BoundMethodGroup node)
4541var methods = ArrayBuilder<MethodSymbol>.GetInstance();
4542var filteredMethods = ArrayBuilder<MethodSymbol>.GetInstance();
4552ImmutableArray<MethodSymbol> nonHiddenMethods = FilterOverriddenOrHiddenMethods(node.Methods);
4555foreach (var method in nonHiddenMethods)
4606var extensionMethods = ArrayBuilder<MethodSymbol>.GetInstance();
4614foreach (var method in extensionMethods)
4641ArrayBuilder<MethodSymbol> methods,
4642ArrayBuilder<MethodSymbol> filteredMethods,
4643MethodSymbol method,
4648MethodSymbol constructedMethod;
4680ArrayBuilder<MethodSymbol> methods,
4681ArrayBuilder<MethodSymbol> filteredMethods,
4704var method = (MethodSymbol)singleResult.Symbol;
4722private static ImmutableArray<MethodSymbol> CreateReducedExtensionMethodsFromOriginalsIfNecessary(BoundCall call, CSharpCompilation compilation)
4744var methodBuilder = ArrayBuilder<MethodSymbol>.GetInstance();
4745var filteredMethodBuilder = ArrayBuilder<MethodSymbol>.GetInstance();
4746foreach (var method in FilterOverriddenOrHiddenMethods(methods))
4761var method = call.Method;
4768MethodSymbol reduced = method.ReduceExtensionMethod(receiver.Type, Compilation);
4778var method = delegateCreation.MethodOpt;
4783MethodSymbol reduced = method.ReduceExtensionMethod(receiverOpt.Type, Compilation);
Compilation\MemberSemanticModel.SpeculativeMemberSemanticModel.cs (2)
52return NullableWalker.AnalyzeAndRewrite(Compilation, MemberSymbol as MethodSymbol, boundRoot, binder, initialState: null, diagnostics, createSnapshots: false, out snapshotManager, ref remappedSymbols);
57NullableWalker.AnalyzeWithoutRewrite(Compilation, MemberSymbol as MethodSymbol, boundRoot, binder, diagnostics, createSnapshots);
Compilation\MethodBodySemanticModel.cs (15)
47MethodSymbol owner,
64internal static MethodBodySemanticModel Create(SyntaxTreeSemanticModel containingSemanticModel, MethodSymbol owner, InitialState initialState)
115MethodSymbol owner,
127MethodSymbol owner,
140internal static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, MethodSymbol owner, ArrowExpressionClauseSyntax syntax, Binder rootBinder, int position)
148internal static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, MethodSymbol owner, ConstructorInitializerSyntax syntax, Binder rootBinder, int position)
156internal static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, MethodSymbol owner, PrimaryConstructorBaseTypeSyntax syntax, Binder rootBinder, int position)
171var methodSymbol = (MethodSymbol)this.MemberSymbol;
215var methodSymbol = (MethodSymbol)this.MemberSymbol;
233var methodSymbol = (MethodSymbol)this.MemberSymbol;
243if (MemberSymbol is MethodSymbol methodSymbol && methodSymbol.MethodKind == MethodKind.Constructor &&
308return Compilation.IsNullableAnalysisEnabledIn((MethodSymbol)MemberSymbol);
Compiler\MethodCompiler.cs (24)
134MethodSymbol entryPoint = null;
214private static MethodSymbol GetEntryPoint(CSharpCompilation compilation, PEModuleBuilder moduleBeingBuilt, bool hasDeclarationErrors, bool emitMethodBodies, BindingDiagnosticBag diagnostics, CancellationToken cancellationToken)
222var entryPoint = entryPointAndDiagnostics.MethodSymbol;
500MethodSymbol method = (MethodSymbol)member;
583foreach (var method in AnonymousTypeManager.GetAnonymousTypeHiddenMethods(containingType))
599MethodSymbol method = new SynthesizedStaticConstructor(sourceTypeSymbol);
654internal static MethodSymbol GetMethodToCompile(MethodSymbol method)
676var method = (MethodSymbol)definition.GetInternalSymbol();
692foreach (var method in additionalType.GetMethodsToEmit())
731var method = methodWithBody.Method;
814private static bool IsFieldLikeEventAccessor(MethodSymbol method)
870MethodSymbol accessor = isAddMethod ? eventSymbol.AddMethod : eventSymbol.RemoveMethod;
916public override object VisitMethod(MethodSymbol symbol, TypeCompilationState arg)
937MethodSymbol methodSymbol,
1402MethodSymbol method,
1524MethodSymbol method,
1562MethodSymbol kickoffMethod;
1752internal static BoundBlock? BindSynthesizedMethodBody(MethodSymbol method, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics)
1769MethodSymbol method,
2271private static BoundStatement BindImplicitConstructorInitializerIfAny(MethodSymbol method, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics)
2295private static void ReportCtorInitializerCycles(MethodSymbol method, BoundExpression initializerInvocation, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics)
Compiler\TypeCompilationState.cs (19)
29public readonly MethodSymbol Method;
33internal MethodWithBody(MethodSymbol method, BoundStatement body, ImportChain? importChain)
52private Dictionary<MethodSymbol, MethodSymbol>? _wrappers;
80private SmallDictionary<MethodSymbol, MethodSymbol>? _constructorInitializers;
133public void AddSynthesizedMethod(MethodSymbol method, BoundStatement body)
150public void AddMethodWrapper(MethodSymbol method, MethodSymbol wrapper, BoundStatement body)
156_wrappers = new Dictionary<MethodSymbol, MethodSymbol>();
175public MethodSymbol? GetMethodWrapper(MethodSymbol method)
177MethodSymbol? wrapper = null;
202internal void ReportCtorInitializerCycles(MethodSymbol method1, MethodSymbol method2, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
217_constructorInitializers = new SmallDictionary<MethodSymbol, MethodSymbol>();
222MethodSymbol? next = method2;
Emitter\Model\PEModuleBuilder.cs (23)
26internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
384var method = (MethodSymbol)member;
493internal virtual VariableSlotAllocator TryCreateVariableSlotAllocator(MethodSymbol method, MethodSymbol topLevelMethod, DiagnosticBag diagnostics)
498internal virtual MethodInstrumentation GetMethodBodyInstrumentations(MethodSymbol method)
822return ((MethodSymbol)Compilation.GetWellKnownTypeMember(WellKnownMember.System_Runtime_CompilerServices_RuntimeHelpers__InitializeArrayArrayRuntimeFieldHandle))?.GetCciAdapter();
1260internal sealed override Cci.IMethodReference Translate(MethodSymbol symbol, DiagnosticBag diagnostics, bool needDeclaration)
1266MethodSymbol methodSymbol,
1300MethodSymbol methodSymbol,
1360else if (methodSymbol is NativeIntegerMethodSymbol { UnderlyingMethod: MethodSymbol underlyingMethod })
1376MethodSymbol methodSymbol,
1488return container.Kind == SymbolKind.Method && ((MethodSymbol)container).IsGenericMethod ||
1833internal MethodSymbol EnsureThrowIfNullFunctionExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, DiagnosticBag diagnostics)
1860internal MethodSymbol EnsureThrowSwitchExpressionExceptionExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, DiagnosticBag diagnostics)
1866return (MethodSymbol)throwSwitchExpressionAdapter.GetInternalSymbol()!;
1875return (MethodSymbol)privateImplClass.GetMethod(PrivateImplementationDetails.SynthesizedThrowSwitchExpressionExceptionFunctionName)!.GetInternalSymbol()!;
1881internal MethodSymbol EnsureThrowSwitchExpressionExceptionParameterlessExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, DiagnosticBag diagnostics)
1887return (MethodSymbol)throwSwitchExpressionAdapter.GetInternalSymbol()!;
1900return (MethodSymbol)privateImplClass.GetMethod(PrivateImplementationDetails.SynthesizedThrowSwitchExpressionExceptionParameterlessFunctionName)!.GetInternalSymbol()!;
1906internal MethodSymbol EnsureThrowInvalidOperationExceptionExists(SyntaxNode syntaxNode, SyntheticBoundNodeFactory factory, DiagnosticBag diagnostics)
1912return (MethodSymbol)throwAdapter.GetInternalSymbol()!;
1925return (MethodSymbol)privateImplClass.GetMethod(PrivateImplementationDetails.SynthesizedThrowInvalidOperationExceptionFunctionName)!.GetInternalSymbol()!;
FlowAnalysis\AbstractFlowPass.cs (25)
471var method = _symbol as MethodSymbol;
485(_symbol as MethodSymbol)?.TryGetThisParameter(out thisParameter);
497var method = _symbol as MethodSymbol;
1332private void VisitReceiverBeforeCall(BoundExpression receiverOpt, MethodSymbol method)
1340private void VisitReceiverAfterCall(BoundExpression receiverOpt, MethodSymbol method)
1395var method = GetReadMethod(node.Indexer);
1429protected virtual void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
1456private void VisitArgumentsAfterCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
1474protected virtual void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method)
1538static bool ignoreReceiver(MethodSymbol method)
1941protected virtual void PropertySetter(BoundExpression node, BoundExpression receiver, MethodSymbol setter, BoundExpression value = null)
1968var method = GetWriteMethod(property);
2023var readMethod = GetReadMethod(property);
2042var writeMethod = GetWriteMethod(property);
2102var method = GetReadMethod(property);
2615var readMethod = GetReadMethod(property);
2616var writeMethod = GetWriteMethod(property);
2819var method = conversion.Method;
3391MethodSymbol method = null;
3492private static MethodSymbol GetReadMethod(PropertySymbol property) =>
3495private static MethodSymbol GetWriteMethod(PropertySymbol property) =>
3519var readMethod = property.GetOwnOrInheritedGetMethod();
3577var writeMethod = symbol.GetOwnOrInheritedSetMethod();
FlowAnalysis\NullableWalker.cs (151)
176private MethodSymbol? _delegateInvokeMethod;
215private PooledDictionary<MethodSymbol, Variables>? _nestedFunctionVariables;
240private readonly MethodSymbol? _baseOrThisInitializer;
420MethodSymbol? delegateInvokeMethodOpt,
425MethodSymbol? baseOrThisInitializer,
568if ((_symbol as MethodSymbol)?.IsConstructor() != true || _useConstructorExitWarnings)
596var method = _symbol as MethodSymbol;
671void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member, LocalState state, int thisSlot, Location? exitLocation, ImmutableArray<string> membersWithStateEnforcedByRequiredMembers, bool forcePropertyAnalysis)
758void enforceMemberNotNullOnMember(SyntaxNode? syntaxOpt, LocalState state, MethodSymbol method, string memberName)
785if (_symbol is MethodSymbol method)
818if (_symbol is MethodSymbol method)
867if (_symbol is MethodSymbol method)
942var baseOrThisInitializer = GetBaseOrThisInitializer();
1047void makeMembersMaybeNull(MethodSymbol method, ImmutableArray<string> members)
1055void makeMemberMaybeNull(MethodSymbol method, string memberName)
1100private MethodSymbol? GetBaseOrThisInitializer()
1262else if (CurrentSymbol is MethodSymbol { IsAsync: false })
1274if (CurrentSymbol is MethodSymbol method &&
1288MethodSymbol method,
1294MethodSymbol? baseOrThisInitializer,
1315MethodSymbol method,
1321MethodSymbol? baseOrThisInitializer,
1357if (symbol is MethodSymbol method
1373internal static VariableState? GetAfterInitializersState(CSharpCompilation compilation, MethodSymbol method, BoundNode nodeToAnalyze, BoundNode? constructorBody, BindingDiagnosticBag diagnostics)
1390MethodSymbol? baseOrThisInitializer = GetConstructorThisOrBaseSymbol(constructorBody);
1411private static MethodSymbol? GetConstructorThisOrBaseSymbol(BoundNode? constructorBody)
1636MethodSymbol? delegateInvokeMethodOpt,
1679MethodSymbol? delegateInvokeMethodOpt,
1681MethodSymbol? baseOrThisInitializer,
1976var method = getTopLevelMethod(_symbol as MethodSymbol);
2055static MethodSymbol? getTopLevelMethod(MethodSymbol? method)
2064method = container as MethodSymbol;
2082var enclosingMemberMethod = _symbol as MethodSymbol;
2086enclosingMemberMethod = enclosingMemberMethod.ContainingSymbol as MethodSymbol;
2697if (!(CurrentSymbol is MethodSymbol methodSymbol))
2863if (CurrentSymbol is MethodSymbol method)
2897var method = CurrentSymbol as MethodSymbol;
2905var delegateOrMethod = _useDelegateInvokeReturnType ? _delegateInvokeMethod! : method;
3051private Variables GetOrCreateNestedFunctionVariables(Variables container, MethodSymbol lambdaOrLocalFunction)
3053_nestedFunctionVariables ??= PooledDictionary<MethodSymbol, Variables>.GetInstance();
3065MethodSymbol lambdaOrFunctionSymbol,
3067MethodSymbol? delegateInvokeMethod,
3079var oldDelegateInvokeMethod = _delegateInvokeMethod;
3400var invokeMethod = n.DelegateInvokeMethod;
3456MethodSymbol? constructor = getConstructor(node, node.Type);
3467(int slot, NullableFlowState resultState, Func<TypeSymbol, MethodSymbol?, int>? initialStateInferenceCompletion) = inferInitialObjectState(node, type, constructor, arguments, argumentResults, isTargetTyped);
3485Func<TypeSymbol, MethodSymbol?, int>? initialStateInferenceCompletion,
3514Func<TypeSymbol, MethodSymbol?, int> initialStateInferenceCompletion,
3527MethodSymbol? constructor = getConstructor(node, type);
3539static MethodSymbol? getConstructor(BoundObjectCreationExpressionBase node, TypeSymbol type)
3541var constructor = node.Constructor;
3545constructor = (MethodSymbol)AsMemberOfType(type, constructor);
3551(int slot, NullableFlowState resultState, Func<TypeSymbol, MethodSymbol?, int>? completion) inferInitialObjectState(
3552BoundExpression node, TypeSymbol type, MethodSymbol? constructor,
3621Func<TypeSymbol, MethodSymbol?, int> inferInitialObjectStateAsContinuation(
3626return (TypeSymbol type, MethodSymbol? constructor) =>
3904MethodSymbol addMethod = addMethodAsMemberOfContainingType(node, containingType, ref argumentResults);
3907(MethodSymbol? reinferredMethod,
3937MethodSymbol? reinferredMethod,
3968MethodSymbol addMethod = addMethodAsMemberOfContainingType(node, containingType, ref argumentResults);
3976static MethodSymbol addMethodAsMemberOfContainingType(BoundCollectionElementInitializer node, TypeSymbol containingType, ref ImmutableArray<VisitArgumentResult> argumentResults)
3978var method = node.AddMethod;
4001method = (MethodSymbol)AsMemberOfType(containingType, method);
4408private TypeWithState InferResultNullability(BinaryOperatorKind operatorKind, MethodSymbol? methodOpt, TypeSymbol resultType, TypeWithState leftType, TypeWithState rightType)
4644var method = binary.Method;
4656method = (MethodSymbol)AsMemberOfType(asMemberOfType, method);
5688var method = node.Method;
5693method = (MethodSymbol)AsMemberOfType(receiverType.Type, method);
5715private void LearnFromEqualsMethod(MethodSymbol method, BoundCall node, TypeWithState receiverType, ImmutableArray<VisitArgumentResult> results)
5753static bool anyOverriddenMethodHasExplicitImplementation(MethodSymbol method)
5755for (var overriddenMethod = method; overriddenMethod is object; overriddenMethod = overriddenMethod.OverriddenMethod)
5766static bool isWellKnownEqualityMethodOrImplementation(CSharpCompilation compilation, MethodSymbol method, TypeSymbol? receiverType, WellKnownMember wellKnownMember)
5768var wellKnownMethod = (MethodSymbol?)compilation.GetWellKnownTypeMember(wellKnownMember);
5777var constructedMethod = wellKnownMethod.AsMember(constructedType);
5802for (var overriddenMethod = method; overriddenMethod is object; overriddenMethod = overriddenMethod.OverriddenMethod)
5880private bool IsCompareExchangeMethod(MethodSymbol? method)
5967var method = node.Method;
5991private TypeWithState GetReturnTypeWithState(MethodSymbol method)
6103protected override void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
6109private (MethodSymbol? method, ImmutableArray<VisitArgumentResult> results, bool returnNotNull) VisitArguments(
6113MethodSymbol? method,
6137private (MethodSymbol? method, ImmutableArray<VisitArgumentResult> results, bool returnNotNull) VisitArguments(
6146MethodSymbol? method = null)
6154private delegate (MethodSymbol? method, bool returnNotNull) ArgumentsCompletionDelegate(ImmutableArray<VisitArgumentResult> argumentResults, ImmutableArray<ParameterSymbol> parametersOpt, MethodSymbol? method);
6156private (MethodSymbol? method, ImmutableArray<VisitArgumentResult> results, bool returnNotNull, ArgumentsCompletionDelegate? completion)
6166MethodSymbol? method,
6180(MethodSymbol? method, ImmutableArray<VisitArgumentResult> results, bool returnNotNull, ArgumentsCompletionDelegate? completion)
6193MethodSymbol? method,
6348return (ImmutableArray<VisitArgumentResult> results, ImmutableArray<ParameterSymbol> parametersOpt, MethodSymbol? method) =>
6361private void ApplyMemberPostConditions(BoundExpression? receiverOpt, MethodSymbol? method)
6381private void ApplyMemberPostConditions(int receiverSlot, MethodSymbol method)
7014private MethodSymbol InferMethodTypeArguments(
7015MethodSymbol method,
7025var definition = method.ConstructedFrom;
7111internal override TypeWithAnnotations GetMethodGroupResultType(BoundMethodGroup group, MethodSymbol method)
7117method = (MethodSymbol)AsMemberOfType(receiverType.Type, method);
7171private void CheckMethodConstraints(SyntaxNode syntax, MethodSymbol method)
7340if (((MethodSymbol)symbol).MethodKind == MethodKind.LocalFunction)
7412if (result is MethodSymbol resultMethod && resultMethod.IsGenericMethod)
7414result = resultMethod.Construct(((MethodSymbol)symbol).TypeArgumentsWithAnnotations);
7779private void ReportNullabilityMismatchWithTargetDelegate(Location location, TypeSymbol targetType, MethodSymbol targetInvokeMethod, MethodSymbol sourceInvokeMethod, bool invokedAsExtensionMethod)
7791void reportBadDelegateReturn(BindingDiagnosticBag bag, MethodSymbol targetInvokeMethod, MethodSymbol sourceInvokeMethod, bool topLevel, (TypeSymbol targetType, Location location) arg)
7798void reportBadDelegateParameter(BindingDiagnosticBag bag, MethodSymbol sourceInvokeMethod, MethodSymbol targetInvokeMethod, ParameterSymbol parameter, bool topLevel, (TypeSymbol targetType, Location location) arg)
7809MethodSymbol? targetInvokeMethod = delegateType.DelegateInvokeMethod;
7855void reportBadDelegateReturn(BindingDiagnosticBag bag, MethodSymbol targetInvokeMethod, MethodSymbol sourceInvokeMethod, bool topLevel, Location location)
7862void reportBadDelegateParameter(BindingDiagnosticBag bag, MethodSymbol sourceInvokeMethod, MethodSymbol targetInvokeMethod, ParameterSymbol parameterSymbol, bool topLevel, Location location)
7977var method = conversion.Method;
7994static (MethodSymbol invokeSignature, ImmutableArray<ParameterSymbol>) getDelegateOrFunctionPointerInfo(TypeSymbol targetType)
8481var method = conversion.Method;
8778var method = node.MethodOpt;
8908private MethodSymbol CheckMethodGroupReceiverNullability(BoundMethodGroup group, ImmutableArray<ParameterSymbol> parameters, MethodSymbol method, bool invokedAsExtensionMethod)
8916method = (MethodSymbol)AsMemberOfType(receiverType.Type, method);
8970var delegateInvokeMethod = delegateTypeOpt?.DelegateInvokeMethod;
8986private static void UseDelegateInvokeParameterAndReturnTypes(BoundLambda lambda, MethodSymbol? delegateInvokeMethod, out bool useDelegateInvokeParameterTypes, out bool useDelegateInvokeReturnType)
9273var deconstructMethod = invocation?.Method;
9288deconstructMethod = (MethodSymbol)AsMemberOfType(rightResult.Type, deconstructMethod);
9539MethodSymbol? incrementOperator = (node.OperatorKind.IsUserDefined() && node.MethodOpt?.ParameterCount == 1) ? node.MethodOpt : null;
9669MethodSymbol method = node.Operator.Method;
9926var getMethod = ((PropertySymbol)member.OriginalDefinition).GetMethod;
9947var getValue = (MethodSymbol)compilation.GetSpecialTypeMember(SpecialMember.System_Nullable_T_get_Value);
9996MethodSymbol? reinferredGetEnumeratorMethod = null;
10094reinferredGetEnumeratorMethod ??= (MethodSymbol)AsMemberOfType(convertedResult.Type, node.EnumeratorInfoOpt.GetEnumeratorInfo.Method);
10105var currentPropertyGetter = (MethodSymbol)AsMemberOfType(enumeratorReturnType.Type, node.EnumeratorInfoOpt.CurrentPropertyGetter);
10114var moveNextAsyncMethod = (MethodSymbol)AsMemberOfType(reinferredGetEnumeratorMethod.ReturnType, node.EnumeratorInfoOpt.MoveNextInfo.Method);
10130var disposeAsyncMethod = (MethodSymbol)AsMemberOfType(reinferredGetEnumeratorMethod.ReturnType, originalDisposeMethod);
10334node.MethodOpt is MethodSymbol method &&
10343method = (MethodSymbol)AsMemberOfType(operandType.Type!.StrippedType(), method);
10439MethodSymbol? logicalOperator = null;
10440MethodSymbol? trueFalseOperator = null;
10523var getResult = awaitableInfo.GetResult;
10524var reinferredGetResult = _visitResult.RValueType.Type is NamedTypeSymbol taskAwaiterType
11078var method = (MethodSymbol)CurrentSymbol;
11721var variables = (symbol.ContainingSymbol is MethodSymbol containingMethod ? _variables.GetVariablesForMethodScope(containingMethod) : null) ??
Generated\BoundNodes.xml.Generated.cs (163)
1170public BoundUnaryOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false)
1190public MethodSymbol? MethodOpt { get; }
1193public ImmutableArray<MethodSymbol> OriginalUserDefinedOperatorsOpt { get; }
1198public BoundUnaryOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
1212public BoundIncrementOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false)
1234public MethodSymbol? MethodOpt { get; }
1241public ImmutableArray<MethodSymbol> OriginalUserDefinedOperatorsOpt { get; }
1246public BoundIncrementOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
1321public BoundFunctionPointerLoad(SyntaxNode syntax, MethodSymbol targetMethod, TypeSymbol? constrainedToTypeOpt, TypeSymbol type, bool hasErrors)
1332public BoundFunctionPointerLoad(SyntaxNode syntax, MethodSymbol targetMethod, TypeSymbol? constrainedToTypeOpt, TypeSymbol type)
1343public MethodSymbol TargetMethod { get; }
1350public BoundFunctionPointerLoad Update(MethodSymbol targetMethod, TypeSymbol? constrainedToTypeOpt, TypeSymbol type)
1470public BoundRefTypeOperator(SyntaxNode syntax, BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors = false)
1483public MethodSymbol? GetTypeFromHandle { get; }
1488public BoundRefTypeOperator Update(BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type)
1564public BoundFromEndIndexExpression(SyntaxNode syntax, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false)
1577public MethodSymbol? MethodOpt { get; }
1582public BoundFromEndIndexExpression Update(BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type)
1596public BoundRangeExpression(SyntaxNode syntax, BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false)
1610public MethodSymbol? MethodOpt { get; }
1615public BoundRangeExpression Update(BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type)
1720public BoundUserDefinedConditionalLogicalOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1741public MethodSymbol LogicalOperator { get; }
1742public MethodSymbol TrueOperator { get; }
1743public MethodSymbol FalseOperator { get; }
1746public ImmutableArray<MethodSymbol> OriginalUserDefinedOperatorsOpt { get; }
1751public BoundUserDefinedConditionalLogicalOperator Update(BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type)
1765public BoundCompoundAssignmentOperator(SyntaxNode syntax, BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false)
1793public ImmutableArray<MethodSymbol> OriginalUserDefinedOperatorsOpt { get; }
1798public BoundCompoundAssignmentOperator Update(BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
2099public BoundAwaitableInfo(SyntaxNode syntax, BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, bool hasErrors = false)
2113public MethodSymbol? GetResult { get; }
2118public BoundAwaitableInfo Update(BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult)
2165protected BoundTypeOf(BoundKind kind, SyntaxNode syntax, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors)
2174protected BoundTypeOf(BoundKind kind, SyntaxNode syntax, MethodSymbol? getTypeFromHandle, TypeSymbol type)
2184public MethodSymbol? GetTypeFromHandle { get; }
2189public BoundTypeOfOperator(SyntaxNode syntax, BoundTypeExpression sourceType, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors = false)
2204public BoundTypeOfOperator Update(BoundTypeExpression sourceType, MethodSymbol? getTypeFromHandle, TypeSymbol type)
2252public BoundMethodDefIndex(SyntaxNode syntax, MethodSymbol method, TypeSymbol type, bool hasErrors)
2262public BoundMethodDefIndex(SyntaxNode syntax, MethodSymbol method, TypeSymbol type)
2273public MethodSymbol Method { get; }
2278public BoundMethodDefIndex Update(MethodSymbol method, TypeSymbol type)
2596public BoundMethodInfo(SyntaxNode syntax, MethodSymbol method, MethodSymbol? getMethodFromHandle, TypeSymbol type, bool hasErrors)
2607public BoundMethodInfo(SyntaxNode syntax, MethodSymbol method, MethodSymbol? getMethodFromHandle, TypeSymbol type)
2619public MethodSymbol Method { get; }
2620public MethodSymbol? GetMethodFromHandle { get; }
2625public BoundMethodInfo Update(MethodSymbol method, MethodSymbol? getMethodFromHandle, TypeSymbol type)
2639public BoundFieldInfo(SyntaxNode syntax, FieldSymbol field, MethodSymbol? getFieldFromHandle, TypeSymbol type, bool hasErrors)
2650public BoundFieldInfo(SyntaxNode syntax, FieldSymbol field, MethodSymbol? getFieldFromHandle, TypeSymbol type)
2663public MethodSymbol? GetFieldFromHandle { get; }
2668public BoundFieldInfo Update(FieldSymbol field, MethodSymbol? getFieldFromHandle, TypeSymbol type)
2840public BoundConversion(SyntaxNode syntax, BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type, bool hasErrors = false)
2865public ImmutableArray<MethodSymbol> OriginalUserDefinedConversionsOpt { get; }
2870public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type)
2884public BoundReadOnlySpanFromArray(SyntaxNode syntax, BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type, bool hasErrors = false)
2898public MethodSymbol ConversionMethod { get; }
2903public BoundReadOnlySpanFromArray Update(BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type)
2983public BoundFixedLocalCollectionInitializer(SyntaxNode syntax, TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type, bool hasErrors = false)
3003public MethodSymbol? GetPinnableOpt { get; }
3008public BoundFixedLocalCollectionInitializer Update(TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type)
5273public BoundDagDeconstructEvaluation(SyntaxNode syntax, MethodSymbol deconstructMethod, BoundDagTemp input, bool hasErrors = false)
5283public MethodSymbol DeconstructMethod { get; }
5288public BoundDagDeconstructEvaluation Update(MethodSymbol deconstructMethod, BoundDagTemp input)
5782public BoundDynamicInvocation(SyntaxNode syntax, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false)
5799public ImmutableArray<MethodSymbol> ApplicableMethods { get; }
5804public BoundDynamicInvocation Update(ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type)
5851public BoundLoweredConditionalAccess(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type, bool hasErrors = false)
5869public MethodSymbol? HasValueMethodOpt { get; }
5878public BoundLoweredConditionalAccess Update(BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type)
5963public 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)
5981public ImmutableArray<MethodSymbol> Methods { get; }
5990public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6032public BoundCall(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type, bool hasErrors = false)
6056public MethodSymbol Method { get; }
6066public ImmutableArray<MethodSymbol> OriginalMethodsOpt { get; }
6071public BoundCall Update(BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type)
6124public BoundAttribute(SyntaxNode syntax, MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false)
6143public MethodSymbol? Constructor { get; }
6155public BoundAttribute Update(MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type)
6228public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
6250public override MethodSymbol Constructor { get; }
6251public ImmutableArray<MethodSymbol> ConstructorsGroup { get; }
6265public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type)
6354public BoundDynamicObjectCreationExpression(SyntaxNode syntax, string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
6377public ImmutableArray<MethodSymbol> ApplicableMethods { get; }
6383public BoundDynamicObjectCreationExpression Update(string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type)
6596public BoundCollectionElementInitializer(SyntaxNode syntax, MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false)
6615public MethodSymbol AddMethod { get; }
6627public BoundCollectionElementInitializer Update(MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type)
6641public BoundDynamicCollectionElementInitializer(SyntaxNode syntax, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false)
6654public ImmutableArray<MethodSymbol> ApplicableMethods { get; }
6659public BoundDynamicCollectionElementInitializer Update(ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type)
6708public BoundAnonymousObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type, bool hasErrors = false)
6723public MethodSymbol Constructor { get; }
6730public BoundAnonymousObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type)
6814public BoundDelegateCreationExpression(SyntaxNode syntax, BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
6829public MethodSymbol? MethodOpt { get; }
6836public BoundDelegateCreationExpression Update(BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type)
7817public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7832public MethodSymbol? DeconstructMethod { get; }
7840public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
7937public BoundITuplePattern(SyntaxNode syntax, MethodSymbol getLengthMethod, MethodSymbol getItemMethod, ImmutableArray<BoundPositionalSubpattern> subpatterns, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7952public MethodSymbol GetLengthMethod { get; }
7953public MethodSymbol GetItemMethod { get; }
7959public BoundITuplePattern Update(MethodSymbol getLengthMethod, MethodSymbol getItemMethod, ImmutableArray<BoundPositionalSubpattern> subpatterns, TypeSymbol inputType, TypeSymbol narrowedType)
8473public BoundWithExpression(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type, bool hasErrors = false)
8488public MethodSymbol? CloneMethod { get; }
8494public BoundWithExpression Update(BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type)
12075MethodSymbol? methodOpt = GetUpdatedSymbol(node, node.MethodOpt);
12077ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt = GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
12095MethodSymbol? methodOpt = GetUpdatedSymbol(node, node.MethodOpt);
12097ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt = GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
12153MethodSymbol targetMethod = GetUpdatedSymbol(node, node.TargetMethod);
12224MethodSymbol? getTypeFromHandle = GetUpdatedSymbol(node, node.GetTypeFromHandle);
12276MethodSymbol? methodOpt = GetUpdatedSymbol(node, node.MethodOpt);
12294MethodSymbol? methodOpt = GetUpdatedSymbol(node, node.MethodOpt);
12331ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt = GetUpdatedArray(node, node.OriginalUserDefinedOperatorsOpt);
12503MethodSymbol? getResult = GetUpdatedSymbol(node, node.GetResult);
12529MethodSymbol? getTypeFromHandle = GetUpdatedSymbol(node, node.GetTypeFromHandle);
12555MethodSymbol method = GetUpdatedSymbol(node, node.Method);
12680MethodSymbol method = GetUpdatedSymbol(node, node.Method);
12681MethodSymbol? getMethodFromHandle = GetUpdatedSymbol(node, node.GetMethodFromHandle);
12699MethodSymbol? getFieldFromHandle = GetUpdatedSymbol(node, node.GetFieldFromHandle);
12800ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt = GetUpdatedArray(node, node.OriginalUserDefinedConversionsOpt);
12818MethodSymbol conversionMethod = GetUpdatedSymbol(node, node.ConversionMethod);
12866MethodSymbol? getPinnableOpt = GetUpdatedSymbol(node, node.GetPinnableOpt);
13208MethodSymbol deconstructMethod = GetUpdatedSymbol(node, node.DeconstructMethod);
13338ImmutableArray<MethodSymbol> applicableMethods = GetUpdatedArray(node, node.ApplicableMethods);
13375MethodSymbol? hasValueMethodOpt = GetUpdatedSymbol(node, node.HasValueMethodOpt);
13425ImmutableArray<MethodSymbol> methods = GetUpdatedArray(node, node.Methods);
13463MethodSymbol method = GetUpdatedSymbol(node, node.Method);
13464ImmutableArray<MethodSymbol> originalMethodsOpt = GetUpdatedArray(node, node.OriginalMethodsOpt);
13502MethodSymbol? constructor = GetUpdatedSymbol(node, node.Constructor);
13538MethodSymbol constructor = GetUpdatedSymbol(node, node.Constructor);
13539ImmutableArray<MethodSymbol> constructorsGroup = GetUpdatedArray(node, node.ConstructorsGroup);
13593ImmutableArray<MethodSymbol> applicableMethods = GetUpdatedArray(node, node.ApplicableMethods);
13701MethodSymbol addMethod = GetUpdatedSymbol(node, node.AddMethod);
13720ImmutableArray<MethodSymbol> applicableMethods = GetUpdatedArray(node, node.ApplicableMethods);
13751MethodSymbol constructor = GetUpdatedSymbol(node, node.Constructor);
13804MethodSymbol? methodOpt = GetUpdatedSymbol(node, node.MethodOpt);
14200MethodSymbol? deconstructMethod = GetUpdatedSymbol(node, node.DeconstructMethod);
14238MethodSymbol getLengthMethod = GetUpdatedSymbol(node, node.GetLengthMethod);
14239MethodSymbol getItemMethod = GetUpdatedSymbol(node, node.GetItemMethod);
14403MethodSymbol? cloneMethod = GetUpdatedSymbol(node, node.CloneMethod);
Lowering\AsyncRewriter\AsyncMethodBuilderMemberCollection.cs (33)
44internal readonly MethodSymbol CreateBuilder;
49internal readonly MethodSymbol SetException;
54internal readonly MethodSymbol SetResult;
59internal readonly MethodSymbol AwaitOnCompleted;
64internal readonly MethodSymbol AwaitUnsafeOnCompleted;
69internal readonly MethodSymbol Start;
74internal readonly MethodSymbol SetStateMachine;
89MethodSymbol createBuilder,
90MethodSymbol setException,
91MethodSymbol setResult,
92MethodSymbol awaitOnCompleted,
93MethodSymbol awaitUnsafeOnCompleted,
94MethodSymbol start,
95MethodSymbol setStateMachine,
112internal static bool TryCreate(SyntheticBoundNodeFactory F, MethodSymbol method, TypeMap typeMap, out AsyncMethodBuilderMemberCollection collection)
119TryGetBuilderMember<MethodSymbol>(
124out MethodSymbol createBuilderMethod);
152MethodSymbol createBuilderMethod;
154TryGetBuilderMember<MethodSymbol>(
186MethodSymbol createBuilderMethod = null;
215TryGetBuilderMember<MethodSymbol>(
267MethodSymbol createBuilderMethod = null;
298TryGetBuilderMember<MethodSymbol>(
376MethodSymbol createBuilderMethod,
386MethodSymbol setExceptionMethod;
387MethodSymbol setResultMethod;
388MethodSymbol awaitOnCompletedMethod;
389MethodSymbol awaitUnsafeOnCompletedMethod;
390MethodSymbol startMethod;
391MethodSymbol setStateMachineMethod;
469private static MethodSymbol GetCustomCreateMethod(
483var method = (MethodSymbol)member;
Lowering\ClosureConversion\ClosureConversion.cs (26)
62/// a (<see cref="MethodSymbol"/>, <see cref="BoundStatement"/>) pair for each generated method.
66/// (<see cref="MethodSymbol"/>, <see cref="BoundStatement"/>) pairs for additional methods that the lambda rewriter produced.
75private readonly MethodSymbol _topLevelMethod;
76private readonly MethodSymbol _substitutedSourceMethod;
99private MethodSymbol _currentMethod;
158MethodSymbol method,
160MethodSymbol substitutedSourceMethod,
201(localOrParameter as MethodSymbol)?.MethodKind == MethodKind.LocalFunction);
227MethodSymbol method,
229MethodSymbol substitutedSourceMethod,
313protected override MethodSymbol CurrentMethod
368var containingMethod = scope.ContainingFunctionOpt?.OriginalMethodSymbol ?? _topLevelMethod;
403var originalMethod = nestedFunction.OriginalMethodSymbol;
520var containingMethod = isNonGeneric ? null : (_substitutedSourceMethod ?? _topLevelMethod);
665MethodSymbol constructor = frame.Constructor.AsMember(frameType);
843var loweredSymbol = (node.Method.MethodKind is MethodKind.LambdaMethod or MethodKind.LocalFunction) ?
855MethodSymbol localFunc,
857out MethodSymbol method,
997MethodSymbol originalMethod,
1000ref MethodSymbol synthesizedMethod,
1068out var method,
1331out var method,
1358out MethodSymbol remappedMethod,
1529var oldMethod = _currentMethod;
1576private void AddSynthesizedMethod(MethodSymbol method, BoundStatement body)
1620MethodSymbol referencedMethod = synthesizedMethod;
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (9)
387private static string GetBinaryOperatorName(BinaryOperatorKind opKind, MethodSymbol methodOpt, out bool isChecked, out bool isLifted, out bool requiresLifted)
415static bool useCheckedFactory(bool isChecked, MethodSymbol methodOpt)
421private BoundExpression VisitBinaryOperator(BinaryOperatorKind opKind, MethodSymbol methodOpt, TypeSymbol type, BoundExpression left, BoundExpression right)
501private BoundExpression MakeBinary(MethodSymbol methodOpt, TypeSymbol type, bool isLifted, bool requiresLifted, string opName, BoundExpression loweredLeft, BoundExpression loweredRight)
576var method = node.Method;
629var method = node.SymbolOpt;
680private BoundExpression DelegateCreation(BoundExpression receiver, MethodSymbol method, TypeSymbol delegateType, bool requiresInstanceReceiver)
685var createDelegate = _bound.WellKnownMethod(WellKnownMember.System_Reflection_MethodInfo__CreateDelegate, isOptional: true);
1013var getMethod = node.PropertySymbol.GetOwnOrInheritedGetMethod();
Lowering\DiagnosticsPass_ExpressionTrees.cs (12)
25private readonly MethodSymbol _containingSymbol;
30public static void IssueDiagnostics(CSharpCompilation compilation, BoundNode node, BindingDiagnosticBag diagnostics, MethodSymbol containingSymbol)
48private DiagnosticsPass(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, MethodSymbol containingSymbol)
210private void CheckReferenceToMethodIfLocalFunction(BoundExpression node, MethodSymbol method)
294MethodSymbol method,
486var method = indexer.GetOwnOrInheritedGetMethod() ?? indexer.GetOwnOrInheritedSetMethod();
642var binary = node.LogicalOperator;
643var unary = node.OperatorKind.Operator() == BinaryOperatorKind.And ? node.FalseOperator : node.TrueOperator;
676if (_inExpressionLambda && node.MethodOpt is MethodSymbol method && (method.IsAbstract || method.IsVirtual) && method.IsStatic)
766if (_inExpressionLambda && node.Conversion.Method is MethodSymbol method && (method.IsAbstract || method.IsVirtual) && method.IsStatic)
799private void CheckMethodGroup(BoundMethodGroup node, MethodSymbol method, bool isExtensionMethod, bool parentIsConversion, TypeSymbol convertedToType)
808if ((node.LookupSymbolOpt as MethodSymbol)?.MethodKind == MethodKind.LocalFunction)
Lowering\Instrumentation\CodeCoverageInstrumenter.cs (16)
26private readonly MethodSymbol _method;
28private readonly MethodSymbol _createPayloadForMethodsSpanningSingleFile;
29private readonly MethodSymbol _createPayloadForMethodsSpanningMultipleFiles;
40MethodSymbol method,
63MethodSymbol createPayloadForMethodsSpanningSingleFile = GetCreatePayloadOverload(
69MethodSymbol createPayloadForMethodsSpanningMultipleFiles = GetCreatePayloadOverload(
102MethodSymbol method,
105MethodSymbol createPayloadForMethodsSpanningSingleFile,
106MethodSymbol createPayloadForMethodsSpanningMultipleFiles,
123var oldMethod = methodBodyFactory.CurrentFunction;
141private static bool IsExcludedFromCodeCoverage(MethodSymbol method)
169MethodSymbol createPayloadForMethodsSpanningSingleFile,
170MethodSymbol createPayloadForMethodsSpanningMultipleFiles,
177MethodSymbol createPayloadOverload;
564private static MethodSymbol GetCreatePayloadOverload(CSharpCompilation compilation, WellKnownMember overload, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
566return (MethodSymbol)Binder.GetWellKnownTypeMember(compilation, overload, diagnostics, syntax: syntax);
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (12)
153MethodSymbol method,
204private MethodSymbol? GetLocalOrParameterStoreLogger(TypeSymbol variableType, Symbol targetSymbol, bool? refAssignmentSourceIsLocal, SyntaxNode syntax)
261var symbol = GetWellKnownMethodSymbol(overload, syntax);
266private MethodSymbol? GetWellKnownMethodSymbol(WellKnownMember overload, SyntaxNode syntax)
267=> (MethodSymbol?)Binder.GetWellKnownTypeMember(_factory.Compilation, overload, _diagnostics, syntax: syntax, isOptional: false);
307var parameterLogger = GetLocalOrParameterStoreLogger(parameter.Type, parameter, refAssignmentSourceIsLocal: null, _factory.Syntax);
338var entryLogger = GetWellKnownMethodSymbol(entryOverload, _factory.Syntax);
342var returnLogger = GetWellKnownMethodSymbol(WellKnownMember.Microsoft_CodeAnalysis_Runtime_LocalStoreTracker__LogReturn, _factory.Syntax);
396var logger = GetLocalOrParameterStoreLogger(targetType, targetSymbol, refAssignmentSourceIsLocal, original.Syntax);
466var toStringMethod = GetWellKnownMethodSymbol(WellKnownMember.System_Object__ToString, value.Syntax);
527var logger = GetLocalOrParameterStoreLogger(targetType, targetSymbol, refAssignmentSourceIsLocal: null, original.Syntax);
591var logger = GetLocalOrParameterStoreLogger(targetType, targetSymbol, refAssignmentSourceIsLocal: null, invocation.Syntax);
Lowering\LocalRewriter\DelegateCacheContainer.cs (7)
18private readonly Dictionary<(TypeSymbol?, TypeSymbol, MethodSymbol), FieldSymbol> _delegateFields = new(CLRSignatureComparer.Instance);
30internal DelegateCacheContainer(MethodSymbol ownerMethod, int topLevelMethodOrdinal, int ownerUniqueId, int generationOrdinal)
56var targetMethod = boundDelegateCreation.MethodOpt;
87private sealed class CLRSignatureComparer : IEqualityComparer<(TypeSymbol? constrainedToTypeOpt, TypeSymbol delegateType, MethodSymbol targetMethod)>
91public bool Equals((TypeSymbol? constrainedToTypeOpt, TypeSymbol delegateType, MethodSymbol targetMethod) x, (TypeSymbol? constrainedToTypeOpt, TypeSymbol delegateType, MethodSymbol targetMethod) y)
100public int GetHashCode((TypeSymbol? constrainedToTypeOpt, TypeSymbol delegateType, MethodSymbol targetMethod) conversion)
Lowering\LocalRewriter\LocalRewriter.cs (14)
50MethodSymbol containingMethod,
79MethodSymbol method,
295var oldContainingSymbol = _factory.CurrentFunction;
357var oldContainingSymbol = _factory.CurrentFunction;
536/// Recommendation: Do not use, use <see cref="TryGetSpecialTypeMethod(SyntaxNode, SpecialMember, out MethodSymbol)"/> instead!
539private MethodSymbol UnsafeGetSpecialTypeMethod(SyntaxNode syntax, SpecialMember specialMember)
546/// Recommendation: Do not use, use <see cref="TryGetSpecialTypeMethod(SyntaxNode, SpecialMember, CSharpCompilation, BindingDiagnosticBag, out MethodSymbol)"/> instead!
549private static MethodSymbol UnsafeGetSpecialTypeMethod(SyntaxNode syntax, SpecialMember specialMember, CSharpCompilation compilation, BindingDiagnosticBag diagnostics)
551MethodSymbol method;
566private bool TryGetSpecialTypeMethod(SyntaxNode syntax, SpecialMember specialMember, out MethodSymbol method)
571private static bool TryGetSpecialTypeMethod(SyntaxNode syntax, SpecialMember specialMember, CSharpCompilation compilation, BindingDiagnosticBag diagnostics, out MethodSymbol method)
585MethodSymbol getTypeFromHandle;
602MethodSymbol getTypeFromHandle;
995private void CheckRefReadOnlySymbols(MethodSymbol symbol)
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (23)
178MethodSymbol? method,
194MethodSymbol? method,
535private BoundExpression RewriteLiftedBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt)
598MethodSymbol? leftTruthOperator,
723private BoundExpression MakeTruthTestForDynamicLogicalOperator(SyntaxNode syntax, BoundExpression loweredLeft, TypeSymbol boolean, MethodSymbol? leftTruthOperator, TypeSymbol? constrainedToTypeOpt, bool negative)
745return new BoundUnaryOperator(syntax, UnaryOperatorKind.BoolLogicalNegation, converted, ConstantValue.NotAvailable, MethodSymbol.None, constrainedToTypeOpt: null, LookupResultKind.Viable, boolean)
766MethodSymbol? method,
787MethodSymbol? method,
1058MethodSymbol? method,
1218MethodSymbol? method,
1258MethodSymbol? method,
1327MethodSymbol? method,
1429MethodSymbol? method,
1756MethodSymbol getValueOrDefaultX = UnsafeGetNullableMethod(syntax, boundTempX.Type, SpecialMember.System_Nullable_T_GetValueOrDefault);
1757MethodSymbol getValueOrDefaultY = UnsafeGetNullableMethod(syntax, boundTempY.Type, SpecialMember.System_Nullable_T_GetValueOrDefault);
1814private MethodSymbol UnsafeGetNullableMethod(SyntaxNode syntax, TypeSymbol nullableType, SpecialMember member)
1824internal static MethodSymbol UnsafeGetNullableMethod(SyntaxNode syntax, TypeSymbol nullableType, SpecialMember member, CSharpCompilation compilation, BindingDiagnosticBag diagnostics)
1831private bool TryGetNullableMethod(SyntaxNode syntax, TypeSymbol nullableType, SpecialMember member, out MethodSymbol result)
1922var method = UnsafeGetSpecialTypeMethod(syntax, member);
1930MethodSymbol method;
1933method = (MethodSymbol)_compilation.Assembly.GetSpecialTypeMember(member);
1936(object)(method = (MethodSymbol)_compilation.Assembly.GetSpecialTypeMember(member)) == null)
1983var method = UnsafeGetSpecialTypeMethod(syntax, member);
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (18)
102if (!TryGetWellKnownTypeMember<MethodSymbol>(node.Syntax, WellKnownMember.System_ReadOnlySpan_T__ctor_Array_Start_Length, out MethodSymbol ctor))
544MethodSymbol? symbolOpt = oldNodeOpt.SymbolOpt;
557var method = oldNodeOpt.SymbolOpt;
922MethodSymbol ctor = UnsafeGetNullableMethod(syntax, rewrittenType, SpecialMember.System_Nullable_T__ctor);
938MethodSymbol get_Value = UnsafeGetNullableMethod(syntax, rewrittenOperandType, SpecialMember.System_Nullable_T_get_Value);
984if (!TryGetSpecialTypeMethod(syntax, DecimalConversionMethod(typeFromUnderlying, typeToUnderlying), out MethodSymbol method))
1025MethodSymbol getValueOrDefault;
1232MethodSymbol ctor = UnsafeGetNullableMethod(call.Syntax, resultType, SpecialMember.System_Nullable_T__ctor);
1283MethodSymbol getValueOrDefault = UnsafeGetNullableMethod(syntax, boundTemp.Type, SpecialMember.System_Nullable_T_GetValueOrDefault);
1340MethodSymbol method;
1577if (!TryGetSpecialTypeMethod(syntax, member, out MethodSymbol method))
1607var meth = conversion.Method;
1639MethodSymbol method;
1653MethodSymbol method;
1670MethodSymbol method;
1683MethodSymbol method;
1711private Conversion TryMakeUserDefinedConversion(SyntaxNode syntax, MethodSymbol meth, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit)
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (16)
52else if (node.AwaitOpt is null && CanRewriteForEachAsFor(node.Syntax, nodeExpressionType, out var indexerGet, out var lengthGetter))
62private bool CanRewriteForEachAsFor(SyntaxNode forEachSyntax, TypeSymbol nodeExpressionType, [NotNullWhen(true)] out MethodSymbol? indexerGet, [NotNullWhen(true)] out MethodSymbol? lengthGet)
75lengthGet = (MethodSymbol?)_factory.WellKnownMember(WellKnownMember.System_Span_T__get_Length, isOptional: true)?.SymbolAsMember(spanType);
76indexerGet = (MethodSymbol?)_factory.WellKnownMember(WellKnownMember.System_Span_T__get_Item, isOptional: true)?.SymbolAsMember(spanType);
81lengthGet = (MethodSymbol?)_factory.WellKnownMember(WellKnownMember.System_ReadOnlySpan_T__get_Length, isOptional: true)?.SymbolAsMember(spanType);
82indexerGet = (MethodSymbol?)_factory.WellKnownMember(WellKnownMember.System_ReadOnlySpan_T__get_Item, isOptional: true)?.SymbolAsMember(spanType);
231private bool TryGetDisposeMethod(CommonForEachStatementSyntax forEachSyntax, ForEachEnumeratorInfo enumeratorInfo, out MethodSymbol disposeMethod)
235disposeMethod = (MethodSymbol)Binder.GetWellKnownTypeMember(_compilation, WellKnownMember.System_IAsyncDisposable__DisposeAsync, _diagnostics, syntax: forEachSyntax);
259MethodSymbol? disposeMethod = enumeratorInfo.PatternDisposeInfo?.Method; // pattern-based
448private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method, Conversion receiverConversion, TypeSymbol convertedReceiverType)
521private BoundStatement RewriteForEachStatementAsFor(BoundForEachStatement node, MethodSymbol indexerGet, MethodSymbol lengthGet)
839MethodSymbol getLowerBoundMethod = UnsafeGetSpecialTypeMethod(forEachSyntax, SpecialMember.System_Array__GetLowerBound);
840MethodSymbol getUpperBoundMethod = UnsafeGetSpecialTypeMethod(forEachSyntax, SpecialMember.System_Array__GetUpperBound);
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (18)
65MethodSymbol? method,
77MethodSymbol? method,
161method = (MethodSymbol)_compilation.Assembly.GetSpecialTypeMember(SpecialMember.System_Decimal__op_UnaryNegation);
176MethodSymbol? method,
199MethodSymbol getValueOrDefault = UnsafeGetNullableMethod(syntax, boundTemp.Type, SpecialMember.System_Nullable_T_GetValueOrDefault);
240MethodSymbol? method,
348private BoundExpression GetLiftedUnaryOperatorConsequence(UnaryOperatorKind kind, SyntaxNode syntax, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt, TypeSymbol type, BoundExpression nonNullOperand)
350MethodSymbol ctor = UnsafeGetNullableMethod(syntax, type, SpecialMember.System_Nullable_T__ctor);
659MethodSymbol getValueOrDefault = UnsafeGetNullableMethod(syntax, type, SpecialMember.System_Nullable_T_GetValueOrDefault);
660MethodSymbol ctor = UnsafeGetNullableMethod(syntax, type, SpecialMember.System_Nullable_T__ctor);
738MethodSymbol ctor = UnsafeGetNullableMethod(node.Syntax, binaryOperandType, SpecialMember.System_Nullable_T__ctor);
790private MethodSymbol GetDecimalIncDecOperator(BinaryOperatorKind oper)
801var method = (MethodSymbol)_compilation.Assembly.GetSpecialTypeMember(member);
810MethodSymbol method = GetDecimalIncDecOperator(oper);
819MethodSymbol method = GetDecimalIncDecOperator(oper);
820MethodSymbol getValueOrDefault = UnsafeGetNullableMethod(syntax, operand.Type, SpecialMember.System_Nullable_T_GetValueOrDefault);
821MethodSymbol ctor = UnsafeGetNullableMethod(syntax, operand.Type, SpecialMember.System_Nullable_T__ctor);
Lowering\SyntheticBoundNodeFactory.cs (38)
62private MethodSymbol? _currentFunction;
63public MethodSymbol? CurrentFunction
81private MethodSymbol? _topLevelMethod;
82public MethodSymbol? TopLevelMethod
150public SyntheticBoundNodeFactory(MethodSymbol topLevelMethod, SyntaxNode node, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, InstrumentationState? instrumentationState = null)
161public SyntheticBoundNodeFactory(MethodSymbol? topLevelMethodOpt, NamedTypeSymbol? currentClassOpt, SyntaxNode node, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics, InstrumentationState? instrumentationState = null)
322var accessor = property.GetOwnOrInheritedGetMethod();
330var accessor = property.GetOwnOrInheritedGetMethod();
380public MethodSymbol? WellKnownMethod(WellKnownMember wm, bool isOptional)
382return (MethodSymbol?)WellKnownMember(wm, isOptional);
385public MethodSymbol WellKnownMethod(WellKnownMember wm)
387return (MethodSymbol)WellKnownMember(wm, isOptional: false)!;
411public MethodSymbol SpecialMethod(SpecialMember sm)
413return (MethodSymbol)SpecialMember(sm);
592public ParameterSymbol SynthesizedParameter(TypeSymbol type, string name, MethodSymbol? container = null, int ordinal = 0)
695var ctor = type.InstanceConstructors.Single(c => c.ParameterCount == args.Length);
699public BoundObjectCreationExpression New(MethodSymbol ctor, params BoundExpression[] args)
704var ctor = type.InstanceConstructors.Single(c => c.ParameterCount == args.Length);
708public BoundObjectCreationExpression New(MethodSymbol ctor, ImmutableArray<BoundExpression> args)
713var ctor = WellKnownMethod(wm);
757public BoundExpression StaticCall(TypeSymbol receiver, MethodSymbol method, params BoundExpression[] args)
767public BoundExpression StaticCall(MethodSymbol method, ImmutableArray<BoundExpression> args)
772MethodSymbol methodSymbol = WellKnownMethod(method);
780MethodSymbol methodSymbol = SpecialMethod(method);
786public BoundCall Call(BoundExpression? receiver, MethodSymbol method)
791public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0)
796public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, BoundExpression arg1)
801public BoundCall Call(BoundExpression? receiver, MethodSymbol method, params BoundExpression[] args)
809public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<BoundExpression> args)
821public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<RefKind> refKinds, ImmutableArray<BoundExpression> args)
1125var ctor = baseType.InstanceConstructors.Single(c => c.ParameterCount == 0);
1216internal BoundExpression ConstructorInfo(MethodSymbol ctor)
1226public BoundExpression MethodDefIndex(MethodSymbol method)
1302public BoundExpression MethodInfo(MethodSymbol method)
1331private MethodSymbol GetMethodFromHandleMethod(NamedTypeSymbol methodContainer)
1339private MethodSymbol GetFieldFromHandleMethod(NamedTypeSymbol fieldContainer)
1411MethodSymbol? arrayEmpty = WellKnownMethod(CodeAnalysis.WellKnownMember.System_Array__Empty, isOptional: true);
1520MethodSymbol? containingMethod = this.CurrentFunction;
Symbols\Compilation_WellKnownMembers.cs (13)
72/// <see cref="MethodSymbol.AsMember"/> to construct an instantiation.
242internal static Symbol? GetRuntimeMember(NamedTypeSymbol declaringType, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
248internal static Symbol? GetRuntimeMember(ImmutableArray<Symbol> members, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
302MethodSymbol method = (MethodSymbol)member;
391var ctorSymbol = (MethodSymbol)Binder.GetWellKnownTypeMember(this, constructor, useSiteInfo: out _, isOptional: true);
438var ctorSymbol = (MethodSymbol)this.GetSpecialTypeMember(constructor);
1033internal class SpecialMembersSignatureComparer : SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol>
1103protected override ImmutableArray<ParameterSymbol> GetParameters(MethodSymbol method)
1123protected override TypeSymbol GetReturnType(MethodSymbol method)
1147protected override bool IsByRefMethod(MethodSymbol method)
Symbols\Retargeting\RetargetingSymbolTranslator.cs (25)
45return new RetargetingMethodSymbol(this, (MethodSymbol)symbol);
893public MethodSymbol Retarget(MethodSymbol method)
898return (MethodSymbol)this.SymbolMap.GetOrAdd(method, _retargetingModule._createRetargetingMethod);
901public MethodSymbol Retarget(MethodSymbol method, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
922var retargetedDefinition = Retarget(method.OriginalDefinition, retargetedMethodComparer);
983private MethodSymbol FindMethodInRetargetedType(MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
991private readonly MethodSymbol _toFind;
993private RetargetedTypeMethodFinder(RetargetingModuleSymbol retargetingModule, NamedTypeSymbol retargetedType, MethodSymbol toFind) :
1000public static MethodSymbol Find(RetargetingSymbolTranslator translator, MethodSymbol method, NamedTypeSymbol retargetedType, IEqualityComparer<MethodSymbol> retargetedMethodComparer)
1013private static MethodSymbol FindWorker
1016MethodSymbol method,
1018IEqualityComparer<MethodSymbol> retargetedMethodComparer
1050ImmutableArray<MethodSymbol>.Empty);
1056var retargetedMethod = (MethodSymbol)retargetedMember;
1192MethodSymbol oldAttributeCtor = oldAttribute.AttributeConstructor;
1193MethodSymbol newAttributeCtor = (object)oldAttributeCtor == null ?
1386public override Symbol VisitMethod(MethodSymbol symbol, RetargetOptions options)
Symbols\Source\SourceMemberContainerSymbol.cs (70)
1534WhereAsArray(s => !s.IsIndexer() && (!s.IsAccessor() || ((MethodSymbol)s).AssociatedSymbol?.IsIndexer() != true)).
2337if (member.Kind != SymbolKind.Method || ((MethodSymbol)member).MethodKind != MethodKind.Destructor)
2386ImmutableArray<MethodSymbol> ops1 = this.GetOperators(operatorName1);
2400static void reportOperatorNeedsMatch(BindingDiagnosticBag diagnostics, string operatorName2, MethodSymbol op1)
2407static void reportCheckedOperatorNeedsMatch(BindingDiagnosticBag diagnostics, string operatorName2, MethodSymbol op1)
2415ImmutableArray<MethodSymbol> ops1,
2416ImmutableArray<MethodSymbol> ops2,
2418Action<BindingDiagnosticBag, string, MethodSymbol> reportMatchNotFoundError)
2420foreach (var op1 in ops1)
2423foreach (var op2 in ops2)
2439internal static bool DoOperatorsPair(MethodSymbol op1, MethodSymbol op2)
2527if (member is not MethodSymbol method || !method.ShouldCheckRequiredMembers())
2554foreach (var method in this.GetMembers(name).OfType<MethodSymbol>())
3239!(member is MethodSymbol method && MethodCompiler.GetMethodToCompile(method) is SourceMemberMethodSymbol sourceMethod))
3459var methodsBySignature = new Dictionary<MethodSymbol, SourceMemberMethodSymbol>(MemberSignatureComparer.PartialMethodsComparer);
3478(prevPart.IsPartialImplementation || (prevPart.OtherPartOfPartial is MethodSymbol otherImplementation && (object)otherImplementation != methodPart)))
3484(prevPart.IsPartialDefinition || (prevPart.OtherPartOfPartial is MethodSymbol otherDefinition && (object)otherDefinition != methodPart)))
3576MethodSymbol accessor = getNotSet ? propertySymbol.GetMethod : propertySymbol.SetMethod;
3601var methodSymbol = (MethodSymbol)symbol;
3637var methodSymbol = (MethodSymbol)symbol;
3790var meth = (MethodSymbol)member;
3836var m = s as MethodSymbol;
3881if (hasInitializers && !builder.NonTypeMembers.Any(member => member is MethodSymbol { MethodKind: MethodKind.Constructor }))
3933case MethodSymbol { MethodKind: not (MethodKind.Ordinary or MethodKind.Constructor) }:
3984var thisEquals = addThisEquals(equalityContract);
3992var getHashCode = addGetHashCode(equalityContract);
4000var printMembers = addPrintMembersMethod(membersSoFar);
4037ImmutableArray<MethodSymbol>.Empty);
4045var deconstruct = (MethodSymbol)existingDeconstructMethod;
4084ImmutableArray<MethodSymbol>.Empty);
4098var constructor = (MethodSymbol)existingConstructor;
4113MethodSymbol addPrintMembersMethod(IEnumerable<Symbol> userDefinedMembers)
4131explicitInterfaceImplementations: ImmutableArray<MethodSymbol>.Empty);
4133MethodSymbol printMembersMethod;
4141printMembersMethod = (MethodSymbol)existingPrintMembersMethod;
4172void addToStringMethod(MethodSymbol printMethod)
4186explicitInterfaceImplementations: ImmutableArray<MethodSymbol>.Empty);
4188var baseToStringMethod = getBaseToStringMethod();
4217var toStringMethod = (MethodSymbol)existingToStringMethod;
4228MethodSymbol? getBaseToStringMethod()
4236if (member is not MethodSymbol method)
4341void addObjectEquals(MethodSymbol thisEquals)
4346MethodSymbol addGetHashCode(PropertySymbol? equalityContract)
4360ImmutableArray<MethodSymbol>.Empty);
4362MethodSymbol getHashCode;
4371getHashCode = (MethodSymbol)existingHashCodeMethod;
4439MethodSymbol addThisEquals(PropertySymbol? equalityContract)
4458ImmutableArray<MethodSymbol>.Empty);
4460MethodSymbol thisEquals;
4469thisEquals = (MethodSymbol)existingEqualsMethod;
4532var method = (MethodSymbol)member;
4986private void AddAccessorIfAvailable(ArrayBuilder<Symbol> symbols, MethodSymbol? accessorOpt)
5136ImmutableArray<(MethodSymbol Body, MethodSymbol Implemented)>.Empty);
5139public readonly ImmutableArray<(MethodSymbol Body, MethodSymbol Implemented)> MethodImpls;
5143ImmutableArray<(MethodSymbol Body, MethodSymbol Implemented)> methodImpls)
5151ImmutableArray<(MethodSymbol Body, MethodSymbol Implemented)> methodImpls)
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (55)
18internal delegate void ReportMismatchInReturnType<TArg>(BindingDiagnosticBag bag, MethodSymbol overriddenMethod, MethodSymbol overridingMethod, bool topLevel, TArg arg);
19internal delegate void ReportMismatchInParameterType<TArg>(BindingDiagnosticBag bag, MethodSymbol overriddenMethod, MethodSymbol overridingMethod, ParameterSymbol parameter, bool topLevel, TArg arg);
73internal sealed override IEnumerable<(MethodSymbol Body, MethodSymbol Implemented)> SynthesizedInterfaceMethodImpls()
115var methodImpls = ArrayBuilder<(MethodSymbol Body, MethodSymbol Implemented)>.GetInstance();
237var associatedPropertyOrEvent = interfaceMemberKind == SymbolKind.Method ? ((MethodSymbol)interfaceMember).AssociatedSymbol : null;
535var method = (MethodSymbol)member;
536if (MethodSymbol.CanOverrideOrHide(method.MethodKind) && !method.IsAccessor())
557MethodSymbol overridden = method.GetFirstRuntimeOverriddenMethodIgnoringNewSlot(out _);
571var getMethod = property.GetMethod;
572var setMethod = property.SetMethod;
612var addMethod = @event.AddMethod;
613var removeMethod = @event.RemoveMethod;
703if (hiddenMember.Kind == SymbolKind.Method && !((MethodSymbol)hiddenMember).CanBeHiddenByMemberKind(symbol.Kind))
781associatedPropertyOrEvent = ((MethodSymbol)overridingMember).AssociatedSymbol;
790? ((MethodSymbol)overridingMember).ParameterTypesWithAnnotations
854if (!this.ContainingAssembly.RuntimeSupportsCovariantReturnsOfClasses && overridingMember is MethodSymbol overridingMethod)
859var ambiguousMethod = overridingMethod.OverriddenMethod;
891!(overridingMemberIsMethod && ((MethodSymbol)overriddenMember).MethodKind == MethodKind.Destructor)) //destructors are metadata virtual
978var overridingMethod = (MethodSymbol)overridingMember;
979var overriddenMethod = (MethodSymbol)overriddenMember;
1099MethodSymbol overriddenGetMethod = overriddenProperty.GetOwnOrInheritedGetMethod();
1115var ownOrInheritedOverriddenSetMethod = overriddenProperty.GetOwnOrInheritedSetMethod();
1138MethodSymbol ownOrInheritedGetMethod = overridingProperty.GetOwnOrInheritedGetMethod();
1145MethodSymbol ownOrInheritedSetMethod = overridingProperty.GetOwnOrInheritedSetMethod();
1158MethodSymbol overriddenMethod,
1159MethodSymbol overridingMethod,
1218(BindingDiagnosticBag diagnostics, MethodSymbol overriddenMethod, MethodSymbol overridingMethod, bool topLevel, Location location)
1225(BindingDiagnosticBag diagnostics, MethodSymbol overriddenMethod, MethodSymbol overridingMethod, ParameterSymbol overridingParameter, bool topLevel, Location location)
1236MethodSymbol baseMethod,
1237MethodSymbol overrideMethod,
1377internal static bool RequiresValidScopedOverrideForRefSafety(MethodSymbol? method)
1423internal static bool ReportInvalidScopedOverrideAsError(MethodSymbol baseMethod, MethodSymbol overrideMethod)
1434MethodSymbol? baseMethod,
1435MethodSymbol? overrideMethod,
1630var associatedPropertyOrEvent = ((MethodSymbol)hidingMember).AssociatedSymbol;
1748private (SynthesizedExplicitImplementationForwardingMethod? ForwardingMethod, (MethodSymbol Body, MethodSymbol Implemented)? MethodImpl)
1767MethodSymbol interfaceMethod = (MethodSymbol)interfaceMember;
1768MethodSymbol implementingMethod = (MethodSymbol)implementingMember;
1778MethodSymbol implementingMethodOriginalDefinition = implementingMethod.OriginalDefinition;
1850private static bool IsPossibleImplementationUnderRuntimeRules(MethodSymbol implementingMethod, NamedTypeSymbol @interface)
1874private static bool IsOverrideOfPossibleImplementationUnderRuntimeRules(MethodSymbol implementingMethod, NamedTypeSymbol @interface)
1876MethodSymbol curr = implementingMethod;
Symbols\TypeSymbol.cs (60)
85internal ImmutableDictionary<MethodSymbol, MethodSymbol>? synthesizedMethodImplMap;
863if (checkPendingExplicitImplementations && interfaceMember is MethodSymbol interfaceMethod &&
867MethodSymbol bodyOfSynthesizedMethodImpl = currType.GetBodyOfSynthesizedInterfaceMethodImpl(interfaceMethod);
947CheckForImplementationOfCorrespondingPropertyOrEvent((MethodSymbol)interfaceMember, implementingType, implementingTypeIsFromSomeCompilation, ref implicitImpl);
1054(MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) = GetImplementableAccessors(interfaceMember);
1079static bool stopLookup(MethodSymbol interfaceAccessor, TypeSymbol implementingType)
1106(MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) = GetImplementableAccessors(interfaceMember);
1162(MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) = GetImplementableAccessors(interfaceMember);
1394private static (MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) GetImplementableAccessors(Symbol interfaceMember)
1396MethodSymbol interfaceAccessor1;
1397MethodSymbol interfaceAccessor2;
1457(MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) = GetImplementableAccessors(interfaceMember);
1492private static bool TryGetExplicitImplementationAssociatedPropertyOrEvent(bool checkPendingExplicitImplementations, MethodSymbol interfaceAccessor, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol associated)
1503? ((MethodSymbol)implementation).AssociatedSymbol
1512MethodSymbol bodyOfSynthesizedMethodImpl = currType.GetBodyOfSynthesizedInterfaceMethodImpl(interfaceAccessor);
1536private static void CheckForImplementationOfCorrespondingPropertyOrEvent(MethodSymbol interfaceMethod, TypeSymbol implementingType, bool implementingTypeIsFromSomeCompilation,
1556MethodSymbol correspondingImplementingAccessor = null;
1597MethodSymbol interfaceAccessorWithImplementationName = new SignatureOnlyMethodSymbol(
1663var interfaceMethod = (MethodSymbol)interfaceMember;
1677var implicitImplMethod = (MethodSymbol)implicitImpl;
1781MethodSymbol implementedMethod,
1782MethodSymbol implementingMethod,
1879var implementingGetMethod = implementedProperty.GetMethod.IsImplementable() ?
1882var implementingSetMethod = implementedProperty.SetMethod.IsImplementable() ?
1912var implementingMethod = (MethodSymbol)implementingMember;
1913var implementedMethod = (MethodSymbol)interfaceMember;
1965var method = (MethodSymbol)interfaceMember;
1985hasRefReturnMismatch = ((MethodSymbol)closestMismatch).RefKind != interfaceMemberRefKind;
2013if (!(one is MethodSymbol oneMethod))
2018if (!(other is MethodSymbol otherMethod))
2043private static bool ReportAnyMismatchedConstraints(MethodSymbol interfaceMethod, TypeSymbol implementingType, MethodSymbol implicitImpl, BindingDiagnosticBag diagnostics)
2129if (interfaceMember is MethodSymbol interfaceMethod)
2139(((MethodSymbol)member).MethodKind is MethodKind.UserDefinedOperator or MethodKind.Conversion) != isOperator.GetValueOrDefault())
2243Debug.Assert(interfaceMember.Kind != SymbolKind.Method || (object)interfaceMember == ((MethodSymbol)interfaceMember).ConstructedFrom);
2254/// <see cref="MethodSymbol.ExplicitInterfaceImplementations"/> API, this method returns the "Body" part
2262protected MethodSymbol? GetBodyOfSynthesizedInterfaceMethodImpl(MethodSymbol interfaceMethod)
2275if (info.synthesizedMethodImplMap.TryGetValue(interfaceMethod, out MethodSymbol? result))
2282ImmutableDictionary<MethodSymbol, MethodSymbol> makeSynthesizedMethodImplMap()
2284var map = ImmutableDictionary.CreateBuilder<MethodSymbol, MethodSymbol>(ExplicitInterfaceImplementationTargetMemberEqualityComparer.Instance);
2285foreach ((MethodSymbol body, MethodSymbol implemented) in this.SynthesizedInterfaceMethodImpls())
2297/// <see cref="MethodSymbol.ExplicitInterfaceImplementations"/> API. The "Body" is the method that
2304internal abstract IEnumerable<(MethodSymbol Body, MethodSymbol Implemented)> SynthesizedInterfaceMethodImpls();
2360overriddenMember = ((MethodSymbol)member).OverriddenMethod;
Microsoft.CodeAnalysis.CSharp.ExpressionEvaluator.ExpressionCompiler.UnitTests (211)