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