69 instantiations of Conversion
Microsoft.CodeAnalysis.CSharp (67)
Binder\Binder_Deconstruct.cs (1)
341
conversion = new
Conversion
(ConversionKind.Deconstruction, deconstructMethod, nestedConversions.ToImmutableAndFree());
Binder\Semantics\Conversions\Conversion.cs (39)
158
return new
Conversion
(this.Kind, conversionMethod, isExtensionMethod: IsExtensionMethod);
166
return new
Conversion
(
222
return new
Conversion
(kind);
225
internal static Conversion UnsetConversion => new
Conversion
(ConversionKind.UnsetConversionKind);
226
internal static Conversion NoConversion => new
Conversion
(ConversionKind.NoConversion);
227
internal static Conversion Identity => new
Conversion
(ConversionKind.Identity);
228
internal static Conversion ImplicitConstant => new
Conversion
(ConversionKind.ImplicitConstant);
229
internal static Conversion ImplicitNumeric => new
Conversion
(ConversionKind.ImplicitNumeric);
230
internal static Conversion ImplicitReference => new
Conversion
(ConversionKind.ImplicitReference);
231
internal static Conversion ImplicitEnumeration => new
Conversion
(ConversionKind.ImplicitEnumeration);
232
internal static Conversion ImplicitThrow => new
Conversion
(ConversionKind.ImplicitThrow);
233
internal static Conversion ObjectCreation => new
Conversion
(ConversionKind.ObjectCreation);
234
internal static Conversion AnonymousFunction => new
Conversion
(ConversionKind.AnonymousFunction);
235
internal static Conversion Boxing => new
Conversion
(ConversionKind.Boxing);
236
internal static Conversion NullLiteral => new
Conversion
(ConversionKind.NullLiteral);
237
internal static Conversion DefaultLiteral => new
Conversion
(ConversionKind.DefaultLiteral);
238
internal static Conversion NullToPointer => new
Conversion
(ConversionKind.ImplicitNullToPointer);
239
internal static Conversion PointerToVoid => new
Conversion
(ConversionKind.ImplicitPointerToVoid);
240
internal static Conversion PointerToPointer => new
Conversion
(ConversionKind.ExplicitPointerToPointer);
241
internal static Conversion PointerToInteger => new
Conversion
(ConversionKind.ExplicitPointerToInteger);
242
internal static Conversion IntegerToPointer => new
Conversion
(ConversionKind.ExplicitIntegerToPointer);
243
internal static Conversion Unboxing => new
Conversion
(ConversionKind.Unboxing);
244
internal static Conversion ExplicitReference => new
Conversion
(ConversionKind.ExplicitReference);
245
internal static Conversion IntPtr => new
Conversion
(ConversionKind.IntPtr);
246
internal static Conversion ExplicitEnumeration => new
Conversion
(ConversionKind.ExplicitEnumeration);
247
internal static Conversion ExplicitNumeric => new
Conversion
(ConversionKind.ExplicitNumeric);
248
internal static Conversion ImplicitDynamic => new
Conversion
(ConversionKind.ImplicitDynamic);
249
internal static Conversion ExplicitDynamic => new
Conversion
(ConversionKind.ExplicitDynamic);
250
internal static Conversion InterpolatedString => new
Conversion
(ConversionKind.InterpolatedString);
251
internal static Conversion InterpolatedStringHandler => new
Conversion
(ConversionKind.InterpolatedStringHandler);
252
internal static Conversion Deconstruction => new
Conversion
(ConversionKind.Deconstruction);
253
internal static Conversion PinnedObjectToPointer => new
Conversion
(ConversionKind.PinnedObjectToPointer);
254
internal static Conversion ImplicitPointer => new
Conversion
(ConversionKind.ImplicitPointer);
255
internal static Conversion FunctionType => new
Conversion
(ConversionKind.FunctionType);
280
return new
Conversion
(ConversionKind.StackAllocToPointerType, ImmutableArray.Create(underlyingConversion));
285
return new
Conversion
(ConversionKind.StackAllocToSpanType, ImmutableArray.Create(underlyingConversion));
318
return new
Conversion
(kind, nested);
323
return new
Conversion
(ConversionKind.SwitchExpression, innerConversions);
328
return new
Conversion
(ConversionKind.ConditionalExpression, innerConversions);
Binder\Semantics\Conversions\Conversions.cs (1)
382
return new
Conversion
(ConversionKind.MethodGroup, method, methodGroup.IsExtensionMethodGroup);
Binder\Semantics\Conversions\ConversionsBase.cs (17)
758
return new
Conversion
(conversionResult, isImplicit: true);
843
return new
Conversion
(conversionResult, isImplicit: false);
1205
return new
Conversion
(ConversionKind.ImplicitNullable, Conversion.ImplicitConstantUnderlying);
1235
return new
Conversion
(ConversionKind.ImplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1266
return new
Conversion
(ConversionKind.ExplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1608
return new
Conversion
(result, isImplicit: true);
2115
return new
Conversion
(ConversionKind.ImplicitNullable, Conversion.IdentityUnderlying);
2120
return new
Conversion
(ConversionKind.ImplicitNullable, Conversion.ImplicitNumericUnderlying);
2126
return new
Conversion
(ConversionKind.ImplicitNullable, ImmutableArray.Create(tupleConversion));
2208
return new
Conversion
(kind, argumentConversions.ToImmutableAndFree());
2281
return new
Conversion
(kind, nestedConversions.ToImmutableAndFree());
2307
return new
Conversion
(ConversionKind.ExplicitNullable, Conversion.IdentityUnderlying);
2312
return new
Conversion
(ConversionKind.ExplicitNullable, Conversion.ImplicitNumericUnderlying);
2317
return new
Conversion
(ConversionKind.ExplicitNullable, Conversion.ExplicitNumericUnderlying);
2323
return new
Conversion
(ConversionKind.ExplicitNullable, ImmutableArray.Create(tupleConversion));
2328
return new
Conversion
(ConversionKind.ExplicitNullable, Conversion.ExplicitEnumerationUnderlying);
2333
return new
Conversion
(ConversionKind.ExplicitNullable, Conversion.PointerToIntegerUnderlying);
Compilation\CSharpSemanticModel.cs (4)
2122
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, false);
2220
conversion = new
Conversion
(ConversionKind.MethodGroup, delegateCreation.MethodOpt, delegateCreation.IsExtensionMethod);
2226
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
2232
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (5)
464
var outerConversion = new
Conversion
(ConversionKind.ImplicitNullable, Conversion.IdentityUnderlying);
990
var result = new BoundConversion(syntax, rewrittenOperand, new
Conversion
(conversionKind, method, false), @checked, explicitCastInCode: explicitCastInCode, conversionGroup, constantValueOpt: null, rewrittenType);
1585
var conversion = new
Conversion
(conversionKind, method, isExtensionMethod: false);
1630
var resultConversion = new
Conversion
(result, conversion.IsImplicit);
1730
return new
Conversion
(result, isImplicit);
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (2)
IOperation\IOperationTests_ICompoundAssignmentOperation.cs (2)
88
var inConversion = new
Conversion
(ConversionKind.ImplicitUserDefined, inSymbol, false);
89
var outConversion = new
Conversion
(ConversionKind.ImplicitUserDefined, outSymbol, false);
1103 references to Conversion
Microsoft.CodeAnalysis.CSharp (797)
Binder\Binder.cs (1)
619
internal void ReportDiagnosticsIfObsolete(BindingDiagnosticBag diagnostics,
Conversion
conversion, SyntaxNodeOrToken node, bool hasBaseReceiver)
Binder\Binder.ValueChecks.cs (1)
3429
if (conversion.Conversion ==
Conversion
.ImplicitThrow)
Binder\Binder_Attributes.cs (1)
826
Conversion
conversion = conversions.ClassifyBuiltInConversion((TypeSymbol)argument.TypeInternal, parameter.Type, isChecked: false, ref discardedUseSiteInfo);
Binder\Binder_Await.cs (1)
415
var
conversion = this.Conversions.ClassifyImplicitConversionFromType(awaiterType, INotifyCompletion, ref useSiteInfo);
Binder\Binder_Conversions.cs (35)
24
var
conversion = Conversions.ClassifyConversionFromExpression(source, destination, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
32
Conversion
conversion,
42
Conversion
conversion,
54
Conversion
conversion,
80
static bool filterConversion(
Conversion
conversion)
95
Conversion
conversion,
270
void reportUseSiteDiagnostics(
Conversion
conversion)
282
void reportUseSiteDiagnosticsForUnderlyingConversions(
Conversion
conversion)
288
foreach (
var
underlying in underlyingConversions)
303
void reportUseSiteDiagnosticsForSelfAndUnderlyingConversions(
Conversion
conversion)
312
internal void CheckConstraintLanguageVersionAndRuntimeSupportForConversion(SyntaxNodeOrToken syntax,
Conversion
conversion, BindingDiagnosticBag diagnostics)
342
SyntaxNode syntax, BoundUnconvertedObjectCreationExpression node,
Conversion
conversion, bool isCast, TypeSymbol destination,
364
expr is BoundBadExpression ?
Conversion
.NoConversion : conversion,
413
Conversion
? conversionIfTargetTyped,
419
ImmutableArray<
Conversion
> underlyingConversions = conversionIfTargetTyped.GetValueOrDefault().UnderlyingConversions;
451
private BoundExpression ConvertSwitchExpression(BoundUnconvertedSwitchExpression source, TypeSymbol destination,
Conversion
? conversionIfTargetTyped, BindingDiagnosticBag diagnostics, bool hasErrors = false)
454
Conversion
conversion = conversionIfTargetTyped ??
Conversion
.Identity;
456
ImmutableArray<
Conversion
> underlyingConversions = conversion.UnderlyingConversions;
480
Conversion
conversion,
571
Conversion
toConversion = conversion.UserDefinedToConversion;
645
private BoundExpression CreateFunctionTypeConversion(SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
693
private BoundExpression CreateAnonymousFunctionConversion(SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
720
private BoundExpression CreateMethodGroupConversion(SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
865
private BoundExpression CreateStackAllocConversion(SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
889
var
underlyingConversion = conversion.UnderlyingConversions.Single();
893
private BoundExpression CreateTupleLiteralConversion(SyntaxNode syntax, BoundTupleLiteral sourceTuple,
Conversion
conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
900
var
conversionWithoutNullable = conversion;
955
var
elementConversion = underlyingConversions[i];
990
Conversion
.Identity,
1011
private BoundMethodGroup FixMethodGroupWithTypeOrValue(BoundMethodGroup group,
Conversion
conversion, BindingDiagnosticBag diagnostics)
1435
Conversion
conversion,
1501
out
Conversion
conversion)
1505
conversion =
Conversion
.NoConversion;
1533
Conversion
conversion,
Binder\Binder_Deconstruct.cs (5)
132
new BoundConversion(boundRHS.Syntax, boundRHS,
Conversion
.Deconstruction, @checked: false, explicitCastInCode: false, conversionGroupOpt: null,
139
Conversion
conversion;
248
out
Conversion
conversion)
252
conversion =
Conversion
.Deconstruction;
300
Conversion
nestedConversion;
Binder\Binder_Expressions.cs (16)
1186
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(argument, typedReferenceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1235
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(argument, typedReferenceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
2371
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(boundOperand, intType, ref useSiteInfo);
2477
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(boundOperand, indexType, ref useSiteInfo);
2492
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(operand, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
2509
Conversion
conversion,
2645
var
elementConversion = Conversions.ClassifyConversionFromExpression(argument, targetElementType, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
2671
var
underlyingConversion = Conversions.ClassifyBuiltInConversion(operand.Type, underlyingTargetTypeWithAnnotations.Type, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
3170
var
kind = result.ConversionForArg(arg);
4541
var
conversion = this.Conversions.ClassifyConversionFromExpression(unboundLambda, type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
4581
Conversion
conversion;
4614
Conversion
conv = Conversions.MethodGroupConversion(argument.Syntax, methodGroup, type, ref useSiteInfo);
5887
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(classCreation, interfaceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
7569
Conversion
.ImplicitNumeric,
8106
Conversion
failedConversion = this.Conversions.ClassifyConversionFromExpression(index, int32, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
8161
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(expr, targetType, ref useSiteInfo);
Binder\Binder_InterpolatedString.cs (1)
857
var
interpolatedStringConversion = memberAnalysisResult.ConversionForArg(interpolatedStringArgNum);
Binder\Binder_Invocation.cs (1)
1429
Conversion
conversion = Conversions.ClassifyConversionFromExpression(defaultValue, parameterType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
Binder\Binder_Operators.cs (15)
64
var
finalDynamicConversion = this.Compilation.Conversions.ClassifyConversionFromExpression(placeholder, left.Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
223
Conversion
rightToLeftConversion = this.Conversions.ClassifyConversionFromExpression(right, leftType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
270
Conversion
argumentConversion = this.Conversions.ClassifyConversionFromExpression(right, delegateType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
789
var
conversion = this.Conversions.ClassifyConversionFromExpression(right, left.Type, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
1037
var
implicitConversion = Conversions.ClassifyImplicitConversionFromExpression(left, booleanType, ref useSiteInfo);
1245
var
conversion = this.Conversions.ClassifyConversionFromType(argumentType, op.GetParameterType(0), isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
3263
Conversion
conv = Conversions.ClassifyConversionFromExpression(operand, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
3285
Conversion
conversion = Conversions.ClassifyBuiltInConversion(operandType, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
3713
Conversion
.NullLiteral,
3752
Conversion
conversion = Conversions.ClassifyBuiltInConversion(operandType, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
3990
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, optLeftType0, ref useSiteInfo);
4008
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, optLeftType, ref useSiteInfo);
4045
Conversion
leftConversionClassification;
4125
var
underlyingRightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, underlyingLeftType, ref useSiteInfo);
4139
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, leftType, ref useSiteInfo);
Binder\Binder_Patterns.cs (15)
424
var convertedExpression = BindExpressionOrTypeForPattern(inputType, innerExpression, ref hasErrors, diagnostics, out var constantValueOpt, out bool wasExpression, out
Conversion
patternConversion);
453
private bool ShouldBlockINumberBaseConversion(
Conversion
patternConversion, TypeSymbol inputType)
504
out
Conversion
patternExpressionConversion)
517
patternExpressionConversion =
Conversion
.NoConversion;
532
out
Conversion
patternExpressionConversion)
538
patternExpressionConversion =
Conversion
.NoConversion;
549
out
Conversion
patternExpressionConversion)
585
out
Conversion
patternExpressionConversion)
631
patternExpressionConversion =
Conversion
.NoConversion;
638
patternExpressionConversion =
Conversion
.NoConversion;
667
patternExpressionConversion =
Conversion
.NoConversion;
757
Conversions, inputType, patternType, ref useSiteInfo, out
Conversion
conversion, operandConstantValue: null, operandCouldBeNull: true);
798
out
Conversion
conversion,
808
conversion =
Conversion
.Identity;
1622
BoundExpression value = BindExpressionForPattern(inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out
Conversion
patternConversion);
Binder\Binder_Statements.cs (11)
1376
Conversion
elementConversionClassification = this.Conversions.ClassifyConversionFromType(pointerType, declType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1910
internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, out
Conversion
conversion, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None)
2196
Conversion
conversion, TypeSymbol sourceType, TypeSymbol targetType, ConstantValue sourceConstantValueOpt = null)
2266
Conversion
conversion,
2384
var
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(expr, targetType, ref useSiteInfo);
2484
var
elementConversion = Conversions.ClassifyImplicitConversionFromExpression(argument, targetElementType, ref discardedUseSiteInfo);
2546
return BoundConversion.Synthesized(node, BindToTypeForErrorRecovery(expr),
Conversion
.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, ConstantValue.NotAvailable, boolean, hasErrors: true);
2571
var
conversion = this.Conversions.ClassifyConversionFromExpression(expr, boolean, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
2612
return BoundConversion.Synthesized(node, expr,
Conversion
.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, ConstantValue.NotAvailable, boolean, hasErrors: true);
3034
Conversion
conversion;
3043
conversion =
Conversion
.NoConversion;
Binder\Binder_Symbols.cs (1)
1529
var
conversion = conversions.ConvertExtensionMethodThisArg(method.Parameters[0].Type, receiverType, ref useSiteInfo);
Binder\Binder_TupleOperators.cs (1)
132
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromType(type, boolean, ref useSiteInfo);
Binder\DecisionDagBuilder.cs (2)
457
Conversion
conversion = _conversions.ClassifyBuiltInConversion(inputType, type, isChecked: false, ref useSiteInfo);
1495
ConstantValue result = Binder.ExpressionOfTypeMatchesPatternType(_conversions, expressionType, patternType, ref useSiteInfo, out
Conversion
conversion);
Binder\ForEachLoopBinder.cs (5)
447
Conversion
elementConversionClassification = this.Conversions.ClassifyConversionFromType(inferredType.Type, iterationVariableType.Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
501
Conversion
collectionConversionClassification = this.Conversions.ClassifyConversionFromExpression(collectionExpr, builder.CollectionType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
502
Conversion
currentConversionClassification = this.Conversions.ClassifyConversionFromType(builder.CurrentPropertyGetter.ReturnType, builder.ElementType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1320
var
collectionConversion = this.Conversions.ClassifyConversionFromExpression(collectionExpr, result.Parameters[0].Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1560
var
conversion = this.Conversions.ClassifyImplicitConversionFromType(type, implementedNonGeneric, ref useSiteInfo);
Binder\RefSafetyAnalysis.cs (2)
734
private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, SyntaxNode syntax,
Conversion
conversion, BoundExpression right)
797
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
Binder\Semantics\Conversions\Conversion.cs (99)
19
public readonly struct Conversion : IEquatable<
Conversion
>, IConvertibleConversion
33
ImmutableArray<
Conversion
> nestedConversions)
47
internal readonly ImmutableArray<
Conversion
> _nestedConversionsOpt;
130
internal Conversion(ConversionKind kind, ImmutableArray<
Conversion
> nestedConversions)
149
internal
Conversion
SetConversionMethod(MethodSymbol conversionMethod)
161
internal
Conversion
SetArrayIndexConversionForDynamic()
219
internal static
Conversion
GetTrivialConversion(ConversionKind kind)
225
internal static
Conversion
UnsetConversion => new Conversion(ConversionKind.UnsetConversionKind);
226
internal static
Conversion
NoConversion => new Conversion(ConversionKind.NoConversion);
227
internal static
Conversion
Identity => new Conversion(ConversionKind.Identity);
228
internal static
Conversion
ImplicitConstant => new Conversion(ConversionKind.ImplicitConstant);
229
internal static
Conversion
ImplicitNumeric => new Conversion(ConversionKind.ImplicitNumeric);
230
internal static
Conversion
ImplicitReference => new Conversion(ConversionKind.ImplicitReference);
231
internal static
Conversion
ImplicitEnumeration => new Conversion(ConversionKind.ImplicitEnumeration);
232
internal static
Conversion
ImplicitThrow => new Conversion(ConversionKind.ImplicitThrow);
233
internal static
Conversion
ObjectCreation => new Conversion(ConversionKind.ObjectCreation);
234
internal static
Conversion
AnonymousFunction => new Conversion(ConversionKind.AnonymousFunction);
235
internal static
Conversion
Boxing => new Conversion(ConversionKind.Boxing);
236
internal static
Conversion
NullLiteral => new Conversion(ConversionKind.NullLiteral);
237
internal static
Conversion
DefaultLiteral => new Conversion(ConversionKind.DefaultLiteral);
238
internal static
Conversion
NullToPointer => new Conversion(ConversionKind.ImplicitNullToPointer);
239
internal static
Conversion
PointerToVoid => new Conversion(ConversionKind.ImplicitPointerToVoid);
240
internal static
Conversion
PointerToPointer => new Conversion(ConversionKind.ExplicitPointerToPointer);
241
internal static
Conversion
PointerToInteger => new Conversion(ConversionKind.ExplicitPointerToInteger);
242
internal static
Conversion
IntegerToPointer => new Conversion(ConversionKind.ExplicitIntegerToPointer);
243
internal static
Conversion
Unboxing => new Conversion(ConversionKind.Unboxing);
244
internal static
Conversion
ExplicitReference => new Conversion(ConversionKind.ExplicitReference);
245
internal static
Conversion
IntPtr => new Conversion(ConversionKind.IntPtr);
246
internal static
Conversion
ExplicitEnumeration => new Conversion(ConversionKind.ExplicitEnumeration);
247
internal static
Conversion
ExplicitNumeric => new Conversion(ConversionKind.ExplicitNumeric);
248
internal static
Conversion
ImplicitDynamic => new Conversion(ConversionKind.ImplicitDynamic);
249
internal static
Conversion
ExplicitDynamic => new Conversion(ConversionKind.ExplicitDynamic);
250
internal static
Conversion
InterpolatedString => new Conversion(ConversionKind.InterpolatedString);
251
internal static
Conversion
InterpolatedStringHandler => new Conversion(ConversionKind.InterpolatedStringHandler);
252
internal static
Conversion
Deconstruction => new Conversion(ConversionKind.Deconstruction);
253
internal static
Conversion
PinnedObjectToPointer => new Conversion(ConversionKind.PinnedObjectToPointer);
254
internal static
Conversion
ImplicitPointer => new Conversion(ConversionKind.ImplicitPointer);
255
internal static
Conversion
FunctionType => new Conversion(ConversionKind.FunctionType);
259
internal static ImmutableArray<
Conversion
> IdentityUnderlying => ConversionSingletons.IdentityUnderlying;
260
internal static ImmutableArray<
Conversion
> ImplicitConstantUnderlying => ConversionSingletons.ImplicitConstantUnderlying;
261
internal static ImmutableArray<
Conversion
> ImplicitNumericUnderlying => ConversionSingletons.ImplicitNumericUnderlying;
262
internal static ImmutableArray<
Conversion
> ExplicitNumericUnderlying => ConversionSingletons.ExplicitNumericUnderlying;
263
internal static ImmutableArray<
Conversion
> ExplicitEnumerationUnderlying => ConversionSingletons.ExplicitEnumerationUnderlying;
264
internal static ImmutableArray<
Conversion
> PointerToIntegerUnderlying => ConversionSingletons.PointerToIntegerUnderlying;
270
internal static ImmutableArray<
Conversion
> IdentityUnderlying = ImmutableArray.Create(Identity);
271
internal static ImmutableArray<
Conversion
> ImplicitConstantUnderlying = ImmutableArray.Create(ImplicitConstant);
272
internal static ImmutableArray<
Conversion
> ImplicitNumericUnderlying = ImmutableArray.Create(ImplicitNumeric);
273
internal static ImmutableArray<
Conversion
> ExplicitNumericUnderlying = ImmutableArray.Create(ExplicitNumeric);
274
internal static ImmutableArray<
Conversion
> ExplicitEnumerationUnderlying = ImmutableArray.Create(ExplicitEnumeration);
275
internal static ImmutableArray<
Conversion
> PointerToIntegerUnderlying = ImmutableArray.Create(PointerToInteger);
278
internal static
Conversion
MakeStackAllocToPointerType(
Conversion
underlyingConversion)
283
internal static
Conversion
MakeStackAllocToSpanType(
Conversion
underlyingConversion)
288
internal static
Conversion
MakeNullableConversion(ConversionKind kind,
Conversion
nestedConversion)
292
ImmutableArray<
Conversion
> nested;
321
internal static
Conversion
MakeSwitchExpression(ImmutableArray<
Conversion
> innerConversions)
326
internal static
Conversion
MakeConditionalExpression(ImmutableArray<
Conversion
> innerConversions)
355
internal ImmutableArray<
Conversion
> UnderlyingConversions
359
return _uncommonData?._nestedConversionsOpt ?? default(ImmutableArray<
Conversion
>);
380
foreach (
var
underlying in underlyingConversions)
408
foreach (
var
underlying in underlyingConversions)
497
foreach (
var
conv in nestedConversionsOpt)
971
internal
Conversion
UserDefinedFromConversion
976
return best == null ?
Conversion
.NoConversion : best.SourceConversion;
983
internal
Conversion
UserDefinedToConversion
988
return best == null ?
Conversion
.NoConversion : best.TargetConversion;
1052
/// This is a lossy conversion; it is not possible to recover the original <see cref="
Conversion
"/>
1072
/// Determines whether the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object.
1074
/// <param name="obj">The <see cref="
Conversion
"/> object to compare with the current <see cref="
Conversion
"/> object.</param>
1075
/// <returns>true if the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object; otherwise, false.</returns>
1078
return obj is
Conversion
&& this.Equals((
Conversion
)obj);
1082
/// Determines whether the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object.
1084
/// <param name="other">The <see cref="
Conversion
"/> object to compare with the current <see cref="
Conversion
"/> object.</param>
1085
/// <returns>true if the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object; otherwise, false.</returns>
1086
public bool Equals(
Conversion
other)
1092
/// Returns a hash code for the current <see cref="
Conversion
"/> object.
1094
/// <returns>A hash code for the current <see cref="
Conversion
"/> object.</returns>
1101
/// Returns true if the specified <see cref="
Conversion
"/> objects are equal and false otherwise.
1103
/// <param name="left">The first <see cref="
Conversion
"/> object.</param>
1104
/// <param name="right">The second <see cref="
Conversion
"/> object.</param>
1106
public static bool operator ==(
Conversion
left,
Conversion
right)
1112
/// Returns false if the specified <see cref="
Conversion
"/> objects are equal and true otherwise.
1114
/// <param name="left">The first <see cref="
Conversion
"/> object.</param>
1115
/// <param name="right">The second <see cref="
Conversion
"/> object.</param>
1117
public static bool operator !=(
Conversion
left,
Conversion
right)
1127
TreeDumperNode Dump(
Conversion
self)
Binder\Semantics\Conversions\Conversions.cs (26)
44
public override
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
49
return
Conversion
.NoConversion;
55
return
Conversion
.NoConversion;
105
var
conversion = (resolution.IsEmpty || resolution.HasAnyErrors) ?
106
Conversion
.NoConversion :
113
public override
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
122
var
conversion = (resolution.IsEmpty || resolution.HasAnyErrors) ?
123
Conversion
.NoConversion :
129
protected override
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
133
return
Conversion
.InterpolatedStringHandler;
138
return
Conversion
.NoConversion;
146
?
Conversion
.InterpolatedString :
Conversion
.NoConversion;
278
public
Conversion
MethodGroupConversion(SyntaxNode syntax, MethodGroup methodGroup, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
297
var
conversion = ToConversion(result, methodGroup, delegateType.DelegateInvokeMethod.ParameterCount);
328
private static
Conversion
ToConversion(OverloadResolutionResult<MethodSymbol> result, MethodGroup methodGroup, int parameterCount)
348
return
Conversion
.NoConversion;
355
return
Conversion
.NoConversion;
361
return
Conversion
.NoConversion;
366
return
Conversion
.NoConversion;
385
public override
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
393
var
pointerConversion = ClassifyImplicitConversionFromType(sourceAsPointer, destination, ref useSiteInfo);
397
return
Conversion
.MakeStackAllocToPointerType(pointerConversion);
405
var
spanConversion = ClassifyImplicitConversionFromType(spanType_T, destination, ref useSiteInfo);
409
return
Conversion
.MakeStackAllocToSpanType(spanConversion);
415
return
Conversion
.NoConversion;
Binder\Semantics\Conversions\ConversionsBase.cs (206)
66
public abstract
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
68
public abstract
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
70
public abstract
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
74
protected abstract
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
89
public
Conversion
ClassifyImplicitConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
100
return
Conversion
.Identity;
103
Conversion
conversion = ClassifyImplicitBuiltInConversionFromExpression(sourceExpression, sourceType, destination, ref useSiteInfo);
112
Conversion
fastConversion = FastClassifyConversion(sourceType, destination);
133
return
Conversion
.FunctionType;
160
public
Conversion
ClassifyImplicitConversionFromType(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
168
return
Conversion
.Identity;
172
Conversion
fastConversion = FastClassifyConversion(source, destination);
175
return fastConversion.IsImplicit ? fastConversion :
Conversion
.NoConversion;
179
Conversion
conversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
195
public
Conversion
ClassifyImplicitConversionFromTypeWhenNeitherOrBothFunctionTypes(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
208
Conversion
.FunctionType :
209
Conversion
.NoConversion;
213
return
Conversion
.NoConversion;
225
public
Conversion
ClassifyConversionFromExpressionType(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
233
return
Conversion
.ImplicitDynamic;
239
private static bool TryGetVoidConversion(TypeSymbol source, TypeSymbol destination, out
Conversion
conversion)
250
conversion =
Conversion
.Identity;
257
conversion =
Conversion
.NoConversion;
274
public
Conversion
ClassifyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false)
280
if (TryGetVoidConversion(sourceExpression.Type, destination, out
var
conversion))
290
var
result = ClassifyImplicitConversionFromExpression(sourceExpression, destination, ref useSiteInfo);
308
public
Conversion
ClassifyConversionFromType(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false)
313
if (TryGetVoidConversion(source, destination, out
var
voidConversion))
324
Conversion
fastConversion = FastClassifyConversion(source, destination);
331
Conversion
conversion1 = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
338
Conversion
conversion = GetImplicitUserDefinedConversion(source, destination, ref useSiteInfo);
366
private
Conversion
ClassifyConversionFromExpressionForCast(BoundExpression source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
372
Conversion
implicitConversion = ClassifyImplicitConversionFromExpression(source, destination, ref useSiteInfo);
378
Conversion
explicitConversion = ClassifyExplicitOnlyConversionFromExpression(source, destination, isChecked: isChecked, ref useSiteInfo, forCast: true);
420
private
Conversion
ClassifyConversionFromTypeForCast(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
426
Conversion
fastConversion = FastClassifyConversion(source, destination);
432
Conversion
implicitBuiltInConversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
438
Conversion
explicitBuiltInConversion = ClassifyExplicitBuiltInOnlyConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast: true);
465
var
conversion = GetExplicitUserDefinedConversion(source, destination, isChecked: isChecked, ref useSiteInfo);
479
public static
Conversion
FastClassifyConversion(TypeSymbol source, TypeSymbol target)
484
return
Conversion
.GetTrivialConversion(convKind);
487
return
Conversion
.MakeNullableConversion(convKind, FastClassifyConversion(source.StrippedType(), target.StrippedType()));
490
public
Conversion
ClassifyBuiltInConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
496
Conversion
fastConversion = FastClassifyConversion(source, destination);
503
Conversion
conversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
520
public
Conversion
ClassifyStandardConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
532
public
Conversion
ClassifyStandardConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
560
Conversion
conversion = ClassifyStandardImplicitConversion(sourceExpression, source, destination, ref useSiteInfo);
571
return
Conversion
.NoConversion;
621
private
Conversion
ClassifyStandardImplicitConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
657
Conversion
conversion = ClassifyImplicitBuiltInConversionFromExpression(sourceExpression, source, destination, ref useSiteInfo);
670
return
Conversion
.NoConversion;
673
private
Conversion
ClassifyStandardImplicitConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
675
var
conversion = classifyConversion(source, destination, ref useSiteInfo);
679
Conversion
classifyConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
686
return
Conversion
.Identity;
691
return
Conversion
.ImplicitNumeric;
694
var
nullableConversion = ClassifyImplicitNullableConversion(source, destination, ref useSiteInfo);
703
return
Conversion
.NoConversion;
708
return
Conversion
.ImplicitReference;
713
return
Conversion
.Boxing;
718
return
Conversion
.PointerToVoid;
723
return
Conversion
.ImplicitPointer;
726
var
tupleConversion = ClassifyImplicitTupleConversion(source, destination, ref useSiteInfo);
732
return
Conversion
.NoConversion;
736
private
Conversion
ClassifyImplicitBuiltInConversionSlow(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
743
return
Conversion
.NoConversion;
746
Conversion
conversion = ClassifyStandardImplicitConversion(source, destination, ref useSiteInfo);
752
return
Conversion
.NoConversion;
755
private
Conversion
GetImplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
761
private
Conversion
GetImplicitUserDefinedConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
766
private
Conversion
ClassifyExplicitBuiltInOnlyConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
773
return
Conversion
.NoConversion;
787
return
Conversion
.IntPtr;
792
return
Conversion
.ExplicitEnumeration;
795
var
nullableConversion = ClassifyExplicitNullableConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
803
return (source.Kind == SymbolKind.DynamicType) ?
Conversion
.ExplicitDynamic :
Conversion
.ExplicitReference;
808
return
Conversion
.Unboxing;
811
var
tupleConversion = ClassifyExplicitTupleConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
819
return
Conversion
.PointerToPointer;
824
return
Conversion
.PointerToInteger;
829
return
Conversion
.IntegerToPointer;
834
return
Conversion
.ExplicitDynamic;
837
return
Conversion
.NoConversion;
840
private
Conversion
GetExplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
846
private
Conversion
GetExplicitUserDefinedConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
851
private
Conversion
DeriveStandardExplicitFromOppositeStandardImplicitConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
853
var
oppositeConversion = ClassifyStandardImplicitConversion(destination, source, ref useSiteInfo);
854
Conversion
impliedExplicitConversion;
859
impliedExplicitConversion =
Conversion
.Identity;
862
impliedExplicitConversion =
Conversion
.ExplicitNumeric;
865
impliedExplicitConversion =
Conversion
.ExplicitReference;
868
impliedExplicitConversion =
Conversion
.Unboxing;
871
impliedExplicitConversion =
Conversion
.NoConversion;
874
impliedExplicitConversion =
Conversion
.PointerToPointer;
880
impliedExplicitConversion =
Conversion
.NoConversion;
886
var
underlyingConversion = DeriveStandardExplicitFromOppositeStandardImplicitConversion(strippedSource, strippedDestination, ref useSiteInfo);
891
Conversion
.MakeNullableConversion(ConversionKind.ExplicitNullable, underlyingConversion) :
892
Conversion
.NoConversion;
974
private static bool ExplicitConversionMayDifferFromImplicit(
Conversion
implicitConversion)
992
private
Conversion
ClassifyImplicitBuiltInConversionFromExpression(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1001
return
Conversion
.ImplicitDynamic;
1008
return
Conversion
.NoConversion;
1013
return
Conversion
.ImplicitEnumeration;
1016
var
constantConversion = ClassifyImplicitConstantExpressionConversion(sourceExpression, destination);
1025
var
nullLiteralConversion = ClassifyNullLiteralConversion(sourceExpression, destination);
1033
return
Conversion
.DefaultLiteral;
1038
var
innerConversion = ClassifyImplicitBuiltInConversionFromExpression(innerExpression, innerExpression.Type, destination, ref useSiteInfo);
1046
var
tupleConversion = ClassifyImplicitTupleLiteralConversion((BoundTupleLiteral)sourceExpression, destination, ref useSiteInfo);
1056
return
Conversion
.AnonymousFunction;
1061
Conversion
methodGroupConversion = GetMethodGroupDelegateConversion((BoundMethodGroup)sourceExpression, destination, ref useSiteInfo);
1070
Conversion
interpolatedStringConversion = GetInterpolatedStringConversion(sourceExpression, destination, ref useSiteInfo);
1077
var
stackAllocConversion = GetStackAllocConversion((BoundStackAllocArrayCreation)sourceExpression, destination, ref useSiteInfo);
1085
var
addressOfConversion = GetMethodGroupFunctionPointerConversion(((BoundUnconvertedAddressOfOperator)sourceExpression).Operand, funcPtrType, ref useSiteInfo);
1093
return
Conversion
.ImplicitThrow;
1096
return
Conversion
.ObjectCreation;
1099
return
Conversion
.NoConversion;
1102
private
Conversion
GetSwitchExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1110
return
Conversion
.NoConversion;
1112
var innerConversions = ArrayBuilder<
Conversion
>.GetInstance(switchExpression.SwitchArms.Length);
1115
var
nestedConversion = this.ClassifyImplicitConversionFromExpression(arm.Value, destination, ref useSiteInfo);
1119
return
Conversion
.NoConversion;
1125
return
Conversion
.MakeSwitchExpression(innerConversions.ToImmutableAndFree());
1127
return
Conversion
.NoConversion;
1131
private
Conversion
GetConditionalExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1136
return
Conversion
.NoConversion;
1138
var
trueConversion = this.ClassifyImplicitConversionFromExpression(conditionalOperator.Consequence, destination, ref useSiteInfo);
1140
return
Conversion
.NoConversion;
1142
var
falseConversion = this.ClassifyImplicitConversionFromExpression(conditionalOperator.Alternative, destination, ref useSiteInfo);
1144
return
Conversion
.NoConversion;
1146
return
Conversion
.MakeConditionalExpression(ImmutableArray.Create(trueConversion, falseConversion));
1149
private static
Conversion
ClassifyNullLiteralConversion(BoundExpression source, TypeSymbol destination)
1156
return
Conversion
.NoConversion;
1164
return
Conversion
.NullLiteral;
1174
return
Conversion
.ImplicitReference;
1182
return
Conversion
.NullToPointer;
1185
return
Conversion
.NoConversion;
1188
private static
Conversion
ClassifyImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination)
1192
return
Conversion
.ImplicitConstant;
1205
return new Conversion(ConversionKind.ImplicitNullable,
Conversion
.ImplicitConstantUnderlying);
1209
return
Conversion
.NoConversion;
1212
private
Conversion
ClassifyImplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1216
var
tupleConversion = GetImplicitTupleLiteralConversion(source, destination, ref useSiteInfo);
1231
var
underlyingTupleConversion = GetImplicitTupleLiteralConversion(source, nt.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type, ref useSiteInfo);
1240
return
Conversion
.NoConversion;
1243
private
Conversion
ClassifyExplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
1247
var
tupleConversion = GetExplicitTupleLiteralConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1262
var
underlyingTupleConversion = GetExplicitTupleLiteralConversion(source, nt.TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type, isChecked: isChecked, ref useSiteInfo, forCast);
1271
return
Conversion
.NoConversion;
1326
private
Conversion
ClassifyExplicitOnlyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
1337
Conversion
tupleConversion = ClassifyExplicitTupleLiteralConversion((BoundTupleLiteral)sourceExpression, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1348
Conversion
fastConversion = FastClassifyConversion(sourceType, destination);
1355
var
conversion = ClassifyExplicitBuiltInOnlyConversion(sourceType, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1579
internal
Conversion
ClassifyImplicitUserDefinedConversionForV6SwitchGoverningType(TypeSymbol sourceType, out TypeSymbol switchGoverningType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1611
internal
Conversion
GetCallerLineNumberConversion(TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1624
return
Conversion
.ImplicitEnumeration;
1627
var
constantConversion = ClassifyImplicitConstantExpressionConversion(intMaxValueLiteral, destination);
1644
Conversion
conversion = ClassifyStandardImplicitConversion(expectedAttributeType, destination, ref useSiteInfo);
1770
public
Conversion
ConvertExtensionMethodThisArg(TypeSymbol parameterType, TypeSymbol thisType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1773
var
conversion = this.ClassifyImplicitExtensionMethodThisArgConversion(sourceExpressionOpt: null, thisType, parameterType, ref useSiteInfo);
1774
return IsValidExtensionMethodThisArgConversion(conversion) ? conversion :
Conversion
.NoConversion;
1779
public
Conversion
ClassifyImplicitExtensionMethodThisArgConversion(BoundExpression sourceExpressionOpt, TypeSymbol sourceType, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1789
return
Conversion
.Identity;
1794
return
Conversion
.Boxing;
1799
return
Conversion
.ImplicitReference;
1808
var
tupleConversion = GetTupleLiteralConversion(
1825
var
tupleConversion = ClassifyTupleConversion(
1834
return
Conversion
.NoConversion;
1846
return
Conversion
.NoConversion;
1855
public static bool IsValidExtensionMethodThisArgConversion(
Conversion
conversion)
1867
foreach (
var
elementConversion in conversion.UnderlyingConversions)
2089
private
Conversion
ClassifyImplicitNullableConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2102
return
Conversion
.NoConversion;
2110
return
Conversion
.NoConversion;
2115
return new Conversion(ConversionKind.ImplicitNullable,
Conversion
.IdentityUnderlying);
2120
return new Conversion(ConversionKind.ImplicitNullable,
Conversion
.ImplicitNumericUnderlying);
2123
var
tupleConversion = ClassifyImplicitTupleConversion(unwrappedSource, unwrappedDestination, ref useSiteInfo);
2129
return
Conversion
.NoConversion;
2132
private delegate
Conversion
ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2133
private delegate
Conversion
ClassifyConversionFromTypeDelegate(ConversionsBase conversions, TypeWithAnnotations source, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2135
private
Conversion
GetImplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2153
private
Conversion
GetExplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2171
private
Conversion
GetTupleLiteralConversion(
2187
return
Conversion
.NoConversion;
2194
var argumentConversions = ArrayBuilder<
Conversion
>.GetInstance(arguments.Length);
2198
var
result = classifyConversion(this, argument, targetElementTypes[i], isChecked: isChecked, ref useSiteInfo, forCast: forCast);
2202
return
Conversion
.NoConversion;
2211
private
Conversion
ClassifyImplicitTupleConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2222
return
Conversion
.NoConversion;
2230
private
Conversion
ClassifyExplicitTupleConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2241
return
Conversion
.NoConversion;
2249
private
Conversion
ClassifyTupleConversion(
2265
return
Conversion
.NoConversion;
2268
var nestedConversions = ArrayBuilder<
Conversion
>.GetInstance(sourceTypes.Length);
2271
var
conversion = classifyConversion(this, sourceTypes[i], destTypes[i], isChecked: isChecked, ref useSiteInfo, forCast);
2275
return
Conversion
.NoConversion;
2284
private
Conversion
ClassifyExplicitNullableConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2299
return
Conversion
.NoConversion;
2307
return new Conversion(ConversionKind.ExplicitNullable,
Conversion
.IdentityUnderlying);
2312
return new Conversion(ConversionKind.ExplicitNullable,
Conversion
.ImplicitNumericUnderlying);
2317
return new Conversion(ConversionKind.ExplicitNullable,
Conversion
.ExplicitNumericUnderlying);
2320
var
tupleConversion = ClassifyExplicitTupleConversion(unwrappedSource, unwrappedDestination, isChecked: isChecked, ref useSiteInfo, forCast);
2328
return new Conversion(ConversionKind.ExplicitNullable,
Conversion
.ExplicitEnumerationUnderlying);
2333
return new Conversion(ConversionKind.ExplicitNullable,
Conversion
.PointerToIntegerUnderlying);
2336
return
Conversion
.NoConversion;
Binder\Semantics\Conversions\TypeConversions.cs (4)
38
public override
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
44
public override
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
50
public override
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
56
protected override
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Conversions\UserDefinedConversionAnalysis.cs (8)
26
public readonly
Conversion
SourceConversion;
27
public readonly
Conversion
TargetConversion;
33
Conversion
sourceConversion,
34
Conversion
targetConversion,
51
Conversion
sourceConversion,
52
Conversion
targetConversion,
70
Conversion
sourceConversion,
71
Conversion
targetConversion,
Binder\Semantics\Conversions\UserDefinedExplicitConversions.cs (8)
264
Conversion
fromConversion = EncompassingExplicitConversion(sourceExpression, source, convertsFrom, ref useSiteInfo);
265
Conversion
toConversion = EncompassingExplicitConversion(convertsTo, target, ref useSiteInfo);
316
Conversion
liftedFromConversion = EncompassingExplicitConversion(sourceExpression, source, nullableFrom, ref useSiteInfo);
317
Conversion
liftedToConversion = EncompassingExplicitConversion(nullableTo, target, ref useSiteInfo);
470
private
Conversion
EncompassingExplicitConversion(BoundExpression expr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
489
var
result = ClassifyStandardConversion(expr, a, b, ref useSiteInfo);
490
return result.IsEnumeration ?
Conversion
.NoConversion : result;
493
private
Conversion
EncompassingExplicitConversion(TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Conversions\UserDefinedImplicitConversions.cs (11)
294
Conversion
fromConversion = EncompassingImplicitConversion(sourceExpression, source, convertsFrom, ref useSiteInfo);
295
Conversion
toConversion = allowAnyTarget ?
Conversion
.Identity :
316
toConversion = allowAnyTarget ?
Conversion
.Identity :
342
Conversion
liftedFromConversion = EncompassingImplicitConversion(sourceExpression, source, nullableFrom, ref useSiteInfo);
343
Conversion
liftedToConversion = !allowAnyTarget ?
345
Conversion
.Identity;
584
private
Conversion
EncompassingImplicitConversion(BoundExpression aExpr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
595
var
result = ClassifyStandardImplicitConversion(aExpr, a, b, ref useSiteInfo);
596
return IsEncompassingImplicitConversionKind(result.Kind) ? result :
Conversion
.NoConversion;
599
private
Conversion
EncompassingImplicitConversion(TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Operators\BinaryOperatorAnalysisResult.cs (8)
15
public readonly
Conversion
LeftConversion;
16
public readonly
Conversion
RightConversion;
20
private BinaryOperatorAnalysisResult(OperatorAnalysisResultKind kind, BinaryOperatorSignature signature,
Conversion
leftConversion,
Conversion
rightConversion)
50
public static BinaryOperatorAnalysisResult Applicable(BinaryOperatorSignature signature,
Conversion
leftConversion,
Conversion
rightConversion)
55
public static BinaryOperatorAnalysisResult Inapplicable(BinaryOperatorSignature signature,
Conversion
leftConversion,
Conversion
rightConversion)
Binder\Semantics\Operators\BinaryOperatorEasyOut.cs (2)
314
Conversion
leftConversion = Conversions.FastClassifyConversion(leftType, signature.LeftType);
315
Conversion
rightConversion = Conversions.FastClassifyConversion(rightType, signature.RightType);
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (2)
777
var
convLeft = Conversions.ClassifyConversionFromExpression(left, op.LeftType, isChecked: isChecked, ref useSiteInfo);
778
var
convRight = Conversions.ClassifyConversionFromExpression(right, op.RightType, isChecked: isChecked, ref useSiteInfo);
Binder\Semantics\Operators\UnaryOperatorAnalysisResult.cs (4)
16
public readonly
Conversion
Conversion;
19
private UnaryOperatorAnalysisResult(OperatorAnalysisResultKind kind, UnaryOperatorSignature signature,
Conversion
conversion)
36
public static UnaryOperatorAnalysisResult Applicable(UnaryOperatorSignature signature,
Conversion
conversion)
41
public static UnaryOperatorAnalysisResult Inapplicable(UnaryOperatorSignature signature,
Conversion
conversion)
Binder\Semantics\Operators\UnaryOperatorEasyOut.cs (1)
114
Conversion
? conversion = Conversions.FastClassifyConversion(operandType, signature.OperandType);
Binder\Semantics\Operators\UnaryOperatorOverloadResolution.cs (1)
275
var
conversion = Conversions.ClassifyConversionFromExpression(operand, op.OperandType, isChecked: isChecked, ref useSiteInfo);
Binder\Semantics\OverloadResolution\MemberAnalysisResult.cs (7)
19
public readonly ImmutableArray<
Conversion
> ConversionsOpt;
37
ImmutableArray<
Conversion
> conversionsOpt = default,
61
public
Conversion
ConversionForArg(int arg)
65
return
Conversion
.Identity;
221
public static MemberAnalysisResult BadArgumentConversions(ImmutableArray<int> argsToParamsOpt, ImmutableArray<int> badArguments, ImmutableArray<
Conversion
> conversions)
274
public static MemberAnalysisResult NormalForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<
Conversion
> conversions, bool hasAnyRefOmittedArgument)
279
public static MemberAnalysisResult ExpandedForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<
Conversion
> conversions, bool hasAnyRefOmittedArgument)
Binder\Semantics\OverloadResolution\OverloadResolution.cs (30)
2158
var
c1 = m1.Result.ConversionForArg(i);
2159
var
c2 = m2.Result.ConversionForArg(i);
2371
Conversion
conv1,
2374
Conversion
conv2,
2424
private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1,
Conversion
conv1, TypeSymbol t2,
Conversion
conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
2707
return BetterConversionTargetCore(null, type1, default(
Conversion
), type2, default(
Conversion
), ref useSiteInfo, out okToDowngradeToNeither, BetterConversionTargetRecursionLimit);
2723
return BetterConversionTargetCore(null, type1, default(
Conversion
), type2, default(
Conversion
), ref useSiteInfo, out okToDowngradeToNeither, betterConversionTargetRecursionLimit - 1);
2729
Conversion
conv1,
2731
Conversion
conv2,
2741
Conversion
conv1,
2743
Conversion
conv2,
2896
private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType,
Conversion
conv)
3638
ArrayBuilder<
Conversion
> conversions = null;
3643
Conversion
conversion;
3650
conversion =
Conversion
.Identity;
3656
conversion =
Conversion
.NoConversion;
3726
conversions = ArrayBuilder<
Conversion
>.GetInstance(paramCount);
3727
conversions.AddMany(
Conversion
.Identity, argumentPosition);
3738
var conversionsArray = conversions != null ? conversions.ToImmutableAndFree() : default(ImmutableArray<
Conversion
>);
3751
private
Conversion
CheckArgumentForApplicability(
3775
return
Conversion
.NoConversion;
3787
return
Conversion
.ImplicitDynamic;
3798
return
Conversion
.Identity;
3803
var
conversion = forExtensionMethodThisArg ?
3812
return
Conversion
.NoConversion;
3820
return
Conversion
.Identity;
3824
return
Conversion
.NoConversion;
Binder\SwitchBinder.cs (2)
253
Conversion
conversion = Conversions.ClassifyConversionFromExpression(caseExpression, SwitchGoverningType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
408
Conversion
conversion = binder.Conversions.ClassifyImplicitUserDefinedConversionForV6SwitchGoverningType(switchGoverningType, out resultantGoverningType, ref useSiteInfo);
Binder\UsingStatementBinder.cs (5)
190
Conversion
iDisposableConversion = classifyConversion(fromExpression, disposableInterface, ref useSiteInfo);
256
Conversion
alternateConversion = classifyConversion(fromExpression, alternateInterface, ref discardedUseSiteInfo);
269
Conversion
classifyConversion(bool fromExpression, TypeSymbol targetInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
275
var
result = conversions.ClassifyImplicitConversionFromExpression(expressionOpt, targetInterface, ref useSiteInfo);
283
var
result = conversions.ClassifyImplicitConversionFromType(declarationTypeOpt, targetInterface, ref useSiteInfo);
BoundTree\BoundExpressionExtensions.cs (2)
222
public static
Conversion
GetConversion(this BoundExpression boundNode)
231
return
Conversion
.Identity;
BoundTree\BoundNode.cs (3)
388
public static
Conversion
GetConversion(BoundExpression? conversion, BoundValuePlaceholder? placeholder)
393
return
Conversion
.NoConversion;
422
return
Conversion
.Identity;
BoundTree\Constructors.cs (5)
271
public static BoundConversion SynthesizedNonUserDefined(SyntaxNode syntax, BoundExpression operand,
Conversion
conversion, TypeSymbol type, ConstantValue? constantValueOpt = null)
295
Conversion
conversion,
321
Conversion
conversion,
345
Conversion
conversion,
358
Conversion
conversion,
BoundTree\ConversionGroup.cs (2)
18
internal ConversionGroup(
Conversion
conversion, TypeWithAnnotations explicitType = default)
33
internal readonly
Conversion
Conversion;
Compilation\BuiltInOperators.cs (2)
937
var
leftConversion = Conversions.ClassifyConversionFromType(leftType, rightType, isChecked: false, ref useSiteInfo);
943
var
rightConversion = Conversions.ClassifyConversionFromType(rightType, leftType, isChecked: false, ref useSiteInfo);
Compilation\CSharpCompilation.cs (6)
2111
/// <returns>A <see cref="
Conversion
"/> that classifies the conversion from the
2113
public
Conversion
ClassifyConversion(ITypeSymbol source, ITypeSymbol destination)
2159
return
Conversion
.NoConversion;
2170
return
Conversion
.NullLiteral;
2173
return
Conversion
.NoConversion;
2176
Conversion
result = ClassifyConversion(sourceType, destination);
Compilation\CSharpSemanticModel.cs (22)
966
return new CSharpTypeInfo(declarationTypeSymbol, declarationTypeSymbol, nullabilityInfo, nullabilityInfo,
Conversion
.Identity);
970
return new CSharpTypeInfo(declarationInfo.Type, declarationInfo.Type, declarationInfo.Nullability, declarationInfo.Nullability,
Conversion
.Identity);
1008
public
Conversion
GetConversion(SyntaxNode expression, CancellationToken cancellationToken = default(CancellationToken))
1069
public
Conversion
GetSpeculativeConversion(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
2052
return new CSharpTypeInfo(member.Type, member.Type, nullability: default, convertedNullability: default,
Conversion
.Identity);
2109
Conversion
conversion;
2158
conversion = convertedSwitchConversion.IsValid ? convertedSwitchConversion :
Conversion
.NoConversion;
2165
conversion =
Conversion
.Identity;
2176
conversion =
Conversion
.MakeConditionalExpression(ImmutableArray<
Conversion
>.Empty);
2183
conversion =
Conversion
.Identity;
2191
conversion =
Conversion
.Identity;
2236
conversion =
Conversion
.Identity;
2255
conversion =
Conversion
.Identity;
2353
return new CSharpTypeInfo(type, type, default, default,
Conversion
.Identity);
2801
public abstract
Conversion
ClassifyConversion(ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false);
2819
public
Conversion
ClassifyConversion(int position, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
2831
return
Conversion
.NoConversion;
2857
return
Conversion
.NoConversion;
2872
internal abstract
Conversion
ClassifyConversionForCast(ExpressionSyntax expression, TypeSymbol destination);
2888
internal
Conversion
ClassifyConversionForCast(int position, ExpressionSyntax expression, TypeSymbol destination)
2909
return
Conversion
.NoConversion;
Compilation\DeconstructionInfo.cs (4)
29
private readonly
Conversion
_conversion;
47
public
Conversion
? Conversion
53
: (
Conversion
?)_conversion;
77
internal DeconstructionInfo(
Conversion
conversion)
Compilation\ForEachStatementInfo.cs (4)
55
public
Conversion
ElementConversion { get; }
60
public
Conversion
CurrentConversion { get; }
71
Conversion
elementConversion,
72
Conversion
currentConversion)
Compilation\MemberSemanticModel.cs (5)
419
public override
Conversion
ClassifyConversion(
434
return
Conversion
.NoConversion;
468
return
Conversion
.NoConversion;
476
internal override
Conversion
ClassifyConversionForCast(
492
return
Conversion
.NoConversion;
Compilation\SpeculativeSemanticModelWithMemberModel.cs (2)
216
public override
Conversion
ClassifyConversion(
224
internal override
Conversion
ClassifyConversionForCast(
Compilation\SyntaxTreeSemanticModel.cs (5)
516
public override
Conversion
ClassifyConversion(ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
523
return
Conversion
.NoConversion;
548
return
Conversion
.NoConversion;
554
internal override
Conversion
ClassifyConversionForCast(ExpressionSyntax expression, TypeSymbol destination)
569
return
Conversion
.NoConversion;
Compilation\TypeInfo.cs (3)
15
internal static readonly CSharpTypeInfo None = new CSharpTypeInfo(type: null, convertedType: null, nullability: default, convertedNullability: default,
Conversion
.Identity);
39
public readonly
Conversion
ImplicitConversion;
41
internal CSharpTypeInfo(TypeSymbol type, TypeSymbol convertedType, NullabilityInfo nullability, NullabilityInfo convertedNullability,
Conversion
implicitConversion)
Compiler\AnonymousTypeMethodBodySynthesizer.cs (1)
273
Conversion
.ImplicitReference);
Compiler\MethodBodySynthesizer.cs (4)
127
Conversion
.ExplicitReference,
156
Conversion
.ExplicitReference,
399
conversion:
Conversion
.ExplicitReference,
463
conversion:
Conversion
.ExplicitReference,
Compiler\MethodBodySynthesizer.Lowered.cs (2)
102
Conversion
.ImplicitNumeric),
191
Conversion
.ImplicitNumeric),
CSharpExtensions.cs (20)
438
public static
Conversion
ClassifyConversion(this Compilation? compilation, ITypeSymbol source, ITypeSymbol destination)
447
return
Conversion
.NoConversion;
764
public static
Conversion
GetConversion(this SemanticModel? semanticModel, SyntaxNode expression, CancellationToken cancellationToken = default(CancellationToken))
773
return
Conversion
.NoConversion;
778
/// Gets the underlying <see cref="
Conversion
"/> information from this <see cref="IConversionOperation"/>. This
782
/// <returns>The underlying <see cref="
Conversion
"/>.</returns>
784
public static
Conversion
GetConversion(this IConversionOperation conversionExpression)
793
return (
Conversion
)((ConversionOperation)conversionExpression).ConversionConvertible;
804
/// Gets the underlying <see cref="
Conversion
"/> information from this <see cref="ICompoundAssignmentOperation"/>. This
810
public static
Conversion
GetInConversion(this ICompoundAssignmentOperation compoundAssignment)
819
return (
Conversion
)((CompoundAssignmentOperation)compoundAssignment).InConversionConvertible;
830
/// Gets the underlying <see cref="
Conversion
"/> information from this <see cref="ICompoundAssignmentOperation"/>. This
836
public static
Conversion
GetOutConversion(this ICompoundAssignmentOperation compoundAssignment)
845
return (
Conversion
)((CompoundAssignmentOperation)compoundAssignment).OutConversionConvertible;
855
public static
Conversion
GetSpeculativeConversion(this SemanticModel? semanticModel, int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
864
return
Conversion
.NoConversion;
1283
public static
Conversion
ClassifyConversion(this SemanticModel? semanticModel, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
1294
return
Conversion
.NoConversion;
1303
public static
Conversion
ClassifyConversion(this SemanticModel? semanticModel, int position, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
1312
return
Conversion
.NoConversion;
FlowAnalysis\AbstractFlowPass.cs (2)
2785
BoundConversion { Conversion:
Conversion
conversion, Operand: BoundConditionalAccess ca } when CanPropagateStateWhenNotNull(conversion) => ca,
2807
protected static bool CanPropagateStateWhenNotNull(
Conversion
conversion)
FlowAnalysis\NullableWalker.cs (58)
224
/// The delegate is invoked by <see cref="VisitConversion(BoundConversion, BoundExpression,
Conversion
, TypeWithAnnotations, TypeWithState, bool, bool, bool, AssignmentKind, ParameterSymbol, bool, bool, bool, Optional<LocalState>,bool, Location, ArrayBuilder<VisitResult>)"/>.
4186
var conversions = ArrayBuilder<
Conversion
>.GetInstance(n);
4192
(BoundExpression expressionNoConversion,
Conversion
conversion) = RemoveConversion(expression, includeExplicitConversions: false);
4236
_ = VisitConversion(conversionOpt: null, conversionOperand: expressionsNoConversions[i],
Conversion
.Identity, targetTypeWithNullability: inferredType, operandType: expressionTypes[i],
4339
Conversion
conversion = conversionsWithoutNullability.ClassifyConversionFromExpression(placeholder, bestType, isChecked: returns[i].isChecked, ref discardedUseSiteInfo);
4511
leftConversion =
Conversion
.Identity;
4531
leftConversion =
Conversion
.Identity;
4633
Conversion
leftConversion,
4636
Conversion
rightConversion,
4667
Conversion
conversion,
4704
Conversion
conversion,
4751
var
conversion = _conversions.ClassifyBuiltInConversion(derivedType, baseType, isChecked: false, ref discardedUseSiteInfo);
4762
Conversion
leftConversion,
5191
var
conversion = GenerateConversionForConditionalOperator(node.LeftOperand, leftType, rightType, reportMismatch: true, isChecked: node.Checked);
5451
(var consequence,
var
consequenceConversion, consequenceRValue) = visitConditionalOperand(consequenceState, originalConsequence);
5456
(var alternative,
var
alternativeConversion, alternativeRValue) = visitConditionalOperand(alternativeState, originalAlternative);
5519
TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence,
Conversion
consequenceConversion, bool consequenceEndReachable,
5520
BoundExpression alternative,
Conversion
alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped)
5570
Conversion
consequenceConversion,
5573
Conversion
alternativeConversion,
5586
(BoundExpression,
Conversion
, TypeWithState) visitConditionalOperand(LocalState state, BoundExpression operand)
5588
Conversion
conversion;
5611
Conversion
conversion,
6170
(ImmutableArray<BoundExpression> argumentsNoConversions, ImmutableArray<
Conversion
> conversions) = RemoveArgumentConversions(arguments, refKindsOpt);
6185
ImmutableArray<
Conversion
> conversions,
6258
conversions.IsDefault || i >= conversions.Length ?
Conversion
.Identity : conversions[i],
6341
ImmutableArray<
Conversion
> conversions,
6551
Conversion
conversion,
6940
private (ImmutableArray<BoundExpression> arguments, ImmutableArray<
Conversion
> conversions) RemoveArgumentConversions(
6945
var conversions = default(ImmutableArray<
Conversion
>);
6949
var conversionsBuilder = ArrayBuilder<
Conversion
>.GetInstance(n);
6955
var
conversion =
Conversion
.Identity;
7209
private static (BoundExpression expression,
Conversion
conversion) RemoveConversion(BoundExpression expr, bool includeExplicitConversions)
7228
return (expr,
Conversion
.Identity);
7243
return (expr, group?.Conversion ??
Conversion
.Identity);
7247
private
Conversion
GenerateConversionForConditionalOperator(BoundExpression sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool reportMismatch, bool isChecked)
7249
var
conversion = GenerateConversion(_conversions, sourceExpression, sourceType, destinationType, fromExplicitCast: false, extensionMethodThisArgument: false, isChecked: isChecked);
7258
private static
Conversion
GenerateConversion(Conversions conversions, BoundExpression? sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool fromExplicitCast, bool extensionMethodThisArgument, bool isChecked)
7432
(BoundExpression operand,
Conversion
conversion) = RemoveConversion(node, includeExplicitConversions: true);
7479
(BoundExpression operand,
Conversion
conversion) = RemoveConversion(expr, includeExplicitConversions: false);
7490
Conversion
conversion, TypeWithState operandType,
7522
Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand,
Conversion
conversion, TypeWithState operandType)
7669
Conversion
conversion,
7697
void trackConvertedValue(FieldSymbol targetField,
Conversion
conversion, FieldSymbol valueField)
7910
Conversion
conversion,
7941
conversion =
Conversion
.MakeNullableConversion(ConversionKind.ImplicitNullable,
Conversion
.Identity);
8436
Conversion
conversion,
8664
var
conversion = _conversions.ClassifyStandardConversion(operandType.Type, targetType.Type, ref discardedUseSiteInfo);
8938
CheckExtensionMethodThisNullability(receiverOpt,
Conversion
.Identity, method.Parameters[0], receiverType);
9247
private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables,
Conversion
conversion, BoundExpression right, TypeWithState? rightResultOpt = null)
9261
private void VisitDeconstructMethodArguments(ArrayBuilder<DeconstructionVariable> variables,
Conversion
conversion, BoundExpression right, TypeWithState? rightResultOpt)
9319
var
argConversion = RemoveConversion(invocation.Arguments[0], includeExplicitConversions: false).conversion;
9328
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
9369
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
10205
Conversion
conversion = BoundNode.GetConversion(node.ElementConversion, node.ElementPlaceholder);
10918
private void CheckExtensionMethodThisNullability(BoundExpression expr,
Conversion
conversion, ParameterSymbol parameter, TypeWithState result)
FlowAnalysis\NullableWalker_Patterns.cs (4)
873
var conversions = ArrayBuilder<
Conversion
>.GetInstance(numSwitchArms);
891
(BoundExpression expression,
Conversion
conversion) = RemoveConversion(arm.Value, includeExplicitConversions: false);
943
ArrayBuilder<
Conversion
> conversions,
988
ArrayBuilder<
Conversion
> conversions,
Generated\BoundNodes.xml.Generated.cs (3)
2840
public BoundConversion(SyntaxNode syntax, BoundExpression operand,
Conversion
conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type, bool hasErrors = false)
2859
public
Conversion
Conversion { get; }
2870
public BoundConversion Update(BoundExpression operand,
Conversion
conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type)
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (1)
563
F.Convert(notifyCompletionTemp.Type, F.Local(awaiterTemp),
Conversion
.ExplicitReference)),
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (1)
810
private BoundExpression MakeConversionLambda(
Conversion
conversion, TypeSymbol fromType, TypeSymbol toType)
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (2)
212
void visitConversion(
Conversion
conversion)
226
foreach (
var
underlying in conversion.UnderlyingConversions)
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (2)
211
Conversion
conversion = _factory.Compilation.Conversions.ClassifyBuiltInConversion(inputType, output.Type, isChecked: false, ref useSiteInfo);
484
_factory.Compilation.Conversions.ClassifyBuiltInConversion(test.Input.Type, typeEvaluation2.Type, isChecked: false, ref useSiteInfo) is
Conversion
conv &&
Lowering\LocalRewriter\LocalRewriter_AsOperator.cs (1)
49
var
conversion = BoundNode.GetConversion(operandConversion, operandPlaceholder);
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (11)
736
var
conversion = _compilation.Conversions.ClassifyConversionFromExpression(loweredLeft, boolean, isChecked: false, ref useSiteInfo);
1953
MakeConversionNode(syntax, call,
Conversion
.ExplicitReference, type, @checked: false) :
2024
rewrittenExpr = MakeConversionNode(syntax, rewrittenExpr,
Conversion
.Boxing, objectType, @checked: false);
2290
: _factory.Convert(_factory.SpecialType(destinationType), numericOperand,
Conversion
.IntegerToPointer);
2307
numericOperand = _factory.Convert(nativeIntType, numericOperand,
Conversion
.IntegerToPointer, isChecked);
2319
numericOperand = _factory.Convert(longType, numericOperand,
Conversion
.ExplicitNumeric, isChecked);
2320
sizeOfExpression = _factory.Convert(longType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2332
sizeOfExpression = _factory.Convert(longType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2344
sizeOfExpression = _factory.Convert(ulongType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2363
: _factory.Convert(convertedMultiplicationResultType, multiplication,
Conversion
.IntegerToPointer); // NOTE: for some reason, dev10 doesn't check this conversion.
2393
Conversion
.PointerToInteger);
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (1)
758
Conversion
.Boxing,
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (41)
259
Conversion
conversion,
278
Conversion
.Identity,
294
Conversion
conversion,
413
conversion =
Conversion
.ExplicitNumeric;
464
var
outerConversion = new Conversion(ConversionKind.ImplicitNullable,
Conversion
.IdentityUnderlying);
647
Conversion
conversion = MakeConversion(rewrittenOperand, rewrittenType, @checked: @checked, _compilation, _diagnostics, acceptFailingConversion);
663
private static
Conversion
MakeConversion(
673
Conversion
conversion = compilation.Conversions.ClassifyConversionFromType(rewrittenOperand.Type, rewrittenType, isChecked: @checked, ref useSiteInfo);
697
Conversion
conversion,
807
Conversion
conversion,
894
Conversion
conversion,
950
Conversion
conversion,
977
rewrittenOperand = BoundConversion.SynthesizedNonUserDefined(syntax, rewrittenOperand,
Conversion
.ImplicitEnumeration, rewrittenOperandType);
1002
Conversion
conversion,
1064
Conversion
conversion,
1091
Conversion
conversion,
1131
Conversion
conversion,
1193
Conversion
conversion,
1242
Conversion
conversion,
1249
Conversion
conv = TryMakeConversion(syntax, conversion, rewrittenOperand.Type, rewrittenType, @checked: @checked);
1325
Conversion
conversion,
1585
var
conversion = new Conversion(conversionKind, method, isExtensionMethod: false);
1599
private
Conversion
TryMakeConversion(SyntaxNode syntax,
Conversion
conversion, TypeSymbol fromType, TypeSymbol toType, bool @checked)
1609
Conversion
fromConversion = TryMakeConversion(syntax, conversion.UserDefinedFromConversion, fromType, meth.Parameters[0].Type, @checked: @checked);
1612
return
Conversion
.NoConversion;
1615
Conversion
toConversion = TryMakeConversion(syntax, conversion.UserDefinedToConversion, meth.ReturnType, toType, @checked: @checked);
1618
return
Conversion
.NoConversion;
1630
var
resultConversion = new Conversion(result, conversion.IsImplicit);
1642
return
Conversion
.NoConversion;
1656
return
Conversion
.NoConversion;
1673
return
Conversion
.NoConversion;
1686
return
Conversion
.NoConversion;
1700
private
Conversion
TryMakeConversion(SyntaxNode syntax, TypeSymbol fromType, TypeSymbol toType, bool @checked)
1703
var
result = TryMakeConversion(syntax, _compilation.Conversions.ClassifyConversionFromType(fromType, toType, isChecked: @checked, ref useSiteInfo), fromType, toType, @checked: @checked);
1711
private
Conversion
TryMakeUserDefinedConversion(SyntaxNode syntax, MethodSymbol meth, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit)
1715
Conversion
fromConversion = TryMakeConversion(syntax, fromType, meth.Parameters[0].Type, @checked: @checked);
1718
return
Conversion
.NoConversion;
1721
Conversion
toConversion = TryMakeConversion(syntax, meth.ReturnType, toType, @checked: @checked);
1724
return
Conversion
.NoConversion;
Lowering\LocalRewriter\LocalRewriter_DeconstructionAssignmentOperator.cs (4)
37
private BoundExpression? RewriteDeconstruction(BoundTupleExpression left,
Conversion
conversion, BoundExpression right, bool isUsed)
57
Conversion
conversion,
213
Conversion
conversion,
277
private ImmutableArray<BoundExpression> GetRightParts(BoundExpression right,
Conversion
conversion,
Lowering\LocalRewriter\LocalRewriter_FixedStatement.cs (1)
433
Conversion
.PinnedObjectToPointer);
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (6)
113
BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out
Conversion
collectionConversion);
289
Conversion
receiverConversion = enumeratorType.IsStructType() ?
290
Conversion
.Boxing :
291
Conversion
.ImplicitReference;
448
private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method,
Conversion
receiverConversion, TypeSymbol convertedReceiverType)
1000
private static BoundExpression GetUnconvertedCollectionExpression(BoundForEachStatement node, out
Conversion
collectionConversion)
Lowering\LocalRewriter\LocalRewriter_LockStatement.cs (1)
49
Conversion
.Boxing,
Lowering\LocalRewriter\LocalRewriter_StackAlloc.cs (3)
134
return _factory.Convert(uintPtrType, _factory.Literal((uint)folded),
Conversion
.IntegerToPointer);
139
BoundExpression convertedCount = _factory.Convert(uintType, countExpression,
Conversion
.ExplicitNumeric);
140
convertedCount = _factory.Convert(uintPtrType, convertedCount,
Conversion
.IntegerToPointer);
Lowering\LocalRewriter\LocalRewriter_StringInterpolation.cs (1)
49
Conversion
conversion = _compilation.Conversions.ClassifyConversionFromType(rewrittenOperand.Type, rewrittenType, isChecked: false, ref useSiteInfo);
Lowering\LocalRewriter\LocalRewriter_SwitchExpression.cs (1)
151
Conversion
c = _localRewriter._compilation.Conversions.ClassifyConversionFromExpression(expression, type, isChecked: false, ref discardedUseSiteInfo);
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (5)
68
var
elementConversion = underlyingConversions[i];
211
var
conversion =
Conversion
.MakeNullableConversion(ConversionKind.ImplicitNullable,
Conversion
.Identity);
472
BoundExpression MakeBoundConversion(BoundExpression expr,
Conversion
conversion, TypeWithAnnotations type, BoundConversion enclosing)
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (1)
156
return MakeConversionNode(newNode.Syntax, newNode,
Conversion
.ExplicitEnumeration, type, @checked: false);
Lowering\LocalRewriter\LocalRewriter_UsingStatement.cs (2)
170
Conversion
.ImplicitDynamic,
246
Conversion
.ImplicitDynamic,
Lowering\MethodToClassRewriter.cs (1)
288
var
conversion = node.Conversion;
Lowering\SyntheticBoundNodeFactory.cs (6)
524
var
conversion = Compilation.Conversions.ClassifyConversionFromType(expression.Type, CurrentFunction.ReturnType, isChecked: false, ref useSiteInfo);
612
Conversion
c = Compilation.Conversions.ClassifyBuiltInConversion(operand.Type, type, isChecked: false, ref discardedUseSiteInfo);
1171
? BoundConversion.SynthesizedNonUserDefined(syntax, nullLiteral,
Conversion
.NullToPointer, type)
1360
Conversion
c = Compilation.Conversions.ClassifyConversionFromExpression(arg, type, isChecked: false, ref useSiteInfo);
1368
public BoundExpression Convert(TypeSymbol type, BoundExpression arg,
Conversion
conversion, bool isChecked = false)
1652
rewrittenExpr = Convert(objectType, rewrittenExpr,
Conversion
.Boxing);
Operations\CSharpOperationFactory.cs (6)
1072
Conversion
conversion = boundConversion.Conversion;
1137
Conversion
conversion = BoundNode.GetConversion(boundAsOperator.OperandConversion, boundAsOperator.OperandPlaceholder);
1293
Conversion
inConversion = BoundNode.GetConversion(boundCompoundAssignmentOperator.LeftConversion, boundCompoundAssignmentOperator.LeftPlaceholder);
1294
Conversion
outConversion = BoundNode.GetConversion(boundCompoundAssignmentOperator.FinalConversion, boundCompoundAssignmentOperator.FinalPlaceholder);
1526
Conversion
valueConversion = BoundNode.GetConversion(boundNullCoalescingOperator.LeftConversion, boundNullCoalescingOperator.LeftPlaceholder);
1531
valueConversion =
Conversion
.Identity;
Symbols\ReducedExtensionMethodSymbol.cs (1)
52
var
conversion = conversions.ConvertExtensionMethodThisArg(method.Parameters[0].Type, receiverType, ref useSiteInfo);
Symbols\Source\ParameterHelpers.cs (1)
710
Conversion
conversion = binder.Conversions.ClassifyImplicitConversionFromExpression(defaultExpression, parameterType, ref useSiteInfo);
Microsoft.CodeAnalysis.CSharp.CodeStyle (40)
CastSimplifier.cs (17)
225
var
conversion = conversionOperation.GetConversion();
278
var
originalConversion = originalConversionOperation.GetConversion();
536
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
591
var
innerOriginalConversion = originalConversionOperation.GetConversion();
602
var
outerOriginalConversion = outerOriginalConversionOperation.GetConversion();
629
var
originalConversion = originalConversionOperation.GetConversion();
655
var
rewrittenBitwiseNotConversion = rewrittenBitwiseNotConversionOperation.GetConversion();
697
var
originalConversion = conversionOperation.GetConversion();
837
Conversion
conversion,
896
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
924
var
parentConversion = semanticModel.GetConversion(castNode, cancellationToken);
972
var
conversion = semanticModel.GetConversion(current, cancellationToken);
1054
var
oldConversion = oldForEachInfo.ElementConversion;
1055
var
newConversion = newForEachInfo.ElementConversion;
1312
private static (ITypeSymbol? rewrittenConvertedType,
Conversion
rewrittenConversion) GetRewrittenInfo(
1315
Conversion
originalConversion, ITypeSymbol originalConvertedType,
1331
var
rewrittenConversion = rewrittenSemanticModel.GetConversion(rewrittenExpression, cancellationToken);
ConversionExtensions.cs (2)
9
public static bool IsIdentityOrImplicitReference(this
Conversion
conversion)
15
public static bool IsImplicitUserDefinedConversion(this
Conversion
conversion)
CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs (1)
252
var
conversion = compilation.ClassifyConversion(type1, type2);
CSharpUseCoalesceExpressionForTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
27
var
conversion = semanticModel.GetConversion(conditional, cancellationToken);
CSharpUseDeconstructionDiagnosticAnalyzer.cs (3)
106
var
initializerConversion = semanticModel.GetConversion(initializerValue, cancellationToken);
125
var
elementConversion = semanticModel.GetForEachStatementInfo(forEachStatement).ElementConversion;
137
Conversion
conversion,
CSharpUseImplicitTypeHelper.cs (1)
328
var
conversion = semanticModel.GetConversion(expression, cancellationToken);
SpeculationAnalyzer.cs (15)
37
Conversion
>
396
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalOtherPartOfConditional, originalExpressionType);
397
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newOtherPartOfConditional, newExpressionType);
431
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(oldSwitchStatement.Expression, originalCaseType);
432
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newSwitchStatement.Expression, newCaseType);
534
var
originalConvertedTypeConversion = this.OriginalSemanticModel.ClassifyConversion(previousOriginalNode, originalExpressionTypeInfo.ConvertedType);
535
var
newExpressionConvertedTypeConversion = this.SpeculativeSemanticModel.ClassifyConversion(previousReplacedNode, newExpressionTypeInfo.ConvertedType);
693
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalIsOrAsExpression.Left, originalConvertedType, isExplicitInSource: true);
694
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newIsOrAsExpression.Left, newConvertedType, isExplicitInSource: true);
742
var
originalConversion = originalModel.GetConversion(originalExpression);
743
var
newConversion = newModel.GetConversion(newExpression);
780
private bool ConversionsAreCompatible(
Conversion
originalConversion,
Conversion
newConversion)
822
protected override
Conversion
ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
825
protected override
Conversion
ClassifyConversion(SemanticModel model, ITypeSymbol originalType, ITypeSymbol targetType)
Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes (1)
ConvertSwitchStatementToExpressionCodeFixProvider.Rewriter.cs (1)
197
var
conversion = _semanticModel.Compilation.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType);
Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests (1)
SymbolKey\SymbolKeyTestBase.cs (1)
399
var
conv = model.GetConversion(expr);
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (34)
CodeGen\CodeGenDeconstructTests.cs (2)
314
Assert.Equal(
Conversion
.UnsetConversion, deconstructionInfo.Conversion);
1130
var
tupleConversion = model.GetConversion(tuple);
CodeGen\CodeGenFunctionPointersTests.cs (2)
10762
var
conversion = model.GetConversion(lambdas[0]);
10767
Assert.Equal(
Conversion
.NoConversion, conversion);
CodeGen\CodeGenTupleEqualityTests.cs (4)
364
Assert.Equal(
Conversion
.Identity, model.GetConversion(tupleX));
369
Assert.Equal(
Conversion
.Identity, model.GetConversion(lastX));
387
Assert.Equal(
Conversion
.ImplicitNumeric, model.GetConversion(lastY));
750
Assert.Equal(
Conversion
.Identity, model.GetConversion(tuple));
CodeGen\CodeGenTupleTest.cs (26)
7506
var
castConversion = model.GetConversion(value);
7510
var
tupleConversion = model.GetConversion(tuple);
7539
var
tupleConversion = model.GetConversion(value);
7581
var
conversion1 = model.GetConversion(tuple1);
7590
var
conversion2 = model.GetConversion(tuple2);
7599
var
conversion3 = model.GetConversion(tuple3);
7647
var
conversion = model.GetConversion(tuple);
8335
Assert.Equal(
Conversion
.Identity, model.GetConversion(l11));
8360
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8502
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8536
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8609
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8638
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8673
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8702
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8762
Assert.Equal(
Conversion
.Identity, model.GetConversion(l11));
8787
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8847
Assert.Equal(
Conversion
.Identity, model.GetConversion(lnull));
8860
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8970
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
9083
Assert.Equal(
Conversion
.NoConversion, model.GetConversion(node));
17223
Assert.Equal(
Conversion
.Identity, model.GetConversion(n1));
17230
Assert.Equal(
Conversion
.Identity, model.GetConversion(n2));
17237
Assert.Equal(
Conversion
.Identity, model.GetConversion(n3));
17244
Assert.Equal(
Conversion
.Identity, model.GetConversion(n4));
17305
Assert.Equal(
Conversion
.ImplicitReference, model.GetConversion(n4));
Microsoft.CodeAnalysis.CSharp.Emit2.UnitTests (2)
Emit\NumericIntPtrTests.cs (1)
58
internal static void AssertMatches(ConversionKind[] expected,
Conversion
conversion)
Semantics\PatternMatchingTests2.cs (1)
2892
var
conversion = model.GetConversion(expr);
Microsoft.CodeAnalysis.CSharp.ExpressionEvaluator.ExpressionCompiler (2)
Rewriters\CapturedVariableRewriter.cs (1)
93
var
conversion = _conversions.ClassifyImplicitConversionFromExpression(rewrittenThis, baseType, ref discardedSiteInfo);
Symbols\PlaceholderLocalSymbol.cs (1)
193
var
conversion = compilation.Conversions.ClassifyConversionFromExpression(expr, type, isChecked: false, ref useSiteInfo);
Microsoft.CodeAnalysis.CSharp.Features (10)
ConvertSwitchStatementToExpressionCodeFixProvider.Rewriter.cs (1)
197
var
conversion = _semanticModel.Compilation.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType);
CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs (1)
252
var
conversion = compilation.ClassifyConversion(type1, type2);
CSharpUseCoalesceExpressionForTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
27
var
conversion = semanticModel.GetConversion(conditional, cancellationToken);
CSharpUseDeconstructionDiagnosticAnalyzer.cs (3)
106
var
initializerConversion = semanticModel.GetConversion(initializerValue, cancellationToken);
125
var
elementConversion = semanticModel.GetForEachStatementInfo(forEachStatement).ElementConversion;
137
Conversion
conversion,
ExtractMethod\CSharpSelectionResult.ExpressionResult.cs (2)
100
var
conv = semanticModel.GetConversion(expression);
133
private static bool IsCoClassImplicitConversion(TypeInfo info,
Conversion
conversion, ISymbol? coclassSymbol)
GenerateMember\GenerateParameterizedMember\CSharpGenerateParameterizedMemberService.cs (1)
150
var
conversion = compilation.ClassifyConversion(sourceType, targetType);
UseNamedArguments\CSharpUseNamedArgumentsCodeRefactoringProvider.cs (1)
47
var
conversion = semanticModel.Compilation.ClassifyConversion(argType, parameters[0].Type);
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (6)
IOperation\IOperationTests_ICompoundAssignmentOperation.cs (4)
48
Assert.Equal(
Conversion
.Identity, compoundAssignment.GetInConversion());
49
Assert.Equal(
Conversion
.Identity, compoundAssignment.GetOutConversion());
88
var
inConversion = new Conversion(ConversionKind.ImplicitUserDefined, inSymbol, false);
89
var
outConversion = new Conversion(ConversionKind.ImplicitUserDefined, outSymbol, false);
IOperation\IOperationTests_IVariableDeclaration.cs (2)
932
Assert.Equal(
Conversion
.Identity, model.GetConversion(literalExpr));
939
Assert.Equal(
Conversion
.Identity, model.GetConversion(invocExpr));
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (107)
Semantics\DynamicTests.cs (2)
49
var
dynamicToObject = c.Conversions.ClassifyConversionFromType(DynamicTypeSymbol.Instance, c.GetSpecialType(SpecialType.System_Object), ref useSiteDiagnostics);
50
var
objectToDynamic = c.Conversions.ClassifyConversionFromType(c.GetSpecialType(SpecialType.System_Object), DynamicTypeSymbol.Instance, ref useSiteDiagnostics);
Semantics\ForEachTests.cs (2)
1223
private static
Conversion
GetCollectionConversion(BoundForEachStatement boundNode)
2146
var
conv = model.GetConversion(loopSyntax.Type);
Semantics\FunctionPointerTests.cs (15)
191
var
conversion = model.GetConversion(initializer1);
196
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType!);
273
var
conversion = model.GetConversion(literal);
281
var
classifiedConversion = model.ClassifyConversion(literal, typeInfo.ConvertedType);
333
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
341
var
underlying = conversion.UnderlyingConversions.Single();
384
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
436
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
486
var
conversion = model.ClassifyConversion(conv.Expression, typeInfoOuter.Type!);
583
var
conversion = model.GetConversion(decl);
587
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
822
var
conversion = model.GetConversion(decl);
828
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
880
var
conversion = model.GetConversion(initializer);
887
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
Semantics\LambdaTests.cs (1)
841
var
conv = model.GetConversion(expr);
Semantics\NativeIntegerTests.cs (1)
51
internal static void AssertMatches(ConversionKind[] expected,
Conversion
conversion)
Semantics\NullableConversionTests.cs (1)
813
var
conversion = compilation.Conversions.ClassifyConversionFromExpression(
Semantics\OperatorTests.cs (2)
3253
"valuePlaceholder" =>
Conversion
.Identity,
3256
Conversion
.NoConversion
Semantics\OutVarTests.cs (1)
1058
var
conversion = model.ClassifyConversion(decl, model.Compilation.ObjectType, false);
Semantics\ScriptSemanticsTests.cs (2)
253
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
570
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
Semantics\StackAllocInitializerTests.cs (47)
376
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
382
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
390
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
396
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
404
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
410
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
452
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
458
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
466
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
472
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
480
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
486
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
2352
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2358
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2364
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2370
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2380
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2386
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2392
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2398
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2408
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2414
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2420
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2426
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2458
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2464
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2470
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2480
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2486
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2492
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2502
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2508
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2514
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2558
Assert.Equal(
Conversion
.NoConversion, stackallocInfo.ImplicitConversion);
2564
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2570
Assert.Equal(
Conversion
.ImplicitNumeric, element1Info.ImplicitConversion);
2576
Assert.Equal(
Conversion
.ImplicitNumeric, sizeInfo.ImplicitConversion);
2586
Assert.Equal(
Conversion
.NoConversion, stackallocInfo.ImplicitConversion);
2592
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2598
Assert.Equal(
Conversion
.ImplicitNumeric, element1Info.ImplicitConversion);
2604
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2642
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2648
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
2654
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2664
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2670
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
2676
Assert.Equal(
Conversion
.ImplicitNumeric, element1Info.ImplicitConversion);
Semantics\TargetTypedDefaultTests.cs (3)
336
Assert.Equal(
Conversion
.Identity, model.GetConversion(default2));
3529
Conversion
conversion = model.GetConversion(conversionSyntax);
3602
Conversion
conversion = model.GetConversion(default4);
Semantics\TopLevelStatementsTests.cs (2)
9696
var
conversionInTopLevel = speculativeModelInTopLevel.GetConversion(nodeToSpeculate.DescendantTokens().Single(n => n.ValueText == "x").Parent);
9701
var
conversionOutsideTopLevel = speculativeModelOutsideTopLevel.GetConversion(nodeToSpeculate.DescendantTokens().Single(n => n.ValueText == "x").Parent);
Semantics\UnsafeTests.cs (28)
4429
var
conv = model.GetConversion(syntax);
4432
Assert.Equal(
Conversion
.Identity, conv);
4496
var
conv = model.GetConversion(syntax);
4499
Assert.Equal(
Conversion
.Identity, conv);
4534
var
conv = model.GetConversion(syntax);
4537
Assert.Equal(
Conversion
.Identity, conv);
4576
var
conv = model.GetConversion(syntax);
4579
Assert.Equal(
Conversion
.Identity, conv);
4707
var
conv = model.GetConversion(syntax);
4710
Assert.Equal(
Conversion
.Identity, conv);
5511
var
conv = model.GetConversion(node);
5556
var
conv = model.GetConversion(value);
6046
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
6081
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
6508
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
7399
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
7475
Assert.Equal(
Conversion
.PointerToVoid, summary0.ImplicitConversion);
7482
Assert.Equal(
Conversion
.PointerToVoid, summary1.ImplicitConversion);
7488
Assert.Equal(
Conversion
.PointerToVoid, summary2.ImplicitConversion);
7794
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
7806
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
7856
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
7868
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
7916
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
7928
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
8461
Assert.Equal(
Conversion
.PointerToVoid, stackAllocSummary.ImplicitConversion);
8473
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
8485
Assert.Equal(
Conversion
.ImplicitNumeric, countSummary.ImplicitConversion);
Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests (59)
Compilation\ForEachStatementInfoTests.cs (4)
42
var
conv1 =
Conversion
.Identity;
49
var
conv2 =
Conversion
.NoConversion;
Compilation\GetSemanticInfoTests.cs (47)
108
var
conv = model.GetConversion(expr);
142
var
conv = model.GetConversion(expr);
604
var
impconv = model.GetConversion(expr1);
605
Assert.Equal(
Conversion
.Identity, impconv);
606
Conversion
conv = model.ClassifyConversion(expr1, info.ConvertedType);
634
var
impconv = model.GetConversion(expr1);
638
Conversion
conv = model.ClassifyConversion(expr1, info.ConvertedType);
648
var
conversion = info.Type != null && info.ConvertedType != null ? model.Compilation.ClassifyConversion(info.Type, info.ConvertedType) :
Conversion
.NoConversion;
655
ValidateConversion(
Conversion
.PointerToVoid, ConversionKind.ImplicitPointerToVoid);
656
ValidateConversion(
Conversion
.NullToPointer, ConversionKind.ImplicitNullToPointer);
657
ValidateConversion(
Conversion
.PointerToPointer, ConversionKind.ExplicitPointerToPointer);
658
ValidateConversion(
Conversion
.IntegerToPointer, ConversionKind.ExplicitIntegerToPointer);
659
ValidateConversion(
Conversion
.PointerToInteger, ConversionKind.ExplicitPointerToInteger);
660
ValidateConversion(
Conversion
.IntPtr, ConversionKind.IntPtr);
664
private void ValidateConversion(
Conversion
conv, ConversionKind kind)
847
var
conv = semanticModel.GetConversion(expr);
850
Conversion
act1 = semanticModel.ClassifyConversion(expr, info.ConvertedType);
863
var
act2 = semanticModel.Compilation.ClassifyConversion(info.Type, info.ConvertedType);
876
Conversion
act1 = semanticModel.ClassifyConversion(expr, expsym);
2456
var
conv = model.GetConversion(expr);
2485
var
conv = model.GetConversion(expr);
2734
var
conv = model.GetConversion(expr);
2735
Assert.Equal(
Conversion
.Identity, conv);
2805
var
conv = model.GetConversion(expr);
3336
var
conversion = model.ClassifyConversion(expr, gNullableType);
3402
var
conversion = model.ClassifyConversion(expr, gNullableType);
3477
var
argConversion = model.GetConversion(argexpr);
3531
var
argConversion = model.GetConversion(argexpr);
3610
var
conv = model.GetConversion(literal);
3635
var
literalConversion = model.GetConversion(literal);
3643
var
castConversion = model.GetConversion(cast);
3668
var
literalConversion = model.GetConversion(literal);
3676
var
castConversion = model.GetConversion(cast);
3704
var
literalConversion = model.GetConversion(literal);
3712
var
cast1Conversion = model.GetConversion(cast1);
3724
var
cast2Conversion = model.GetConversion(cast2);
4300
Assert.Equal(
Conversion
.Identity, info.ImplicitConversion);
4379
var
conv = model.GetConversion(syntax);
5538
var
conversion = model.ClassifyConversion(lambdaSyntax, otherFuncType);
5586
var
conversion = model.ClassifyConversion(nullSyntax, typeC);
5625
var
conversion = model.ClassifyConversion(lambdaSyntax, typeFuncB);
5672
var
conversion = model.ClassifyConversion(lambdaSyntax, typeFuncC);
5733
var
conversionA = model.ClassifyConversion(methodGroupSyntax, typeFuncA);
5737
var
conversionB = model.ClassifyConversion(methodGroupSyntax, typeFuncB);
5740
var
conversionC = model.ClassifyConversion(methodGroupSyntax, typeFuncC);
5991
Assert.Equal(
Conversion
.UnsetConversion, foreachSymbolInfo.CurrentConversion);
Compilation\SemanticModelAPITests.cs (1)
2281
var
conv = speculativeModel.GetConversion(initializer);
Compilation\SemanticModelGetSemanticInfoTests.cs (3)
14809
var
conv = model.GetConversion(creation.Type);
14905
var
conv = model.GetConversion(creation.Type);
15016
var
conv = model.GetConversion(creation.Type);
Symbols\ConversionTests.cs (4)
180
var
result = c.ClassifyConversionFromType(types[j], types[i], ref useSiteDiagnostics);
184
var
result2 = c.ClassifyConversionFromType(types[j], types[i], ref useSiteDiagnostics); // set breakpoint here if this test is failing...
400
Conversion
conversion = model.ClassifyConversion(sourceExpression1, targetType);
1737
var
elementConversion = BoundNode.GetConversion(boundForEach.ElementConversion, boundForEach.ElementPlaceholder);
Microsoft.CodeAnalysis.CSharp.Test.Utilities (6)
CompilationTestUtils.cs (2)
214
public
Conversion
ImplicitConversion = default(
Conversion
);
Extensions.cs (4)
847
public static
Conversion
ClassifyConversionFromType(this ConversionsBase conversions, TypeSymbol source, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics, bool forCast = false)
850
Conversion
result = conversions.ClassifyConversionFromType(source, destination, isChecked: false, ref useSiteInfo, forCast);
870
public static
Conversion
ClassifyConversionFromExpression(this Conversions conversions, BoundExpression sourceExpression, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics, bool forCast = false)
873
Conversion
result = conversions.ClassifyConversionFromExpression(sourceExpression, destination, isChecked: false, ref useSiteInfo, forCast);
Microsoft.CodeAnalysis.CSharp.Workspaces (35)
CastSimplifier.cs (17)
225
var
conversion = conversionOperation.GetConversion();
278
var
originalConversion = originalConversionOperation.GetConversion();
536
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
591
var
innerOriginalConversion = originalConversionOperation.GetConversion();
602
var
outerOriginalConversion = outerOriginalConversionOperation.GetConversion();
629
var
originalConversion = originalConversionOperation.GetConversion();
655
var
rewrittenBitwiseNotConversion = rewrittenBitwiseNotConversionOperation.GetConversion();
697
var
originalConversion = conversionOperation.GetConversion();
837
Conversion
conversion,
896
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
924
var
parentConversion = semanticModel.GetConversion(castNode, cancellationToken);
972
var
conversion = semanticModel.GetConversion(current, cancellationToken);
1054
var
oldConversion = oldForEachInfo.ElementConversion;
1055
var
newConversion = newForEachInfo.ElementConversion;
1312
private static (ITypeSymbol? rewrittenConvertedType,
Conversion
rewrittenConversion) GetRewrittenInfo(
1315
Conversion
originalConversion, ITypeSymbol originalConvertedType,
1331
var
rewrittenConversion = rewrittenSemanticModel.GetConversion(rewrittenExpression, cancellationToken);
ConversionExtensions.cs (2)
9
public static bool IsIdentityOrImplicitReference(this
Conversion
conversion)
15
public static bool IsImplicitUserDefinedConversion(this
Conversion
conversion)
CSharpUseImplicitTypeHelper.cs (1)
328
var
conversion = semanticModel.GetConversion(expression, cancellationToken);
SpeculationAnalyzer.cs (15)
37
Conversion
>
396
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalOtherPartOfConditional, originalExpressionType);
397
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newOtherPartOfConditional, newExpressionType);
431
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(oldSwitchStatement.Expression, originalCaseType);
432
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newSwitchStatement.Expression, newCaseType);
534
var
originalConvertedTypeConversion = this.OriginalSemanticModel.ClassifyConversion(previousOriginalNode, originalExpressionTypeInfo.ConvertedType);
535
var
newExpressionConvertedTypeConversion = this.SpeculativeSemanticModel.ClassifyConversion(previousReplacedNode, newExpressionTypeInfo.ConvertedType);
693
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalIsOrAsExpression.Left, originalConvertedType, isExplicitInSource: true);
694
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newIsOrAsExpression.Left, newConvertedType, isExplicitInSource: true);
742
var
originalConversion = originalModel.GetConversion(originalExpression);
743
var
newConversion = newModel.GetConversion(newExpression);
780
private bool ConversionsAreCompatible(
Conversion
originalConversion,
Conversion
newConversion)
822
protected override
Conversion
ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
825
protected override
Conversion
ClassifyConversion(SemanticModel model, ITypeSymbol originalType, ITypeSymbol targetType)
Microsoft.CodeAnalysis.Test.Utilities (3)
Compilation\TestOperationVisitor.cs (3)
833
CSharp.
Conversion
csharpConversion = CSharp.CSharpExtensions.GetConversion(operation);
1162
var
inConversionInternal = CSharp.CSharpExtensions.GetInConversion(operation);
1163
var
outConversionInternal = CSharp.CSharpExtensions.GetOutConversion(operation);