Binder\Binder_Statements.cs (2)
2694return BoundConversion.Synthesized(node, BindToTypeForErrorRecovery(expr), Conversion.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, ConstantValue.NotAvailable, boolean, hasErrors: true);
2762return BoundConversion.Synthesized(node, expr, Conversion.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, ConstantValue.NotAvailable, boolean, hasErrors: true);
FlowAnalysis\NullableWalker.cs (46)
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>)"/>.
2212var conv = (BoundConversion)node;
2688var conversion = (BoundConversion)expr;
4252while (collectionCreation is BoundConversion conversion)
4305if (node.Conversion is BoundConversion { Conversion: var conversion })
5223var expression = GetConversionIfApplicable(expressions[i], expressionNoConversion);
5636if (binary.Left is BoundConversion leftConversionNode && leftConversionNode != leftOperand)
5736expr as BoundConversion,
5849expr as BoundConversion,
6003operand = ((BoundConversion)operand).Operand;
6197var conversion = (BoundConversion)possiblyConversion;
6306if ((node.RightOperand as BoundConversion)?.ExplicitCastInCode != false &&
6362if (node is BoundConversion boundConversion)
6464Debug.Assert(innerCondAccess.Receiver is not (BoundConditionalAccess or BoundConversion));
7878TrackAnalyzedNullabilityThroughConversionGroup(TypeWithState.Create(argument.Type, result.RValueType.State), argument as BoundConversion, argumentNoConversion);
7938elements = ((BoundCollectionExpression)((BoundConversion)argument).Operand).UnconvertedCollectionExpression.Elements.CastArray<BoundExpression>();
8294BoundConversion? conversionOpt,
9116var conversion = (BoundConversion)expr;
9328public override BoundNode? VisitConversion(BoundConversion node)
9589BoundConversion? conversionOpt,
9871private static BoundConversion? GetConversionIfApplicable(BoundExpression? conversionOpt, BoundExpression convertedNode)
9878return conversionOpt == convertedNode ? null : (BoundConversion?)conversionOpt;
9901BoundConversion? conversionOpt,
10116if (useLegacyWarnings && conversionOperand is BoundConversion operandConversion && !operandConversion.ConversionKind.IsUserDefinedConversion()) // Based on behavior of NullableT_NullableStructToClass unit-test we don't need to specially handle Union conversions here
10521BoundConversion? conversionOpt,
10673BoundConversion? conversionOpt,
10711BoundConversion? sourceToParameterConversion = null;
10712BoundConversion? unionConstructionConversion = null;
10843var conversionOpt = conversionExpression as BoundConversion;
10851conversionOpt = conversionOpt.Operand as BoundConversion;
10855private void TrackAnalyzedNullabilityThroughConversionGroup(TypeWithState resultType, BoundConversion? conversionOpt, BoundExpression convertedNode)
10876conversionOpt = conversionOpt.Operand as BoundConversion;
11506var right = node.Right;
11788var conv = (BoundConversion)expr;
11908if (node.OperandConversion is BoundConversion { Conversion: ({ IsUserDefined: true } or { IsUnion: true }) and { Method.ParameterCount: 1 } operandConversion })
12106node.LeftConversion as BoundConversion ?? node.Left,
12690if (!reportedDiagnostic && !(collectionExpression is BoundConversion { Operand: { IsSuppressed: true } }))
12768if (node.Expression is not BoundConversion { Operand.IsSuppressed: true } &&
12805isSuppressed: node.Expression is BoundConversion { Operand.IsSuppressed: true },
12938node.Operand as BoundConversion,
Generated\BoundNodes.xml.Generated.cs (17)
1891public BoundDeconstructionAssignmentOperator(SyntaxNode syntax, BoundTupleExpression left, BoundConversion right, bool isUsed, TypeSymbol type, bool hasErrors = false)
1906public BoundConversion Right { get; }
1912public BoundDeconstructionAssignmentOperator Update(BoundTupleExpression left, BoundConversion right, bool isUsed, TypeSymbol type)
3033public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, InConversionGroupFlags inConversionGroupFlags, TypeSymbol type)
3037var result = new BoundConversion(this.Syntax, operand, conversion, isBaseConversion, @checked, explicitCastInCode, constantValueOpt, conversionGroupOpt, inConversionGroupFlags, type, this.HasErrors);
9226return VisitConversion((BoundConversion)node, arg);
9633public virtual R VisitConversion(BoundConversion node, A arg) => this.DefaultVisit(node, arg);
9874public virtual BoundNode? VisitConversion(BoundConversion node) => this.DefaultVisit(node);
10311public override BoundNode? VisitConversion(BoundConversion node)
11395BoundConversion right = (BoundConversion)this.Visit(node.Right);
11589public override BoundNode? VisitConversion(BoundConversion node)
13294BoundConversion right = (BoundConversion)this.Visit(node.Right);
13762public override BoundNode? VisitConversion(BoundConversion node)
13765BoundConversion updatedNode;
16149public override TreeDumperNode VisitConversion(BoundConversion node, object? arg) => new TreeDumperNode("conversion", null, new TreeDumperNode[]
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (12)
18public override BoundNode VisitConversion(BoundConversion node)
249var conversion = (BoundConversion)rewrittenNode;
261BoundConversion? oldNodeOpt,
297BoundConversion? oldNodeOpt,
1076case BoundConversion { Conversion: { Kind: ConversionKind.ImplicitNullable }, Operand: var convertedArgument }
1081case BoundConversion { Conversion: { Kind: ConversionKind.ImplicitNullable, UnderlyingConversions: var underlying }, Operand: var convertedArgument } conversion
1187rewrittenOperand = BoundConversion.SynthesizedNonUserDefined(syntax, rewrittenOperand, Conversion.ImplicitEnumeration, rewrittenOperandType);
1201var result = new BoundConversion(
1431return BoundConversion.Synthesized(
1475return BoundConversion.Synthesized(
1637return BoundConversion.Synthesized(syntax, rewrittenOperand, conversion, @checked, explicitCastInCode: explicitCastInCode, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, constantValueOpt, rewrittenType);
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (18)
49case BoundConversion { Conversion: { Kind: ConversionKind.Identity }, Operand: var o }:
51case BoundConversion { Conversion: { Kind: ConversionKind.ImplicitTupleLiteral }, Operand: var o }:
56case BoundConversion { Conversion: { Kind: var kind } c, Operand: var o } conversion when
70var newArgument = new BoundConversion(
89case BoundConversion { Conversion: { Kind: var kind }, Operand: var o } when
104if (expr is BoundConversion { ConversionKind: ConversionKind.ImplicitTuple, Conversion: var conversion } boundConversion)
121var convertedFieldAccess = new BoundConversion(
193case BoundConversion { Conversion: { Kind: ConversionKind.DefaultLiteral } }: // This conversion can be performed lazily, but need not be saved. It is treated as non-side-effecting.
194case BoundConversion { Conversion.IsTupleConversion: true }: // If we were not able to push this conversion down the tree before getting here, it must be performed early, otherwise it won't be properly lowered by this machinery.
196case BoundConversion { Conversion: { Kind: var conversionKind } conversion } when conversionMustBePerformedOnOriginalExpression(conversionKind):
199case BoundConversion { Conversion: { IsUserDefined: true } or { IsUnion: true } } conv when conv.ExplicitCastInCode || enclosingConversionWasExplicit:
202case BoundConversion conv:
407case BoundConversion { Conversion: { IsIdentity: true }, Operand: var o }:
409case BoundConversion { Conversion: { IsNullable: true, UnderlyingConversions: var underlying } conversion, Operand: var o }
442case BoundConversion { Conversion: { IsIdentity: true }, Operand: var o }:
444case BoundConversion { Conversion: { IsNullable: true, UnderlyingConversions: var nested }, Operand: var o } conv when
479BoundExpression MakeBoundConversion(BoundExpression expr, Conversion conversion, TypeWithAnnotations type, BoundConversion enclosing)
615return (expr is BoundConversion conv)
Lowering\SyntheticBoundNodeFactory.cs (2)
581expression = BoundConversion.Synthesized(Syntax, expression, conversion, false, explicitCastInCode: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, ConstantValue.NotAvailable, CurrentFunction.ReturnType);
1294? BoundConversion.SynthesizedNonUserDefined(syntax, nullLiteral, Conversion.NullToPointer, type)