Skip to content

Commit

Permalink
Implement lower and upper bound inference in function pointer paramet…
Browse files Browse the repository at this point in the history
…ers (#50249)
  • Loading branch information
333fred authored Jan 28, 2021
1 parent 9d9b8fb commit f67e419
Show file tree
Hide file tree
Showing 5 changed files with 779 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private static MethodGroupResolution ResolveDelegateOrFunctionPointerMethodGroup
if ((object)delegateInvokeMethodOpt != null)
{
var analyzedArguments = AnalyzedArguments.GetInstance();
GetDelegateArguments(source.Syntax, analyzedArguments, delegateInvokeMethodOpt.Parameters, binder.Compilation);
GetDelegateOrFunctionPointerArguments(source.Syntax, analyzedArguments, delegateInvokeMethodOpt.Parameters, binder.Compilation);
var resolution = binder.ResolveMethodGroup(source, analyzedArguments, useSiteDiagnostics: ref useSiteDiagnostics, inferWithDynamic: true,
isMethodGroupConversion: true, returnRefKind: delegateInvokeMethodOpt.RefKind, returnType: delegateInvokeMethodOpt.ReturnType,
isFunctionPointerResolution: isFunctionPointer, callingConventionInfo: callingConventionInfo);
Expand Down Expand Up @@ -229,7 +229,7 @@ public Conversion MethodGroupConversion(SyntaxNode syntax, MethodGroup methodGro

Debug.Assert((object)delegateInvokeMethod != null && !delegateInvokeMethod.HasUseSiteError,
"This method should only be called for valid delegate types");
GetDelegateArguments(syntax, analyzedArguments, delegateInvokeMethod.Parameters, Compilation);
GetDelegateOrFunctionPointerArguments(syntax, analyzedArguments, delegateInvokeMethod.Parameters, Compilation);
_binder.OverloadResolution.MethodInvocationOverloadResolution(
methods: methodGroup.Methods,
typeArguments: methodGroup.TypeArguments,
Expand All @@ -247,7 +247,7 @@ public Conversion MethodGroupConversion(SyntaxNode syntax, MethodGroup methodGro
return conversion;
}

public static void GetDelegateArguments(SyntaxNode syntax, AnalyzedArguments analyzedArguments, ImmutableArray<ParameterSymbol> delegateParameters, CSharpCompilation compilation)
public static void GetDelegateOrFunctionPointerArguments(SyntaxNode syntax, AnalyzedArguments analyzedArguments, ImmutableArray<ParameterSymbol> delegateParameters, CSharpCompilation compilation)
{
foreach (var p in delegateParameters)
{
Expand Down
Loading

0 comments on commit f67e419

Please sign in to comment.