14 instantiations of BoundBinaryOperator
Microsoft.CodeAnalysis.CSharp (14)
Binder\Binder_InterpolatedString.cs (1)
403=> new BoundBinaryOperator(
Compiler\MethodBodySynthesizer.cs (1)
497BoundExpression loopExitCondition = new BoundBinaryOperator(syntax,
Generated\BoundNodes.xml.Generated.cs (1)
1684var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors);
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (5)
534new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Viable, loweredLeft, loweredRight, type); 2020return new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Empty, loweredLeft, loweredRight, type); 2030? new BoundBinaryOperator(syntax, operatorKind, null, method, constrainedToTypeOpt: null, default(LookupResultKind), loweredLeft, loweredRight, method.ReturnType) 2154loweredRight = new BoundBinaryOperator( 2167? new BoundBinaryOperator(
Lowering\LocalRewriter\LocalRewriter_Call.cs (1)
461rewrittenBoundCall = new BoundBinaryOperator(
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (4)
668BoundExpression exitCondition = new BoundBinaryOperator( 964BoundExpression exitCondition = new BoundBinaryOperator( 1168BoundExpression exitCondition = new BoundBinaryOperator( 1263right: new BoundBinaryOperator(syntax,
Lowering\LocalRewriter\LocalRewriter_StringConcat.cs (1)
602return new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, method, constrainedToTypeOpt: null, default(LookupResultKind), loweredLeft, loweredRight, type);
217 references to BoundBinaryOperator
Microsoft.CodeAnalysis.CSharp (217)
Binder\Binder.ValueChecks.cs (7)
3582Debug.Assert(expr is BoundBinaryOperator binaryOperator && 3952Debug.Assert(expr is BoundBinaryOperator binaryOperator && 4394var binary = (BoundBinaryOperator)expr; 5179var binary = (BoundBinaryOperator)expr; 5610case BoundBinaryOperator binary:
Binder\Binder_Expressions.cs (4)
387case BoundBinaryOperator unconvertedBinaryOperator: 3477Debug.Assert(argument is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }); 3652Debug.Assert(unconvertedString is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }); 6299({ Type: null } or BoundLiteral or BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }) &&
Binder\Binder_InterpolatedString.cs (14)
300private bool TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(BoundBinaryOperator binaryOperator, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundBinaryOperator? convertedBinaryOperator) 377private BoundBinaryOperator UpdateBinaryOperatorWithInterpolatedContents(BoundBinaryOperator originalOperator, ImmutableArray<ImmutableArray<BoundExpression>> appendCalls, InterpolatedStringHandlerData data, SyntaxNode rootSyntax, BindingDiagnosticBag diagnostics) 383Func<BoundBinaryOperator, BoundExpression, BoundExpression, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> binaryOperatorFactory = 386var rewritten = (BoundBinaryOperator)originalOperator.RewriteInterpolatedStringAddition((appendCalls, @string), interpolationFactory, binaryOperatorFactory); 388return rewritten.Update(BoundBinaryOperator.UncommonData.InterpolatedStringHandlerAddition(data)); 402static BoundBinaryOperator createBinaryOperator(BoundBinaryOperator original, BoundExpression left, BoundExpression right, (ImmutableArray<ImmutableArray<BoundExpression>> _, TypeSymbol @string) arg) 432BoundBinaryOperator binary => BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType(binary, interpolatedStringHandlerType, diagnostics, additionalConstructorArguments, additionalConstructorRefKinds), 463private BoundBinaryOperator BindUnconvertedBinaryOperatorToInterpolatedStringHandlerType( 464BoundBinaryOperator binaryOperator, 490var result = UpdateBinaryOperatorWithInterpolatedContents(binaryOperator, appendCalls, data, binaryOperator.Syntax, diagnostics);
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); 755private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics) 757if (TryBindUnconvertedBinaryOperatorToDefaultInterpolatedStringHandler(unconvertedBinaryOperator, diagnostics, out var convertedBinaryOperator)) 765BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current) 767var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 772current = current.Left as BoundBinaryOperator; 783BoundBinaryOperator b => doRebind(diagnostics, b),
Binder\Binder_TupleOperators.cs (1)
105case BoundBinaryOperator binary:
Binder\RefSafetyAnalysis.cs (2)
267protected override void BeforeVisitingSkippedBoundBinaryOperatorChildren(BoundBinaryOperator node) 649if (arg is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
Binder\Semantics\Conversions\Conversions.cs (1)
143if (source is BoundBinaryOperator)
Binder\Semantics\Conversions\ConversionsBase.cs (1)
1090case BoundKind.BinaryOperator when ((BoundBinaryOperator)sourceExpression).IsUnconvertedInterpolatedStringAddition:
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (1)
774return value is BoundUtf8String or BoundBinaryOperator { OperatorKind: BinaryOperatorKind.Utf8Addition };
Binder\Semantics\OverloadResolution\OverloadResolution.cs (3)
2502Debug.Assert(!isInterpolatedStringHandlerConversion || arguments[i] is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }); 2799node is BoundUnconvertedInterpolatedString { ConstantValueOpt: null } or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true, ConstantValueOpt: null }) 4169&& argument is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }
BoundTree\BoundExpression.cs (1)
90return ((BoundBinaryOperator)this).IsUnconvertedInterpolatedStringAddition;
BoundTree\BoundNode_Source.cs (1)
352case BoundBinaryOperator binary:
BoundTree\BoundNodeExtensions.cs (25)
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(); 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(),
BoundTree\BoundTreeRewriter.cs (5)
110public sealed override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 119var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 122BoundBinaryOperator binary = (BoundBinaryOperator)child; 134binary = (BoundBinaryOperator)child;
BoundTree\BoundTreeVisitors.cs (1)
42return VisitBinaryOperator(node as BoundBinaryOperator, arg);
BoundTree\BoundTreeWalker.cs (5)
104public sealed override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 115var binary = (BoundBinaryOperator)node.Left; 124binary = (BoundBinaryOperator)current; 141protected virtual void BeforeVisitingSkippedBoundBinaryOperatorChildren(BoundBinaryOperator node)
BoundTree\Constructors.cs (2)
465public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, 478public BoundBinaryOperator Update(UncommonData uncommonData)
BoundTree\NullabilityRewriter.cs (2)
20public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 57BoundBinaryOperator binary => binary.Update(
CodeGen\EmitConversion.cs (1)
160(fromPredefTypeKind == Cci.PrimitiveTypeCode.IntPtr && conversion.Operand is BoundBinaryOperator { OperatorKind: BinaryOperatorKind.Division })); // pointer subtraction: see LocalRewriter.RewritePointerSubtraction()
CodeGen\EmitExpression.cs (3)
202EmitBinaryOperatorExpression((BoundBinaryOperator)expression, used); 2153BoundBinaryOperator b = (BoundBinaryOperator)current;
CodeGen\EmitOperators.cs (16)
58private void EmitBinaryOperatorExpression(BoundBinaryOperator expression, bool used) 90private void EmitBinaryOperator(BoundBinaryOperator expression) 100BoundBinaryOperator binary = (BoundBinaryOperator)child; 110var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 123binary = (BoundBinaryOperator)child; 157private void EmitBinaryOperatorSimple(BoundBinaryOperator expression) 175private void EmitBinaryOperatorInstruction(BoundBinaryOperator expression) 249private void EmitShortCircuitingOperator(BoundBinaryOperator condition, bool sense, bool stopSense, bool stopValue) 297private void EmitBinaryCondOperator(BoundBinaryOperator binOp, bool sense) 509var binOp = (BoundBinaryOperator)condition; 540if (condition is BoundBinaryOperator binOp) 620private void EmitConversionToEnumUnderlyingType(BoundBinaryOperator expression, bool @checked) 696private void EmitBinaryCheckedOperatorInstruction(BoundBinaryOperator expression) 776private static bool IsUnsignedBinaryOperator(BoundBinaryOperator op)
CodeGen\EmitStatement.cs (5)
228private static BoundExpression TryReduce(BoundBinaryOperator condition, ref bool sense) 299private static ILOpCode CodeForJump(BoundBinaryOperator op, bool sense, out ILOpCode revOpCode) 420var binOp = (BoundBinaryOperator)condition; 444top.condition is BoundBinaryOperator binary &&
CodeGen\Optimizer.cs (11)
1473public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 1483var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 1486BoundBinaryOperator binary = (BoundBinaryOperator)child; 1498binary = (BoundBinaryOperator)child; 1546private BoundNode VisitBinaryOperatorSimple(BoundBinaryOperator node) 2067public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 2077var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 2080BoundBinaryOperator binary = (BoundBinaryOperator)child; 2092binary = (BoundBinaryOperator)child;
Compilation\CSharpSemanticModel.cs (2)
3547GetSymbolsAndResultKind((BoundBinaryOperator)boundNode, out isDynamic, ref resultKind, ref symbols); 3840private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
Compilation\MemberSemanticModel.NodeMapBuilder.cs (5)
195var binOp = current as BoundBinaryOperator; 203binOp = current as BoundBinaryOperator; 214binOp = current as BoundBinaryOperator; 285public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
FlowAnalysis\AbstractFlowPass.cs (15)
2294public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 2333var binOp = (BoundBinaryOperator)child; 2370var binOp = (BoundBinaryOperator)binary; 2441private void VisitBinaryOperatorChildren(BoundBinaryOperator node) 2448var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 2450BoundBinaryOperator binary = node; 2454binary = binary.Left as BoundBinaryOperator; 2463protected virtual void VisitBinaryOperatorChildren(ArrayBuilder<BoundBinaryOperator> stack) 2531static bool canLearnFromOperator(BoundBinaryOperator binary) 2545static bool isEquals(BoundBinaryOperator binary) 2549bool learnFromOperator(BoundBinaryOperator binary) 2590protected void VisitBinaryInterpolatedStringAddition(BoundBinaryOperator node) 2627protected virtual void VisitInterpolatedStringBinaryOperatorNode(BoundBinaryOperator node) { }
FlowAnalysis\NullableWalker.cs (7)
4765protected override void VisitBinaryOperatorChildren(ArrayBuilder<BoundBinaryOperator> stack) 4846static bool isEquals(BoundBinaryOperator binary) 4949BoundBinaryOperator binary) 5093BoundBinaryOperator binary) 5182protected override void VisitInterpolatedStringBinaryOperatorNode(BoundBinaryOperator node) 11180Debug.Assert(!((BoundBinaryOperator)node).OperatorKind.IsUserDefined()); 11231BoundBinaryOperator binary => InferResultNullability(binary.OperatorKind, binary.Method, binary.Type, leftType, rightType),
FlowAnalysis\NullableWalker.DebugVerifier.cs (1)
230public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
Generated\BoundNodes.xml.Generated.cs (11)
1660public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1674public BoundBinaryOperator.UncommonData? Data { get; } 1680public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type) 1684var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors); 8907return VisitBinaryOperator((BoundBinaryOperator)node, arg); 9340public virtual R VisitBinaryOperator(BoundBinaryOperator node, A arg) => this.DefaultVisit(node, arg); 9576public virtual BoundNode? VisitBinaryOperator(BoundBinaryOperator node) => this.DefaultVisit(node); 9904public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 11014public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 15288public override TreeDumperNode VisitBinaryOperator(BoundBinaryOperator node, object? arg) => new TreeDumperNode("binaryOperator", null, new TreeDumperNode[]
Lowering\AsyncRewriter\AsyncIteratorMethodToStateMachineRewriter.cs (1)
211protected override BoundBinaryOperator ShouldEnterFinallyBlock()
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (2)
196var binOp = (BoundBinaryOperator)node;
Lowering\DiagnosticsPass_ExpressionTrees.cs (4)
649public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 659BoundBinaryOperator current = node; 667current = (BoundBinaryOperator)current.Left; 705private void CheckDynamic(BoundBinaryOperator node)
Lowering\DiagnosticsPass_Warnings.cs (6)
250private void CheckBinaryOperator(BoundBinaryOperator node) 304private void CheckRelationals(BoundBinaryOperator node) 381private void CheckSelfComparisons(BoundBinaryOperator node) 392private void CheckVacuousComparisons(BoundBinaryOperator tree, ConstantValue constantValue, BoundNode operand) 749private void CheckNullableNullBinOp(BoundBinaryOperator node) 780private void CheckLiftedBinOp(BoundBinaryOperator node)
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (13)
16public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 113public BoundExpression VisitBinaryOperator(BoundBinaryOperator node, BoundUnaryOperator? applyParentUnaryOperator) 133var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 135for (BoundBinaryOperator? current = node; current != null && current.ConstantValueOpt == null; current = current.Left as BoundBinaryOperator) 150BoundBinaryOperator original = stack.Pop(); 160private static ImmutableArray<BoundExpression> CollectBinaryOperatorInterpolatedStringParts(BoundBinaryOperator node) 190BoundBinaryOperator? oldNode, 1995private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member) 2127BoundBinaryOperator? oldNode, 2189BoundBinaryOperator? oldNode, 2240var result = oldNode == null 2440var multiplication = _factory.Binary(multiplicationKind, multiplicationResultType, numericOperand, sizeOfExpression);
Lowering\LocalRewriter\LocalRewriter_Call.cs (2)
836if (argument is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion) 909if (argument is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (3)
30BoundBinaryOperator { InterpolatedStringHandlerData: { } d } binary => (d, CollectBinaryOperatorInterpolatedStringParts(binary)), 166private BoundExpression VisitUtf8Addition(BoundBinaryOperator node) 195case BoundBinaryOperator utf8Addition:
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (2)
50var binaryOperator = (BoundBinaryOperator)node.Operand;
Lowering\MethodToClassRewriter.cs (1)
265public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
Lowering\SpillSequenceSpiller.cs (1)
980public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
Lowering\StateMachineRewriter\MethodToStateMachineRewriter.cs (1)
908protected virtual BoundBinaryOperator ShouldEnterFinallyBlock()
Lowering\SyntheticBoundNodeFactory.cs (11)
680public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right) 699public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right) 706public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right) 713public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right) 718public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right) 729public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right) 734public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right) 739public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right) 744public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right) 749public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right) 754public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right)
Operations\CSharpOperationFactory.cs (8)
1448if (boundBinaryOperatorBase is BoundBinaryOperator { InterpolatedStringHandlerData: not null } binary) 1462} while (currentBinary is not null and not BoundBinaryOperator { InterpolatedStringHandlerData: not null }); 1473BoundBinaryOperator binaryOp => CreateBoundBinaryOperatorOperation(binaryOp, left, right), 1507private IBinaryOperation CreateBoundBinaryOperatorOperation(BoundBinaryOperator boundBinaryOperator, IOperation left, IOperation right) 1536private IOperation CreateBoundInterpolatedStringBinaryOperator(BoundBinaryOperator boundBinaryOperator) 1542Func<BoundBinaryOperator, IOperation, IOperation, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createBinaryOperator 1554BoundBinaryOperator boundBinaryOperator, 2404case BoundBinaryOperator binaryOperator: