Binder\Binder_InterpolatedString.cs (14)
438private bool TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(BoundBinaryOperator binaryOperator, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundBinaryOperator? convertedBinaryOperator)
515private BoundBinaryOperator UpdateBinaryOperatorWithInterpolatedContents(BoundBinaryOperator originalOperator, ImmutableArray<ImmutableArray<BoundExpression>> appendCalls, InterpolatedStringHandlerData data, SyntaxNode rootSyntax, BindingDiagnosticBag diagnostics)
521Func<BoundBinaryOperator, BoundExpression, BoundExpression, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> binaryOperatorFactory =
524var rewritten = (BoundBinaryOperator)originalOperator.RewriteInterpolatedStringAddition((appendCalls, @string), interpolationFactory, binaryOperatorFactory);
526return rewritten.Update(BoundBinaryOperator.UncommonData.InterpolatedStringHandlerAddition(data));
540static BoundBinaryOperator createBinaryOperator(BoundBinaryOperator original, BoundExpression left, BoundExpression right, (ImmutableArray<ImmutableArray<BoundExpression>> _, TypeSymbol @string) arg)
570BoundBinaryOperator binary => BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType(binary, interpolatedStringHandlerType, diagnostics, additionalConstructorArguments, additionalConstructorRefKinds),
601private BoundBinaryOperator BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType(
602BoundBinaryOperator binaryOperator,
628var result = UpdateBinaryOperatorWithInterpolatedContents(binaryOperator, appendCalls, data, binaryOperator.Syntax, diagnostics);
Binder\Binder_Operators.cs (9)
985&& left is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }
986&& right is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true })
990return new BoundBinaryOperator(node, BinaryOperatorKind.StringConcatenation, BoundBinaryOperator.UncommonData.UnconvertedInterpolatedStringAddition(stringConstant), LookupResultKind.Empty, left, right, right.Type);
1240private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics)
1242if (TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(unconvertedBinaryOperator, diagnostics, out var convertedBinaryOperator))
1250BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current)
1252var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
1257current = current.Left as BoundBinaryOperator;
1268BoundBinaryOperator 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:
137case BoundBinaryOperator rightOperator:
156static void pushLeftNodes(BoundBinaryOperator binary, ArrayBuilder<BoundBinaryOperator> stack, TArg arg, Action<BoundBinaryOperator, TArg>? binaryOperatorCallback)
159BoundBinaryOperator? current = binary;
164current = current.Left as BoundBinaryOperator;
185this BoundBinaryOperator binary,
188Func<BoundBinaryOperator, TResult, TResult, TArg, TResult> binaryOperatorFactory)
198BoundBinaryOperator binary,
201Func<BoundBinaryOperator, TResult, TResult, TArg, TResult> binaryOperatorFactory,
205var originalStack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
209while (originalStack.TryPop(out var currentBinary))
215BoundBinaryOperator => result!,
226BoundBinaryOperator binaryOperator => doRewrite(binaryOperator, arg, interpolatedStringFactory, binaryOperatorFactory, ref i),
239static void pushLeftNodes(BoundBinaryOperator binary, ArrayBuilder<BoundBinaryOperator> stack)
241BoundBinaryOperator? current = binary;
246current = current.Left as BoundBinaryOperator;
254BoundBinaryOperator { InterpolatedStringHandlerData: { } d } => d,
256BoundBinaryOperator or BoundInterpolatedString when !throwOnMissing => default,
257BoundBinaryOperator or BoundInterpolatedString => throw ExceptionUtilities.Unreachable(),
Generated\BoundNodes.xml.Generated.cs (11)
1688public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1706public BoundBinaryOperator.UncommonData? Data { get; }
1712public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type)
1716var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors);
9176return VisitBinaryOperator((BoundBinaryOperator)node, arg);
9618public virtual R VisitBinaryOperator(BoundBinaryOperator node, A arg) => this.DefaultVisit(node, arg);
9859public virtual BoundNode? VisitBinaryOperator(BoundBinaryOperator node) => this.DefaultVisit(node);
10192public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
11352public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
15811public override TreeDumperNode VisitBinaryOperator(BoundBinaryOperator node, object? arg) => new TreeDumperNode("binaryOperator", null, new TreeDumperNode[]
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (13)
16public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
114public BoundExpression VisitBinaryOperator(BoundBinaryOperator node, BoundUnaryOperator? applyParentUnaryOperator)
140var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance();
142for (BoundBinaryOperator? current = node; current != null && current.ConstantValueOpt == null; current = current.Left as BoundBinaryOperator)
157BoundBinaryOperator original = stack.Pop();
167private static ImmutableArray<BoundExpression> CollectBinaryOperatorInterpolatedStringParts(BoundBinaryOperator node)
197BoundBinaryOperator? oldNode,
2014private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member)
2146BoundBinaryOperator? oldNode,
2208BoundBinaryOperator? oldNode,
2259var result = oldNode == null
2459var multiplication = _factory.Binary(multiplicationKind, multiplicationResultType, numericOperand, sizeOfExpression);
Lowering\SyntheticBoundNodeFactory.cs (11)
648public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right)
667public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right)
674public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right)
681public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right)
686public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right)
712public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right)
717public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right)
722public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right)
727public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right)
732public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right)
737public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right)
Operations\CSharpOperationFactory.cs (8)
1523if (boundBinaryOperatorBase is BoundBinaryOperator { InterpolatedStringHandlerData: not null } binary)
1537} while (currentBinary is not null and not BoundBinaryOperator { InterpolatedStringHandlerData: not null });
1548BoundBinaryOperator binaryOp => CreateBoundBinaryOperatorOperation(binaryOp, left, right),
1582private IBinaryOperation CreateBoundBinaryOperatorOperation(BoundBinaryOperator boundBinaryOperator, IOperation left, IOperation right)
1602private IOperation CreateBoundInterpolatedStringBinaryOperator(BoundBinaryOperator boundBinaryOperator)
1608Func<BoundBinaryOperator, IOperation, IOperation, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createBinaryOperator
1620BoundBinaryOperator boundBinaryOperator,
2505case BoundBinaryOperator binaryOperator: