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

91 lines
2.8 KiB
C#

using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp;
internal static class ConversionKindExtensions
{
public static bool IsDynamic(this ConversionKind conversionKind)
{
if (conversionKind != ConversionKind.ImplicitDynamic)
{
return conversionKind == ConversionKind.ExplicitDynamic;
}
return true;
}
public static bool IsImplicitConversion(this ConversionKind conversionKind)
{
switch (conversionKind)
{
case ConversionKind.UnsetConversionKind:
case ConversionKind.NoConversion:
return false;
case ConversionKind.Identity:
case ConversionKind.ImplicitNumeric:
case ConversionKind.ImplicitEnumeration:
case ConversionKind.ImplicitThrow:
case ConversionKind.ImplicitTupleLiteral:
case ConversionKind.ImplicitTuple:
case ConversionKind.ImplicitNullable:
case ConversionKind.NullLiteral:
case ConversionKind.ImplicitReference:
case ConversionKind.Boxing:
case ConversionKind.ImplicitPointerToVoid:
case ConversionKind.ImplicitNullToPointer:
case ConversionKind.ImplicitPointer:
case ConversionKind.ImplicitDynamic:
case ConversionKind.ImplicitConstant:
case ConversionKind.ImplicitUserDefined:
case ConversionKind.AnonymousFunction:
case ConversionKind.MethodGroup:
case ConversionKind.FunctionType:
case ConversionKind.InterpolatedString:
case ConversionKind.SwitchExpression:
case ConversionKind.ConditionalExpression:
case ConversionKind.Deconstruction:
case ConversionKind.StackAllocToPointerType:
case ConversionKind.StackAllocToSpanType:
case ConversionKind.DefaultLiteral:
case ConversionKind.ObjectCreation:
case ConversionKind.CollectionExpression:
case ConversionKind.InterpolatedStringHandler:
case ConversionKind.InlineArray:
return true;
case ConversionKind.ExplicitTupleLiteral:
case ConversionKind.ExplicitTuple:
case ConversionKind.ExplicitDynamic:
case ConversionKind.ExplicitNumeric:
case ConversionKind.ExplicitEnumeration:
case ConversionKind.ExplicitNullable:
case ConversionKind.ExplicitReference:
case ConversionKind.Unboxing:
case ConversionKind.ExplicitUserDefined:
case ConversionKind.ExplicitPointerToPointer:
case ConversionKind.ExplicitIntegerToPointer:
case ConversionKind.ExplicitPointerToInteger:
case ConversionKind.IntPtr:
return false;
default:
throw ExceptionUtilities.UnexpectedValue((object)conversionKind);
}
}
public static bool IsUserDefinedConversion(this ConversionKind conversionKind)
{
if (conversionKind == ConversionKind.ImplicitUserDefined || conversionKind == ConversionKind.ExplicitUserDefined)
{
return true;
}
return false;
}
public static bool IsPointerConversion(this ConversionKind kind)
{
if (kind - 14 <= ConversionKind.Identity || kind - 30 <= ConversionKind.Identity)
{
return true;
}
return false;
}
}