Files
2026-08-27 10:56:38 -06:00

307 lines
13 KiB
C#

using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp;
internal readonly struct MemberAnalysisResult
{
public readonly ImmutableArray<Conversion> ConversionsOpt;
public readonly BitVector BadArgumentsOpt;
public readonly ImmutableArray<int> ArgsToParamsOpt;
public readonly ImmutableArray<TypeParameterDiagnosticInfo> ConstraintFailureDiagnostics;
public readonly int BadParameter;
public readonly MemberResolutionKind Kind;
public readonly bool HasAnyRefOmittedArgument;
public int FirstBadArgument
{
get
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
BitVector badArgumentsOpt = BadArgumentsOpt;
return ((BitVector)(ref badArgumentsOpt)).TrueBits().First();
}
}
public bool IsApplicable
{
get
{
MemberResolutionKind kind = Kind;
if (kind - 1 <= MemberResolutionKind.ApplicableInNormalForm || kind - 22 <= MemberResolutionKind.ApplicableInNormalForm)
{
return true;
}
return false;
}
}
public bool IsValid
{
get
{
MemberResolutionKind kind = Kind;
if (kind - 1 <= MemberResolutionKind.ApplicableInNormalForm)
{
return true;
}
return false;
}
}
private MemberAnalysisResult(MemberResolutionKind kind, BitVector badArgumentsOpt = default(BitVector), ImmutableArray<int> argsToParamsOpt = default(ImmutableArray<int>), ImmutableArray<Conversion> conversionsOpt = default(ImmutableArray<Conversion>), int missingParameter = -1, bool hasAnyRefOmittedArgument = false, ImmutableArray<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt = default(ImmutableArray<TypeParameterDiagnosticInfo>))
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
Kind = kind;
BadArgumentsOpt = badArgumentsOpt;
ArgsToParamsOpt = argsToParamsOpt;
ConversionsOpt = conversionsOpt;
BadParameter = missingParameter;
HasAnyRefOmittedArgument = hasAnyRefOmittedArgument;
ConstraintFailureDiagnostics = ImmutableArrayExtensions.NullToEmpty<TypeParameterDiagnosticInfo>(constraintFailureDiagnosticsOpt);
}
public override bool Equals(object obj)
{
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/MemberAnalysisResult.cs", 63);
}
public override int GetHashCode()
{
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/MemberAnalysisResult.cs", 68);
}
public Conversion ConversionForArg(int arg)
{
if (ConversionsOpt.IsDefault)
{
return Conversion.Identity;
}
return ConversionsOpt[arg];
}
public int ParameterFromArgument(int arg)
{
if (ArgsToParamsOpt.IsDefault)
{
return arg;
}
return ArgsToParamsOpt[arg];
}
internal bool HasUseSiteDiagnosticToReportFor(Symbol symbol)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
if (!SuppressUseSiteDiagnosticsForKind(Kind) && (object)symbol != null)
{
return symbol.GetUseSiteInfo().DiagnosticInfo != null;
}
return false;
}
private static bool SuppressUseSiteDiagnosticsForKind(MemberResolutionKind kind)
{
switch (kind)
{
case MemberResolutionKind.UnsupportedMetadata:
return true;
case MemberResolutionKind.NoCorrespondingParameter:
case MemberResolutionKind.NoCorrespondingNamedParameter:
case MemberResolutionKind.DuplicateNamedArgument:
case MemberResolutionKind.RequiredParameterMissing:
case MemberResolutionKind.NameUsedForPositional:
case MemberResolutionKind.LessDerived:
return true;
default:
return false;
}
}
public static MemberAnalysisResult ArgumentParameterMismatch(ArgumentAnalysisResult argAnalysis)
{
return argAnalysis.Kind switch
{
ArgumentAnalysisResultKind.NoCorrespondingParameter => NoCorrespondingParameter(argAnalysis.ArgumentPosition),
ArgumentAnalysisResultKind.NoCorrespondingNamedParameter => NoCorrespondingNamedParameter(argAnalysis.ArgumentPosition),
ArgumentAnalysisResultKind.DuplicateNamedArgument => DuplicateNamedArgument(argAnalysis.ArgumentPosition),
ArgumentAnalysisResultKind.RequiredParameterMissing => RequiredParameterMissing(argAnalysis.ParameterPosition),
ArgumentAnalysisResultKind.NameUsedForPositional => NameUsedForPositional(argAnalysis.ArgumentPosition),
ArgumentAnalysisResultKind.BadNonTrailingNamedArgument => BadNonTrailingNamedArgument(argAnalysis.ArgumentPosition),
_ => throw ExceptionUtilities.UnexpectedValue((object)argAnalysis.Kind),
};
}
public static MemberAnalysisResult NameUsedForPositional(int argumentPosition)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.NameUsedForPositional, CreateBadArgumentsWithPosition(argumentPosition));
}
public static MemberAnalysisResult BadNonTrailingNamedArgument(int argumentPosition)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.BadNonTrailingNamedArgument, CreateBadArgumentsWithPosition(argumentPosition));
}
public static MemberAnalysisResult NoCorrespondingParameter(int argumentPosition)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.NoCorrespondingParameter, CreateBadArgumentsWithPosition(argumentPosition));
}
public static MemberAnalysisResult NoCorrespondingNamedParameter(int argumentPosition)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.NoCorrespondingNamedParameter, CreateBadArgumentsWithPosition(argumentPosition));
}
public static MemberAnalysisResult DuplicateNamedArgument(int argumentPosition)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.DuplicateNamedArgument, CreateBadArgumentsWithPosition(argumentPosition));
}
internal static BitVector CreateBadArgumentsWithPosition(int argumentPosition)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
BitVector result = BitVector.Create(argumentPosition + 1);
((BitVector)(ref result))[argumentPosition] = true;
return result;
}
public static MemberAnalysisResult RequiredParameterMissing(int parameterPosition)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.RequiredParameterMissing, default(BitVector), default(ImmutableArray<int>), default(ImmutableArray<Conversion>), parameterPosition);
}
public static MemberAnalysisResult UseSiteError()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.UseSiteError);
}
public static MemberAnalysisResult UnsupportedMetadata()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.UnsupportedMetadata);
}
public static MemberAnalysisResult BadArgumentConversions(ImmutableArray<int> argsToParamsOpt, BitVector badArguments, ImmutableArray<Conversion> conversions)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.BadArgumentConversion, badArguments, argsToParamsOpt, conversions);
}
public static MemberAnalysisResult InaccessibleTypeArgument()
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.InaccessibleTypeArgument);
}
public static MemberAnalysisResult TypeInferenceFailed()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.TypeInferenceFailed);
}
public static MemberAnalysisResult TypeInferenceExtensionInstanceArgumentFailed()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.TypeInferenceExtensionInstanceArgument);
}
public static MemberAnalysisResult StaticInstanceMismatch()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.StaticInstanceMismatch);
}
public static MemberAnalysisResult ConstructedParameterFailedConstraintsCheck(int parameterPosition)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.ConstructedParameterFailedConstraintCheck, default(BitVector), default(ImmutableArray<int>), default(ImmutableArray<Conversion>), parameterPosition);
}
public static MemberAnalysisResult WrongRefKind()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.WrongRefKind);
}
public static MemberAnalysisResult WrongReturnType()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.WrongReturnType);
}
public static MemberAnalysisResult LessDerived()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.LessDerived);
}
public static MemberAnalysisResult NormalForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<Conversion> conversions, bool hasAnyRefOmittedArgument)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.ApplicableInNormalForm, BitVector.Null, argsToParamsOpt, conversions, -1, hasAnyRefOmittedArgument);
}
public static MemberAnalysisResult ExpandedForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<Conversion> conversions, bool hasAnyRefOmittedArgument)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.ApplicableInExpandedForm, BitVector.Null, argsToParamsOpt, conversions, -1, hasAnyRefOmittedArgument);
}
public static MemberAnalysisResult Worse()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.Worse);
}
public static MemberAnalysisResult Worst()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.Worst);
}
internal static MemberAnalysisResult ConstraintFailure(ImmutableArray<TypeParameterDiagnosticInfo> constraintFailureDiagnostics)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.ConstraintFailure, default(BitVector), default(ImmutableArray<int>), default(ImmutableArray<Conversion>), -1, hasAnyRefOmittedArgument: false, constraintFailureDiagnostics);
}
internal static MemberAnalysisResult WrongCallingConvention()
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
return new MemberAnalysisResult(MemberResolutionKind.WrongCallingConvention);
}
}