78 instantiations of Conversion
Microsoft.CodeAnalysis.CSharp (77)
Binder\Binder_Deconstruct.cs (1)
343
conversion = new
Conversion
(ConversionKind.Deconstruction, deconstructMethod, nestedConversions.ToImmutableAndFree());
Binder\Semantics\Conversions\Conversion.cs (57)
135
return new
Conversion
(
142
return new
Conversion
(
209
return new
Conversion
(this.Kind, conversionMethod, isExtensionMethod: IsExtensionMethod);
217
return new
Conversion
(
275
return new
Conversion
(kind);
278
internal static Conversion UnsetConversion => new
Conversion
(ConversionKind.UnsetConversionKind);
279
internal static Conversion NoConversion => new
Conversion
(ConversionKind.NoConversion);
280
internal static Conversion Identity => new
Conversion
(ConversionKind.Identity);
281
internal static Conversion ImplicitConstant => new
Conversion
(ConversionKind.ImplicitConstant);
282
internal static Conversion ImplicitNumeric => new
Conversion
(ConversionKind.ImplicitNumeric);
283
internal static Conversion ImplicitReference => new
Conversion
(ConversionKind.ImplicitReference);
284
internal static Conversion ImplicitEnumeration => new
Conversion
(ConversionKind.ImplicitEnumeration);
285
internal static Conversion ImplicitThrow => new
Conversion
(ConversionKind.ImplicitThrow);
286
internal static Conversion ObjectCreation => new
Conversion
(ConversionKind.ObjectCreation);
287
internal static Conversion CollectionExpression => new
Conversion
(ConversionKind.CollectionExpression);
288
internal static Conversion AnonymousFunction => new
Conversion
(ConversionKind.AnonymousFunction);
289
internal static Conversion Boxing => new
Conversion
(ConversionKind.Boxing);
290
internal static Conversion NullLiteral => new
Conversion
(ConversionKind.NullLiteral);
291
internal static Conversion DefaultLiteral => new
Conversion
(ConversionKind.DefaultLiteral);
292
internal static Conversion NullToPointer => new
Conversion
(ConversionKind.ImplicitNullToPointer);
293
internal static Conversion PointerToVoid => new
Conversion
(ConversionKind.ImplicitPointerToVoid);
294
internal static Conversion PointerToPointer => new
Conversion
(ConversionKind.ExplicitPointerToPointer);
295
internal static Conversion PointerToInteger => new
Conversion
(ConversionKind.ExplicitPointerToInteger);
296
internal static Conversion IntegerToPointer => new
Conversion
(ConversionKind.ExplicitIntegerToPointer);
297
internal static Conversion Unboxing => new
Conversion
(ConversionKind.Unboxing);
298
internal static Conversion ExplicitReference => new
Conversion
(ConversionKind.ExplicitReference);
299
internal static Conversion IntPtr => new
Conversion
(ConversionKind.IntPtr);
300
internal static Conversion ExplicitEnumeration => new
Conversion
(ConversionKind.ExplicitEnumeration);
301
internal static Conversion ExplicitNumeric => new
Conversion
(ConversionKind.ExplicitNumeric);
302
internal static Conversion ImplicitDynamic => new
Conversion
(ConversionKind.ImplicitDynamic);
303
internal static Conversion ExplicitDynamic => new
Conversion
(ConversionKind.ExplicitDynamic);
304
internal static Conversion InterpolatedString => new
Conversion
(ConversionKind.InterpolatedString);
305
internal static Conversion InterpolatedStringHandler => new
Conversion
(ConversionKind.InterpolatedStringHandler);
306
internal static Conversion Deconstruction => new
Conversion
(ConversionKind.Deconstruction);
307
internal static Conversion PinnedObjectToPointer => new
Conversion
(ConversionKind.PinnedObjectToPointer);
308
internal static Conversion ImplicitPointer => new
Conversion
(ConversionKind.ImplicitPointer);
309
internal static Conversion FunctionType => new
Conversion
(ConversionKind.FunctionType);
310
internal static Conversion InlineArray => new
Conversion
(ConversionKind.InlineArray);
311
internal static Conversion ImplicitSpan => new
Conversion
(ConversionKind.ImplicitSpan);
312
internal static Conversion ExplicitSpan => new
Conversion
(ConversionKind.ExplicitSpan);
324
internal static readonly Conversion ExplicitNullableWithExplicitEnumerationUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, ExplicitEnumerationUnderlying);
325
internal static readonly Conversion ExplicitNullableWithPointerToIntegerUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, PointerToIntegerUnderlying);
326
internal static readonly Conversion ExplicitNullableWithIdentityUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, IdentityUnderlying);
327
internal static readonly Conversion ExplicitNullableWithImplicitNumericUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, ImplicitNumericUnderlying);
328
internal static readonly Conversion ExplicitNullableWithExplicitNumericUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, ExplicitNumericUnderlying);
329
internal static readonly Conversion ExplicitNullableWithImplicitConstantUnderlying = new
Conversion
(ConversionKind.ExplicitNullable, ImplicitConstantUnderlying);
331
internal static readonly Conversion ImplicitNullableWithExplicitEnumerationUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, ExplicitEnumerationUnderlying);
332
internal static readonly Conversion ImplicitNullableWithPointerToIntegerUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, PointerToIntegerUnderlying);
333
internal static readonly Conversion ImplicitNullableWithIdentityUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, IdentityUnderlying);
334
internal static readonly Conversion ImplicitNullableWithImplicitNumericUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, ImplicitNumericUnderlying);
335
internal static readonly Conversion ImplicitNullableWithExplicitNumericUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, ExplicitNumericUnderlying);
336
internal static readonly Conversion ImplicitNullableWithImplicitConstantUnderlying = new
Conversion
(ConversionKind.ImplicitNullable, ImplicitConstantUnderlying);
352
return new
Conversion
(ConversionKind.StackAllocToPointerType, ImmutableArray.Create(underlyingConversion));
357
return new
Conversion
(ConversionKind.StackAllocToSpanType, ImmutableArray.Create(underlyingConversion));
372
_ => new
Conversion
(kind, ImmutableArray.Create(nestedConversion)),
378
return new
Conversion
(ConversionKind.SwitchExpression, innerConversions);
383
return new
Conversion
(ConversionKind.ConditionalExpression, innerConversions);
Binder\Semantics\Conversions\Conversions.cs (1)
517
return new
Conversion
(ConversionKind.MethodGroup, method, isExtensionMethod: isExtensionMethod);
Binder\Semantics\Conversions\ConversionsBase.cs (10)
785
var result = new
Conversion
(conversionResult, isImplicit: true);
889
return new
Conversion
(conversionResult, isImplicit: false);
1191
return new
Conversion
(ConversionKind.ImplicitNullable, ImmutableArray.Create(underlyingConversion));
1327
return new
Conversion
(ConversionKind.ImplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1356
return new
Conversion
(ConversionKind.ExplicitNullable, ImmutableArray.Create(underlyingTupleConversion));
1763
return new
Conversion
(result, isImplicit: true);
2289
return new
Conversion
(ConversionKind.ImplicitNullable, ImmutableArray.Create(tupleConversion));
2371
return new
Conversion
(kind, argumentConversions.ToImmutableAndFree());
2450
return new
Conversion
(kind, nestedConversions.ToImmutableAndFree());
2492
return new
Conversion
(ConversionKind.ExplicitNullable, ImmutableArray.Create(tupleConversion));
Compilation\CSharpSemanticModel.cs (4)
2112
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, false);
2233
conversion = new
Conversion
(ConversionKind.MethodGroup, delegateCreation.MethodOpt, delegateCreation.IsExtensionMethod);
2239
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
2245
conversion = new
Conversion
(ConversionKind.AnonymousFunction, lambda.Symbol, delegateCreation.IsExtensionMethod);
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (4)
1197
var userDefinedConversion = new
Conversion
(conversionKind, method, false);
1836
var conversion = new
Conversion
(conversionKind, method, isExtensionMethod: false);
1884
var resultConversion = new
Conversion
(result, conversion.IsImplicit);
1989
return new
Conversion
(result, isImplicit);
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (1)
Semantics\CollectionExpressionTests.cs (1)
29200
var expectedConversion = new
Conversion
(ConversionKind.CollectionExpression, nestedConversions: ImmutableArray.Create(Conversion.Identity, Conversion.Identity));
1425 references to Conversion
ConfigurationSchemaGenerator (1)
RuntimeSource\Configuration.Binder\ConfigurationBindingGenerator.Parser.cs (1)
527
Conversion
conversion = _typeSymbols.Compilation.ClassifyConversion(source, dest);
Microsoft.AspNetCore.Components.Analyzers (3)
ComponentFacts.cs (1)
173
var
conversion = compilation.ClassifyConversion(symbols.IComponentType, type);
ComponentParameterAnalyzer.cs (1)
102
var
conversion = context.Compilation.ClassifyConversion(symbols.ParameterCaptureUnmatchedValuesRuntimeType, property.Type);
ComponentParameterUsageAnalyzer.cs (1)
89
var
conversion = context.Compilation.ClassifyConversion(propertyContainingType, assignmentContainingType);
Microsoft.AspNetCore.Components.SdkAnalyzers (3)
ComponentFacts.cs (1)
102
var
conversion = compilation.ClassifyConversion(symbols.IComponentType, type);
ComponentParameterAnalyzer.cs (1)
96
var
conversion = context.Compilation.ClassifyConversion(symbols.ParameterCaptureUnmatchedValuesRuntimeType, property.Type);
ComponentParameterUsageAnalyzer.cs (1)
89
var
conversion = context.Compilation.ClassifyConversion(propertyContainingType, assignmentContainingType);
Microsoft.CodeAnalysis.CSharp (953)
Binder\Binder.cs (1)
626
internal void ReportDiagnosticsIfObsolete(BindingDiagnosticBag diagnostics,
Conversion
conversion, SyntaxNodeOrToken node, bool hasBaseReceiver)
Binder\Binder.ValueChecks.cs (1)
4270
if (conversion.Conversion ==
Conversion
.ImplicitThrow)
Binder\Binder_Await.cs (4)
360
if (!isApplicableMethod(exprType, member, node, diagnostics, this, out MethodSymbol? method, out
Conversion
argumentConversion))
416
out
Conversion
conversion)
469
static bool isValidConversion(TypeSymbol exprType, MethodSymbol method, SyntaxNode node, BindingDiagnosticBag diagnostics, Binder @this, out
Conversion
conversion)
685
var
conversion = this.Conversions.ClassifyImplicitConversionFromType(awaiterType, INotifyCompletion, ref useSiteInfo);
Binder\Binder_Conversions.cs (46)
26
var
conversion = Conversions.ClassifyConversionFromExpression(source, destination, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
34
Conversion
conversion,
44
Conversion
conversion,
57
Conversion
conversion,
84
static bool filterConversion(
Conversion
conversion, BoundExpression result)
137
Conversion
conversion,
359
void reportUseSiteDiagnostics(SyntaxNode syntax,
Conversion
conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics)
374
void ensureAllUnderlyingConversionsChecked(SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool wasCompilerGenerated, TypeSymbol destination, BindingDiagnosticBag diagnostics)
471
void checkConstraintLanguageVersionAndRuntimeSupportForConversion(SyntaxNode syntax,
Conversion
conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics)
811
SyntaxNode syntax, BoundUnconvertedObjectCreationExpression node,
Conversion
conversion, bool isCast, TypeSymbol destination,
833
expr is BoundBadExpression ?
Conversion
.NoConversion : conversion,
880
Conversion
conversion,
898
Conversion
conversion,
904
private readonly
Conversion
_conversion = conversion;
1147
var
elementConversion = elementConversions[i];
1170
ref readonly CollectionExpressionConverter @this, BoundCollectionExpressionSpreadElement element, TypeSymbol elementType,
Conversion
elementConversion)
1574
var
conversion = Conversions.ClassifyImplicitConversionFromType(elementTypeOriginalDefinition, elementType, ref candidateUseSiteInfo);
2129
var
conversion = conversions.ConvertExtensionMethodThisArg(constructed.Parameters[0].Type, receiverType, ref useSiteInfo, isMethodGroupConversion: false);
2391
Conversion
elementConversion = Conversions.GetCollectionExpressionSpreadElementConversion(spreadElement, elementType, ref useSiteInfo);
2401
Conversion
elementConversion = Conversions.ClassifyImplicitConversionFromExpression((BoundExpression)element, elementType, ref useSiteInfo);
2426
Conversion
? conversionIfTargetTyped,
2432
var
conversion = conversionIfTargetTyped.GetValueOrDefault();
2433
ImmutableArray<
Conversion
> underlyingConversions = conversion.UnderlyingConversions;
2466
private BoundExpression ConvertSwitchExpression(BoundUnconvertedSwitchExpression source, TypeSymbol destination,
Conversion
? conversionIfTargetTyped, BindingDiagnosticBag diagnostics, bool hasErrors = false)
2469
Conversion
conversion = conversionIfTargetTyped ??
Conversion
.Identity;
2471
ImmutableArray<
Conversion
> underlyingConversions = conversion.UnderlyingConversions;
2496
Conversion
conversion,
2575
Conversion
toParameterTypeConversion = Conversions.ClassifyStandardConversion(convertedOperand.Type, conversionParameterType, ref useSiteInfo);
2596
Conversion
toConversion = conversion.UserDefinedToConversion;
2627
Conversion
fromReturnTypeConversion = Conversions.ClassifyStandardConversion(conversionReturnType, conversionToType, ref useSiteInfo);
2685
Conversion
conversion,
2760
SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast,
2821
SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast,
2852
SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast,
3013
SyntaxNode syntax, BoundExpression source,
Conversion
conversion, bool isCast,
3048
var
underlyingConversion = conversion.UnderlyingConversions.Single();
3053
SyntaxNode syntax, BoundTupleLiteral sourceTuple,
Conversion
conversion, bool isCast,
3065
var
conversionWithoutNullable = conversion;
3120
var
elementConversion = underlyingConversions[i];
3158
Conversion
.Identity,
3180
private BoundMethodGroup FixMethodGroupWithTypeOrValue(BoundMethodGroup group,
Conversion
conversion, BindingDiagnosticBag diagnostics)
3631
Conversion
conversion,
3699
out
Conversion
conversion)
3703
conversion =
Conversion
.NoConversion;
3731
Conversion
conversion,
Binder\Binder_Deconstruct.cs (5)
132
new BoundConversion(boundRHS.Syntax, boundRHS,
Conversion
.Deconstruction, @checked: false, explicitCastInCode: false,
139
Conversion
conversion;
249
out
Conversion
conversion)
253
conversion =
Conversion
.Deconstruction;
301
Conversion
nestedConversion;
Binder\Binder_Expressions.cs (19)
184
return FixMethodGroupWithTypeOrValue(methodGroup,
Conversion
.NoConversion, BindingDiagnosticBag.Discarded);
1261
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(argument, typedReferenceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1310
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(argument, typedReferenceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
2705
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(boundOperand, intType, ref useSiteInfo);
2811
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(boundOperand, indexType, ref useSiteInfo);
2826
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(operand, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
2843
Conversion
conversion,
2984
var
elementConversion = Conversions.ClassifyConversionFromExpression(argument, targetElementType, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
3010
var
underlyingConversion = Conversions.ClassifyBuiltInConversion(operand.Type, underlyingTargetTypeWithAnnotations.Type, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
3569
var
kind = result.ConversionForArg(arg);
3751
var
interpolatedStringConversion = result.ConversionForArg(interpolatedStringArgNum);
5413
var
conversion = @this.Conversions.ClassifyConversionFromExpression(expression, collectionType, isChecked: @this.CheckOverflowAtRuntime, ref useSiteInfo);
5564
var
conversion = this.Conversions.ClassifyConversionFromExpression(unboundLambda, type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
5604
Conversion
conversion;
5637
Conversion
conv = Conversions.MethodGroupConversion(argument.Syntax, methodGroup, type, ref useSiteInfo);
7176
Conversion
conversion = this.Conversions.ClassifyConversionFromExpression(classCreation, interfaceType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
9242
Conversion
.ImplicitNumeric,
10098
Conversion
failedConversion = this.Conversions.ClassifyConversionFromExpression(index, int32, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
10153
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(expr, targetType, ref useSiteInfo);
Binder\Binder_Invocation.cs (2)
1747
Conversion
conversion = Conversions.ClassifyConversionFromExpression(defaultValue, parameterType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1869
Conversion
conversion = Conversions.ClassifyImplicitConversionFromExpression(unconvertedCollection, collectionType, ref useSiteInfo);
Binder\Binder_Operators.cs (16)
76
var
finalDynamicConversion = this.Compilation.Conversions.ClassifyConversionFromExpression(placeholder, left.Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
294
Conversion
rightToLeftConversion = this.Conversions.ClassifyConversionFromExpression(right, leftType, isChecked: checkOverflowAtRuntime, ref useSiteInfo);
498
Conversion
conversion = overloadResolutionResult.ValidResult.Result.ConversionForArg(0);
702
Conversion
argumentConversion = this.Conversions.ClassifyConversionFromExpression(right, delegateType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1313
var
conversion = this.Conversions.ClassifyConversionFromExpression(right, left.Type, isChecked: CheckOverflowAtRuntime, ref discardedUseSiteInfo);
1605
var
implicitConversion = Conversions.ClassifyImplicitConversionFromExpression(left, booleanType, ref useSiteInfo);
3581
Conversion
conversion = overloadResolutionResult.ValidResult.Result.ConversionForArg(0);
4959
Conversion
conv = Conversions.ClassifyConversionFromExpression(operand, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
4980
Conversion
conversion = Conversions.ClassifyBuiltInConversion(inputType, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
5438
Conversion
.NullLiteral,
5477
Conversion
conversion = Conversions.ClassifyBuiltInConversion(operandType, targetType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
5720
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, optLeftType0, ref useSiteInfo);
5738
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, optLeftType, ref useSiteInfo);
5775
Conversion
leftConversionClassification;
5853
var
underlyingRightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, underlyingLeftType, ref useSiteInfo);
5867
var
rightConversion = Conversions.ClassifyImplicitConversionFromExpression(rightOperand, leftType, ref useSiteInfo);
Binder\Binder_Patterns.cs (18)
653
var convertedExpression = BindExpressionOrTypeForPattern(unionType, inputType, innerExpression, ref hasErrors, diagnostics, out var constantValueOpt, out bool wasExpression, out
Conversion
patternConversion, out BoundExpression originalExpression);
704
private bool ShouldBlockINumberBaseConversion(
Conversion
patternConversion, TypeSymbol inputType)
756
out
Conversion
patternExpressionConversion,
770
patternExpressionConversion =
Conversion
.NoConversion;
786
out
Conversion
patternExpressionConversion,
793
patternExpressionConversion =
Conversion
.NoConversion;
805
out
Conversion
patternExpressionConversion)
851
out
Conversion
patternExpressionConversion)
898
patternExpressionConversion =
Conversion
.NoConversion;
905
patternExpressionConversion =
Conversion
.NoConversion;
934
patternExpressionConversion =
Conversion
.NoConversion;
1070
Conversion
conversion;
1098
bool reportBadMatch(SyntaxNode typeSyntax, TypeSymbol inputType, TypeSymbol patternType, ConstantValue matchPossible,
Conversion
conversion, BindingDiagnosticBag diagnostics)
1131
out
Conversion
conversion,
1136
conversion =
Conversion
.NoConversion;
1166
out
Conversion
conversion,
1176
conversion =
Conversion
.Identity;
2066
BoundExpression value = BindExpressionForPattern(unionType, inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out
Conversion
patternConversion, originalExpression: out _);
Binder\Binder_Statements.cs (11)
1372
Conversion
elementConversionClassification = this.Conversions.ClassifyConversionFromType(pointerType, declType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
1965
internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, out
Conversion
conversion, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None)
2278
Conversion
conversion, TypeSymbol sourceType, TypeSymbol targetType, ConstantValue sourceConstantValueOpt = null)
2348
Conversion
conversion,
2470
var
conversion = this.Conversions.ClassifyImplicitConversionFromExpression(expr, targetType, ref useSiteInfo);
2570
var
elementConversion = Conversions.ClassifyImplicitConversionFromExpression(argument, targetElementType, ref discardedUseSiteInfo);
2693
return BoundConversion.Synthesized(node, BindToTypeForErrorRecovery(expr),
Conversion
.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, ConstantValue.NotAvailable, boolean, hasErrors: true);
2718
var
conversion = this.Conversions.ClassifyConversionFromExpression(expr, boolean, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
2761
return BoundConversion.Synthesized(node, expr,
Conversion
.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, ConstantValue.NotAvailable, boolean, hasErrors: true);
3184
Conversion
conversion;
3194
conversion =
Conversion
.NoConversion;
Binder\Binder_TupleOperators.cs (1)
133
Conversion
conversion = this.Conversions.ClassifyImplicitConversionFromType(type, boolean, ref useSiteInfo);
Binder\DecisionDagBuilder.cs (2)
832
Conversion
conversion = _conversions.ClassifyBuiltInConversion(inputType, type, isChecked: false, ref useSiteInfo);
2653
ConstantValue result = Binder.ExpressionOfTypeMatchesPatternType(conversions, expressionType, patternType, ref useSiteInfo, out
Conversion
conversion);
Binder\ForEachLoopBinder.cs (5)
484
Conversion
elementConversionClassification = this.Conversions.ClassifyConversionFromType(inferredType.Type, iterationVariableType.Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo, forCast: true);
538
Conversion
collectionConversionClassification = this.Conversions.ClassifyConversionFromExpression(collectionExpr, builder.CollectionType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
539
Conversion
currentConversionClassification = this.Conversions.ClassifyConversionFromType(builder.CurrentPropertyGetter.ReturnType, builder.ElementType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
642
Conversion
collectionConversionClassification,
1557
var
collectionConversion = this.Conversions.ClassifyConversionFromExpression(collectionExpr, result.Parameters[0].Type, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
Binder\RefSafetyAnalysis.cs (2)
1121
private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, SyntaxNode syntax,
Conversion
conversion, BoundExpression right)
1192
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
Binder\Semantics\Conversions\Conversion.cs (118)
20
public readonly struct Conversion : IEquatable<
Conversion
>, IConvertibleConversion
84
public NestedUncommonData(ImmutableArray<
Conversion
> nestedConversions)
89
internal readonly ImmutableArray<
Conversion
> _nestedConversionsOpt;
113
ImmutableArray<
Conversion
> elementConversions) :
130
internal static
Conversion
CreateCollectionExpressionConversion(
133
ImmutableArray<
Conversion
> elementConversions)
140
internal static
Conversion
CreateUnionConversion(UserDefinedConversionResult conversionResult)
185
internal Conversion(ConversionKind kind, ImmutableArray<
Conversion
> nestedConversions)
200
internal
Conversion
SetConversionMethod(MethodSymbol conversionMethod)
212
internal
Conversion
SetArrayIndexConversionForDynamic()
272
internal static
Conversion
GetTrivialConversion(ConversionKind kind)
278
internal static
Conversion
UnsetConversion => new Conversion(ConversionKind.UnsetConversionKind);
279
internal static
Conversion
NoConversion => new Conversion(ConversionKind.NoConversion);
280
internal static
Conversion
Identity => new Conversion(ConversionKind.Identity);
281
internal static
Conversion
ImplicitConstant => new Conversion(ConversionKind.ImplicitConstant);
282
internal static
Conversion
ImplicitNumeric => new Conversion(ConversionKind.ImplicitNumeric);
283
internal static
Conversion
ImplicitReference => new Conversion(ConversionKind.ImplicitReference);
284
internal static
Conversion
ImplicitEnumeration => new Conversion(ConversionKind.ImplicitEnumeration);
285
internal static
Conversion
ImplicitThrow => new Conversion(ConversionKind.ImplicitThrow);
286
internal static
Conversion
ObjectCreation => new Conversion(ConversionKind.ObjectCreation);
287
internal static
Conversion
CollectionExpression => new Conversion(ConversionKind.CollectionExpression);
288
internal static
Conversion
AnonymousFunction => new Conversion(ConversionKind.AnonymousFunction);
289
internal static
Conversion
Boxing => new Conversion(ConversionKind.Boxing);
290
internal static
Conversion
NullLiteral => new Conversion(ConversionKind.NullLiteral);
291
internal static
Conversion
DefaultLiteral => new Conversion(ConversionKind.DefaultLiteral);
292
internal static
Conversion
NullToPointer => new Conversion(ConversionKind.ImplicitNullToPointer);
293
internal static
Conversion
PointerToVoid => new Conversion(ConversionKind.ImplicitPointerToVoid);
294
internal static
Conversion
PointerToPointer => new Conversion(ConversionKind.ExplicitPointerToPointer);
295
internal static
Conversion
PointerToInteger => new Conversion(ConversionKind.ExplicitPointerToInteger);
296
internal static
Conversion
IntegerToPointer => new Conversion(ConversionKind.ExplicitIntegerToPointer);
297
internal static
Conversion
Unboxing => new Conversion(ConversionKind.Unboxing);
298
internal static
Conversion
ExplicitReference => new Conversion(ConversionKind.ExplicitReference);
299
internal static
Conversion
IntPtr => new Conversion(ConversionKind.IntPtr);
300
internal static
Conversion
ExplicitEnumeration => new Conversion(ConversionKind.ExplicitEnumeration);
301
internal static
Conversion
ExplicitNumeric => new Conversion(ConversionKind.ExplicitNumeric);
302
internal static
Conversion
ImplicitDynamic => new Conversion(ConversionKind.ImplicitDynamic);
303
internal static
Conversion
ExplicitDynamic => new Conversion(ConversionKind.ExplicitDynamic);
304
internal static
Conversion
InterpolatedString => new Conversion(ConversionKind.InterpolatedString);
305
internal static
Conversion
InterpolatedStringHandler => new Conversion(ConversionKind.InterpolatedStringHandler);
306
internal static
Conversion
Deconstruction => new Conversion(ConversionKind.Deconstruction);
307
internal static
Conversion
PinnedObjectToPointer => new Conversion(ConversionKind.PinnedObjectToPointer);
308
internal static
Conversion
ImplicitPointer => new Conversion(ConversionKind.ImplicitPointer);
309
internal static
Conversion
FunctionType => new Conversion(ConversionKind.FunctionType);
310
internal static
Conversion
InlineArray => new Conversion(ConversionKind.InlineArray);
311
internal static
Conversion
ImplicitSpan => new Conversion(ConversionKind.ImplicitSpan);
312
internal static
Conversion
ExplicitSpan => new Conversion(ConversionKind.ExplicitSpan);
316
internal static ImmutableArray<
Conversion
> IdentityUnderlying => ConversionSingletons.IdentityUnderlying;
317
internal static ImmutableArray<
Conversion
> ImplicitConstantUnderlying => ConversionSingletons.ImplicitConstantUnderlying;
318
internal static ImmutableArray<
Conversion
> ImplicitNumericUnderlying => ConversionSingletons.ImplicitNumericUnderlying;
319
internal static ImmutableArray<
Conversion
> ExplicitNumericUnderlying => ConversionSingletons.ExplicitNumericUnderlying;
320
internal static ImmutableArray<
Conversion
> ExplicitEnumerationUnderlying => ConversionSingletons.ExplicitEnumerationUnderlying;
321
internal static ImmutableArray<
Conversion
> PointerToIntegerUnderlying => ConversionSingletons.PointerToIntegerUnderlying;
324
internal static readonly
Conversion
ExplicitNullableWithExplicitEnumerationUnderlying = new Conversion(ConversionKind.ExplicitNullable, ExplicitEnumerationUnderlying);
325
internal static readonly
Conversion
ExplicitNullableWithPointerToIntegerUnderlying = new Conversion(ConversionKind.ExplicitNullable, PointerToIntegerUnderlying);
326
internal static readonly
Conversion
ExplicitNullableWithIdentityUnderlying = new Conversion(ConversionKind.ExplicitNullable, IdentityUnderlying);
327
internal static readonly
Conversion
ExplicitNullableWithImplicitNumericUnderlying = new Conversion(ConversionKind.ExplicitNullable, ImplicitNumericUnderlying);
328
internal static readonly
Conversion
ExplicitNullableWithExplicitNumericUnderlying = new Conversion(ConversionKind.ExplicitNullable, ExplicitNumericUnderlying);
329
internal static readonly
Conversion
ExplicitNullableWithImplicitConstantUnderlying = new Conversion(ConversionKind.ExplicitNullable, ImplicitConstantUnderlying);
331
internal static readonly
Conversion
ImplicitNullableWithExplicitEnumerationUnderlying = new Conversion(ConversionKind.ImplicitNullable, ExplicitEnumerationUnderlying);
332
internal static readonly
Conversion
ImplicitNullableWithPointerToIntegerUnderlying = new Conversion(ConversionKind.ImplicitNullable, PointerToIntegerUnderlying);
333
internal static readonly
Conversion
ImplicitNullableWithIdentityUnderlying = new Conversion(ConversionKind.ImplicitNullable, IdentityUnderlying);
334
internal static readonly
Conversion
ImplicitNullableWithImplicitNumericUnderlying = new Conversion(ConversionKind.ImplicitNullable, ImplicitNumericUnderlying);
335
internal static readonly
Conversion
ImplicitNullableWithExplicitNumericUnderlying = new Conversion(ConversionKind.ImplicitNullable, ExplicitNumericUnderlying);
336
internal static readonly
Conversion
ImplicitNullableWithImplicitConstantUnderlying = new Conversion(ConversionKind.ImplicitNullable, ImplicitConstantUnderlying);
342
internal static ImmutableArray<
Conversion
> IdentityUnderlying = ImmutableArray.Create(Identity);
343
internal static ImmutableArray<
Conversion
> ImplicitConstantUnderlying = ImmutableArray.Create(ImplicitConstant);
344
internal static ImmutableArray<
Conversion
> ImplicitNumericUnderlying = ImmutableArray.Create(ImplicitNumeric);
345
internal static ImmutableArray<
Conversion
> ExplicitNumericUnderlying = ImmutableArray.Create(ExplicitNumeric);
346
internal static ImmutableArray<
Conversion
> ExplicitEnumerationUnderlying = ImmutableArray.Create(ExplicitEnumeration);
347
internal static ImmutableArray<
Conversion
> PointerToIntegerUnderlying = ImmutableArray.Create(PointerToInteger);
350
internal static
Conversion
MakeStackAllocToPointerType(
Conversion
underlyingConversion)
355
internal static
Conversion
MakeStackAllocToSpanType(
Conversion
underlyingConversion)
360
internal static
Conversion
MakeNullableConversion(ConversionKind kind,
Conversion
nestedConversion)
376
internal static
Conversion
MakeSwitchExpression(ImmutableArray<
Conversion
> innerConversions)
381
internal static
Conversion
MakeConditionalExpression(ImmutableArray<
Conversion
> innerConversions)
410
internal ImmutableArray<
Conversion
> UnderlyingConversions
416
default(ImmutableArray<
Conversion
>);
437
foreach (
var
underlying in underlyingConversions)
483
foreach (
var
underlying in underlyingConversions)
601
foreach (
var
conv in nestedConversions)
1120
internal
Conversion
UserDefinedFromConversion
1125
return best == null ?
Conversion
.NoConversion : best.SourceConversion;
1132
internal
Conversion
UserDefinedToConversion
1137
return best == null ?
Conversion
.NoConversion : best.TargetConversion;
1202
/// This is a lossy conversion; it is not possible to recover the original <see cref="
Conversion
"/>
1222
/// Determines whether the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object.
1224
/// <param name="obj">The <see cref="
Conversion
"/> object to compare with the current <see cref="
Conversion
"/> object.</param>
1225
/// <returns>true if the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object; otherwise, false.</returns>
1228
return obj is
Conversion
&& this.Equals((
Conversion
)obj);
1232
/// Determines whether the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object.
1234
/// <param name="other">The <see cref="
Conversion
"/> object to compare with the current <see cref="
Conversion
"/> object.</param>
1235
/// <returns>true if the specified <see cref="
Conversion
"/> object is equal to the current <see cref="
Conversion
"/> object; otherwise, false.</returns>
1236
public bool Equals(
Conversion
other)
1242
/// Returns a hash code for the current <see cref="
Conversion
"/> object.
1244
/// <returns>A hash code for the current <see cref="
Conversion
"/> object.</returns>
1251
/// Returns true if the specified <see cref="
Conversion
"/> objects are equal and false otherwise.
1253
/// <param name="left">The first <see cref="
Conversion
"/> object.</param>
1254
/// <param name="right">The second <see cref="
Conversion
"/> object.</param>
1256
public static bool operator ==(
Conversion
left,
Conversion
right)
1262
/// Returns false if the specified <see cref="
Conversion
"/> objects are equal and true otherwise.
1264
/// <param name="left">The first <see cref="
Conversion
"/> object.</param>
1265
/// <param name="right">The second <see cref="
Conversion
"/> object.</param>
1267
public static bool operator !=(
Conversion
left,
Conversion
right)
1277
TreeDumperNode Dump(
Conversion
self)
Binder\Semantics\Conversions\Conversions.cs (41)
44
public override
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
49
return
Conversion
.NoConversion;
55
return
Conversion
.NoConversion;
107
var
conversion = (resolution.IsEmpty || resolution.HasAnyErrors) ?
108
Conversion
.NoConversion :
115
public override
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
124
var
conversion = (resolution.IsEmpty || resolution.HasAnyErrors) ?
125
Conversion
.NoConversion :
131
protected override
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
137
return
Conversion
.NoConversion;
142
return
Conversion
.InterpolatedStringHandler;
147
return
Conversion
.NoConversion;
155
?
Conversion
.InterpolatedString :
Conversion
.NoConversion;
159
protected override
Conversion
GetCollectionExpressionConversion(
170
return
Conversion
.NoConversion;
179
return
Conversion
.NoConversion;
196
return
Conversion
.NoConversion;
202
return
Conversion
.NoConversion;
206
var builder = ArrayBuilder<
Conversion
>.GetInstance(elements.Length);
209
Conversion
elementConversion = convertElement(element, elementType, ref useSiteInfo);
213
return
Conversion
.NoConversion;
219
return
Conversion
.CreateCollectionExpressionConversion(collectionTypeKind, elementType, constructor, isExpanded, builder.ToImmutableAndFree());
221
Conversion
convertElement(BoundNode element, TypeSymbol elementType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
231
internal
Conversion
GetCollectionExpressionSpreadElementConversion(
239
return
Conversion
.NoConversion;
247
protected override
Conversion
AnalyzeImplicitUnionConversions(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
253
return
Conversion
.NoConversion;
408
public
Conversion
MethodGroupConversion(SyntaxNode syntax, MethodGroup methodGroup, NamedTypeSymbol delegateType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
427
var
conversion = ToConversion(result, methodGroup, delegateType.DelegateInvokeMethod.ParameterCount);
459
private static
Conversion
ToConversion(OverloadResolutionResult<MethodSymbol> result, MethodGroup methodGroup, int parameterCount)
479
return
Conversion
.NoConversion;
488
return
Conversion
.NoConversion;
495
return
Conversion
.NoConversion;
500
return
Conversion
.NoConversion;
520
public override
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
528
var
pointerConversion = ClassifyImplicitConversionFromType(sourceAsPointer, destination, ref useSiteInfo);
532
return
Conversion
.MakeStackAllocToPointerType(pointerConversion);
540
var
spanConversion = ClassifyImplicitConversionFromType(spanType_T, destination, ref useSiteInfo);
544
return
Conversion
.MakeStackAllocToSpanType(spanConversion);
550
return
Conversion
.NoConversion;
Binder\Semantics\Conversions\ConversionsBase.cs (223)
67
public abstract
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
69
public abstract
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
71
public abstract
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
75
protected abstract
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
78
protected abstract
Conversion
GetCollectionExpressionConversion(BoundUnconvertedCollectionExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
98
public
Conversion
ClassifyImplicitConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
109
return
Conversion
.Identity;
112
Conversion
conversion = ClassifyImplicitBuiltInConversionFromExpression(sourceExpression, sourceType, destination, ref useSiteInfo);
121
Conversion
fastConversion = FastClassifyConversion(sourceType, destination);
142
return
Conversion
.FunctionType;
169
public
Conversion
ClassifyImplicitConversionFromType(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
177
return
Conversion
.Identity;
181
Conversion
fastConversion = FastClassifyConversion(source, destination);
184
return fastConversion.IsImplicit ? fastConversion :
Conversion
.NoConversion;
188
Conversion
conversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
204
public
Conversion
ClassifyImplicitConversionFromTypeWhenNeitherOrBothFunctionTypes(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
217
Conversion
.FunctionType :
218
Conversion
.NoConversion;
222
return
Conversion
.NoConversion;
234
public
Conversion
ClassifyConversionFromExpressionType(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
242
return
Conversion
.ImplicitDynamic;
248
private static bool TryGetVoidConversion(TypeSymbol source, TypeSymbol destination, out
Conversion
conversion)
259
conversion =
Conversion
.Identity;
266
conversion =
Conversion
.NoConversion;
283
public
Conversion
ClassifyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false)
289
if (TryGetVoidConversion(sourceExpression.Type, destination, out
var
conversion))
299
var
result = ClassifyImplicitConversionFromExpression(sourceExpression, destination, ref useSiteInfo);
317
public
Conversion
ClassifyConversionFromType(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false)
322
if (TryGetVoidConversion(source, destination, out
var
voidConversion))
333
Conversion
fastConversion = FastClassifyConversion(source, destination);
340
Conversion
conversion1 = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
347
Conversion
conversion = GetImplicitUserDefinedOrUnionConversion(source, destination, ref useSiteInfo);
375
private
Conversion
ClassifyConversionFromExpressionForCast(BoundExpression source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
381
Conversion
implicitConversion = ClassifyImplicitConversionFromExpression(source, destination, ref useSiteInfo);
387
Conversion
explicitConversion = ClassifyExplicitOnlyConversionFromExpression(source, destination, isChecked: isChecked, ref useSiteInfo, forCast: true);
429
private
Conversion
ClassifyConversionFromTypeForCast(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
435
Conversion
fastConversion = FastClassifyConversion(source, destination);
441
Conversion
implicitBuiltInConversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
447
Conversion
explicitBuiltInConversion = ClassifyExplicitBuiltInOnlyConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast: true);
474
var
conversion = GetExplicitUserDefinedConversion(source, destination, isChecked: isChecked, ref useSiteInfo);
488
public static
Conversion
FastClassifyConversion(TypeSymbol source, TypeSymbol target)
493
return
Conversion
.GetTrivialConversion(convKind);
496
return
Conversion
.MakeNullableConversion(convKind, FastClassifyConversion(source.StrippedType(), target.StrippedType()));
499
public
Conversion
ClassifyBuiltInConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
505
Conversion
fastConversion = FastClassifyConversion(source, destination);
512
Conversion
conversion = ClassifyImplicitBuiltInConversionSlow(source, destination, ref useSiteInfo);
529
public
Conversion
ClassifyStandardConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
541
public
Conversion
ClassifyStandardConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
569
Conversion
conversion = ClassifyStandardImplicitConversion(sourceExpression, source, destination, ref useSiteInfo);
580
return
Conversion
.NoConversion;
605
private
Conversion
ClassifyStandardImplicitConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
642
Conversion
conversion = ClassifyImplicitBuiltInConversionFromExpression(sourceExpression, source, destination, ref useSiteInfo);
656
return
Conversion
.NoConversion;
658
static bool isImplicitCollectionExpressionConversion(
Conversion
conversion)
695
private
Conversion
ClassifyStandardImplicitConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
697
var
conversion = classifyConversion(source, destination, ref useSiteInfo);
701
Conversion
classifyConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
708
return
Conversion
.Identity;
713
return
Conversion
.ImplicitNumeric;
716
var
nullableConversion = ClassifyImplicitNullableConversion(source, destination, ref useSiteInfo);
725
return
Conversion
.NoConversion;
730
return
Conversion
.ImplicitReference;
735
return
Conversion
.Boxing;
740
return
Conversion
.PointerToVoid;
745
return
Conversion
.ImplicitPointer;
748
var
tupleConversion = ClassifyImplicitTupleConversion(source, destination, ref useSiteInfo);
756
return
Conversion
.ImplicitSpan;
759
return
Conversion
.NoConversion;
763
private
Conversion
ClassifyImplicitBuiltInConversionSlow(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
770
return
Conversion
.NoConversion;
773
Conversion
conversion = ClassifyStandardImplicitConversion(source, destination, ref useSiteInfo);
779
return
Conversion
.NoConversion;
782
private
Conversion
GetImplicitUserDefinedOrUnionConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
785
var
result = new Conversion(conversionResult, isImplicit: true);
792
Conversion
unionConversion = AnalyzeImplicitUnionConversions(sourceExpression, source, destination, ref useSiteInfo);
802
private
Conversion
GetImplicitUserDefinedOrUnionConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
807
private
Conversion
ClassifyExplicitBuiltInOnlyConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
814
return
Conversion
.NoConversion;
828
return
Conversion
.IntPtr;
833
return
Conversion
.ExplicitEnumeration;
836
var
nullableConversion = ClassifyExplicitNullableConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
844
return (source.Kind == SymbolKind.DynamicType) ?
Conversion
.ExplicitDynamic :
Conversion
.ExplicitReference;
849
return
Conversion
.Unboxing;
852
var
tupleConversion = ClassifyExplicitTupleConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
860
return
Conversion
.PointerToPointer;
865
return
Conversion
.PointerToInteger;
870
return
Conversion
.IntegerToPointer;
875
return
Conversion
.ExplicitDynamic;
880
return
Conversion
.ExplicitSpan;
883
return
Conversion
.NoConversion;
886
private
Conversion
GetExplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
892
private
Conversion
GetExplicitUserDefinedConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
897
private
Conversion
DeriveStandardExplicitFromOppositeStandardImplicitConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
899
var
oppositeConversion = ClassifyStandardImplicitConversion(destination, source, ref useSiteInfo);
900
Conversion
impliedExplicitConversion;
905
impliedExplicitConversion =
Conversion
.Identity;
908
impliedExplicitConversion =
Conversion
.ExplicitNumeric;
911
impliedExplicitConversion =
Conversion
.ExplicitReference;
914
impliedExplicitConversion =
Conversion
.Unboxing;
917
impliedExplicitConversion =
Conversion
.NoConversion;
920
impliedExplicitConversion =
Conversion
.PointerToPointer;
926
impliedExplicitConversion =
Conversion
.NoConversion;
932
var
underlyingConversion = DeriveStandardExplicitFromOppositeStandardImplicitConversion(strippedSource, strippedDestination, ref useSiteInfo);
937
Conversion
.MakeNullableConversion(ConversionKind.ExplicitNullable, underlyingConversion) :
938
Conversion
.NoConversion;
943
impliedExplicitConversion =
Conversion
.NoConversion;
1024
private static bool ExplicitConversionMayDifferFromImplicit(
Conversion
implicitConversion)
1044
private
Conversion
ClassifyImplicitBuiltInConversionFromExpression(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1053
return
Conversion
.ImplicitDynamic;
1060
return
Conversion
.NoConversion;
1065
return
Conversion
.ImplicitEnumeration;
1068
var
constantConversion = ClassifyImplicitConstantExpressionConversion(sourceExpression, destination);
1077
var
nullLiteralConversion = ClassifyNullLiteralConversion(sourceExpression, destination);
1085
return
Conversion
.DefaultLiteral;
1090
var
innerConversion = ClassifyImplicitBuiltInConversionFromExpression(innerExpression, innerExpression.Type, destination, ref useSiteInfo);
1098
var
tupleConversion = ClassifyImplicitTupleLiteralConversion((BoundTupleLiteral)sourceExpression, destination, ref useSiteInfo);
1108
return
Conversion
.AnonymousFunction;
1113
Conversion
methodGroupConversion = GetMethodGroupDelegateConversion((BoundMethodGroup)sourceExpression, destination, ref useSiteInfo);
1122
Conversion
interpolatedStringConversion = GetInterpolatedStringConversion(sourceExpression, destination, ref useSiteInfo);
1129
var
stackAllocConversion = GetStackAllocConversion((BoundStackAllocArrayCreation)sourceExpression, destination, ref useSiteInfo);
1137
var
addressOfConversion = GetMethodGroupFunctionPointerConversion(((BoundUnconvertedAddressOfOperator)sourceExpression).Operand, funcPtrType, ref useSiteInfo);
1145
return
Conversion
.ImplicitThrow;
1148
return
Conversion
.ObjectCreation;
1151
var
collectionExpressionConversion = GetImplicitCollectionExpressionConversion((BoundUnconvertedCollectionExpression)sourceExpression, destination, ref useSiteInfo);
1167
return
Conversion
.InlineArray;
1170
return
Conversion
.NoConversion;
1174
private
Conversion
GetImplicitCollectionExpressionConversion(BoundUnconvertedCollectionExpression collectionExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1176
var
collectionExpressionConversion = GetCollectionExpressionConversion(collectionExpression, destination, ref useSiteInfo);
1188
var
underlyingConversion = GetCollectionExpressionConversion(collectionExpression, underlyingDestination, ref useSiteInfo);
1195
return
Conversion
.NoConversion;
1199
private
Conversion
GetSwitchExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1207
return
Conversion
.NoConversion;
1209
var innerConversions = ArrayBuilder<
Conversion
>.GetInstance(switchExpression.SwitchArms.Length);
1212
var
nestedConversion = this.ClassifyImplicitConversionFromExpression(arm.Value, destination, ref useSiteInfo);
1216
return
Conversion
.NoConversion;
1222
return
Conversion
.MakeSwitchExpression(innerConversions.ToImmutableAndFree());
1224
return
Conversion
.NoConversion;
1228
private
Conversion
GetConditionalExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1233
return
Conversion
.NoConversion;
1235
var
trueConversion = this.ClassifyImplicitConversionFromExpression(conditionalOperator.Consequence, destination, ref useSiteInfo);
1237
return
Conversion
.NoConversion;
1239
var
falseConversion = this.ClassifyImplicitConversionFromExpression(conditionalOperator.Alternative, destination, ref useSiteInfo);
1241
return
Conversion
.NoConversion;
1243
return
Conversion
.MakeConditionalExpression(ImmutableArray.Create(trueConversion, falseConversion));
1246
private static
Conversion
ClassifyNullLiteralConversion(BoundExpression source, TypeSymbol destination)
1253
return
Conversion
.NoConversion;
1261
return
Conversion
.NullLiteral;
1271
return
Conversion
.ImplicitReference;
1279
return
Conversion
.NullToPointer;
1282
return
Conversion
.NoConversion;
1285
private static
Conversion
ClassifyImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination)
1289
return
Conversion
.ImplicitConstant;
1301
return
Conversion
.ImplicitNullableWithImplicitConstantUnderlying;
1305
return
Conversion
.NoConversion;
1308
private
Conversion
ClassifyImplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1312
var
tupleConversion = GetImplicitTupleLiteralConversion(source, destination, ref useSiteInfo);
1324
var
underlyingTupleConversion = GetImplicitTupleLiteralConversion(source, underlyingDestination, ref useSiteInfo);
1331
return
Conversion
.NoConversion;
1334
private
Conversion
ClassifyExplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
1338
var
tupleConversion = GetExplicitTupleLiteralConversion(source, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1352
var
underlyingTupleConversion = GetExplicitTupleLiteralConversion(source, underlyingDestination, isChecked: isChecked, ref useSiteInfo, forCast);
1361
return
Conversion
.NoConversion;
1416
private
Conversion
ClassifyExplicitOnlyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
1427
Conversion
tupleConversion = ClassifyExplicitTupleLiteralConversion((BoundTupleLiteral)sourceExpression, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1438
Conversion
fastConversion = FastClassifyConversion(sourceType, destination);
1445
var
conversion = ClassifyExplicitBuiltInOnlyConversion(sourceType, destination, isChecked: isChecked, ref useSiteInfo, forCast);
1734
internal
Conversion
ClassifyImplicitUserDefinedConversionForV6SwitchGoverningType(TypeSymbol sourceType, out TypeSymbol switchGoverningType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1766
internal
Conversion
GetCallerLineNumberConversion(TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1779
return
Conversion
.ImplicitEnumeration;
1782
var
constantConversion = ClassifyImplicitConstantExpressionConversion(intMaxValueLiteral, destination);
1799
Conversion
conversion = ClassifyStandardImplicitConversion(expectedAttributeType, destination, ref useSiteInfo);
1908
Conversion
conversion = ClassifyImplicitConversionFromType(source.Type, destination.Type, ref discardedUseSiteInfo);
1926
public
Conversion
ConvertExtensionMethodThisArg(TypeSymbol parameterType, TypeSymbol thisType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool isMethodGroupConversion)
1929
var
conversion = this.ClassifyImplicitExtensionMethodThisArgConversion(sourceExpressionOpt: null, thisType, parameterType, ref useSiteInfo, isMethodGroupConversion);
1930
return IsValidExtensionMethodThisArgConversion(conversion) ? conversion :
Conversion
.NoConversion;
1936
public
Conversion
ClassifyImplicitExtensionMethodThisArgConversion(BoundExpression sourceExpressionOpt, TypeSymbol sourceType, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool isMethodGroupConversion)
1946
return
Conversion
.Identity;
1951
return
Conversion
.Boxing;
1956
return
Conversion
.ImplicitReference;
1961
return
Conversion
.ImplicitSpan;
1970
var
tupleConversion = GetTupleLiteralConversion(
1987
var
tupleConversion = ClassifyTupleConversion(
1996
return
Conversion
.NoConversion;
2008
return
Conversion
.NoConversion;
2017
public static bool IsValidExtensionMethodThisArgConversion(
Conversion
conversion)
2030
foreach (
var
elementConversion in conversion.UnderlyingConversions)
2252
private
Conversion
ClassifyImplicitNullableConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2265
return
Conversion
.NoConversion;
2273
return
Conversion
.NoConversion;
2278
return
Conversion
.ImplicitNullableWithIdentityUnderlying;
2283
return
Conversion
.ImplicitNullableWithImplicitNumericUnderlying;
2286
var
tupleConversion = ClassifyImplicitTupleConversion(unwrappedSource, unwrappedDestination, ref useSiteInfo);
2292
return
Conversion
.NoConversion;
2295
private delegate
Conversion
ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2296
private delegate
Conversion
ClassifyConversionFromTypeDelegate(ConversionsBase conversions, TypeWithAnnotations source, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2298
private
Conversion
GetImplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2316
private
Conversion
GetExplicitTupleLiteralConversion(BoundTupleLiteral source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2334
private
Conversion
GetTupleLiteralConversion(
2350
return
Conversion
.NoConversion;
2357
var argumentConversions = ArrayBuilder<
Conversion
>.GetInstance(arguments.Length);
2361
var
result = classifyConversion(this, argument, targetElementTypes[i], isChecked: isChecked, ref useSiteInfo, forCast: forCast);
2365
return
Conversion
.NoConversion;
2374
private
Conversion
ClassifyImplicitTupleConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2383
Conversion
conversion = conversions.ClassifyImplicitConversionFromType(s.Type, d.Type, ref u);
2387
return
Conversion
.NoConversion;
2396
private
Conversion
ClassifyExplicitTupleConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2405
Conversion
conversion = conversions.ClassifyConversionFromType(s.Type, d.Type, isChecked: isChecked, ref u, forCast);
2409
return
Conversion
.NoConversion;
2418
private
Conversion
ClassifyTupleConversion(
2434
return
Conversion
.NoConversion;
2437
var nestedConversions = ArrayBuilder<
Conversion
>.GetInstance(sourceTypes.Length);
2440
var
conversion = classifyConversion(this, sourceTypes[i], destTypes[i], isChecked: isChecked, ref useSiteInfo, forCast);
2444
return
Conversion
.NoConversion;
2453
private
Conversion
ClassifyExplicitNullableConversion(TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
2468
return
Conversion
.NoConversion;
2476
return
Conversion
.ExplicitNullableWithIdentityUnderlying;
2481
return
Conversion
.ExplicitNullableWithImplicitNumericUnderlying;
2486
return
Conversion
.ExplicitNullableWithExplicitNumericUnderlying;
2489
var
tupleConversion = ClassifyExplicitTupleConversion(unwrappedSource, unwrappedDestination, isChecked: isChecked, ref useSiteInfo, forCast);
2497
return
Conversion
.ExplicitNullableWithExplicitEnumerationUnderlying;
2502
return
Conversion
.ExplicitNullableWithPointerToIntegerUnderlying;
2505
return
Conversion
.NoConversion;
Binder\Semantics\Conversions\TypeConversions.cs (5)
36
public override
Conversion
GetMethodGroupDelegateConversion(BoundMethodGroup source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
42
public override
Conversion
GetMethodGroupFunctionPointerConversion(BoundMethodGroup source, FunctionPointerTypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
48
public override
Conversion
GetStackAllocConversion(BoundStackAllocArrayCreation sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
54
protected override
Conversion
GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
60
protected override
Conversion
GetCollectionExpressionConversion(BoundUnconvertedCollectionExpression 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)
273
Conversion
fromConversion = EncompassingExplicitConversion(sourceExpression, source, convertsFrom, ref useSiteInfo);
274
Conversion
toConversion = EncompassingExplicitConversion(convertsTo, target, ref useSiteInfo);
325
Conversion
liftedFromConversion = EncompassingExplicitConversion(sourceExpression, source, nullableFrom, ref useSiteInfo);
326
Conversion
liftedToConversion = EncompassingExplicitConversion(nullableTo, target, ref useSiteInfo);
479
private
Conversion
EncompassingExplicitConversion(BoundExpression expr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
498
var
result = ClassifyStandardConversion(expr, a, b, ref useSiteInfo);
499
return result.IsEnumeration ?
Conversion
.NoConversion : result;
502
private
Conversion
EncompassingExplicitConversion(TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Conversions\UserDefinedImplicitConversions.cs (17)
302
Conversion
fromConversion = EncompassingImplicitConversion(sourceExpression, source, convertsFrom, ref useSiteInfo);
303
Conversion
toConversion = allowAnyTarget ?
Conversion
.Identity :
324
toConversion = allowAnyTarget ?
Conversion
.Identity :
350
Conversion
liftedFromConversion = EncompassingImplicitConversion(sourceExpression, source, nullableFrom, ref useSiteInfo);
351
Conversion
liftedToConversion = !allowAnyTarget ?
353
Conversion
.Identity;
594
private
Conversion
EncompassingImplicitConversion(BoundExpression aExpr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
605
var
result = ClassifyStandardImplicitConversion(aExpr, a, b, ref useSiteInfo);
606
return IsEncompassingImplicitConversionKind(result.Kind) ? result :
Conversion
.NoConversion;
609
private
Conversion
EncompassingImplicitConversion(TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
984
protected virtual
Conversion
AnalyzeImplicitUnionConversions(
996
return
Conversion
.NoConversion;
1006
return
Conversion
.NoConversion;
1019
return
Conversion
.CreateUnionConversion(UserDefinedConversionResult.Valid(u, best));
1037
Conversion
fromConversion = EncompassingImplicitConversion(sourceExpression, source, convertsFrom, ref useSiteInfo);
1038
Conversion
targetConversion = EncompassingImplicitConversion(declaringType, target, ref useSiteInfo);
Binder\Semantics\Operators\BinaryOperatorAnalysisResult.cs (8)
17
public readonly
Conversion
LeftConversion;
18
public readonly
Conversion
RightConversion;
22
private BinaryOperatorAnalysisResult(OperatorAnalysisResultKind kind, BinaryOperatorSignature signature,
Conversion
leftConversion,
Conversion
rightConversion)
55
public static BinaryOperatorAnalysisResult Applicable(BinaryOperatorSignature signature,
Conversion
leftConversion,
Conversion
rightConversion)
60
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 (6)
741
var
convLeft = getOperandConversionForAllowByRefLikeNullCheck(isChecked, left, op.LeftType, ref useSiteInfo);
742
var
convRight = getOperandConversionForAllowByRefLikeNullCheck(isChecked, right, op.RightType, ref useSiteInfo);
790
Conversion
getOperandConversionForAllowByRefLikeNullCheck(bool isChecked, BoundExpression operand, TypeSymbol objectType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
792
return (operand.Type is TypeParameterSymbol { AllowsRefLikeType: true }) ?
Conversion
.Boxing : Conversions.ClassifyConversionFromExpression(operand, objectType, isChecked: isChecked, ref useSiteInfo);
813
var
convLeft = Conversions.ClassifyConversionFromExpression(left, op.LeftType, isChecked: isChecked, ref useSiteInfo);
814
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)
39
public static UnaryOperatorAnalysisResult Applicable(UnaryOperatorSignature signature,
Conversion
conversion)
44
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)
534
var
conversion = Conversions.ClassifyConversionFromExpression(operand, op.OperandType, isChecked: isChecked, ref useSiteInfo);
Binder\Semantics\OverloadResolution\MemberAnalysisResult.cs (10)
26
private readonly ImmutableArray<
Conversion
> _conversionsOpt;
27
public ImmutableArray<
Conversion
> ConversionsOpt
123
ImmutableArray<
Conversion
> conversionsOpt = default,
154
public
Conversion
ConversionForArg(int arg)
158
return
Conversion
.Identity;
323
public static MemberAnalysisResult BadArgumentConversions(ImmutableArray<int> argsToParamsOpt, BitVector badArguments, ImmutableArray<
Conversion
> conversions, TypeWithAnnotations definitionParamsElementTypeOpt, TypeWithAnnotations paramsElementTypeOpt)
378
public static MemberAnalysisResult NormalForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<
Conversion
> conversions, bool hasAnyRefOmittedArgument)
383
public static MemberAnalysisResult ExpandedForm(ImmutableArray<int> argsToParamsOpt, ImmutableArray<
Conversion
> conversions, bool hasAnyRefOmittedArgument, TypeWithAnnotations definitionParamsElementType, TypeWithAnnotations paramsElementType)
461
static ImmutableArray<
Conversion
> adjustConversions(ImmutableArray<
Conversion
> conversions)
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (1)
3051
Conversion
conversion = conversions.ClassifyImplicitConversionFromTypeWhenNeitherOrBothFunctionTypes(source, destination, ref useSiteInfo);
Binder\Semantics\OverloadResolution\OverloadResolution.cs (37)
2634
var
c1 = m1.Result.ConversionForArg(i);
2635
var
c2 = m2.Result.ConversionForArg(i);
2887
Conversion
conv1,
2890
Conversion
conv2,
2940
private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1,
Conversion
conv1, TypeSymbol t2,
Conversion
conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
3049
TypeSymbol t1,
Conversion
conv1,
3050
TypeSymbol t2,
Conversion
conv2,
3083
TypeSymbol t1, CollectionExpressionTypeKind kind1, TypeSymbol elementType1, ImmutableArray<
Conversion
> underlyingElementConversions1,
3084
TypeSymbol t2, CollectionExpressionTypeKind kind2, TypeSymbol elementType2, ImmutableArray<
Conversion
> underlyingElementConversions2,
3135
var
conversionToE1 = underlyingElementConversions1[i];
3136
var
conversionToE2 = underlyingElementConversions2[i];
3463
return BetterConversionTargetCore(null, type1, default(
Conversion
), type2, default(
Conversion
), ref useSiteInfo, out okToDowngradeToNeither, betterConversionTargetRecursionLimit - 1);
3469
Conversion
conv1,
3471
Conversion
conv2,
3481
Conversion
conv1,
3483
Conversion
conv2,
3673
private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType,
Conversion
conv)
3766
currentResult == BetterConversionTargetCore(null, type1, default(
Conversion
), type2, default(
Conversion
), ref useSiteInfo, out _, BetterConversionTargetRecursionLimit));
4547
ArrayBuilder<
Conversion
> conversions = null;
4552
Conversion
conversion;
4559
conversion =
Conversion
.Identity;
4569
conversion =
Conversion
.NoConversion;
4660
conversions = ArrayBuilder<
Conversion
>.GetInstance(paramCount);
4661
conversions.AddMany(
Conversion
.Identity, argumentPosition);
4672
var conversionsArray = conversions != null ? conversions.ToImmutableAndFree() : default(ImmutableArray<
Conversion
>);
4694
private
Conversion
CheckArgumentForApplicability(
4716
return
Conversion
.NoConversion;
4728
return
Conversion
.ImplicitDynamic;
4739
return
Conversion
.Identity;
4744
var
conversion = forExtensionMethodThisArg ?
4748
Conversion
.ImplicitDynamic);
4755
return
Conversion
.NoConversion;
4763
return
Conversion
.Identity;
4767
return
Conversion
.NoConversion;
Binder\SwitchBinder.cs (2)
258
Conversion
conversion = Conversions.ClassifyConversionFromExpression(caseExpression, SwitchGoverningType, isChecked: CheckOverflowAtRuntime, ref useSiteInfo);
434
Conversion
conversion = binder.Conversions.ClassifyImplicitUserDefinedConversionForV6SwitchGoverningType(switchGoverningType, out resultantGoverningType, ref useSiteInfo);
BoundTree\BoundConversion.cs (1)
171
var
sourceConversion = ConversionGroupOpt.Conversion.BestUnionConversionAnalysis.SourceConversion;
BoundTree\BoundExpressionExtensions.cs (2)
250
public static
Conversion
GetConversion(this BoundExpression boundNode)
259
return
Conversion
.Identity;
BoundTree\BoundNode.cs (3)
443
public static
Conversion
GetConversion(BoundExpression? conversion, BoundValuePlaceholder? placeholder)
448
return
Conversion
.NoConversion;
533
return
Conversion
.Identity;
BoundTree\Constructors.cs (3)
335
public static BoundConversion SynthesizedNonUserDefined(SyntaxNode syntax, BoundExpression operand,
Conversion
conversion, TypeSymbol type, ConstantValue? constantValueOpt = null)
359
Conversion
conversion,
387
Conversion
conversion,
BoundTree\ConversionGroup.cs (2)
19
internal ConversionGroup(
Conversion
conversion, TypeWithAnnotations explicitType = default)
34
internal readonly
Conversion
Conversion;
Compilation\BuiltInOperators.cs (2)
933
var
leftConversion = Conversions.ClassifyConversionFromType(leftType, rightType, isChecked: false, ref useSiteInfo);
939
var
rightConversion = Conversions.ClassifyConversionFromType(rightType, leftType, isChecked: false, ref useSiteInfo);
Compilation\CSharpCompilation.cs (6)
2392
/// <returns>A <see cref="
Conversion
"/> that classifies the conversion from the
2394
public
Conversion
ClassifyConversion(ITypeSymbol source, ITypeSymbol destination)
2440
return
Conversion
.NoConversion;
2451
return
Conversion
.NullLiteral;
2454
return
Conversion
.NoConversion;
2457
Conversion
result = ClassifyConversion(sourceType, destination);
Compilation\CSharpSemanticModel.cs (23)
982
return new CSharpTypeInfo(declarationTypeSymbol, declarationTypeSymbol, nullabilityInfo, nullabilityInfo,
Conversion
.Identity);
986
return new CSharpTypeInfo(declarationInfo.Type, declarationInfo.Type, declarationInfo.Nullability, declarationInfo.Nullability,
Conversion
.Identity);
1024
public
Conversion
GetConversion(SyntaxNode expression, CancellationToken cancellationToken = default(CancellationToken))
1085
public
Conversion
GetSpeculativeConversion(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
2045
return new CSharpTypeInfo(member.Type, member.Type, nullability: default, convertedNullability: default,
Conversion
.Identity);
2099
Conversion
conversion;
2148
conversion = convertedSwitchConversion.IsValid ? convertedSwitchConversion :
Conversion
.NoConversion;
2155
conversion =
Conversion
.Identity;
2166
conversion =
Conversion
.MakeConditionalExpression(ImmutableArray<
Conversion
>.Empty);
2173
conversion =
Conversion
.Identity;
2196
conversion =
Conversion
.Identity;
2204
conversion =
Conversion
.Identity;
2249
conversion =
Conversion
.Identity;
2268
conversion =
Conversion
.Identity;
2366
return new CSharpTypeInfo(type, type, default, default,
Conversion
.Identity);
2819
public abstract
Conversion
ClassifyConversion(ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false);
2837
public
Conversion
ClassifyConversion(int position, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
2849
return
Conversion
.NoConversion;
2875
return
Conversion
.NoConversion;
2890
internal abstract
Conversion
ClassifyConversionForCast(ExpressionSyntax expression, TypeSymbol destination);
2906
internal
Conversion
ClassifyConversionForCast(int position, ExpressionSyntax expression, TypeSymbol destination)
2927
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)
65
public
Conversion
ElementConversion { get; }
70
public
Conversion
CurrentConversion { get; }
83
Conversion
elementConversion,
84
Conversion
currentConversion)
Compilation\MemberSemanticModel.cs (5)
430
public override
Conversion
ClassifyConversion(
445
return
Conversion
.NoConversion;
479
return
Conversion
.NoConversion;
487
internal override
Conversion
ClassifyConversionForCast(
503
return
Conversion
.NoConversion;
Compilation\SpeculativeSemanticModelWithMemberModel.cs (2)
220
public override
Conversion
ClassifyConversion(
228
internal override
Conversion
ClassifyConversionForCast(
Compilation\SyntaxTreeSemanticModel.cs (5)
520
public override
Conversion
ClassifyConversion(ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
527
return
Conversion
.NoConversion;
552
return
Conversion
.NoConversion;
558
internal override
Conversion
ClassifyConversionForCast(ExpressionSyntax expression, TypeSymbol destination)
573
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 (2)
125
Conversion
c = F.ClassifyEmitConversion(boundLocal, manager.System_Object);
277
Conversion
.ImplicitReference);
Compiler\MethodBodySynthesizer.cs (4)
128
Conversion
.ExplicitReference,
158
Conversion
.ExplicitReference,
405
conversion:
Conversion
.ExplicitReference,
470
conversion:
Conversion
.ExplicitReference,
Compiler\MethodBodySynthesizer.Lowered.cs (2)
102
Conversion
.ImplicitNumeric),
191
Conversion
.ImplicitNumeric),
CSharpExtensions.cs (23)
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;
856
/// Gets the underlying element <see cref="
Conversion
"/> information from this <see cref="ISpreadOperation"/>.
861
public static
Conversion
GetElementConversion(this ISpreadOperation spread)
870
return (
Conversion
)((SpreadOperation)spread).ElementConversionConvertible;
878
public static
Conversion
GetSpeculativeConversion(this SemanticModel? semanticModel, int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
887
return
Conversion
.NoConversion;
1330
public static
Conversion
ClassifyConversion(this SemanticModel? semanticModel, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
1341
return
Conversion
.NoConversion;
1350
public static
Conversion
ClassifyConversion(this SemanticModel? semanticModel, int position, ExpressionSyntax expression, ITypeSymbol destination, bool isExplicitInSource = false)
1359
return
Conversion
.NoConversion;
FlowAnalysis\AbstractFlowPass.cs (2)
3058
BoundConversion { Conversion:
Conversion
conversion, Operand: BoundConditionalAccess ca } when CanPropagateStateWhenNotNull(conversion) => ca,
3080
protected static bool CanPropagateStateWhenNotNull(
Conversion
conversion)
FlowAnalysis\NullableWalker.cs (71)
272
/// The delegate is invoked by <see cref="VisitConversion(BoundConversion, BoundExpression,
Conversion
, TypeWithAnnotations, TypeWithState, bool, bool, bool, AssignmentKind, ParameterSymbol, bool, bool, bool, bool, Optional<LocalState>,bool, int, Location, ArrayBuilder<VisitResult>)"/>.
2864
var
conversion = conversionsWithoutNullability.ClassifyImplicitConversionFromType(actualType, targetType, ref discardedUseSiteInfo);
4086
Conversion
.Identity, // as only a nullable reinference is being done we expect an identity conversion
5097
var conversions = ArrayBuilder<
Conversion
>.GetInstance(n);
5103
(BoundExpression expressionNoConversion,
Conversion
conversion) = RemoveConversion(expression, includeExplicitConversions: false);
5146
_ = VisitConversion(conversionOpt: null, conversionOperand: expressionsNoConversions[i],
Conversion
.Identity, targetTypeWithNullability: inferredType, operandType: expressionTypes[i],
5248
Conversion
conversion = conversionsWithoutNullability.ClassifyConversionFromExpression(placeholder, bestType, isChecked: returns[i].isChecked, ref discardedUseSiteInfo);
5443
leftConversion =
Conversion
.Identity;
5463
leftConversion =
Conversion
.Identity;
5565
Conversion
leftConversion,
5568
Conversion
rightConversion,
5583
Conversion
leftConversion,
5587
Conversion
rightConversion,
5620
Conversion
conversion,
5721
var
conversion = _conversions.ClassifyBuiltInConversion(derivedType, baseType, isChecked: false, ref discardedUseSiteInfo);
5731
BoundExpression expr, BoundExpression operand,
Conversion
conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted,
5755
private void VisitBinaryOperatorOperandConversionAndPostConditions(BoundExpression expr, BoundExpression operand,
Conversion
conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted)
5770
Conversion
leftConversion,
6216
var
conversion = GenerateConversionForConditionalOperator(node.LeftOperand, leftType, rightType, reportMismatch: true, isChecked: node.Checked);
6490
(var consequence,
var
consequenceConversion, consequenceRValue) = visitConditionalOperand(consequenceState, originalConsequence);
6495
(var alternative,
var
alternativeConversion, alternativeRValue) = visitConditionalOperand(alternativeState, originalAlternative);
6570
TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence,
Conversion
consequenceConversion, bool consequenceEndReachable,
6571
BoundExpression alternative,
Conversion
alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped)
6621
Conversion
consequenceConversion,
6624
Conversion
alternativeConversion,
6637
(BoundExpression,
Conversion
, TypeWithState) visitConditionalOperand(LocalState state, BoundExpression operand)
6639
Conversion
conversion;
6670
Conversion
conversion,
7542
(ImmutableArray<BoundExpression> argumentsNoConversions, ImmutableArray<
Conversion
> conversions) = RemoveArgumentConversions(arguments, refKindsOpt);
7556
ImmutableArray<
Conversion
> conversions,
7658
conversions.IsDefault || i >= conversions.Length ?
Conversion
.Identity : conversions[i],
7746
ImmutableArray<
Conversion
> conversions,
8152
Conversion
conversion,
8566
private (ImmutableArray<BoundExpression> arguments, ImmutableArray<
Conversion
> conversions) RemoveArgumentConversions(
8571
var conversions = default(ImmutableArray<
Conversion
>);
8575
var conversionsBuilder = ArrayBuilder<
Conversion
>.GetInstance(n);
8581
var
conversion =
Conversion
.Identity;
8968
private static (BoundExpression expression,
Conversion
conversion) RemoveConversion(BoundExpression expr, bool includeExplicitConversions)
8987
return (expr,
Conversion
.Identity);
9002
return (expr, group?.Conversion ??
Conversion
.Identity);
9006
private
Conversion
GenerateConversionForConditionalOperator(BoundExpression sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool reportMismatch, bool isChecked)
9008
var
conversion = GenerateConversion(_conversions, sourceExpression, sourceType, destinationType, fromExplicitCast: false, extensionMethodThisArgument: false, isChecked: isChecked);
9017
private
Conversion
GenerateConversion(Conversions conversions, BoundExpression? sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool fromExplicitCast, bool extensionMethodThisArgument, bool isChecked)
9201
(BoundExpression operand,
Conversion
conversion) = RemoveConversion(node, includeExplicitConversions: true);
9256
(BoundExpression operand,
Conversion
conversion) = RemoveConversion(expr, includeExplicitConversions: false);
9267
Conversion
conversion, TypeWithState operandType,
9299
Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand,
Conversion
conversion, TypeWithState operandType)
9452
Conversion
conversion,
9481
void trackConvertedValue(FieldSymbol targetField,
Conversion
conversion, FieldSymbol valueField)
9765
Conversion
conversion,
9799
conversion =
Conversion
.MakeNullableConversion(ConversionKind.ImplicitNullable,
Conversion
.Identity);
10125
Conversion
generated = GenerateConversion(_conversions, conversionOperand, operandType.Type, targetType, fromExplicitCast, extensionMethodThisArgument, isChecked: conversionOpt?.Checked ?? false);
10134
Conversion
generated = GenerateConversion(_conversions, conversionOperand, operandType.Type, targetType, fromExplicitCast, extensionMethodThisArgument, isChecked: conversionOpt?.Checked ?? false);
10386
Conversion
conversion,
10531
Conversion
conversion,
10772
var
conversion = _conversions.ClassifyStandardConversion(operandType.Type, targetType.Type, ref discardedUseSiteInfo);
11056
CheckExtensionMethodThisNullability(receiverOpt,
Conversion
.Identity, receiverParameter, receiverType);
11368
private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables,
Conversion
conversion, BoundExpression right, TypeWithState? rightResultOpt = null)
11382
private void VisitDeconstructMethodArguments(ArrayBuilder<DeconstructionVariable> variables,
Conversion
conversion, BoundExpression right, TypeWithState? rightResultOpt)
11439
var
argConversion = RemoveConversion(invocation.Arguments[0], includeExplicitConversions: false).conversion;
11450
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
11491
var
underlyingConversion = BoundNode.GetConversion(placeholderConversion, placeholder);
12311
Conversion
conversion,
12569
Conversion
conversion = BoundNode.GetConversion(node.ElementConversion, node.ElementPlaceholder);
12832
Conversion
leftConversion =
Conversion
.Identity;
12870
leftConversion =
Conversion
.Identity;
12900
void afterLeftChildOfBoundUserDefinedConditionalLogicalOperatorHasBeenVisited(BoundUserDefinedConditionalLogicalOperator binary, BoundExpression leftOperand,
Conversion
leftConversion)
13390
private void CheckExtensionMethodThisNullability(BoundExpression expr,
Conversion
conversion, ParameterSymbol parameter, TypeWithState result)
FlowAnalysis\NullableWalker_Patterns.cs (4)
1013
var conversions = ArrayBuilder<
Conversion
>.GetInstance(numSwitchArms);
1031
(BoundExpression expression,
Conversion
conversion) = RemoveConversion(arm.Value, includeExplicitConversions: false);
1088
ArrayBuilder<
Conversion
> conversions,
1133
ArrayBuilder<
Conversion
> conversions,
Generated\BoundNodes.xml.Generated.cs (3)
3003
public BoundConversion(SyntaxNode syntax, BoundExpression operand,
Conversion
conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, InConversionGroupFlags inConversionGroupFlags, TypeSymbol type, bool hasErrors = false)
3026
public
Conversion
Conversion { get; }
3037
public BoundConversion Update(BoundExpression operand,
Conversion
conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, InConversionGroupFlags inConversionGroupFlags, TypeSymbol type)
Lowering\AsyncRewriter\AsyncExceptionHandlerRewriter.cs (2)
619
Conversion
c = _F.ClassifyEmitConversion(carchTempRef, pendingCaughtExceptionType);
741
Conversion
c = _F.ClassifyEmitConversion(pendingExceptionRef, rewrittenSourceType);
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (3)
495
Conversion
c = F.ClassifyEmitConversion(awaiterTempRef, awaiterFieldType);
537
Conversion
c = F.ClassifyEmitConversion(awaiterFieldRef, awaiterTemp.Type);
606
F.Convert(notifyCompletionTemp.Type, F.Local(awaiterTemp),
Conversion
.ExplicitReference)),
Lowering\BoundTreeToDifferentEnclosingContextRewriter.cs (1)
171
var
conversion = node.Conversion;
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (8)
177
Conversion
c = _bound.ClassifyEmitConversion(result, ExpressionType);
776
Conversion
c = _bound.ClassifyEmitConversion(receiver, _objectType);
938
Conversion
c = _bound.ClassifyEmitConversion(fieldInfo, MemberInfoType);
948
Conversion
c = _bound.ClassifyEmitConversion(fieldInfo, MemberInfoType);
965
Conversion
c = _bound.ClassifyEmitConversion(fieldInfo, MemberInfoType);
975
Conversion
c = _bound.ClassifyEmitConversion(fieldInfo, MemberInfoType);
1112
Conversion
c = _bound.ClassifyEmitConversion(args, iEnumerableType);
1256
Conversion
c = _bound.ClassifyEmitConversion(node, _objectType);
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (1)
489
Conversion
c = _factory.ClassifyEmitConversion(value, parameter.Type);
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (4)
211
void visitConversion(
Conversion
conversion)
225
foreach (
var
underlying in conversion.UnderlyingConversions)
793
Conversion
c = _factory.ClassifyEmitConversion(input, int64Type);
803
Conversion
c = _factory.ClassifyEmitConversion(input, uint64Type);
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (6)
221
input = _factory.Convert(inputType, input,
Conversion
.Identity);
228
Conversion
conversion = _factory.Compilation.Conversions.ClassifyBuiltInConversion(inputType, output.Type, isChecked: false, ref useSiteInfo);
407
_factory.Convert(operandType, rewrittenExpr,
Conversion
.PointerToVoid),
408
_factory.Convert(operandType, new BoundLiteral(syntax, ConstantValue.Null, objectType),
Conversion
.NullToPointer),
454
Conversion
c = _factory.ClassifyEmitConversion(input, comparisonType);
519
_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)
746
var
conversion = _compilation.Conversions.ClassifyConversionFromExpression(loweredLeft, boolean, isChecked: false, ref useSiteInfo);
2052
MakeConversionNode(syntax, call,
Conversion
.ExplicitReference, type, @checked: false) :
2123
rewrittenExpr = MakeConversionNode(syntax, rewrittenExpr,
Conversion
.Boxing, objectType, @checked: false);
2389
: _factory.Convert(_factory.SpecialType(destinationType), numericOperand,
Conversion
.IntegerToPointer);
2406
numericOperand = _factory.Convert(nativeIntType, numericOperand,
Conversion
.IntegerToPointer, isChecked);
2418
numericOperand = _factory.Convert(longType, numericOperand,
Conversion
.ExplicitNumeric, isChecked);
2419
sizeOfExpression = _factory.Convert(longType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2431
sizeOfExpression = _factory.Convert(longType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2443
sizeOfExpression = _factory.Convert(ulongType, sizeOfExpression,
Conversion
.ExplicitNumeric, isChecked);
2462
: _factory.Convert(convertedMultiplicationResultType, multiplication,
Conversion
.IntegerToPointer); // NOTE: for some reason, dev10 doesn't check this conversion.
2492
Conversion
.PointerToInteger);
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (5)
29
private BoundExpression RewriteCollectionExpressionConversion(
Conversion
conversion, BoundCollectionExpression node)
206
Conversion
conversion;
560
Conversion
c = _factory.ClassifyEmitConversion(arrayOrList, collectionType);
763
var
spreadElementConversion = expressionStatement.Expression is BoundConversion { Conversion: var actualConversion } ? actualConversion :
Conversion
.Identity;
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (1)
901
Conversion
.Boxing,
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (44)
264
Conversion
conversion,
283
Conversion
.Identity,
300
Conversion
conversion,
427
conversion =
Conversion
.ExplicitNumeric;
478
var
outerConversion =
Conversion
.ImplicitNullableWithIdentityUnderlying;
644
Conversion
c = _factory.ClassifyEmitConversion(rewrittenOperand, parameterType);
808
Conversion
conversion = MakeConversion(rewrittenOperand, rewrittenType, @checked: @checked, _compilation, _diagnostics, acceptFailingConversion);
824
private static
Conversion
MakeConversion(
834
Conversion
conversion = compilation.Conversions.ClassifyConversionFromType(rewrittenOperand.Type, rewrittenType, isChecked: @checked, ref useSiteInfo);
858
Conversion
conversion,
1015
Conversion
conversion,
1103
Conversion
conversion,
1159
Conversion
conversion,
1184
rewrittenOperand = BoundConversion.SynthesizedNonUserDefined(syntax, rewrittenOperand,
Conversion
.ImplicitEnumeration, rewrittenOperandType);
1197
var
userDefinedConversion = new Conversion(conversionKind, method, false);
1212
Conversion
conversion,
1274
Conversion
conversion,
1306
Conversion
conversion,
1346
Conversion
conversion,
1408
Conversion
conversion,
1464
Conversion
conversion,
1471
Conversion
conv = TryMakeConversion(syntax, conversion, rewrittenOperand.Type, rewrittenType, @checked: @checked);
1554
Conversion
conversion)
1580
Conversion
conversion,
1836
var
conversion = new Conversion(conversionKind, method, isExtensionMethod: false);
1853
private
Conversion
TryMakeConversion(SyntaxNode syntax,
Conversion
conversion, TypeSymbol fromType, TypeSymbol toType, bool @checked)
1863
Conversion
fromConversion = TryMakeConversion(syntax, conversion.UserDefinedFromConversion, fromType, meth.Parameters[0].Type, @checked: @checked);
1866
return
Conversion
.NoConversion;
1869
Conversion
toConversion = TryMakeConversion(syntax, conversion.UserDefinedToConversion, meth.ReturnType, toType, @checked: @checked);
1872
return
Conversion
.NoConversion;
1884
var
resultConversion = new Conversion(result, conversion.IsImplicit);
1901
return
Conversion
.NoConversion;
1915
return
Conversion
.NoConversion;
1932
return
Conversion
.NoConversion;
1945
return
Conversion
.NoConversion;
1959
private
Conversion
TryMakeConversion(SyntaxNode syntax, TypeSymbol fromType, TypeSymbol toType, bool @checked)
1962
var
result = TryMakeConversion(syntax, _compilation.Conversions.ClassifyConversionFromType(fromType, toType, isChecked: @checked, ref useSiteInfo), fromType, toType, @checked: @checked);
1970
private
Conversion
TryMakeUserDefinedConversion(SyntaxNode syntax, MethodSymbol meth, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit)
1974
Conversion
fromConversion = TryMakeConversion(syntax, fromType, meth.Parameters[0].Type, @checked: @checked);
1977
return
Conversion
.NoConversion;
1980
Conversion
toConversion = TryMakeConversion(syntax, meth.ReturnType, toType, @checked: @checked);
1983
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_Event.cs (2)
312
Conversion
c0 = _factory.ClassifyEmitConversion(rewrittenReceiver, parameters0Type);
318
Conversion
c1 = _factory.ClassifyEmitConversion(rewrittenArgument, parameters1Type);
Lowering\LocalRewriter\LocalRewriter_FixedStatement.cs (1)
467
Conversion
.PinnedObjectToPointer);
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (5)
363
Conversion
receiverConversion = enumeratorType.IsStructType() ?
364
Conversion
.Boxing :
365
Conversion
.ImplicitReference;
505
private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method,
Conversion
receiverConversion, TypeSymbol convertedReceiverType)
1224
private static BoundExpression GetUnconvertedCollectionExpression(BoundForEachStatement node, out
Conversion
collectionConversion)
Lowering\LocalRewriter\LocalRewriter_LockStatement.cs (1)
93
Conversion
.Boxing,
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (2)
190
Conversion
c = _factory.ClassifyEmitConversion(clone, type);
422
Conversion
c = _factory.ClassifyEmitConversion(instance, node.Type);
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_SwitchExpression.cs (3)
128
if (tryGetImplicitConversion(savedInputExpression, objectType) is
Conversion
c &&
155
Conversion
? tryGetImplicitConversion(BoundExpression expression, TypeSymbol type)
158
Conversion
c = _localRewriter._compilation.Conversions.ClassifyConversionFromExpression(expression, type, isChecked: false, ref discardedUseSiteInfo);
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (5)
68
var
elementConversion = underlyingConversions[i];
214
var
conversion =
Conversion
.MakeNullableConversion(ConversionKind.ImplicitNullable,
Conversion
.Identity);
477
BoundExpression MakeBoundConversion(BoundExpression expr,
Conversion
conversion, TypeWithAnnotations type, BoundConversion enclosing)
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (1)
162
return MakeConversionNode(newNode.Syntax, newNode,
Conversion
.ExplicitEnumeration, type, @checked: false);
Lowering\LocalRewriter\LocalRewriter_UsingStatement.cs (2)
171
Conversion
.ImplicitDynamic,
247
Conversion
.ImplicitDynamic,
Lowering\SyntheticBoundNodeFactory.cs (10)
569
var
conversion = Compilation.Conversions.ClassifyConversionFromType(expression.Type, CurrentFunction.ReturnType, isChecked: false, ref useSiteInfo);
658
Conversion
c = Compilation.Conversions.ClassifyBuiltInConversion(operand.Type, type, isChecked: false, ref discardedUseSiteInfo);
690
Conversion
c;
693
c =
Conversion
.Boxing;
1268
? BoundConversion.SynthesizedNonUserDefined(syntax, nullLiteral,
Conversion
.NullToPointer, type)
1498
/// and then calls <see cref="Convert(TypeSymbol, BoundExpression,
Conversion
, bool, bool)"/>.
1502
public
Conversion
ClassifyEmitConversion(BoundExpression arg, TypeSymbol destination)
1505
Conversion
c = Compilation.Conversions.ClassifyConversionFromExpression(arg, destination, isChecked: false, ref useSiteInfo);
1515
public BoundExpression Convert(TypeSymbol type, BoundExpression arg,
Conversion
conversion, bool isChecked = false, bool explicitCastInCode = true)
1790
rewrittenExpr = Convert(objectType, rewrittenExpr,
Conversion
.Boxing);
Operations\CSharpOperationFactory.cs (8)
1118
Conversion
conversion = boundConversion.Conversion;
1183
Conversion
conversion = BoundNode.GetConversion(boundAsOperator.OperandConversion, boundAsOperator.OperandPlaceholder);
1349
var
elementConversion = BoundNode.GetConversion(iteratorItem, element.ElementPlaceholder);
1435
Conversion
inConversion = BoundNode.GetConversion(boundCompoundAssignmentOperator.LeftConversion, boundCompoundAssignmentOperator.LeftPlaceholder);
1436
Conversion
outConversion = BoundNode.GetConversion(boundCompoundAssignmentOperator.FinalConversion, boundCompoundAssignmentOperator.FinalPlaceholder);
1659
Conversion
valueConversion = BoundNode.GetConversion(boundNullCoalescingOperator.LeftConversion, boundNullCoalescingOperator.LeftPlaceholder);
1664
valueConversion =
Conversion
.Identity;
1972
inlineArrayConversion: enumeratorInfoOpt.InlineArraySpanType is WellKnownType.Unknown ? null :
Conversion
.InlineArray,
Symbols\ReducedExtensionMethodSymbol.cs (1)
53
var
conversion = conversions.ConvertExtensionMethodThisArg(method.Parameters[0].Type, receiverType, ref useSiteInfo, isMethodGroupConversion: false);
Symbols\Source\ParameterHelpers.cs (1)
958
Conversion
conversion = binder.Conversions.ClassifyImplicitConversionFromExpression(defaultExpression, parameterType, ref useSiteInfo);
Symbols\Source\SourceMemberContainerSymbol.cs (1)
4883
Conversion
c = compilation.Conversions.ClassifyImplicitConversionFromType(parameterType.Type, compilation.GetSpecialType(SpecialType.System_Object), ref useSiteInfo);
Symbols\Source\SourceNamedTypeSymbol_Extension.cs (1)
1207
Conversion
conversion = conversions.ConvertExtensionMethodThisArg(parameterType: result.ContainingType.ExtensionParameter.Type, receiverType, ref discardedUseSiteInfo, isMethodGroupConversion: false);
Symbols\Synthesized\ReadOnlyListType\SynthesizedReadOnlyListEnumeratorTypeSymbol.cs (1)
62
Conversion
c = f.ClassifyEmitConversion(itemFieldReference, method.ReturnType);
Symbols\Synthesized\ReadOnlyListType\SynthesizedReadOnlyListTypeSymbol.cs (7)
489
Conversion
c = f.ClassifyEmitConversion(fieldReference, interfaceType);
545
Conversion
c = f.ClassifyEmitConversion(thisRef, returnType);
588
Conversion
c = f.ClassifyEmitConversion(fieldReference, interfaceType);
630
Conversion
c = f.ClassifyEmitConversion(fieldReference, objectType);
654
Conversion
c = f.ClassifyEmitConversion(fieldReference, interfaceType);
738
Conversion
c = f.ClassifyEmitConversion(fieldReference, interfaceType);
792
Conversion
c = f.ClassifyEmitConversion(parameterReference, fieldType);
Symbols\Synthesized\Records\SynthesizedRecordBaseEquals.cs (1)
67
Conversion
c = F.ClassifyEmitConversion(parameterRef, objectType);
Symbols\Synthesized\Records\SynthesizedRecordEquals.cs (1)
124
Conversion
c = F.ClassifyEmitConversion(other, baseType);
Symbols\Synthesized\Records\SynthesizedRecordObjEquals.cs (1)
63
Conversion
c = F.ClassifyEmitConversion(paramAccess, ContainingType);
Symbols\Synthesized\Records\SynthesizedRecordPrintMembers.cs (1)
220
Conversion
c = F.ClassifyEmitConversion(value, objectType);
Symbols\Synthesized\SynthesizedUnionCtor.cs (2)
49
Conversion
c = F.Compilation.Conversions.ClassifyImplicitConversionFromType(parameter.Type, valueProperty.Type, ref useSiteInfo);
66
public static bool IsValidParameterTypeConversion(
Conversion
c)
Microsoft.CodeAnalysis.CSharp.CodeStyle (47)
src\Analyzers\CSharp\Analyzers\HiddenExplicitCast\CSharpHiddenExplicitCastDiagnosticAnalyzer.cs (2)
90
var
outerConversion = outerConversionOperation.GetConversion();
103
var
innerConversion = innerConversionOperation.GetConversion();
src\Analyzers\CSharp\Analyzers\MakeStructMemberReadOnly\CSharpMakeStructMemberReadOnlyAnalyzer.cs (1)
364
var
conversion = conversionOperation.GetConversion();
src\Analyzers\CSharp\Analyzers\RemoveUnnecessaryLambdaExpression\CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs (1)
275
var
conversion = compilation.ClassifyConversion(type1, type2);
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\UseCoalesceExpressionHelpers.cs (1)
14
var
conversion = semanticModel.GetConversion(conditional, cancellationToken);
src\Analyzers\CSharp\Analyzers\UseCollectionExpression\UseCollectionExpressionHelpers.cs (2)
166
var
conversion = speculationAnalyzer.SpeculativeSemanticModel.GetConversion(speculationAnalyzer.ReplacedExpression, cancellationToken);
292
var
conversion = compilation.ClassifyConversion(type, convertedType);
src\Analyzers\CSharp\Analyzers\UseDeconstruction\CSharpUseDeconstructionDiagnosticAnalyzer.cs (3)
108
var
initializerConversion = semanticModel.GetConversion(initializerValue, cancellationToken);
127
var
elementConversion = semanticModel.GetForEachStatementInfo(forEachStatement).ElementConversion;
139
Conversion
conversion,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ConversionExtensions.cs (2)
11
public static bool IsIdentityOrImplicitReference(this
Conversion
conversion)
14
public static bool IsImplicitUserDefinedConversion(this
Conversion
conversion)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (19)
233
var
conversion = conversionOperation.GetConversion();
297
var
originalConversion = originalConversionOperation.GetConversion();
407
var
originalParentConversion = originalParentConversionOperation.GetConversion();
694
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
749
var
innerOriginalConversion = originalConversionOperation.GetConversion();
760
var
outerOriginalConversion = outerOriginalConversionOperation.GetConversion();
787
var
originalConversion = originalConversionOperation.GetConversion();
813
var
rewrittenBitwiseNotConversion = rewrittenBitwiseNotConversionOperation.GetConversion();
920
var
originalConversion = conversionOperation.GetConversion();
1005
var
outerConversion = rewrittenSemanticModel.GetConversion(rewrittenConditionalOrSwitchExpression, cancellationToken);
1119
Conversion
conversion,
1178
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
1206
var
parentConversion = semanticModel.GetConversion(castNode, cancellationToken);
1254
var
conversion = semanticModel.GetConversion(current, cancellationToken);
1364
var
oldConversion = oldForEachInfo.ElementConversion;
1365
var
newConversion = newForEachInfo.ElementConversion;
1622
private static (ITypeSymbol? rewrittenConvertedType,
Conversion
rewrittenConversion) GetRewrittenInfo(
1625
Conversion
originalConversion, ITypeSymbol originalConvertedType,
1641
var
rewrittenConversion = rewrittenSemanticModel.GetConversion(rewrittenExpression, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\SpeculationAnalyzer.cs (15)
38
Conversion
>
409
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalOtherPartOfConditional, originalExpressionType);
410
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newOtherPartOfConditional, newExpressionType);
444
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(oldSwitchStatement.Expression, originalCaseType);
445
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newSwitchStatement.Expression, newCaseType);
547
var
originalConvertedTypeConversion = this.OriginalSemanticModel.ClassifyConversion(previousOriginalNode, originalExpressionTypeInfo.ConvertedType);
548
var
newExpressionConvertedTypeConversion = this.SpeculativeSemanticModel.ClassifyConversion(previousReplacedNode, newExpressionTypeInfo.ConvertedType);
710
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalIsOrAsExpression.Left, originalConvertedType, isExplicitInSource: true);
711
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newIsOrAsExpression.Left, newConvertedType, isExplicitInSource: true);
815
var
originalConversion = originalModel.GetConversion(originalExpression);
816
var
newConversion = newModel.GetConversion(newExpression);
853
private bool ConversionsAreCompatible(
Conversion
originalConversion,
Conversion
newConversion)
934
protected override
Conversion
ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
937
protected override
Conversion
ClassifyConversion(SemanticModel model, ITypeSymbol originalType, ITypeSymbol targetType)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\TypeStyle\CSharpUseImplicitTypeHelper.cs (1)
292
var
conversion = semanticModel.GetConversion(expression, cancellationToken);
Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes (3)
src\Analyzers\CSharp\CodeFixes\AddExplicitCast\CSharpAddExplicitCastCodeFixProvider.cs (1)
102
var
conversion = semanticModel.Compilation.ClassifyConversion(rightType, leftType);
src\Analyzers\CSharp\CodeFixes\ConvertSwitchStatementToExpression\ConvertSwitchStatementToExpressionCodeFixProvider.Rewriter.cs (1)
197
var
conversion = _semanticModel.Compilation.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType);
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateParameterizedMemberService.cs (1)
141
var
conversion = compilation.ClassifyConversion(sourceType, targetType);
Microsoft.CodeAnalysis.CSharp.CSharp15.UnitTests (17)
UnionsTests.cs (17)
8555
Conversion
conversion = model.GetConversion(ten);
8567
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedFromConversion);
8568
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedToConversion);
8880
Conversion
conversion = model.GetConversion(cast);
9310
Conversion
conversion = model.GetConversion(x1);
9315
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedFromConversion);
9316
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedToConversion);
10719
Conversion
conversion = model.GetConversion(ten);
10731
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedFromConversion);
10732
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedToConversion);
10908
Conversion
conversion = model.GetConversion(cast);
11061
Conversion
conversion = model.GetConversion(x1);
11066
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedFromConversion);
11067
Assert.Equal(
Conversion
.NoConversion, conversion.UserDefinedToConversion);
11366
Conversion
conversion = model.GetConversion(tuple);
11437
Conversion
conversion = model.GetConversion(tuple);
11508
Conversion
conversion = model.GetConversion(tuple);
Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests (1)
SymbolKey\SymbolKeyTestBase.cs (1)
399
var
conv = model.GetConversion(expr);
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (32)
CodeGen\CodeGenDeconstructTests.cs (2)
314
Assert.Equal(
Conversion
.UnsetConversion, deconstructionInfo.Conversion);
1130
var
tupleConversion = model.GetConversion(tuple);
CodeGen\CodeGenFunctionPointersTests.cs (1)
10798
var
conversion = model.GetConversion(lambdas[0]);
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));
729
Assert.Equal(
Conversion
.Identity, model.GetConversion(tuple));
CodeGen\CodeGenTupleTest.cs (25)
7500
var
castConversion = model.GetConversion(value);
7504
var
tupleConversion = model.GetConversion(tuple);
7533
var
tupleConversion = model.GetConversion(value);
7575
var
conversion1 = model.GetConversion(tuple1);
7584
var
conversion2 = model.GetConversion(tuple2);
7593
var
conversion3 = model.GetConversion(tuple3);
7641
var
conversion = model.GetConversion(tuple);
8329
Assert.Equal(
Conversion
.Identity, model.GetConversion(l11));
8354
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8496
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8530
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8603
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8632
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8667
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8696
Assert.Equal(
Conversion
.Identity, model.GetConversion(node));
8756
Assert.Equal(
Conversion
.Identity, model.GetConversion(l11));
8781
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8841
Assert.Equal(
Conversion
.Identity, model.GetConversion(lnull));
8854
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
8964
Assert.Equal(
Conversion
.Identity, model.GetConversion(node.Parent));
17217
Assert.Equal(
Conversion
.Identity, model.GetConversion(n1));
17224
Assert.Equal(
Conversion
.Identity, model.GetConversion(n2));
17231
Assert.Equal(
Conversion
.Identity, model.GetConversion(n3));
17238
Assert.Equal(
Conversion
.Identity, model.GetConversion(n4));
17299
Assert.Equal(
Conversion
.ImplicitReference, model.GetConversion(n4));
Microsoft.CodeAnalysis.CSharp.Emit2.UnitTests (1)
Emit\NumericIntPtrTests.cs (1)
64
internal static void AssertMatches(ConversionKind[] expected,
Conversion
conversion)
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (71)
FirstClassSpanTests.cs (3)
2831
var
argConv = model.GetConversion(arg);
2865
var
conv = op.GetConversion();
2881
var
conv = op.GetConversion();
Semantics\CollectionExpressionTests.cs (65)
16077
var
conversion = model.GetConversion(returnValue);
16083
var
underlyingConversion = conversion.UnderlyingConversions[0];
16153
var
conversion = model.GetConversion(returnValue);
16159
var
underlyingConversion = conversion.UnderlyingConversions[0];
16226
var
conversion = model.GetConversion(collection);
16290
var
castConversion = model.GetConversion(cast);
16295
var
conversion = model.GetConversion(value);
16416
var
castConversion = model.GetConversion(cast);
16421
var
conversion = model.GetConversion(value);
16498
var
conversion = model.GetConversion(nestedCollection);
16587
var
conversion = model.GetConversion(nestedCollection);
16593
var
underlyingConversion = conversion.UnderlyingConversions[0];
16941
var
conversion = model.GetConversion(expr);
29140
Conversion
conversion = conversionOperation.GetConversion();
29142
AssertEx.SequenceEqual([
Conversion
.Boxing,
Conversion
.Boxing], conversion.UnderlyingConversions);
29200
var
expectedConversion = new Conversion(ConversionKind.CollectionExpression, nestedConversions: ImmutableArray.Create(
Conversion
.Identity,
Conversion
.Identity));
29201
Conversion
actual = conversionOperation.GetConversion();
29203
AssertEx.SequenceEqual(ImmutableArray.Create(
Conversion
.Identity,
Conversion
.Identity), actual.UnderlyingConversions);
29444
Assert.Equal(
Conversion
.Boxing, spread.GetElementConversion());
29466
Assert.Equal(
Conversion
.ImplicitReference, spread.GetElementConversion());
31031
var
conversion1 = model.GetConversion(collections[0]);
31035
var
conversion2 = model.GetConversion(collections[1]);
31075
var
conversion1 = model.GetConversion(collections[0]);
31079
var
conversion2 = model.GetConversion(collections[1]);
31124
var
conversion1 = model.GetConversion(collections[0]);
31129
var
conversion2 = model.GetConversion(collections[1]);
31165
var
conversion1 = model.GetConversion(collections[0]);
31169
var
conversion2 = model.GetConversion(collections[1]);
31208
var
conversion1 = model.GetConversion(collections[0]);
31212
var
conversion2 = model.GetConversion(collections[1]);
31251
var
conversion = model.GetConversion(collection);
31291
var
conversion = model.GetConversion(collection);
31323
var
conversion = model.GetConversion(collection);
31357
var
conversion1 = model.GetConversion(collections[0]);
31361
var
conversion2 = model.GetConversion(collections[1]);
31369
var
conversion3 = model.GetConversion(collections[2]);
31377
var
conversion4 = model.GetConversion(collections[3]);
31410
var
conversion1 = model.GetConversion(collections[0]);
31414
var
conversion2 = model.GetConversion(collections[1]);
31422
var
conversion3 = model.GetConversion(collections[2]);
31430
var
conversion4 = model.GetConversion(collections[3]);
31476
var
conversion1 = model.GetConversion(collections[0]);
31479
var
conversion2 = model.GetConversion(collections[1]);
31486
var
conversion3 = model.GetConversion(collections[2]);
31493
var
conversion4 = model.GetConversion(collections[3]);
31537
var
conversion1 = model.GetConversion(collections[0]);
31540
var
conversion2 = model.GetConversion(collections[1]);
31547
var
conversion3 = model.GetConversion(collections[2]);
31554
var
conversion4 = model.GetConversion(collections[3]);
31613
var
conversion1 = model.GetConversion(collection);
31656
var
conversion1 = model.GetConversion(collections[0]);
31661
var
conversion2 = model.GetConversion(collections[1]);
31703
var
conversion = model.GetConversion(collection);
35087
var
collectionConversion = model.GetConversion(collection);
35093
var
elementConversion = model.GetConversion(element);
35184
var
elementConversion1 = model.GetConversion(element1);
35190
var
elementConversion2 = model.GetConversion(element2);
35226
var
elementConversion1 = model.GetConversion(element1);
35232
var
elementConversion2 = model.GetConversion(element2);
35272
var
elementConversion1 = model.GetConversion(element1);
35278
var
elementConversion2 = model.GetConversion(element2);
Semantics\CollectionExpressionTests_WithElement_Extra.cs (1)
298
var
conversion = model.GetConversion(expr);
Semantics\OutVarTests.cs (1)
1056
var
conversion = model.ClassifyConversion(decl, model.Compilation.ObjectType, false);
Semantics\PatternMatchingTests2.cs (1)
2892
var
conversion = model.GetConversion(expr);
Microsoft.CodeAnalysis.CSharp.Features (16)
ExtractMethod\CSharpSelectionResult.ExpressionResult.cs (2)
100
var
conv = semanticModel.GetConversion(expression, cancellationToken);
133
private static bool IsCoClassImplicitConversion(TypeInfo info,
Conversion
conversion, INamedTypeSymbol? coclassSymbol)
src\Analyzers\CSharp\Analyzers\HiddenExplicitCast\CSharpHiddenExplicitCastDiagnosticAnalyzer.cs (2)
90
var
outerConversion = outerConversionOperation.GetConversion();
103
var
innerConversion = innerConversionOperation.GetConversion();
src\Analyzers\CSharp\Analyzers\MakeStructMemberReadOnly\CSharpMakeStructMemberReadOnlyAnalyzer.cs (1)
364
var
conversion = conversionOperation.GetConversion();
src\Analyzers\CSharp\Analyzers\RemoveUnnecessaryLambdaExpression\CSharpRemoveUnnecessaryLambdaExpressionDiagnosticAnalyzer.cs (1)
275
var
conversion = compilation.ClassifyConversion(type1, type2);
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\UseCoalesceExpressionHelpers.cs (1)
14
var
conversion = semanticModel.GetConversion(conditional, cancellationToken);
src\Analyzers\CSharp\Analyzers\UseCollectionExpression\UseCollectionExpressionHelpers.cs (2)
166
var
conversion = speculationAnalyzer.SpeculativeSemanticModel.GetConversion(speculationAnalyzer.ReplacedExpression, cancellationToken);
292
var
conversion = compilation.ClassifyConversion(type, convertedType);
src\Analyzers\CSharp\Analyzers\UseDeconstruction\CSharpUseDeconstructionDiagnosticAnalyzer.cs (3)
108
var
initializerConversion = semanticModel.GetConversion(initializerValue, cancellationToken);
127
var
elementConversion = semanticModel.GetForEachStatementInfo(forEachStatement).ElementConversion;
139
Conversion
conversion,
src\Analyzers\CSharp\CodeFixes\AddExplicitCast\CSharpAddExplicitCastCodeFixProvider.cs (1)
102
var
conversion = semanticModel.Compilation.ClassifyConversion(rightType, leftType);
src\Analyzers\CSharp\CodeFixes\ConvertSwitchStatementToExpression\ConvertSwitchStatementToExpressionCodeFixProvider.Rewriter.cs (1)
197
var
conversion = _semanticModel.Compilation.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType);
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateParameterizedMemberService.cs (1)
141
var
conversion = compilation.ClassifyConversion(sourceType, targetType);
UseNamedArguments\CSharpUseNamedArgumentsCodeRefactoringProvider.cs (1)
49
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());
89
var
inConversion = compoundAssignment.GetInConversion();
93
var
outConversion = compoundAssignment.GetOutConversion();
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 (111)
Semantics\DynamicTests.cs (2)
70
var
dynamicToObject = c.Conversions.ClassifyConversionFromType(DynamicTypeSymbol.Instance, c.GetSpecialType(SpecialType.System_Object), ref useSiteDiagnostics);
71
var
objectToDynamic = c.Conversions.ClassifyConversionFromType(c.GetSpecialType(SpecialType.System_Object), DynamicTypeSymbol.Instance, ref useSiteDiagnostics);
Semantics\ForEachTests.cs (4)
1740
private static
Conversion
GetCollectionConversion(BoundForEachStatement boundNode)
2663
var
conv = model.GetConversion(loopSyntax.Type);
3878
Assert.Equal(
Conversion
.Identity, info.CurrentConversion);
3879
Assert.Equal(
Conversion
.Identity, info.ElementConversion);
Semantics\FunctionPointerTests.cs (15)
214
var
conversion = model.GetConversion(initializer1);
219
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type, typeInfo.ConvertedType!);
296
var
conversion = model.GetConversion(literal);
304
var
classifiedConversion = model.ClassifyConversion(literal, typeInfo.ConvertedType);
356
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
364
var
underlying = conversion.UnderlyingConversions.Single();
407
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
459
var
conversion = model.ClassifyConversion(conversions[0].Expression, typeInfoOuter.Type!);
509
var
conversion = model.ClassifyConversion(conv.Expression, typeInfoOuter.Type!);
606
var
conversion = model.GetConversion(decl);
610
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
846
var
conversion = model.GetConversion(decl);
852
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
904
var
conversion = model.GetConversion(initializer);
911
var
classifiedConversion = comp.ClassifyConversion(typeInfo.Type!, typeInfo.ConvertedType!);
Semantics\LambdaTests.cs (1)
844
var
conv = model.GetConversion(expr);
Semantics\NativeIntegerTests.cs (1)
56
internal static void AssertMatches(ConversionKind[] expected,
Conversion
conversion)
Semantics\NullableConversionTests.cs (1)
813
var
conversion = compilation.Conversions.ClassifyConversionFromExpression(
Semantics\NullCoalesceAssignmentTests.cs (2)
960
var
conversion = model.GetConversion(objectCreationExpression);
1000
var
conversion = model.GetConversion(objectCreationExpression);
Semantics\ObjectAndCollectionInitializerTests.cs (3)
3818
var
conversion = model.GetConversion(literal);
3841
var
conversion = model.GetConversion(literal);
3865
var
conversion = model.GetConversion(literal);
Semantics\OperatorTests.cs (2)
3254
"valuePlaceholder" =>
Conversion
.Identity,
3257
Conversion
.NoConversion
Semantics\ScriptSemanticsTests.cs (2)
253
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
570
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
Semantics\StackAllocInitializerTests.cs (45)
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);
2368
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2374
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2380
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2386
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2396
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2402
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2408
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2414
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2424
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2430
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2436
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2442
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2474
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2480
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2486
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2496
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2502
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2508
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2518
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2524
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2530
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2580
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2586
Assert.Equal(
Conversion
.ImplicitNumeric, element1Info.ImplicitConversion);
2592
Assert.Equal(
Conversion
.ImplicitNumeric, sizeInfo.ImplicitConversion);
2608
Assert.Equal(
Conversion
.ImplicitNumeric, element0Info.ImplicitConversion);
2614
Assert.Equal(
Conversion
.ImplicitNumeric, element1Info.ImplicitConversion);
2620
Assert.Equal(
Conversion
.Identity, sizeInfo.ImplicitConversion);
2658
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2664
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
2670
Assert.Equal(
Conversion
.Identity, element1Info.ImplicitConversion);
2680
Assert.Equal(
Conversion
.Identity, stackallocInfo.ImplicitConversion);
2686
Assert.Equal(
Conversion
.Identity, element0Info.ImplicitConversion);
2692
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)
9847
var
conversionInTopLevel = speculativeModelInTopLevel.GetConversion(nodeToSpeculate.DescendantTokens().Single(n => n.ValueText == "x").Parent);
9852
var
conversionOutsideTopLevel = speculativeModelOutsideTopLevel.GetConversion(nodeToSpeculate.DescendantTokens().Single(n => n.ValueText == "x").Parent);
Semantics\UnsafeTests.cs (28)
7268
var
conv = model.GetConversion(syntax);
7271
Assert.Equal(
Conversion
.Identity, conv);
7335
var
conv = model.GetConversion(syntax);
7338
Assert.Equal(
Conversion
.Identity, conv);
7373
var
conv = model.GetConversion(syntax);
7376
Assert.Equal(
Conversion
.Identity, conv);
7415
var
conv = model.GetConversion(syntax);
7418
Assert.Equal(
Conversion
.Identity, conv);
7546
var
conv = model.GetConversion(syntax);
7549
Assert.Equal(
Conversion
.Identity, conv);
8350
var
conv = model.GetConversion(node);
8395
var
conv = model.GetConversion(value);
8885
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
8920
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
9347
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
10238
Assert.Equal(
Conversion
.Identity, summary.ImplicitConversion);
10314
Assert.Equal(
Conversion
.PointerToVoid, summary0.ImplicitConversion);
10321
Assert.Equal(
Conversion
.PointerToVoid, summary1.ImplicitConversion);
10327
Assert.Equal(
Conversion
.PointerToVoid, summary2.ImplicitConversion);
10640
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
10652
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
10702
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
10714
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
10762
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
10774
Assert.Equal(
Conversion
.Identity, sizeOfSummary.ImplicitConversion);
11314
Assert.Equal(
Conversion
.PointerToVoid, stackAllocSummary.ImplicitConversion);
11326
Assert.Equal(
Conversion
.Identity, typeSummary.ImplicitConversion);
11338
Assert.Equal(
Conversion
.ImplicitNumeric, countSummary.ImplicitConversion);
Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests (66)
Compilation\ForEachStatementInfoTests.cs (4)
44
var
conv1 =
Conversion
.Identity;
53
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);
649
var
conversion = info.Type != null && info.ConvertedType != null ? model.Compilation.ClassifyConversion(info.Type, info.ConvertedType) :
Conversion
.NoConversion;
656
ValidateConversion(
Conversion
.PointerToVoid, ConversionKind.ImplicitPointerToVoid);
657
ValidateConversion(
Conversion
.NullToPointer, ConversionKind.ImplicitNullToPointer);
658
ValidateConversion(
Conversion
.PointerToPointer, ConversionKind.ExplicitPointerToPointer);
659
ValidateConversion(
Conversion
.IntegerToPointer, ConversionKind.ExplicitIntegerToPointer);
660
ValidateConversion(
Conversion
.PointerToInteger, ConversionKind.ExplicitPointerToInteger);
661
ValidateConversion(
Conversion
.IntPtr, ConversionKind.IntPtr);
665
private void ValidateConversion(
Conversion
conv, ConversionKind kind)
848
var
conv = semanticModel.GetConversion(expr);
851
Conversion
act1 = semanticModel.ClassifyConversion(expr, info.ConvertedType);
864
var
act2 = semanticModel.Compilation.ClassifyConversion(info.Type, info.ConvertedType);
877
Conversion
act1 = semanticModel.ClassifyConversion(expr, expsym);
2457
var
conv = model.GetConversion(expr);
2486
var
conv = model.GetConversion(expr);
2735
var
conv = model.GetConversion(expr);
2736
Assert.Equal(
Conversion
.Identity, conv);
2806
var
conv = model.GetConversion(expr);
3337
var
conversion = model.ClassifyConversion(expr, gNullableType);
3403
var
conversion = model.ClassifyConversion(expr, gNullableType);
3478
var
argConversion = model.GetConversion(argexpr);
3532
var
argConversion = model.GetConversion(argexpr);
3611
var
conv = model.GetConversion(literal);
3636
var
literalConversion = model.GetConversion(literal);
3644
var
castConversion = model.GetConversion(cast);
3669
var
literalConversion = model.GetConversion(literal);
3677
var
castConversion = model.GetConversion(cast);
3705
var
literalConversion = model.GetConversion(literal);
3713
var
cast1Conversion = model.GetConversion(cast1);
3725
var
cast2Conversion = model.GetConversion(cast2);
4301
Assert.Equal(
Conversion
.Identity, info.ImplicitConversion);
4380
var
conv = model.GetConversion(syntax);
5550
var
conversion = model.ClassifyConversion(lambdaSyntax, otherFuncType);
5598
var
conversion = model.ClassifyConversion(nullSyntax, typeC);
5637
var
conversion = model.ClassifyConversion(lambdaSyntax, typeFuncB);
5684
var
conversion = model.ClassifyConversion(lambdaSyntax, typeFuncC);
5745
var
conversionA = model.ClassifyConversion(methodGroupSyntax, typeFuncA);
5749
var
conversionB = model.ClassifyConversion(methodGroupSyntax, typeFuncB);
5752
var
conversionC = model.ClassifyConversion(methodGroupSyntax, typeFuncC);
6003
Assert.Equal(
Conversion
.UnsetConversion, foreachSymbolInfo.CurrentConversion);
Compilation\SemanticModelAPITests.cs (1)
2281
var
conv = speculativeModel.GetConversion(initializer);
Compilation\SemanticModelGetSemanticInfoTests.cs (3)
14808
var
conv = model.GetConversion(creation.Type);
14904
var
conv = model.GetConversion(creation.Type);
15015
var
conv = model.GetConversion(creation.Type);
Symbols\ConversionTests.cs (11)
183
var
result = c.ClassifyConversionFromType(types[j], types[i], ref useSiteDiagnostics);
187
var
result2 = c.ClassifyConversionFromType(types[j], types[i], ref useSiteDiagnostics); // set breakpoint here if this test is failing...
403
Conversion
conversion = model.ClassifyConversion(sourceExpression1, targetType);
487
var
conversion = model.GetConversion(memberAccess);
522
var
conversion = model.GetConversion(memberAccess);
558
var
conversion = model.GetConversion(memberAccess);
594
var
conversion = model.GetConversion(memberAccess);
628
var
conversion = model.GetConversion(memberAccess);
663
var
conversion = model.GetConversion(memberAccess);
688
var
conversion = model.GetConversion(memberAccess);
2080
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)
891
public static
Conversion
ClassifyConversionFromType(this ConversionsBase conversions, TypeSymbol source, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics, bool forCast = false)
894
Conversion
result = conversions.ClassifyConversionFromType(source, destination, isChecked: false, ref useSiteInfo, forCast);
914
public static
Conversion
ClassifyConversionFromExpression(this Conversions conversions, BoundExpression sourceExpression, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics, bool forCast = false)
917
Conversion
result = conversions.ClassifyConversionFromExpression(sourceExpression, destination, isChecked: false, ref useSiteInfo, forCast);
Microsoft.CodeAnalysis.CSharp.Workspaces (37)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ConversionExtensions.cs (2)
11
public static bool IsIdentityOrImplicitReference(this
Conversion
conversion)
14
public static bool IsImplicitUserDefinedConversion(this
Conversion
conversion)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (19)
233
var
conversion = conversionOperation.GetConversion();
297
var
originalConversion = originalConversionOperation.GetConversion();
407
var
originalParentConversion = originalParentConversionOperation.GetConversion();
694
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
749
var
innerOriginalConversion = originalConversionOperation.GetConversion();
760
var
outerOriginalConversion = outerOriginalConversionOperation.GetConversion();
787
var
originalConversion = originalConversionOperation.GetConversion();
813
var
rewrittenBitwiseNotConversion = rewrittenBitwiseNotConversionOperation.GetConversion();
920
var
originalConversion = conversionOperation.GetConversion();
1005
var
outerConversion = rewrittenSemanticModel.GetConversion(rewrittenConditionalOrSwitchExpression, cancellationToken);
1119
Conversion
conversion,
1178
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
1206
var
parentConversion = semanticModel.GetConversion(castNode, cancellationToken);
1254
var
conversion = semanticModel.GetConversion(current, cancellationToken);
1364
var
oldConversion = oldForEachInfo.ElementConversion;
1365
var
newConversion = newForEachInfo.ElementConversion;
1622
private static (ITypeSymbol? rewrittenConvertedType,
Conversion
rewrittenConversion) GetRewrittenInfo(
1625
Conversion
originalConversion, ITypeSymbol originalConvertedType,
1641
var
rewrittenConversion = rewrittenSemanticModel.GetConversion(rewrittenExpression, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\SpeculationAnalyzer.cs (15)
38
Conversion
>
409
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalOtherPartOfConditional, originalExpressionType);
410
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newOtherPartOfConditional, newExpressionType);
444
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(oldSwitchStatement.Expression, originalCaseType);
445
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newSwitchStatement.Expression, newCaseType);
547
var
originalConvertedTypeConversion = this.OriginalSemanticModel.ClassifyConversion(previousOriginalNode, originalExpressionTypeInfo.ConvertedType);
548
var
newExpressionConvertedTypeConversion = this.SpeculativeSemanticModel.ClassifyConversion(previousReplacedNode, newExpressionTypeInfo.ConvertedType);
710
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalIsOrAsExpression.Left, originalConvertedType, isExplicitInSource: true);
711
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newIsOrAsExpression.Left, newConvertedType, isExplicitInSource: true);
815
var
originalConversion = originalModel.GetConversion(originalExpression);
816
var
newConversion = newModel.GetConversion(newExpression);
853
private bool ConversionsAreCompatible(
Conversion
originalConversion,
Conversion
newConversion)
934
protected override
Conversion
ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
937
protected override
Conversion
ClassifyConversion(SemanticModel model, ITypeSymbol originalType, ITypeSymbol targetType)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\TypeStyle\CSharpUseImplicitTypeHelper.cs (1)
292
var
conversion = semanticModel.GetConversion(expression, cancellationToken);
Microsoft.CodeAnalysis.Test.Utilities (3)
Compilation\TestOperationVisitor.cs (3)
858
CSharp.
Conversion
csharpConversion = CSharp.CSharpExtensions.GetConversion(operation);
1187
var
inConversionInternal = CSharp.CSharpExtensions.GetInConversion(operation);
1188
var
outConversionInternal = CSharp.CSharpExtensions.GetOutConversion(operation);
Microsoft.Extensions.Logging.Generators (1)
LoggerMessageGenerator.Parser.cs (1)
826
Conversion
conversion = compilation.ClassifyConversion(source, dest);
Microsoft.Extensions.Options.SourceGeneration (2)
Parser.cs (1)
730
var
conversion = _compilation.ClassifyConversion(source, dest);
ParserUtilities.cs (1)
54
var
conversion = comp.ClassifyConversion(source, dest);
Microsoft.Gen.BuildMetadata (1)
src\Generators\Shared\ParserUtilities.cs (1)
59
var
conversion = comp.ClassifyConversion(source, dest);
Microsoft.Gen.ComplianceReports (1)
Parser.cs (1)
287
var
conversion = _compilation.ClassifyConversion(source, dest);
Microsoft.Gen.Logging (1)
src\Generators\Shared\ParserUtilities.cs (1)
59
var
conversion = comp.ClassifyConversion(source, dest);
Microsoft.Gen.MetadataExtractor (2)
src\Generators\Microsoft.Gen.ComplianceReports\Parser.cs (1)
287
var
conversion = _compilation.ClassifyConversion(source, dest);
src\Generators\Shared\ParserUtilities.cs (1)
59
var
conversion = comp.ClassifyConversion(source, dest);
Microsoft.Gen.Metrics (1)
src\Generators\Shared\ParserUtilities.cs (1)
59
var
conversion = comp.ClassifyConversion(source, dest);
Microsoft.Gen.MetricsReports (1)
src\Generators\Shared\ParserUtilities.cs (1)
59
var
conversion = comp.ClassifyConversion(source, dest);
Roslyn.Diagnostics.CSharp.Analyzers (37)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ConversionExtensions.cs (2)
11
public static bool IsIdentityOrImplicitReference(this
Conversion
conversion)
14
public static bool IsImplicitUserDefinedConversion(this
Conversion
conversion)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (19)
233
var
conversion = conversionOperation.GetConversion();
297
var
originalConversion = originalConversionOperation.GetConversion();
407
var
originalParentConversion = originalParentConversionOperation.GetConversion();
694
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
749
var
innerOriginalConversion = originalConversionOperation.GetConversion();
760
var
outerOriginalConversion = outerOriginalConversionOperation.GetConversion();
787
var
originalConversion = originalConversionOperation.GetConversion();
813
var
rewrittenBitwiseNotConversion = rewrittenBitwiseNotConversionOperation.GetConversion();
920
var
originalConversion = conversionOperation.GetConversion();
1005
var
outerConversion = rewrittenSemanticModel.GetConversion(rewrittenConditionalOrSwitchExpression, cancellationToken);
1119
Conversion
conversion,
1178
var
conversion = semanticModel.GetConversion(castedExpressionNode, cancellationToken);
1206
var
parentConversion = semanticModel.GetConversion(castNode, cancellationToken);
1254
var
conversion = semanticModel.GetConversion(current, cancellationToken);
1364
var
oldConversion = oldForEachInfo.ElementConversion;
1365
var
newConversion = newForEachInfo.ElementConversion;
1622
private static (ITypeSymbol? rewrittenConvertedType,
Conversion
rewrittenConversion) GetRewrittenInfo(
1625
Conversion
originalConversion, ITypeSymbol originalConvertedType,
1641
var
rewrittenConversion = rewrittenSemanticModel.GetConversion(rewrittenExpression, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\SpeculationAnalyzer.cs (15)
38
Conversion
>
409
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalOtherPartOfConditional, originalExpressionType);
410
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newOtherPartOfConditional, newExpressionType);
444
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(oldSwitchStatement.Expression, originalCaseType);
445
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newSwitchStatement.Expression, newCaseType);
547
var
originalConvertedTypeConversion = this.OriginalSemanticModel.ClassifyConversion(previousOriginalNode, originalExpressionTypeInfo.ConvertedType);
548
var
newExpressionConvertedTypeConversion = this.SpeculativeSemanticModel.ClassifyConversion(previousReplacedNode, newExpressionTypeInfo.ConvertedType);
710
var
originalConversion = this.OriginalSemanticModel.ClassifyConversion(originalIsOrAsExpression.Left, originalConvertedType, isExplicitInSource: true);
711
var
newConversion = this.SpeculativeSemanticModel.ClassifyConversion(newIsOrAsExpression.Left, newConvertedType, isExplicitInSource: true);
815
var
originalConversion = originalModel.GetConversion(originalExpression);
816
var
newConversion = newModel.GetConversion(newExpression);
853
private bool ConversionsAreCompatible(
Conversion
originalConversion,
Conversion
newConversion)
934
protected override
Conversion
ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
937
protected override
Conversion
ClassifyConversion(SemanticModel model, ITypeSymbol originalType, ITypeSymbol targetType)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\TypeStyle\CSharpUseImplicitTypeHelper.cs (1)
292
var
conversion = semanticModel.GetConversion(expression, cancellationToken);
System.Text.Json.SourceGeneration (1)
JsonSourceGenerator.Parser.cs (1)
1196
Conversion
conversion = _knownSymbols.Compilation.ClassifyConversion(dictionaryType, type);