799 references to ConversionKind
Microsoft.CodeAnalysis.CSharp (799)
Binder\Binder.ValueChecks.cs (7)
1031
if (conversion.ConversionKind ==
ConversionKind
.Unboxing)
4607
Debug.Assert(conversion.ConversionKind !=
ConversionKind
.StackAllocToSpanType, "StackAllocToSpanType unexpected");
4609
if (conversion.ConversionKind ==
ConversionKind
.InterpolatedStringHandler)
4614
if (conversion.ConversionKind ==
ConversionKind
.CollectionExpression)
5382
Debug.Assert(conversion.ConversionKind !=
ConversionKind
.StackAllocToSpanType, "StackAllocToSpanType unexpected");
5384
if (conversion.ConversionKind ==
ConversionKind
.InterpolatedStringHandler)
5389
if (conversion.ConversionKind ==
ConversionKind
.CollectionExpression)
Binder\Binder_Await.cs (2)
477
var result = conversion is { IsImplicit: true, Kind:
ConversionKind
.Identity or
ConversionKind
.ImplicitReference };
Binder\Binder_Conversions.cs (25)
184
if (conversion.Kind ==
ConversionKind
.FunctionType)
200
if (conversion.Kind ==
ConversionKind
.SwitchExpression)
216
if (conversion.Kind ==
ConversionKind
.ConditionalExpression)
232
if (conversion.Kind ==
ConversionKind
.InterpolatedString)
239
if (conversion.Kind ==
ConversionKind
.InterpolatedStringHandler)
323
if (conversion.Kind ==
ConversionKind
.DefaultLiteral)
333
if (conversion.Kind is
ConversionKind
.ImplicitReference or
ConversionKind
.ExplicitReference &&
942
Debug.Assert(_conversion.Kind is
ConversionKind
.NoConversion);
1607
case
ConversionKind
.Identity:
1608
case
ConversionKind
.ImplicitReference:
1609
case
ConversionKind
.Boxing:
2841
Debug.Assert(conversion.Kind ==
ConversionKind
.FunctionType);
3102
case
ConversionKind
.StackAllocToPointerType:
3106
case
ConversionKind
.StackAllocToSpanType:
3844
if (conversion.Kind ==
ConversionKind
.DefaultLiteral)
3865
case
ConversionKind
.Identity:
3879
case
ConversionKind
.NullLiteral:
3882
case
ConversionKind
.ImplicitConstant:
3885
case
ConversionKind
.ExplicitNumeric:
3886
case
ConversionKind
.ImplicitNumeric:
3887
case
ConversionKind
.ExplicitEnumeration:
3888
case
ConversionKind
.ImplicitEnumeration:
3900
case
ConversionKind
.ExplicitReference:
3901
case
ConversionKind
.ImplicitReference:
Binder\Binder_Deconstruct.cs (2)
309
Debug.Assert(nestedConversion.Kind ==
ConversionKind
.Deconstruction);
343
conversion = new Conversion(
ConversionKind
.Deconstruction, deconstructMethod, nestedConversions.ToImmutableAndFree());
Binder\Binder_Operators.cs (50)
500
if (conversion.Kind is not
ConversionKind
.Identity)
502
Debug.Assert(conversion.Kind is
ConversionKind
.ImplicitReference);
3606
if (conversion.Kind is not
ConversionKind
.Identity)
3608
Debug.Assert(conversion.Kind is
ConversionKind
.ImplicitReference);
4951
return new BoundIsOperator(node, operand, typeExpression,
ConversionKind
.NoConversion, resultType, hasErrors: true);
5032
ConversionKind
conversionKind,
5067
ConversionKind
conversionKind,
5121
case
ConversionKind
.ImplicitSpan:
5122
case
ConversionKind
.ExplicitSpan:
5123
case
ConversionKind
.NoConversion:
5237
case
ConversionKind
.ImplicitNumeric:
5238
case
ConversionKind
.ExplicitNumeric:
5239
case
ConversionKind
.ImplicitEnumeration:
5241
case
ConversionKind
.ImplicitConstant:
5242
case
ConversionKind
.ImplicitUserDefined:
5243
case
ConversionKind
.ExplicitUserDefined:
5244
case
ConversionKind
.IntPtr:
5245
case
ConversionKind
.ExplicitTuple:
5246
case
ConversionKind
.ImplicitTuple:
5262
case
ConversionKind
.ExplicitEnumeration:
5267
goto case
ConversionKind
.NoConversion;
5272
case
ConversionKind
.ExplicitNullable:
5303
case
ConversionKind
.ImplicitReference:
5306
case
ConversionKind
.ExplicitReference:
5307
case
ConversionKind
.Unboxing:
5314
case
ConversionKind
.Identity:
5321
case
ConversionKind
.Boxing:
5338
case
ConversionKind
.ImplicitNullable:
5351
case
ConversionKind
.ImplicitDynamic:
5352
case
ConversionKind
.ExplicitDynamic:
5353
case
ConversionKind
.ExplicitPointerToInteger:
5354
case
ConversionKind
.ExplicitPointerToPointer:
5355
case
ConversionKind
.ImplicitPointerToVoid:
5356
case
ConversionKind
.ExplicitIntegerToPointer:
5357
case
ConversionKind
.ImplicitNullToPointer:
5358
case
ConversionKind
.AnonymousFunction:
5359
case
ConversionKind
.NullLiteral:
5360
case
ConversionKind
.DefaultLiteral:
5361
case
ConversionKind
.MethodGroup:
5362
case
ConversionKind
.Union:
5530
ConversionKind
conversionKind,
5556
case
ConversionKind
.ImplicitReference:
5557
case
ConversionKind
.Boxing:
5558
case
ConversionKind
.ImplicitNullable:
5559
case
ConversionKind
.Identity:
5560
case
ConversionKind
.ExplicitNullable:
5561
case
ConversionKind
.ExplicitReference:
5562
case
ConversionKind
.Unboxing:
5592
ConversionKind
conversionKind,
5621
internal static ConstantValue GetAsOperatorConstantResult(TypeSymbol operandType, TypeSymbol targetType,
ConversionKind
conversionKind, ConstantValue operandConstantValue)
Binder\Binder_Patterns.cs (4)
1196
else if ((conversion.ConversionKind ==
ConversionKind
.Boxing || conversion.ConversionKind ==
ConversionKind
.ImplicitReference)
1206
else if (conversion.ConversionKind ==
ConversionKind
.ImplicitNullToPointer ||
1207
(conversion.ConversionKind ==
ConversionKind
.NoConversion && convertedExpression.Type?.IsErrorType() == true))
Binder\Binder_Statements.cs (4)
1993
if (conversion.Kind !=
ConversionKind
.Identity)
2295
else if (conversion.Kind ==
ConversionKind
.ExplicitNumeric && sourceConstantValueOpt != null && sourceConstantValueOpt != ConstantValue.Bad &&
2723
if (conversion.Kind ==
ConversionKind
.Identity)
3214
if (conversion.Kind !=
ConversionKind
.Identity)
Binder\ForEachLoopBinder.cs (2)
486
if (elementConversionClassification.Kind !=
ConversionKind
.Identity && IterationVariable.RefKind is RefKind.Ref or RefKind.RefReadOnly)
595
(collectionConversionClassification.Kind ==
ConversionKind
.ExplicitReference && collectionExpr.Type.SpecialType == SpecialType.System_String));
Binder\RefSafetyAnalysis.cs (4)
748
if (arg is BoundConversion { ConversionKind:
ConversionKind
.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
1132
Debug.Assert(conversion.Kind ==
ConversionKind
.Deconstruction);
1248
case
ConversionKind
.Identity:
1249
case
ConversionKind
.ImplicitTupleLiteral:
Binder\Semantics\Conversions\Conversion.cs (147)
22
private readonly
ConversionKind
_kind;
136
ConversionKind
.CollectionExpression,
143
ConversionKind
.Union,
152
ConversionKind
kind,
170
?
ConversionKind
.NoConversion
171
: isImplicit ?
ConversionKind
.ImplicitUserDefined :
ConversionKind
.ExplicitUserDefined;
185
internal Conversion(
ConversionKind
kind, MethodSymbol conversionMethod, bool isExtensionMethod)
197
internal Conversion(
ConversionKind
kind, ImmutableArray<Conversion> nestedConversions)
206
internal Conversion(
ConversionKind
kind, DeconstructMethodInfo deconstructMethodInfo, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo)
208
Debug.Assert(kind ==
ConversionKind
.Deconstruction);
223
Debug.Assert(_kind is
ConversionKind
.MethodGroup or
ConversionKind
.IntPtr or
ConversionKind
.ImplicitUserDefined or
ConversionKind
.ExplicitUserDefined);
243
private static void AssertTrivialConversion(
ConversionKind
kind)
249
case
ConversionKind
.NoConversion:
250
case
ConversionKind
.Identity:
251
case
ConversionKind
.ImplicitConstant:
252
case
ConversionKind
.ImplicitNumeric:
253
case
ConversionKind
.ImplicitReference:
254
case
ConversionKind
.ImplicitEnumeration:
255
case
ConversionKind
.ImplicitThrow:
256
case
ConversionKind
.AnonymousFunction:
257
case
ConversionKind
.Boxing:
258
case
ConversionKind
.NullLiteral:
259
case
ConversionKind
.DefaultLiteral:
260
case
ConversionKind
.ImplicitNullToPointer:
261
case
ConversionKind
.ImplicitPointerToVoid:
262
case
ConversionKind
.ExplicitPointerToPointer:
263
case
ConversionKind
.ExplicitPointerToInteger:
264
case
ConversionKind
.ExplicitIntegerToPointer:
265
case
ConversionKind
.Unboxing:
266
case
ConversionKind
.ExplicitReference:
267
case
ConversionKind
.IntPtr:
268
case
ConversionKind
.ExplicitEnumeration:
269
case
ConversionKind
.ExplicitNumeric:
270
case
ConversionKind
.ImplicitDynamic:
271
case
ConversionKind
.ExplicitDynamic:
272
case
ConversionKind
.InterpolatedString:
273
case
ConversionKind
.InterpolatedStringHandler:
274
case
ConversionKind
.InlineArray:
275
case
ConversionKind
.ImplicitSpan:
276
case
ConversionKind
.ExplicitSpan:
288
internal static Conversion GetTrivialConversion(
ConversionKind
kind)
294
internal static Conversion UnsetConversion => new Conversion(
ConversionKind
.UnsetConversionKind);
295
internal static Conversion NoConversion => new Conversion(
ConversionKind
.NoConversion);
296
internal static Conversion Identity => new Conversion(
ConversionKind
.Identity);
297
internal static Conversion ImplicitConstant => new Conversion(
ConversionKind
.ImplicitConstant);
298
internal static Conversion ImplicitNumeric => new Conversion(
ConversionKind
.ImplicitNumeric);
299
internal static Conversion ImplicitReference => new Conversion(
ConversionKind
.ImplicitReference);
300
internal static Conversion ImplicitEnumeration => new Conversion(
ConversionKind
.ImplicitEnumeration);
301
internal static Conversion ImplicitThrow => new Conversion(
ConversionKind
.ImplicitThrow);
302
internal static Conversion ObjectCreation => new Conversion(
ConversionKind
.ObjectCreation);
303
internal static Conversion CollectionExpression => new Conversion(
ConversionKind
.CollectionExpression);
304
internal static Conversion AnonymousFunction => new Conversion(
ConversionKind
.AnonymousFunction);
305
internal static Conversion Boxing => new Conversion(
ConversionKind
.Boxing);
306
internal static Conversion NullLiteral => new Conversion(
ConversionKind
.NullLiteral);
307
internal static Conversion DefaultLiteral => new Conversion(
ConversionKind
.DefaultLiteral);
308
internal static Conversion NullToPointer => new Conversion(
ConversionKind
.ImplicitNullToPointer);
309
internal static Conversion PointerToVoid => new Conversion(
ConversionKind
.ImplicitPointerToVoid);
310
internal static Conversion PointerToPointer => new Conversion(
ConversionKind
.ExplicitPointerToPointer);
311
internal static Conversion PointerToInteger => new Conversion(
ConversionKind
.ExplicitPointerToInteger);
312
internal static Conversion IntegerToPointer => new Conversion(
ConversionKind
.ExplicitIntegerToPointer);
313
internal static Conversion Unboxing => new Conversion(
ConversionKind
.Unboxing);
314
internal static Conversion ExplicitReference => new Conversion(
ConversionKind
.ExplicitReference);
315
internal static Conversion IntPtr => new Conversion(
ConversionKind
.IntPtr);
316
internal static Conversion ExplicitEnumeration => new Conversion(
ConversionKind
.ExplicitEnumeration);
317
internal static Conversion ExplicitNumeric => new Conversion(
ConversionKind
.ExplicitNumeric);
318
internal static Conversion ImplicitDynamic => new Conversion(
ConversionKind
.ImplicitDynamic);
319
internal static Conversion ExplicitDynamic => new Conversion(
ConversionKind
.ExplicitDynamic);
320
internal static Conversion InterpolatedString => new Conversion(
ConversionKind
.InterpolatedString);
321
internal static Conversion InterpolatedStringHandler => new Conversion(
ConversionKind
.InterpolatedStringHandler);
322
internal static Conversion Deconstruction => new Conversion(
ConversionKind
.Deconstruction);
323
internal static Conversion PinnedObjectToPointer => new Conversion(
ConversionKind
.PinnedObjectToPointer);
324
internal static Conversion ImplicitPointer => new Conversion(
ConversionKind
.ImplicitPointer);
325
internal static Conversion FunctionType => new Conversion(
ConversionKind
.FunctionType);
326
internal static Conversion InlineArray => new Conversion(
ConversionKind
.InlineArray);
327
internal static Conversion ImplicitSpan => new Conversion(
ConversionKind
.ImplicitSpan);
328
internal static Conversion ExplicitSpan => new Conversion(
ConversionKind
.ExplicitSpan);
340
internal static readonly Conversion ExplicitNullableWithExplicitEnumerationUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, ExplicitEnumerationUnderlying);
341
internal static readonly Conversion ExplicitNullableWithPointerToIntegerUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, PointerToIntegerUnderlying);
342
internal static readonly Conversion ExplicitNullableWithIdentityUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, IdentityUnderlying);
343
internal static readonly Conversion ExplicitNullableWithImplicitNumericUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, ImplicitNumericUnderlying);
344
internal static readonly Conversion ExplicitNullableWithExplicitNumericUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, ExplicitNumericUnderlying);
345
internal static readonly Conversion ExplicitNullableWithImplicitConstantUnderlying = new Conversion(
ConversionKind
.ExplicitNullable, ImplicitConstantUnderlying);
347
internal static readonly Conversion ImplicitNullableWithExplicitEnumerationUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, ExplicitEnumerationUnderlying);
348
internal static readonly Conversion ImplicitNullableWithPointerToIntegerUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, PointerToIntegerUnderlying);
349
internal static readonly Conversion ImplicitNullableWithIdentityUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, IdentityUnderlying);
350
internal static readonly Conversion ImplicitNullableWithImplicitNumericUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, ImplicitNumericUnderlying);
351
internal static readonly Conversion ImplicitNullableWithExplicitNumericUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, ExplicitNumericUnderlying);
352
internal static readonly Conversion ImplicitNullableWithImplicitConstantUnderlying = new Conversion(
ConversionKind
.ImplicitNullable, ImplicitConstantUnderlying);
368
return new Conversion(
ConversionKind
.StackAllocToPointerType, ImmutableArray.Create(underlyingConversion));
373
return new Conversion(
ConversionKind
.StackAllocToSpanType, ImmutableArray.Create(underlyingConversion));
376
internal static Conversion MakeNullableConversion(
ConversionKind
kind, Conversion nestedConversion)
378
Debug.Assert(kind ==
ConversionKind
.ImplicitNullable || kind ==
ConversionKind
.ExplicitNullable);
382
ConversionKind
.Identity => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithIdentityUnderlying : ExplicitNullableWithIdentityUnderlying,
383
ConversionKind
.ImplicitConstant => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithImplicitConstantUnderlying : ExplicitNullableWithImplicitConstantUnderlying,
384
ConversionKind
.ImplicitNumeric => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithImplicitNumericUnderlying : ExplicitNullableWithImplicitNumericUnderlying,
385
ConversionKind
.ExplicitNumeric => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithExplicitNumericUnderlying : ExplicitNullableWithExplicitNumericUnderlying,
386
ConversionKind
.ExplicitEnumeration => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithExplicitEnumerationUnderlying : ExplicitNullableWithExplicitEnumerationUnderlying,
387
ConversionKind
.ExplicitPointerToInteger => kind ==
ConversionKind
.ImplicitNullable ? ImplicitNullableWithPointerToIntegerUnderlying : ExplicitNullableWithPointerToIntegerUnderlying,
394
return new Conversion(
ConversionKind
.SwitchExpression, innerConversions);
399
return new Conversion(
ConversionKind
.ConditionalExpression, innerConversions);
402
internal
ConversionKind
Kind
643
return Kind !=
ConversionKind
.NoConversion;
686
return Kind ==
ConversionKind
.Identity;
697
return Kind ==
ConversionKind
.StackAllocToPointerType || Kind ==
ConversionKind
.StackAllocToSpanType;
711
return Kind ==
ConversionKind
.ImplicitNumeric || Kind ==
ConversionKind
.ExplicitNumeric;
725
return Kind ==
ConversionKind
.ImplicitEnumeration || Kind ==
ConversionKind
.ExplicitEnumeration;
736
return Kind ==
ConversionKind
.ImplicitThrow;
747
return Kind ==
ConversionKind
.ObjectCreation;
754
public bool IsCollectionExpression => Kind ==
ConversionKind
.CollectionExpression;
763
return Kind ==
ConversionKind
.SwitchExpression;
774
return Kind ==
ConversionKind
.ConditionalExpression;
789
return Kind ==
ConversionKind
.InterpolatedString;
800
return Kind ==
ConversionKind
.InterpolatedStringHandler;
811
return Kind ==
ConversionKind
.InlineArray;
825
return Kind ==
ConversionKind
.ImplicitNullable || Kind ==
ConversionKind
.ExplicitNullable;
836
return Kind ==
ConversionKind
.ImplicitTupleLiteral || Kind ==
ConversionKind
.ExplicitTupleLiteral;
847
return Kind ==
ConversionKind
.ImplicitTuple || Kind ==
ConversionKind
.ExplicitTuple;
861
return Kind ==
ConversionKind
.ImplicitReference || Kind ==
ConversionKind
.ExplicitReference;
875
return Kind is
ConversionKind
.ImplicitSpan or
ConversionKind
.ExplicitSpan;
915
return Kind ==
ConversionKind
.Boxing;
929
return Kind ==
ConversionKind
.Unboxing;
943
return Kind ==
ConversionKind
.NullLiteral;
954
return Kind ==
ConversionKind
.DefaultLiteral;
982
return Kind ==
ConversionKind
.ImplicitConstant;
996
return Kind ==
ConversionKind
.AnonymousFunction;
1010
return Kind ==
ConversionKind
.MethodGroup;
1056
return Kind ==
ConversionKind
.IntPtr;
1113
return this.Kind ==
ConversionKind
.NoConversion ? LookupResultKind.Empty : LookupResultKind.Viable;
Binder\Semantics\Conversions\ConversionEasyOut.cs (14)
23
const byte IDN = (byte)
ConversionKind
.Identity;
24
const byte IRF = (byte)
ConversionKind
.ImplicitReference;
25
const byte XRF = (byte)
ConversionKind
.ExplicitReference;
26
const byte XNM = (byte)
ConversionKind
.ExplicitNumeric;
27
const byte NOC = (byte)
ConversionKind
.NoConversion;
28
const byte BOX = (byte)
ConversionKind
.Boxing;
29
const byte UNB = (byte)
ConversionKind
.Unboxing;
30
const byte NUM = (byte)
ConversionKind
.ImplicitNumeric;
31
const byte NUL = (byte)
ConversionKind
.ImplicitNullable;
32
const byte XNL = (byte)
ConversionKind
.ExplicitNullable;
72
public static
ConversionKind
ClassifyConversion(TypeSymbol source, TypeSymbol target)
77
return
ConversionKind
.NoConversion;
82
return
ConversionKind
.NoConversion;
84
return (
ConversionKind
)s_convkind[sourceIndex, targetIndex];
Binder\Semantics\Conversions\ConversionKindExtensions.cs (8)
6
using static Microsoft.CodeAnalysis.CSharp.
ConversionKind
;
12
public static bool IsDynamic(this
ConversionKind
conversionKind)
18
public static bool IsImplicitConversion(this
ConversionKind
conversionKind)
42
case
ConversionKind
.MethodGroup:
43
case
ConversionKind
.FunctionType:
82
public static bool IsUserDefinedConversion(this
ConversionKind
conversionKind)
95
public static bool IsUnionConversion(this
ConversionKind
conversionKind)
100
public static bool IsPointerConversion(this
ConversionKind
kind)
Binder\Semantics\Conversions\Conversions.cs (1)
517
return new Conversion(
ConversionKind
.MethodGroup, method, isExtensionMethod: isExtensionMethod);
Binder\Semantics\Conversions\ConversionsBase.cs (77)
490
ConversionKind
convKind = ConversionEasyOut.ClassifyConversion(source, target);
491
if (convKind !=
ConversionKind
.ImplicitNullable && convKind !=
ConversionKind
.ExplicitNullable)
585
private static bool IsStandardImplicitConversionFromType(
ConversionKind
kind)
589
case
ConversionKind
.Identity:
590
case
ConversionKind
.ImplicitNumeric:
591
case
ConversionKind
.ImplicitNullable:
592
case
ConversionKind
.ImplicitReference:
593
case
ConversionKind
.Boxing:
594
case
ConversionKind
.ImplicitConstant:
595
case
ConversionKind
.ImplicitPointer:
596
case
ConversionKind
.ImplicitPointerToVoid:
597
case
ConversionKind
.ImplicitTuple:
598
case
ConversionKind
.ImplicitSpan:
662
{ Kind:
ConversionKind
.CollectionExpression } => true,
663
{ Kind:
ConversionKind
.ImplicitNullable, UnderlyingConversions: [{ Kind:
ConversionKind
.CollectionExpression }] } => true,
668
static bool isStandardImplicitConversionFromExpression(
ConversionKind
kind)
677
case
ConversionKind
.NullLiteral:
678
case
ConversionKind
.AnonymousFunction:
679
case
ConversionKind
.MethodGroup:
680
case
ConversionKind
.ImplicitEnumeration:
681
case
ConversionKind
.ImplicitDynamic:
682
case
ConversionKind
.ImplicitNullToPointer:
683
case
ConversionKind
.ImplicitTupleLiteral:
684
case
ConversionKind
.StackAllocToPointerType:
685
case
ConversionKind
.StackAllocToSpanType:
686
case
ConversionKind
.InlineArray:
687
case
ConversionKind
.InterpolatedString:
698
Debug.Assert(conversion.Kind ==
ConversionKind
.NoConversion || IsStandardImplicitConversionFromType(conversion.Kind));
904
case
ConversionKind
.Identity:
907
case
ConversionKind
.ImplicitNumeric:
910
case
ConversionKind
.ImplicitReference:
913
case
ConversionKind
.Boxing:
916
case
ConversionKind
.NoConversion:
919
case
ConversionKind
.ImplicitPointerToVoid:
923
case
ConversionKind
.ImplicitTuple:
929
case
ConversionKind
.ImplicitNullable:
937
Conversion.MakeNullableConversion(
ConversionKind
.ExplicitNullable, underlyingConversion) :
942
case
ConversionKind
.ImplicitSpan:
1028
case
ConversionKind
.ImplicitUserDefined:
1029
case
ConversionKind
.Union:
1030
case
ConversionKind
.ImplicitDynamic:
1031
case
ConversionKind
.ImplicitTuple:
1032
case
ConversionKind
.ImplicitTupleLiteral:
1033
case
ConversionKind
.ImplicitNullable:
1034
case
ConversionKind
.ConditionalExpression:
1035
case
ConversionKind
.ImplicitSpan:
1191
return new Conversion(
ConversionKind
.ImplicitNullable, ImmutableArray.Create(underlyingConversion));
1327
return new Conversion(
ConversionKind
.ImplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1356
return new Conversion(
ConversionKind
.ExplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1909
return conversion.Kind !=
ConversionKind
.NoConversion &&
1974
ConversionKind
.ImplicitTupleLiteral,
1991
ConversionKind
.ImplicitTuple,
2021
case
ConversionKind
.Identity:
2022
case
ConversionKind
.Boxing:
2023
case
ConversionKind
.ImplicitReference:
2024
case
ConversionKind
.ImplicitSpan:
2027
case
ConversionKind
.ImplicitTuple:
2028
case
ConversionKind
.ImplicitTupleLiteral:
2041
Debug.Assert(conversion.Kind ==
ConversionKind
.NoConversion);
2048
private static
ConversionKind
GetNumericConversion(TypeSymbol source, TypeSymbol destination)
2055
return
ConversionKind
.UnsetConversionKind;
2062
return
ConversionKind
.UnsetConversionKind;
2065
var
conversionKind = ConversionEasyOut.ClassifyConversion(source, destination);
2066
Debug.Assert(conversionKind is
ConversionKind
.ImplicitNumeric or
ConversionKind
.ExplicitNumeric);
2072
return GetNumericConversion(source, destination) ==
ConversionKind
.ImplicitNumeric;
2079
return GetNumericConversion(source, destination) ==
ConversionKind
.ExplicitNumeric;
2289
return new Conversion(
ConversionKind
.ImplicitNullable, ImmutableArray.Create(tupleConversion));
2309
ConversionKind
.ImplicitTupleLiteral,
2327
ConversionKind
.ExplicitTupleLiteral,
2338
ConversionKind
kind,
2380
ConversionKind
.ImplicitTuple,
2402
ConversionKind
.ExplicitTuple,
2422
ConversionKind
kind,
2492
return new Conversion(
ConversionKind
.ExplicitNullable, ImmutableArray.Create(tupleConversion));
Binder\Semantics\Conversions\UserDefinedImplicitConversions.cs (46)
614
internal static bool IsEncompassingImplicitConversionKind(
ConversionKind
kind)
619
case
ConversionKind
.NoConversion:
623
case
ConversionKind
.ImplicitDynamic:
624
case
ConversionKind
.MethodGroup:
625
case
ConversionKind
.AnonymousFunction:
626
case
ConversionKind
.InterpolatedString:
627
case
ConversionKind
.SwitchExpression:
628
case
ConversionKind
.ConditionalExpression:
629
case
ConversionKind
.ImplicitEnumeration:
630
case
ConversionKind
.StackAllocToPointerType:
631
case
ConversionKind
.StackAllocToSpanType:
632
case
ConversionKind
.InterpolatedStringHandler:
635
case
ConversionKind
.ImplicitUserDefined:
636
case
ConversionKind
.ExplicitUserDefined:
637
case
ConversionKind
.Union:
638
case
ConversionKind
.FunctionType:
639
case
ConversionKind
.CollectionExpression:
642
case
ConversionKind
.ExplicitNumeric:
643
case
ConversionKind
.ExplicitEnumeration:
644
case
ConversionKind
.ExplicitNullable:
645
case
ConversionKind
.ExplicitReference:
646
case
ConversionKind
.Unboxing:
647
case
ConversionKind
.ExplicitDynamic:
648
case
ConversionKind
.ExplicitPointerToPointer:
649
case
ConversionKind
.ExplicitPointerToInteger:
650
case
ConversionKind
.ExplicitIntegerToPointer:
651
case
ConversionKind
.IntPtr:
652
case
ConversionKind
.ExplicitTupleLiteral:
653
case
ConversionKind
.ExplicitTuple:
654
case
ConversionKind
.ExplicitSpan:
658
case
ConversionKind
.Identity:
659
case
ConversionKind
.ImplicitNumeric:
660
case
ConversionKind
.ImplicitNullable:
661
case
ConversionKind
.ImplicitReference:
662
case
ConversionKind
.Boxing:
663
case
ConversionKind
.ImplicitConstant:
664
case
ConversionKind
.ImplicitPointerToVoid:
667
case
ConversionKind
.NullLiteral:
668
case
ConversionKind
.ImplicitNullToPointer:
671
case
ConversionKind
.ImplicitTupleLiteral:
672
case
ConversionKind
.ImplicitTuple:
673
case
ConversionKind
.ImplicitThrow:
676
case
ConversionKind
.DefaultLiteral:
679
case
ConversionKind
.ImplicitPointer:
681
case
ConversionKind
.InlineArray:
683
case
ConversionKind
.ImplicitSpan:
Binder\Semantics\OverloadResolution\OverloadResolution.cs (20)
2218
if (allSame && Conversions.ClassifyImplicitConversionFromType(type1Normalized, type2Normalized, ref useSiteInfo).Kind !=
ConversionKind
.Identity)
2227
if (Conversions.ClassifyImplicitConversionFromType(type1Normalized, type2Normalized, ref useSiteInfo).Kind !=
ConversionKind
.Identity)
2340
if (Conversions.ClassifyImplicitConversionFromType(type1Normalized, type2Normalized, ref useSiteInfo).Kind !=
ConversionKind
.Identity)
2715
return conversionsOpt.Any(static c => c.Kind ==
ConversionKind
.FunctionType);
2925
return conv1.Kind ==
ConversionKind
.Identity ? BetterResult.Left : BetterResult.Neither;
2929
return conv2.Kind ==
ConversionKind
.Identity ? BetterResult.Right : BetterResult.Neither;
2981
case (
ConversionKind
.InterpolatedStringHandler,
ConversionKind
.InterpolatedStringHandler):
2983
case (
ConversionKind
.InterpolatedStringHandler, _):
2985
case (_,
ConversionKind
.InterpolatedStringHandler):
2992
case (
ConversionKind
.FunctionType,
ConversionKind
.FunctionType):
2994
case (_,
ConversionKind
.FunctionType):
2996
case (
ConversionKind
.FunctionType, _):
3028
if (conv1.Kind ==
ConversionKind
.CollectionExpression &&
3029
conv2.Kind ==
ConversionKind
.CollectionExpression)
3036
case (
ConversionKind
.ImplicitSpan,
ConversionKind
.ImplicitSpan):
3038
case (_,
ConversionKind
.ImplicitSpan):
3040
case (
ConversionKind
.ImplicitSpan, _):
Binder\SwitchBinder.cs (1)
439
Debug.Assert(conversion.Kind ==
ConversionKind
.ImplicitUserDefined);
BoundTree\BoundExpression.cs (7)
471
public
ConversionKind
ConversionKind
513
case
ConversionKind
.Identity:
516
case
ConversionKind
.ImplicitNumeric:
517
case
ConversionKind
.ImplicitEnumeration:
519
case
ConversionKind
.ImplicitReference:
520
case
ConversionKind
.Boxing:
524
case
ConversionKind
.ExplicitNumeric:
CodeGen\EmitConversion.cs (49)
44
case
ConversionKind
.MethodGroup:
46
case
ConversionKind
.ImplicitNullToPointer:
97
case
ConversionKind
.Identity:
100
case
ConversionKind
.ImplicitNumeric:
101
case
ConversionKind
.ExplicitNumeric:
104
case
ConversionKind
.ImplicitReference:
105
case
ConversionKind
.Boxing:
111
case
ConversionKind
.ExplicitReference:
112
case
ConversionKind
.Unboxing:
118
case
ConversionKind
.ImplicitEnumeration:
119
case
ConversionKind
.ExplicitEnumeration:
122
case
ConversionKind
.ImplicitUserDefined:
123
case
ConversionKind
.ExplicitUserDefined:
124
case
ConversionKind
.Union:
125
case
ConversionKind
.AnonymousFunction:
126
case
ConversionKind
.MethodGroup:
127
case
ConversionKind
.ImplicitTupleLiteral:
128
case
ConversionKind
.ImplicitTuple:
129
case
ConversionKind
.ExplicitTupleLiteral:
130
case
ConversionKind
.ExplicitTuple:
131
case
ConversionKind
.ImplicitDynamic:
132
case
ConversionKind
.ExplicitDynamic:
133
case
ConversionKind
.ImplicitThrow:
136
case
ConversionKind
.ImplicitPointerToVoid:
137
case
ConversionKind
.ExplicitPointerToPointer:
138
case
ConversionKind
.ImplicitPointer:
140
case
ConversionKind
.ExplicitPointerToInteger:
141
case
ConversionKind
.ExplicitIntegerToPointer:
170
case
ConversionKind
.PinnedObjectToPointer:
176
case
ConversionKind
.ImplicitNullToPointer:
178
case
ConversionKind
.ImplicitNullable:
179
case
ConversionKind
.ExplicitNullable:
186
internal static void AssertIsEmitConversionKind(
ConversionKind
conversionKind)
190
case
ConversionKind
.Identity:
191
case
ConversionKind
.ImplicitNumeric:
192
case
ConversionKind
.ExplicitNumeric:
193
case
ConversionKind
.ImplicitReference:
194
case
ConversionKind
.Boxing:
195
case
ConversionKind
.ExplicitReference:
196
case
ConversionKind
.Unboxing:
197
case
ConversionKind
.ImplicitEnumeration:
198
case
ConversionKind
.ExplicitEnumeration:
199
case
ConversionKind
.ImplicitPointerToVoid:
200
case
ConversionKind
.ExplicitPointerToPointer:
201
case
ConversionKind
.ImplicitPointer:
202
case
ConversionKind
.ExplicitPointerToInteger:
203
case
ConversionKind
.ExplicitIntegerToPointer:
204
case
ConversionKind
.PinnedObjectToPointer:
205
case
ConversionKind
.ImplicitNullToPointer:
CodeGen\EmitExpression.cs (13)
1245
if (conversion.ConversionKind ==
ConversionKind
.Unboxing)
1284
if (receiver.Kind == BoundKind.Conversion && ((BoundConversion)receiver).ConversionKind ==
ConversionKind
.Unboxing)
1551
case
ConversionKind
.Boxing:
1556
case
ConversionKind
.MethodGroup:
1557
case
ConversionKind
.AnonymousFunction:
1560
case
ConversionKind
.ExplicitReference:
1561
case
ConversionKind
.ImplicitReference:
3963
var
conversionKind = conversion.ConversionKind;
3964
Debug.Assert(conversionKind !=
ConversionKind
.NullLiteral && conversionKind !=
ConversionKind
.DefaultLiteral);
3967
conversionKind !=
ConversionKind
.MethodGroup &&
3968
conversionKind !=
ConversionKind
.NullLiteral &&
3969
conversionKind !=
ConversionKind
.DefaultLiteral)
CodeGen\EmitOperators.cs (1)
375
if (comparand is BoundConversion { Type.SpecialType: SpecialType.System_Object, ConversionKind:
ConversionKind
.Boxing, Operand.Type: TypeParameterSymbol { AllowsRefLikeType: true } } &&
Compilation\CSharpSemanticModel.cs (16)
1949
highestBoundNode is BoundConversion { ConversionKind:
ConversionKind
.MethodGroup } boundConversion)
2112
conversion = new Conversion(
ConversionKind
.AnonymousFunction, lambda.Symbol, false);
2142
if (highestBoundExpr is BoundConversion { ConversionKind:
ConversionKind
.SwitchExpression, Conversion: var convertedSwitchConversion })
2160
if (highestBoundExpr is BoundConversion { ConversionKind:
ConversionKind
.ConditionalExpression })
2179
if (highestBoundExpr is BoundConversion { ConversionKind:
ConversionKind
.CollectionExpression or
ConversionKind
.NoConversion, Conversion: var convertedCollectionConversion })
2185
else if (highestBoundExpr is BoundConversion { ConversionKind:
ConversionKind
.ImplicitNullable, Conversion.UnderlyingConversions: [{ Kind:
ConversionKind
.CollectionExpression }] } boundConversion)
2209
if (conversion.Kind ==
ConversionKind
.AnonymousFunction)
2233
conversion = new Conversion(
ConversionKind
.MethodGroup, delegateCreation.MethodOpt, delegateCreation.IsExtensionMethod);
2239
conversion = new Conversion(
ConversionKind
.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
2245
conversion = new Conversion(
ConversionKind
.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
2253
else if (boundExpr is BoundConversion { ConversionKind:
ConversionKind
.MethodGroup, Conversion: var exprConversion, Type: { TypeKind: TypeKind.FunctionPointer }, SymbolOpt: var symbol })
3541
if ((conversion.ConversionKind ==
ConversionKind
.MethodGroup) && conversion.IsExtensionMethod)
4323
if (conversion.ConversionKind ==
ConversionKind
.MethodGroup)
4327
else if (conversion.Operand is BoundConversion { ConversionKind:
ConversionKind
.MethodGroup } nestedMethodGroupConversion)
Compilation\DeconstructionInfo.cs (3)
38
return _conversion.Kind ==
ConversionKind
.Deconstruction
51
return _conversion.Kind ==
ConversionKind
.Deconstruction
64
if (_conversion.Kind !=
ConversionKind
.Deconstruction)
FlowAnalysis\AbstractFlowPass.cs (3)
1742
if (node.ConversionKind ==
ConversionKind
.MethodGroup)
2664
|| (expr is BoundConversion { ConversionKind:
ConversionKind
.ExplicitNullable or
ConversionKind
.ImplicitNullable } conv
FlowAnalysis\DefiniteAssignment.cs (1)
886
boundConversion.ConversionKind ==
ConversionKind
.IntPtr)
FlowAnalysis\NullableWalker.cs (92)
2197
case
ConversionKind
.ExplicitNullable:
2216
case
ConversionKind
.ConditionalExpression or
ConversionKind
.SwitchExpression or
ConversionKind
.ObjectCreation when
2219
case
ConversionKind
.Identity:
2220
case
ConversionKind
.DefaultLiteral:
2221
case
ConversionKind
.ImplicitReference:
2222
case
ConversionKind
.ImplicitTupleLiteral:
2223
case
ConversionKind
.Boxing:
2652
var
conversionKind = conversion.Conversion.Kind;
2653
return (conversionKind ==
ConversionKind
.DefaultLiteral || conversionKind ==
ConversionKind
.NullLiteral) &&
2901
Debug.Assert(conversion.Kind is
ConversionKind
.Identity or
ConversionKind
.ImplicitReference);
5762
if (conversion.Kind is
ConversionKind
.Identity or
ConversionKind
.ImplicitReference)
6134
case
ConversionKind
.ImplicitReference:
6135
case
ConversionKind
.ExplicitReference:
8214
if (conversion is { IsValid: true, Kind:
ConversionKind
.ImplicitUserDefined }) // Looking at unit-tests ImplicitConversions_07 and ImplicitConversion_Params, the behavior looks good without special handling for Union conversions here.
9499
Debug.Assert(conversion.Kind ==
ConversionKind
.ImplicitTuple || conversion.Kind ==
ConversionKind
.ExplicitTuple);
9522
case
ConversionKind
.Identity:
9523
case
ConversionKind
.NullLiteral:
9524
case
ConversionKind
.DefaultLiteral:
9525
case
ConversionKind
.ImplicitReference:
9526
case
ConversionKind
.ExplicitReference:
9527
case
ConversionKind
.Boxing:
9528
case
ConversionKind
.Unboxing:
9531
case
ConversionKind
.ImplicitTupleLiteral:
9532
case
ConversionKind
.ExplicitTupleLiteral:
9533
case
ConversionKind
.ImplicitTuple:
9534
case
ConversionKind
.ExplicitTuple:
9548
case
ConversionKind
.ImplicitNullable:
9549
case
ConversionKind
.ExplicitNullable:
9565
case
ConversionKind
.ImplicitUserDefined:
9566
case
ConversionKind
.ExplicitUserDefined:
9588
case
ConversionKind
.Union:
9835
conversion = Conversion.MakeNullableConversion(
ConversionKind
.ImplicitNullable, Conversion.Identity);
9865
case
ConversionKind
.MethodGroup:
9895
case
ConversionKind
.AnonymousFunction:
9913
case
ConversionKind
.FunctionType:
9917
case
ConversionKind
.InterpolatedString:
9921
case
ConversionKind
.InterpolatedStringHandler:
9926
case
ConversionKind
.ObjectCreation:
9927
case
ConversionKind
.CollectionExpression:
9928
case
ConversionKind
.SwitchExpression:
9929
case
ConversionKind
.ConditionalExpression:
9933
case
ConversionKind
.ExplicitUserDefined:
9934
case
ConversionKind
.ImplicitUserDefined:
9938
case
ConversionKind
.Union:
9957
case
ConversionKind
.ExplicitDynamic:
9958
case
ConversionKind
.ImplicitDynamic:
9962
case
ConversionKind
.Boxing:
9966
case
ConversionKind
.Unboxing:
9982
case
ConversionKind
.ImplicitThrow:
9986
case
ConversionKind
.NoConversion:
9990
case
ConversionKind
.NullLiteral:
9991
case
ConversionKind
.DefaultLiteral:
9993
goto case
ConversionKind
.Identity;
9995
case
ConversionKind
.Identity:
10031
goto case
ConversionKind
.ImplicitTuple;
10033
goto case
ConversionKind
.ImplicitReference;
10035
case
ConversionKind
.ImplicitReference:
10036
case
ConversionKind
.ExplicitReference:
10048
case
ConversionKind
.ImplicitNullable:
10074
case
ConversionKind
.ExplicitNullable:
10090
goto case
ConversionKind
.ImplicitNullable;
10092
case
ConversionKind
.ImplicitTuple:
10093
case
ConversionKind
.ImplicitTupleLiteral:
10094
case
ConversionKind
.ExplicitTupleLiteral:
10095
case
ConversionKind
.ExplicitTuple:
10102
case
ConversionKind
.ImplicitTuple:
10103
case
ConversionKind
.ExplicitTuple:
10129
case
ConversionKind
.ImplicitTupleLiteral:
10130
case
ConversionKind
.ExplicitTupleLiteral:
10148
case
ConversionKind
.Deconstruction:
10153
case
ConversionKind
.ExplicitEnumeration:
10157
case
ConversionKind
.InlineArray:
10165
case
ConversionKind
.ImplicitSpan:
10166
case
ConversionKind
.ExplicitSpan:
10435
Debug.Assert(conversion.Kind ==
ConversionKind
.ExplicitUserDefined || conversion.Kind ==
ConversionKind
.ImplicitUserDefined);
11420
Debug.Assert(conversion.Kind ==
ConversionKind
.Deconstruction);
11602
underlyingConversion.Kind ==
ConversionKind
.ImplicitNullable &&
11677
case
ConversionKind
.Identity:
11678
case
ConversionKind
.ImplicitTupleLiteral:
12427
(conversion.Kind ==
ConversionKind
.ExplicitReference && resultType.SpecialType == SpecialType.System_String))
12625
if (conversion.Kind ==
ConversionKind
.NoConversion)
13156
case
ConversionKind
.Identity:
13157
case
ConversionKind
.ImplicitReference:
13158
case
ConversionKind
.Boxing:
13159
case
ConversionKind
.ImplicitNullable:
FlowAnalysis\NullableWalker.DebugVerifier.cs (1)
410
if (node.ConversionKind ==
ConversionKind
.InterpolatedStringHandler)
FlowAnalysis\NullableWalker_Patterns.cs (6)
712
case
ConversionKind
.Identity:
713
case
ConversionKind
.ImplicitReference:
716
case
ConversionKind
.ExplicitNullable when AreNullableAndUnderlyingTypes(inputType, e.Type, out _):
876
ConversionKind
.Identity => true,
877
ConversionKind
.ImplicitReference => true,
878
ConversionKind
.Boxing => true,
Generated\BoundNodes.xml.Generated.cs (3)
2899
public BoundIsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType,
ConversionKind
conversionKind, TypeSymbol type, bool hasErrors = false)
2915
public
ConversionKind
ConversionKind { get; }
2920
public BoundIsOperator Update(BoundExpression operand, BoundTypeExpression targetType,
ConversionKind
conversionKind, TypeSymbol type)
Lowering\ClosureConversion\ClosureConversion.cs (2)
1407
Debug.Assert(conversion.ConversionKind !=
ConversionKind
.MethodGroup);
1408
if (conversion.ConversionKind ==
ConversionKind
.AnonymousFunction)
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (14)
545
conversion.ConversionKind !=
ConversionKind
.NullLiteral &&
628
var
kind = _bound.Compilation.Conversions.ClassifyConversionFromType(oldType, newType, isChecked: false, ref useSiteInfo).Kind;
634
case
ConversionKind
.Identity:
636
case
ConversionKind
.ExplicitNumeric:
698
case
ConversionKind
.MethodGroup:
703
case
ConversionKind
.Union:
705
case
ConversionKind
.ExplicitUserDefined:
706
case
ConversionKind
.ImplicitUserDefined:
707
case
ConversionKind
.IntPtr:
715
!TypeSymbol.Equals(strippedOperandType, ((node.ConversionKind ==
ConversionKind
.ExplicitUserDefined) ? conversionInputType : conversionInputType.StrippedType()), TypeCompareKind.ConsiderEverything2);
728
case
ConversionKind
.ImplicitReference:
729
case
ConversionKind
.Identity:
734
case
ConversionKind
.ImplicitNullable:
747
case
ConversionKind
.NullLiteral:
Lowering\DiagnosticsPass_ExpressionTrees.cs (11)
852
case
ConversionKind
.MethodGroup:
857
case
ConversionKind
.AnonymousFunction:
866
case
ConversionKind
.ImplicitDynamic:
867
case
ConversionKind
.ExplicitDynamic:
874
case
ConversionKind
.ExplicitTuple:
875
case
ConversionKind
.ExplicitTupleLiteral:
876
case
ConversionKind
.ImplicitTuple:
877
case
ConversionKind
.ImplicitTupleLiteral:
884
case
ConversionKind
.InlineArray:
891
case
ConversionKind
.InterpolatedStringHandler:
898
case
ConversionKind
.Union:
Lowering\DiagnosticsPass_Warnings.cs (8)
434
if (conversion.ConversionKind !=
ConversionKind
.ImplicitNumeric &&
435
conversion.ConversionKind !=
ConversionKind
.ImplicitConstant)
579
if (conv.ConversionKind ==
ConversionKind
.ImplicitNullable)
867
if (conv.ConversionKind ==
ConversionKind
.ExplicitNullable || conv.ConversionKind ==
ConversionKind
.ImplicitNullable)
893
case
ConversionKind
.Deconstruction:
894
case
ConversionKind
.ImplicitTupleLiteral:
895
case
ConversionKind
.Identity:
Lowering\Extensions.cs (7)
61
case
ConversionKind
.ImplicitNullable:
62
case
ConversionKind
.ExplicitNullable:
66
case
ConversionKind
.ImplicitEnumeration:
108
case
ConversionKind
.NullLiteral:
112
case
ConversionKind
.DefaultLiteral:
115
case
ConversionKind
.ImplicitNullable:
116
case
ConversionKind
.ExplicitNullable:
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (1)
215
case
ConversionKind
.MethodGroup:
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (2)
236
if (conversion.Kind ==
ConversionKind
.ExplicitNullable &&
520
(conv.IsIdentity || conv.Kind ==
ConversionKind
.ImplicitReference || conv.IsBoxing) &&
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (1)
724
if (conversion.ConversionKind ==
ConversionKind
.Boxing)
Lowering\LocalRewriter\LocalRewriter_Call.cs (31)
587
case
ConversionKind
.AnonymousFunction:
588
case
ConversionKind
.ImplicitConstant:
589
case
ConversionKind
.MethodGroup:
590
case
ConversionKind
.NullLiteral:
591
case
ConversionKind
.DefaultLiteral:
594
case
ConversionKind
.Boxing:
595
case
ConversionKind
.ImplicitDynamic:
596
case
ConversionKind
.ExplicitDynamic:
597
case
ConversionKind
.ExplicitEnumeration:
598
case
ConversionKind
.ExplicitNullable:
599
case
ConversionKind
.ExplicitNumeric:
600
case
ConversionKind
.ExplicitReference:
601
case
ConversionKind
.Identity:
602
case
ConversionKind
.ImplicitEnumeration:
603
case
ConversionKind
.ImplicitNullable:
604
case
ConversionKind
.ImplicitNumeric:
605
case
ConversionKind
.ImplicitReference:
606
case
ConversionKind
.Unboxing:
607
case
ConversionKind
.ExplicitPointerToInteger:
608
case
ConversionKind
.ExplicitPointerToPointer:
609
case
ConversionKind
.ImplicitPointerToVoid:
610
case
ConversionKind
.ImplicitNullToPointer:
611
case
ConversionKind
.ExplicitIntegerToPointer:
615
case
ConversionKind
.ExplicitUserDefined:
616
case
ConversionKind
.ImplicitUserDefined:
619
case
ConversionKind
.IntPtr:
620
case
ConversionKind
.ImplicitThrow:
623
case
ConversionKind
.Union:
857
if (argument is BoundConversion { ConversionKind:
ConversionKind
.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
931
if (argument is BoundConversion { ConversionKind:
ConversionKind
.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
1483
=> expr is BoundConversion conv && conv.ConversionKind ==
ConversionKind
.AnonymousFunction;
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (12)
31
Debug.Assert(conversion.Kind ==
ConversionKind
.CollectionExpression);
216
if (conversion.Kind is not (
ConversionKind
.Identity or
ConversionKind
.ImplicitReference))
223
return conversion.Kind is
ConversionKind
.Identity or
ConversionKind
.ImplicitReference;
383
var
conversionKind = compilation.Conversions.ClassifyConversionFromType(arrayType, constructorParameterType, isChecked: false, ref discardedUseSiteInfo).Kind;
384
Debug.Assert(conversionKind ==
ConversionKind
.Identity || (isReadOnlySpan && conversionKind ==
ConversionKind
.ImplicitReference));
769
? spreadElementConversion.Kind is
ConversionKind
.Identity or
ConversionKind
.ImplicitReference
770
: spreadElementConversion.Kind is
ConversionKind
.Identity;
1078
if (spreadElement.IteratorBody is not BoundExpressionStatement expressionStatement || expressionStatement.Expression is BoundConversion { ConversionKind: not
ConversionKind
.Identity })
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (62)
22
case
ConversionKind
.InterpolatedString:
24
case
ConversionKind
.InterpolatedStringHandler:
37
case
ConversionKind
.SwitchExpression:
41
case
ConversionKind
.ConditionalExpression:
45
case
ConversionKind
.ObjectCreation:
61
case
ConversionKind
.ImplicitNullable when node.Conversion.UnderlyingConversions[0].Kind is
ConversionKind
.CollectionExpression:
65
case
ConversionKind
.CollectionExpression:
72
_inExpressionLambda = _inExpressionLambda || (node.ConversionKind ==
ConversionKind
.AnonymousFunction && !wasInExpressionLambda && rewrittenType.IsExpressionTree());
250
return conversion.ConversionKind ==
ConversionKind
.Identity && !conversion.ExplicitCastInCode;
318
case
ConversionKind
.Identity:
351
case
ConversionKind
.ExplicitUserDefined:
352
case
ConversionKind
.ImplicitUserDefined:
360
case
ConversionKind
.Union:
366
case
ConversionKind
.IntPtr:
370
case
ConversionKind
.ImplicitNullable:
371
case
ConversionKind
.ExplicitNullable:
380
case
ConversionKind
.Boxing:
404
case
ConversionKind
.NullLiteral:
405
case
ConversionKind
.DefaultLiteral:
413
case
ConversionKind
.ImplicitReference:
414
case
ConversionKind
.ExplicitReference:
422
case
ConversionKind
.ImplicitConstant:
429
goto case
ConversionKind
.ImplicitNumeric;
431
case
ConversionKind
.ImplicitNumeric:
432
case
ConversionKind
.ExplicitNumeric:
445
case
ConversionKind
.ImplicitTupleLiteral:
446
case
ConversionKind
.ExplicitTupleLiteral:
455
case
ConversionKind
.ImplicitThrow:
462
case
ConversionKind
.ImplicitEnumeration:
491
goto case
ConversionKind
.ExplicitEnumeration;
493
case
ConversionKind
.ExplicitEnumeration:
539
case
ConversionKind
.ImplicitDynamic:
540
case
ConversionKind
.ExplicitDynamic:
544
return _dynamicFactory.MakeDynamicConversion(rewrittenOperand, explicitCastInCode || conversion.Kind ==
ConversionKind
.ExplicitDynamic, conversion.IsArrayIndex, @checked, rewrittenType).ToExpression();
546
case
ConversionKind
.ImplicitTuple:
547
case
ConversionKind
.ExplicitTuple:
556
case
ConversionKind
.MethodGroup when oldNodeOpt is { Type: { TypeKind: TypeKind.FunctionPointer } funcPtrType }:
567
case
ConversionKind
.MethodGroup:
600
case
ConversionKind
.InlineArray:
623
case
ConversionKind
.ImplicitSpan:
624
case
ConversionKind
.ExplicitSpan:
661
Debug.Assert(conversion.Kind is
ConversionKind
.ImplicitSpan);
693
Debug.Assert(conversion.Kind is
ConversionKind
.ImplicitSpan);
712
Debug.Assert(conversion.Kind is
ConversionKind
.ImplicitSpan);
1076
case BoundConversion { Conversion: { Kind:
ConversionKind
.ImplicitNullable }, Operand: var convertedArgument }
1081
case BoundConversion { Conversion: { Kind:
ConversionKind
.ImplicitNullable, UnderlyingConversions: var underlying }, Operand: var convertedArgument } conversion
1082
when underlying.Length == 1 && underlying[0].Kind ==
ConversionKind
.ImplicitTuple && !convertedArgument.Type!.IsNullableType():
1199
var
conversionKind = conversion.Kind.IsImplicitConversion() ?
ConversionKind
.ImplicitUserDefined :
ConversionKind
.ExplicitUserDefined;
1851
ConversionKind
conversionKind = isImplicit ?
ConversionKind
.ImplicitUserDefined :
ConversionKind
.ExplicitUserDefined;
1873
case
ConversionKind
.ExplicitUserDefined:
1874
case
ConversionKind
.ImplicitUserDefined:
1905
case
ConversionKind
.Union:
1912
case
ConversionKind
.IntPtr:
1924
case
ConversionKind
.ImplicitNumeric:
1925
case
ConversionKind
.ExplicitNumeric:
1939
case
ConversionKind
.ImplicitEnumeration:
1940
case
ConversionKind
.ExplicitEnumeration:
Lowering\LocalRewriter\LocalRewriter_DeconstructionAssignmentOperator.cs (4)
20
Debug.Assert(right.Conversion.Kind ==
ConversionKind
.Deconstruction);
219
Debug.Assert(conversion.Kind ==
ConversionKind
.Deconstruction);
307
if ((tupleConversion.Conversion.Kind ==
ConversionKind
.ImplicitTupleLiteral || tupleConversion.Conversion.Kind ==
ConversionKind
.Identity)
Lowering\LocalRewriter\LocalRewriter_IsOperator.cs (1)
30
ConversionKind
conversionKind,
Lowering\LocalRewriter\LocalRewriter_NullCoalescingOperator.cs (4)
92
BoundNode.GetConversion(leftConversion, leftPlaceholder) is { Kind:
ConversionKind
.Identity or
ConversionKind
.ImplicitReference })
99
if (BoundNode.GetConversion(leftConversion, leftPlaceholder) is { IsIdentity: true } or { Kind:
ConversionKind
.ExplicitNullable })
224
if (boundConversion.ConversionKind !=
ConversionKind
.Identity)
Lowering\LocalRewriter\LocalRewriter_StringConcat.cs (2)
289
if (argument is BoundConversion { ConversionKind:
ConversionKind
.Boxing, Type.SpecialType: SpecialType.System_Object, Operand: { Type.SpecialType: SpecialType.System_Char } operand })
630
if (conv.ConversionKind ==
ConversionKind
.Boxing)
Lowering\LocalRewriter\LocalRewriter_StringInterpolation.cs (2)
18
Debug.Assert(conversion.ConversionKind ==
ConversionKind
.InterpolatedString);
240
if (arg is BoundConversion { Conversion: { Kind:
ConversionKind
.InterpolatedStringHandler }, ExplicitCastInCode: false, Operand: var operand })
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (16)
49
case BoundConversion { Conversion: { Kind:
ConversionKind
.Identity }, Operand: var o }:
51
case BoundConversion { Conversion: { Kind:
ConversionKind
.ImplicitTupleLiteral }, Operand: var o }:
90
(kind ==
ConversionKind
.ImplicitNullable || kind ==
ConversionKind
.ExplicitNullable) &&
104
if (expr is BoundConversion { ConversionKind:
ConversionKind
.ImplicitTuple, Conversion: var conversion } boundConversion)
193
case BoundConversion { Conversion: { Kind:
ConversionKind
.DefaultLiteral } }: // This conversion can be performed lazily, but need not be saved. It is treated as non-side-effecting.
214
var conversion = Conversion.MakeNullableConversion(
ConversionKind
.ImplicitNullable, Conversion.Identity);
229
bool conversionMustBePerformedOnOriginalExpression(
ConversionKind
kind)
235
case
ConversionKind
.AnonymousFunction: // a lambda cannot be saved without a target type
236
case
ConversionKind
.MethodGroup: // similarly for a method group
237
case
ConversionKind
.InterpolatedString: // an interpolated string must be saved in interpolated form
238
case
ConversionKind
.SwitchExpression: // a switch expression must have its arms converted
239
case
ConversionKind
.StackAllocToPointerType: // a stack alloc is not well-defined without an enclosing conversion
240
case
ConversionKind
.ConditionalExpression: // a conditional expression must have its alternatives converted
241
case
ConversionKind
.StackAllocToSpanType:
242
case
ConversionKind
.ObjectCreation:
Lowering\LocalRewriter\LocalRewriter_UsingStatement.cs (1)
508
Debug.Assert(methodArgumentInfo.Arguments.All(arg => arg is not BoundConversion { ConversionKind:
ConversionKind
.InterpolatedStringHandler }));
Lowering\SpillSequenceSpiller.cs (1)
1190
if (node.ConversionKind ==
ConversionKind
.AnonymousFunction && node.Type.IsExpressionTree())
Lowering\SyntheticBoundNodeFactory.cs (3)
576
Debug.Assert(conversion.Kind !=
ConversionKind
.NoConversion);
578
if (conversion.Kind !=
ConversionKind
.Identity)
1529
if (conversion.Kind ==
ConversionKind
.ImplicitReference && arg.IsLiteralNull())
Operations\CSharpOperationFactory.cs (2)
1061
if (boundConversion.ConversionKind ==
ConversionKind
.InterpolatedStringHandler)
1068
if (boundConversion.ConversionKind == CSharp.
ConversionKind
.MethodGroup)
Operations\CSharpOperationFactory_Methods.cs (1)
145
if (boundConversion.ConversionKind ==
ConversionKind
.MethodGroup)
Symbols\Source\SourceComplexParameterSymbol.cs (1)
408
((BoundConversion)convertedExpression).ConversionKind !=
ConversionKind
.DefaultLiteral)
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (1)
1403
return conversions.ClassifyImplicitConversionFromType(sourceType, targetType, ref discardedUseSiteInfo).Kind !=
ConversionKind
.NoConversion;