|
|
|
@ -77,8 +77,8 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -77,8 +77,8 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
ResolveResult GetResolveResult(int index, TranslatedExpression expression) |
|
|
|
|
{ |
|
|
|
|
var param = expectedParameters[index]; |
|
|
|
|
if (useImplicitlyTypedOut && param.IsOut) |
|
|
|
|
return OutVarResolveResult.Instance; |
|
|
|
|
if (useImplicitlyTypedOut && param.IsOut && expression.Type is ByReferenceType brt) |
|
|
|
|
return new OutVarResolveResult(brt.ElementType); |
|
|
|
|
return expression.ResolveResult; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1017,6 +1017,10 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -1017,6 +1017,10 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
{ |
|
|
|
|
switch (errors) |
|
|
|
|
{ |
|
|
|
|
case OverloadResolutionErrors.OutVarTypeMismatch: |
|
|
|
|
Debug.Assert(argumentList.UseImplicitlyTypedOut); |
|
|
|
|
argumentList.UseImplicitlyTypedOut = false; |
|
|
|
|
continue; |
|
|
|
|
case OverloadResolutionErrors.TypeInferenceFailed: |
|
|
|
|
if ((allowedTransforms & CallTransformation.RequireTypeArguments) != 0) |
|
|
|
|
{ |
|
|
|
@ -1318,6 +1322,20 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -1318,6 +1322,20 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
foundMember = or.GetBestCandidateWithSubstitutedTypeArguments(); |
|
|
|
|
if (!IsAppropriateCallTarget(expectedTargetDetails, method, foundMember)) |
|
|
|
|
return OverloadResolutionErrors.AmbiguousMatch; |
|
|
|
|
var map = or.GetArgumentToParameterMap(); |
|
|
|
|
for (int i = 0; i < arguments.Length; i++) |
|
|
|
|
{ |
|
|
|
|
ResolveResult arg = arguments[i]; |
|
|
|
|
int parameterIndex = map[i]; |
|
|
|
|
if (arg is OutVarResolveResult rr && parameterIndex >= 0) |
|
|
|
|
{ |
|
|
|
|
var param = foundMember.Parameters[parameterIndex]; |
|
|
|
|
var paramType = param.Type.UnwrapByRef(); |
|
|
|
|
if (!paramType.Equals(rr.OriginalVariableType)) |
|
|
|
|
return OverloadResolutionErrors.OutVarTypeMismatch; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return OverloadResolutionErrors.None; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|