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)
1681public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1699public BoundBinaryOperator.UncommonData? Data { get; }
1705public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type)
1709var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors);
9156return VisitBinaryOperator((BoundBinaryOperator)node, arg);
9598public virtual R VisitBinaryOperator(BoundBinaryOperator node, A arg) => this.DefaultVisit(node, arg);
9839public virtual BoundNode? VisitBinaryOperator(BoundBinaryOperator node) => this.DefaultVisit(node);
10176public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
11345public 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)
733public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right)
738public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right)
743public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right)
748public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right)
753public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right)
758public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right)
Operations\CSharpOperationFactory.cs (8)
1542if (boundBinaryOperatorBase is BoundBinaryOperator { InterpolatedStringHandlerData: not null } binary)
1556} while (currentBinary is not null and not BoundBinaryOperator { InterpolatedStringHandlerData: not null });
1567BoundBinaryOperator binaryOp => CreateBoundBinaryOperatorOperation(binaryOp, left, right),
1601private IBinaryOperation CreateBoundBinaryOperatorOperation(BoundBinaryOperator boundBinaryOperator, IOperation left, IOperation right)
1621private IOperation CreateBoundInterpolatedStringBinaryOperator(BoundBinaryOperator boundBinaryOperator)
1627Func<BoundBinaryOperator, IOperation, IOperation, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createBinaryOperator
1639BoundBinaryOperator boundBinaryOperator,
2524case BoundBinaryOperator binaryOperator: