25 instantiations of BoundBinaryOperator
Microsoft.CodeAnalysis.CSharp (25)
Binder\Binder_InterpolatedString.cs (1)
395=> new BoundBinaryOperator(
Binder\Binder_Operators.cs (8)
410return new BoundBinaryOperator( 518return new BoundBinaryOperator(node, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Empty, left, right, GetBinaryOperatorErrorType(kind, diagnostics, node), true); 559return new BoundBinaryOperator(node, BinaryOperatorKind.StringConcatenation, BoundBinaryOperator.UncommonData.UnconvertedInterpolatedStringAddition(stringConstant), LookupResultKind.Empty, left, right, right.Type); 654return new BoundBinaryOperator( 911return new BoundBinaryOperator(node, kind | BinaryOperatorKind.Bool, constantValue, methodOpt: null, constrainedToTypeOpt: null, 921return new BoundBinaryOperator(node, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, 1001return new BoundBinaryOperator( 1017return new BoundBinaryOperator(node, kind, left, right, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, lookupResult, originalUserDefinedOperators, CreateErrorType(), true);
Compiler\MethodBodySynthesizer.cs (1)
491BoundExpression loopExitCondition = new BoundBinaryOperator(syntax,
Generated\BoundNodes.xml.Generated.cs (1)
1672var result = new BoundBinaryOperator(this.Syntax, operatorKind, data, resultKind, left, right, type, this.HasErrors);
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (6)
532new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Viable, loweredLeft, loweredRight, type); 1940return new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Empty, loweredLeft, loweredRight, type); 1950? new BoundBinaryOperator(syntax, operatorKind, null, method, constrainedToTypeOpt: null, default(LookupResultKind), loweredLeft, loweredRight, method.ReturnType) 2074loweredRight = new BoundBinaryOperator( 2087? new BoundBinaryOperator( 2199return new BoundBinaryOperator(
Lowering\LocalRewriter\LocalRewriter_Call.cs (1)
229rewrittenBoundCall = new BoundBinaryOperator(
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (5)
387rewrittenCondition: new BoundBinaryOperator(forEachSyntax, 583BoundExpression exitCondition = new BoundBinaryOperator( 762BoundExpression exitCondition = new BoundBinaryOperator( 941BoundExpression exitCondition = new BoundBinaryOperator( 1036right: new BoundBinaryOperator(syntax,
Lowering\LocalRewriter\LocalRewriter_StringConcat.cs (1)
362return new BoundBinaryOperator(syntax, operatorKind, constantValueOpt: null, method, constrainedToTypeOpt: null, default(LookupResultKind), loweredLeft, loweredRight, type);
Lowering\SyntheticBoundNodeFactory.cs (1)
599return new BoundBinaryOperator(this.Syntax, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Viable, left, right, type) { WasCompilerGenerated = true };
215 references to BoundBinaryOperator
Microsoft.CodeAnalysis.CSharp (215)
Binder\Binder.ValueChecks.cs (5)
3732var binary = (BoundBinaryOperator)expr; 4209var binary = (BoundBinaryOperator)expr; 4515case BoundBinaryOperator binary:
Binder\Binder_Expressions.cs (2)
384case BoundBinaryOperator unconvertedBinaryOperator: 3175Debug.Assert(argument is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true });
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),
Binder\Binder_TupleOperators.cs (1)
105case BoundBinaryOperator binary:
Binder\RefSafetyAnalysis.cs (1)
572if (arg is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
Binder\Semantics\Conversions\Conversions.cs (1)
136if (source is BoundBinaryOperator)
Binder\Semantics\Conversions\ConversionsBase.cs (1)
1069case BoundKind.BinaryOperator when ((BoundBinaryOperator)sourceExpression).IsUnconvertedInterpolatedStringAddition:
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (1)
756return value is BoundUtf8String or BoundBinaryOperator { OperatorKind: BinaryOperatorKind.Utf8Addition };
Binder\Semantics\OverloadResolution\OverloadResolution.cs (3)
2162Debug.Assert(!isInterpolatedStringHandlerConversion || arguments[i] is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }); 2459node is BoundUnconvertedInterpolatedString { ConstantValueOpt: null } or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true, ConstantValueOpt: null }) 3678if (argument is BoundUnconvertedInterpolatedString or BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: true }
BoundTree\BoundExpression.cs (1)
70return ((BoundBinaryOperator)this).IsUnconvertedInterpolatedStringAddition;
BoundTree\BoundNode_Source.cs (1)
331case BoundBinaryOperator binary:
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(),
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 (4)
104public sealed override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 115var binary = (BoundBinaryOperator)node.Left; 123binary = (BoundBinaryOperator)current;
BoundTree\Constructors.cs (2)
408public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, 421public BoundBinaryOperator Update(UncommonData uncommonData)
BoundTree\NullabilityRewriter.cs (2)
20public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node) 57BoundBinaryOperator binary => binary.Update(
CodeGen\EmitExpression.cs (3)
197EmitBinaryOperatorExpression((BoundBinaryOperator)expression, used); 1933BoundBinaryOperator b = (BoundBinaryOperator)current;
CodeGen\EmitOperators.cs (15)
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) 495var binOp = (BoundBinaryOperator)condition; 548private void EmitConversionToEnumUnderlyingType(BoundBinaryOperator expression, bool @checked) 624private void EmitBinaryCheckedOperatorInstruction(BoundBinaryOperator expression) 704private 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)
1406public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 1416var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 1419BoundBinaryOperator binary = (BoundBinaryOperator)child; 1431binary = (BoundBinaryOperator)child; 1479private BoundNode VisitBinaryOperatorSimple(BoundBinaryOperator node) 2000public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 2010var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 2013BoundBinaryOperator binary = (BoundBinaryOperator)child; 2025binary = (BoundBinaryOperator)child;
Compilation\CSharpSemanticModel.cs (2)
3540GetSymbolsAndResultKind((BoundBinaryOperator)boundNode, out isDynamic, ref resultKind, ref symbols); 3828private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref ImmutableArray<Symbol> symbols)
Compilation\MemberSemanticModel.NodeMapBuilder.cs (5)
194var binOp = current as BoundBinaryOperator; 202binOp = current as BoundBinaryOperator; 213binOp = current as BoundBinaryOperator; 284public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
FlowAnalysis\AbstractFlowPass.cs (16)
2192public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 2231var binOp = (BoundBinaryOperator)child; 2268var binOp = (BoundBinaryOperator)binary; 2339private void VisitBinaryOperatorChildren(BoundBinaryOperator node) 2346var stack = ArrayBuilder<BoundBinaryOperator>.GetInstance(); 2348BoundBinaryOperator binary = node; 2352binary = binary.Left as BoundBinaryOperator; 2361protected virtual void VisitBinaryOperatorChildren(ArrayBuilder<BoundBinaryOperator> stack) 2363var binary = stack.Pop(); 2429static bool canLearnFromOperator(BoundBinaryOperator binary) 2443static bool isEquals(BoundBinaryOperator binary) 2447bool learnFromOperator(BoundBinaryOperator binary) 2488protected void VisitBinaryInterpolatedStringAddition(BoundBinaryOperator node) 2525protected virtual void VisitInterpolatedStringBinaryOperatorNode(BoundBinaryOperator node) { }
FlowAnalysis\NullableWalker.cs (8)
4454protected override void VisitBinaryOperatorChildren(ArrayBuilder<BoundBinaryOperator> stack) 4456var binary = stack.Pop(); 4535static bool isEquals(BoundBinaryOperator binary) 4638BoundBinaryOperator binary) 4763BoundBinaryOperator binary) 4852protected override void VisitInterpolatedStringBinaryOperatorNode(BoundBinaryOperator node) 10446Debug.Assert(!((BoundBinaryOperator)node).OperatorKind.IsUserDefined()); 10497BoundBinaryOperator binary => InferResultNullability(binary.OperatorKind, binary.Method, binary.Type, leftType, rightType),
FlowAnalysis\NullableWalker.DebugVerifier.cs (1)
189public override BoundNode? VisitBinaryOperator(BoundBinaryOperator node)
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\AsyncRewriter\AsyncIteratorMethodToStateMachineRewriter.cs (1)
211protected override BoundBinaryOperator ShouldEnterFinallyBlock()
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (2)
196var binOp = (BoundBinaryOperator)node;
Lowering\DiagnosticsPass_ExpressionTrees.cs (4)
606public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 616BoundBinaryOperator current = node; 624current = (BoundBinaryOperator)current.Left; 662private 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)
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\LocalRewriter\LocalRewriter_Call.cs (2)
593if (argument is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion) 666if (argument is BoundConversion { ConversionKind: ConversionKind.InterpolatedStringHandler, Operand: BoundInterpolatedString or BoundBinaryOperator } conversion)
Lowering\LocalRewriter\LocalRewriter_ConditionalAccess.cs (1)
177var condition = _factory.ObjectNotEqual(
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (3)
30BoundBinaryOperator { InterpolatedStringHandlerData: { } d } binary => (d, CollectBinaryOperatorInterpolatedStringParts(binary)), 159private BoundExpression VisitUtf8Addition(BoundBinaryOperator node) 188case BoundBinaryOperator utf8Addition:
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (2)
50var binaryOperator = (BoundBinaryOperator)node.Operand;
Lowering\MethodToClassRewriter.cs (1)
260public override BoundNode VisitBinaryOperator(BoundBinaryOperator node)
Lowering\SpillSequenceSpiller.cs (2)
909public override BoundNode VisitBinaryOperator(BoundBinaryOperator node) 1214var isNotClass = _F.ObjectNotEqual(
Lowering\StateMachineRewriter\MethodToStateMachineRewriter.cs (1)
890protected virtual BoundBinaryOperator ShouldEnterFinallyBlock()
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: