Binder\Binder_InterpolatedString.cs (15)
300private bool TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(BoundBinaryOperator binaryOperator, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundBinaryOperator? convertedBinaryOperator)
369private BoundBinaryOperator UpdateBinaryOperatorWithInterpolatedContents(BoundBinaryOperator originalOperator, ImmutableArray<ImmutableArray<BoundExpression>> appendCalls, InterpolatedStringHandlerData data, SyntaxNode rootSyntax, BindingDiagnosticBag diagnostics)
375Func<BoundBinaryOperator, BoundExpression, BoundExpression, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> binaryOperatorFactory =
378var rewritten = (BoundBinaryOperator)originalOperator.RewriteInterpolatedStringAddition((appendCalls, @string), interpolationFactory, binaryOperatorFactory);
380return rewritten.Update(BoundBinaryOperator.UncommonData.InterpolatedStringHandlerAddition(data));
394static BoundBinaryOperator createBinaryOperator(BoundBinaryOperator original, BoundExpression left, BoundExpression right, (ImmutableArray<ImmutableArray<BoundExpression>> _, TypeSymbol @string) arg)
424BoundBinaryOperator binary => BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType(binary, interpolatedStringHandlerType, diagnostics, additionalConstructorArguments, additionalConstructorRefKinds),
455private BoundBinaryOperator BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType(
456BoundBinaryOperator binaryOperator,
482var result = UpdateBinaryOperatorWithInterpolatedContents(binaryOperator, appendCalls, data, binaryOperator.Syntax, diagnostics);
856Debug.Assert(unconvertedString is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true });
Binder\Binder_Operators.cs (9)
554&& left is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }
555&& right is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true })
559return new BoundBinaryOperator(node, BinaryOperatorKind.StringConcatenation, BoundBinaryOperator.UncommonData.UnconvertedInterpolatedStringAddition(stringConstant), LookupResultKind.Empty, left, right, right.Type);
725private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics)
727if (TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(unconvertedBinaryOperator, diagnostics, out var convertedBinaryOperator))
735BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current)
737var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
742current = current.Left as BoundBinaryOperator;
753BoundBinaryOperator b => doRebind(diagnostics, b),
BoundTree\BoundNodeExtensions.cs (26)
108this BoundBinaryOperator binary,
111Action<BoundBinaryOperator, TArg>? binaryOperatorCallback = null)
114var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
118while (stack.TryPop(out BoundBinaryOperator? current))
122case BoundBinaryOperator:
136case BoundBinaryOperator rightOperator:
154static void pushLeftNodes(BoundBinaryOperator binary, ArrayBuilder<BoundBinaryOperator> stack, TArg arg, Action<BoundBinaryOperator, TArg>? binaryOperatorCallback)
157BoundBinaryOperator? current = binary;
162current = current.Left as BoundBinaryOperator;
183this BoundBinaryOperator binary,
186Func<BoundBinaryOperator, TResult, TResult, TArg, TResult> binaryOperatorFactory)
196BoundBinaryOperator binary,
199Func<BoundBinaryOperator, TResult, TResult, TArg, TResult> binaryOperatorFactory,
203var originalStack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
207while (originalStack.TryPop(out var currentBinary))
213BoundBinaryOperator => result!,
224BoundBinaryOperator binaryOperator => doRewrite(binaryOperator, arg, interpolatedStringFactory, binaryOperatorFactory, ref i),
237static void pushLeftNodes(BoundBinaryOperator binary, ArrayBuilder<BoundBinaryOperator> stack)
239BoundBinaryOperator? current = binary;
244current = current.Left as BoundBinaryOperator;
252BoundBinaryOperator { InterpolatedStringHandlerData: { } d } => d,
254BoundBinaryOperator or BoundInterpolatedString when !throwOnMissing => default,
255BoundBinaryOperator or BoundInterpolatedString => throw ExceptionUtilities.Unreachable(),
Generated\BoundNodes.xml.Generated.cs (11)
1648public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1662public BoundBinaryOperator.UncommonData? Data { get; }
1668public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type)
1672var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors);
8591return VisitBinaryOperator((BoundBinaryOperator)node, arg);
9008public virtual R VisitBinaryOperator(BoundBinaryOperator node, A arg) => this.DefaultVisit(node, arg);
9236public virtual BoundNode? VisitBinaryOperator(BoundBinaryOperator node) => this.DefaultVisit(node);
9556public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
10637public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
14753public override TreeDumperNode VisitBinaryOperator(BoundBinaryOperator node, object? arg) => new TreeDumperNode("binaryOperator", null, new TreeDumperNode[]
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (13)
15public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
111public BoundExpression VisitBinaryOperator(BoundBinaryOperator node, BoundUnaryOperator? applyParentUnaryOperator)
131var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
133for (BoundBinaryOperator? current = node; current != null && current.ConstantValueOpt == null; current = current.Left as BoundBinaryOperator)
148BoundBinaryOperator original = stack.Pop();
158private static ImmutableArray<BoundExpression> CollectBinaryOperatorInterpolatedStringParts(BoundBinaryOperator node)
188BoundBinaryOperator? oldNode,
1915private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member)
2047BoundBinaryOperator? oldNode,
2109BoundBinaryOperator? oldNode,
2160var result = oldNode == null
2360var multiplication = _factory.Binary(multiplicationKind, multiplicationResultType, numericOperand, sizeOfExpression);
Lowering\SyntheticBoundNodeFactory.cs (11)
597public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right)
616public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right)
623public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right)
630public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right)
635public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right)
640public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right)
645public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right)
650public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right)
655public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right)
660public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right)
665public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right)
Operations\CSharpOperationFactory.cs (8)
1381if (boundBinaryOperatorBase is BoundBinaryOperator { InterpolatedStringHandlerData: not null } binary)
1395} while (currentBinary is not null and not BoundBinaryOperator { InterpolatedStringHandlerData: not null });
1406BoundBinaryOperator binaryOp => CreateBoundBinaryOperatorOperation(binaryOp, left, right),
1440private IBinaryOperation CreateBoundBinaryOperatorOperation(BoundBinaryOperator boundBinaryOperator, IOperation left, IOperation right)
1469private IOperation CreateBoundInterpolatedStringBinaryOperator(BoundBinaryOperator boundBinaryOperator)
1475Func<BoundBinaryOperator, IOperation, IOperation, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createBinaryOperator
1487BoundBinaryOperator boundBinaryOperator,
2322case BoundBinaryOperator binaryOperator: