91 lines
2.8 KiB
C#
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;
|
||
|
|
}
|
||
|
|
}
|