122 types derived from BoundExpression
Microsoft.CodeAnalysis.CSharp (122)
BoundTree\BoundExpressionWithNullability.cs (1)
9internal sealed partial class BoundExpressionWithNullability : BoundExpression
BoundTree\Expression.cs (1)
42internal sealed partial class BoundDeconstructionAssignmentOperator : BoundExpression
BoundTree\VariablePendingInference.cs (1)
25internal partial class VariablePendingInference : BoundExpression
Generated\BoundNodes.xml.Generated.cs (118)
423internal abstract partial class BoundValuePlaceholderBase : BoundExpression 900internal sealed partial class BoundDup : BoundExpression 931internal sealed partial class BoundPassByCopy : BoundExpression 959internal sealed partial class BoundBadExpression : BoundExpression 1048internal sealed partial class BoundTypeExpression : BoundExpression 1083internal sealed partial class BoundTypeOrValueExpression : BoundExpression 1121internal sealed partial class BoundNamespaceExpression : BoundExpression 1162internal sealed partial class BoundUnaryOperator : BoundExpression 1204internal sealed partial class BoundIncrementOperator : BoundExpression 1252internal sealed partial class BoundAddressOfOperator : BoundExpression 1284internal sealed partial class BoundUnconvertedAddressOfOperator : BoundExpression 1313internal sealed partial class BoundFunctionPointerLoad : BoundExpression 1356internal sealed partial class BoundPointerIndirectionOperator : BoundExpression 1388internal sealed partial class BoundPointerElementAccess : BoundExpression 1425internal sealed partial class BoundFunctionPointerInvocation : BoundExpression 1462internal sealed partial class BoundRefTypeOperator : BoundExpression 1494internal sealed partial class BoundMakeRefOperator : BoundExpression 1524internal sealed partial class BoundRefValueOperator : BoundExpression 1556internal sealed partial class BoundFromEndIndexExpression : BoundExpression 1588internal sealed partial class BoundRangeExpression : BoundExpression 1621internal abstract partial class BoundBinaryOperatorBase : BoundExpression 1674internal sealed partial class BoundTupleBinaryOperator : BoundExpression 1765internal sealed partial class BoundCompoundAssignmentOperator : BoundExpression 1812internal sealed partial class BoundAssignmentOperator : BoundExpression 1846internal sealed partial class BoundDeconstructionAssignmentOperator : BoundExpression 1881internal sealed partial class BoundNullCoalescingOperator : BoundExpression 1922internal sealed partial class BoundNullCoalescingAssignmentOperator : BoundExpression 1953internal sealed partial class BoundUnconvertedConditionalOperator : BoundExpression 1992internal sealed partial class BoundConditionalOperator : BoundExpression 2036internal sealed partial class BoundArrayAccess : BoundExpression 2069internal sealed partial class BoundRefArrayAccess : BoundExpression 2098internal sealed partial class BoundArrayLength : BoundExpression 2169internal sealed partial class BoundAwaitExpression : BoundExpression 2204internal abstract partial class BoundTypeOf : BoundExpression 2289internal sealed partial class BoundMethodDefIndex : BoundExpression 2333internal sealed partial class BoundLocalId : BoundExpression 2376internal sealed partial class BoundParameterId : BoundExpression 2419internal sealed partial class BoundStateMachineInstanceId : BoundExpression 2454internal sealed partial class BoundMaximumMethodDefIndex : BoundExpression 2489internal sealed partial class BoundInstrumentationPayloadRoot : BoundExpression 2527internal sealed partial class BoundThrowIfModuleCancellationRequested : BoundExpression 2562internal sealed partial class ModuleCancellationTokenExpression : BoundExpression 2597internal sealed partial class BoundModuleVersionId : BoundExpression 2632internal sealed partial class BoundModuleVersionIdString : BoundExpression 2667internal sealed partial class BoundSourceDocumentIndex : BoundExpression 2707internal sealed partial class BoundMethodInfo : BoundExpression 2750internal sealed partial class BoundFieldInfo : BoundExpression 2793internal sealed partial class BoundDefaultLiteral : BoundExpression 2816internal sealed partial class BoundDefaultExpression : BoundExpression 2847internal sealed partial class BoundIsOperator : BoundExpression 2882internal sealed partial class BoundAsOperator : BoundExpression 2919internal sealed partial class BoundSizeOfOperator : BoundExpression 2951internal sealed partial class BoundConversion : BoundExpression 2993internal sealed partial class BoundReadOnlySpanFromArray : BoundExpression 3026internal sealed partial class BoundArgList : BoundExpression 3061internal sealed partial class BoundArgListOperator : BoundExpression 3092internal sealed partial class BoundFixedLocalCollectionInitializer : BoundExpression 4296internal sealed partial class BoundLiteral : BoundExpression 4327internal sealed partial class BoundUtf8String : BoundExpression 4367internal sealed partial class BoundThisReference : BoundExpression 4402internal sealed partial class BoundPreviousSubmissionReference : BoundExpression 4437internal sealed partial class BoundHostObjectMemberReference : BoundExpression 4472internal sealed partial class BoundBaseReference : BoundExpression 4501internal sealed partial class BoundLocal : BoundExpression 4550internal sealed partial class BoundPseudoVariable : BoundExpression 4595internal sealed partial class BoundRangeVariable : BoundExpression 4628internal sealed partial class BoundParameter : BoundExpression 4768internal sealed partial class BoundLabel : BoundExpression 4875internal abstract partial class BoundSwitchExpression : BoundExpression 5719internal abstract partial class BoundMethodOrPropertyGroup : BoundExpression 5733internal sealed partial class BoundSequencePointExpression : BoundExpression 5761internal sealed partial class BoundSequence : BoundExpression 5797internal sealed partial class BoundSpillSequence : BoundExpression 5833internal sealed partial class BoundDynamicMemberAccess : BoundExpression 5872internal abstract partial class BoundDynamicInvocableBase : BoundExpression 5925internal sealed partial class BoundConditionalAccess : BoundExpression 5958internal sealed partial class BoundLoweredConditionalAccess : BoundExpression 5999internal sealed partial class BoundConditionalReceiver : BoundExpression 6037internal sealed partial class BoundComplexConditionalReceiver : BoundExpression 6139internal sealed partial class BoundCall : BoundExpression 6198internal sealed partial class BoundEventAssignmentOperator : BoundExpression 6237internal sealed partial class BoundAttribute : BoundExpression 6282internal sealed partial class BoundUnconvertedObjectCreationExpression : BoundExpression 6320internal abstract partial class BoundObjectCreationExpressionBase : BoundExpression 6392internal abstract partial class BoundCollectionExpressionBase : BoundExpression 6546internal abstract partial class BoundTupleExpression : BoundExpression 6696internal abstract partial class BoundObjectInitializerExpressionBase : BoundExpression 6743internal sealed partial class BoundObjectInitializerMember : BoundExpression 6792internal sealed partial class BoundDynamicObjectInitializerMember : BoundExpression 6865internal sealed partial class BoundCollectionElementInitializer : BoundExpression 6942internal sealed partial class BoundImplicitReceiver : BoundExpression 6977internal sealed partial class BoundAnonymousObjectCreationExpression : BoundExpression 7013internal sealed partial class BoundAnonymousPropertyDeclaration : BoundExpression 7083internal sealed partial class BoundDelegateCreationExpression : BoundExpression 7119internal sealed partial class BoundArrayCreation : BoundExpression 7151internal sealed partial class BoundArrayInitialization : BoundExpression 7182internal abstract partial class BoundStackAllocArrayCreationBase : BoundExpression 7257internal sealed partial class BoundFieldAccess : BoundExpression 7297internal sealed partial class BoundHoistedFieldAccess : BoundExpression 7337internal sealed partial class BoundPropertyAccess : BoundExpression 7375internal sealed partial class BoundEventAccess : BoundExpression 7411internal sealed partial class BoundIndexerAccess : BoundExpression 7462internal sealed partial class BoundImplicitIndexerAccess : BoundExpression 7511internal sealed partial class BoundInlineArrayAccess : BoundExpression 7552internal sealed partial class BoundDynamicIndexerAccess : BoundExpression 7592internal sealed partial class BoundLambda : BoundExpression 7632internal sealed partial class UnboundLambda : BoundExpression 7676internal sealed partial class BoundQueryClause : BoundExpression 7743internal sealed partial class BoundNameOfOperator : BoundExpression 7776internal abstract partial class BoundInterpolatedStringBase : BoundExpression 7912internal sealed partial class BoundStringInsert : BoundExpression 7947internal sealed partial class BoundIsPatternExpression : BoundExpression 8563internal sealed partial class BoundDiscardExpression : BoundExpression 8598internal sealed partial class BoundThrowExpression : BoundExpression 8626internal abstract partial class VariablePendingInference : BoundExpression 8695internal sealed partial class OutDeconstructVarPendingInference : BoundExpression 8796internal sealed partial class BoundExpressionWithNullability : BoundExpression 8827internal sealed partial class BoundWithExpression : BoundExpression
Lowering\SpillSequenceSpiller.cs (1)
37private sealed class BoundSpillSequenceBuilder : BoundExpression
5875 references to BoundExpression
Microsoft.CodeAnalysis.CSharp (5865)
Binder\Binder.cs (4)
492internal virtual BoundExpression? ConditionalReceiverExpression 870internal BoundExpression WrapWithVariablesIfAny(CSharpSyntaxNode scopeDesignator, BoundExpression expression) 875: new BoundSequence(scopeDesignator, locals, ImmutableArray<BoundExpression>.Empty, expression, getType()) { WasCompilerGenerated = true };
Binder\Binder.QueryTranslationState.cs (1)
31public BoundExpression fromExpression;
Binder\Binder.QueryUnboundLambdaState.cs (2)
73protected override BoundExpression GetLambdaExpressionBody(BoundBlock body) 78protected override BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics)
Binder\Binder.ValueChecks.cs (87)
127public BoundExpression? Receiver; 129public ImmutableArray<BoundExpression> ArgsOpt; 134public static MethodInvocationInfo FromCall(BoundCall call, BoundExpression? substitutedReceiver = null) 147public static MethodInvocationInfo FromCallParts(MethodSymbol method, BoundExpression receiver, ImmutableArray<BoundExpression> args, ThreeState receiverIsSubjectToCloning) 176public static MethodInvocationInfo FromIndexerAccess(BoundIndexerAccess indexerAccess, BoundExpression? substitutedReceiver = null) 250public static MethodInvocationInfo FromUserDefinedConversion(MethodSymbol operatorMethod, BoundExpression operand, bool hasAnyErrors) 263public static MethodInvocationInfo FromInlineArrayConversion(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 309public static MethodInvocationInfo FromInlineArrayAccess(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 349internal BoundExpression Argument { get; } 365internal MixableDestination(ParameterSymbol parameter, BoundExpression argument) 374internal MixableDestination(BoundExpression argument, EscapeLevel escapeLevel) 403internal BoundExpression Argument { get; } 407internal EscapeArgument(ParameterSymbol? parameter, BoundExpression argument, RefKind refKind, bool isArgList = false) 415public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out RefKind refKind) 439internal BoundExpression Argument { get; } 450internal EscapeValue(ParameterSymbol? parameter, BoundExpression argument, EscapeLevel escapeLevel, bool isRefEscape) 458public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out EscapeLevel escapeLevel, out bool isRefEscape) 643var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(accessorForDefaultArguments.ParameterCount); 734private BoundExpression CheckValue(BoundExpression expr, BindValueKind valueKind, BindingDiagnosticBag diagnostics) 862var receiver = methodGroup.ReceiverOpt; 880receiver == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(receiver), 898internal static bool IsTypeOrValueExpression(BoundExpression expression) 923internal bool CheckValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1049var receiver = ((BoundPointerElementAccess)expr).Expression; 1203bool checkArrayAccessValueKind(SyntaxNode node, BindValueKind valueKind, ImmutableArray<BoundExpression> indices, BindingDiagnosticBag diagnostics) 1238private static bool CheckNotNamespaceOrType(BoundExpression expr, BindingDiagnosticBag diagnostics) 1523private bool CheckParameterRefEscape(SyntaxNode node, BoundExpression parameter, ParameterSymbol parameterSymbol, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1800BoundExpression receiver = boundEvent.ReceiverOpt; 1862private bool CheckIsValidReceiverForVariable(SyntaxNode node, BoundExpression receiver, BindValueKind kind, BindingDiagnosticBag diagnostics) 1881private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol) 1933private bool CheckPropertyValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1940BoundExpression receiver; 2114static bool isAllowedDespiteReadonly(BoundExpression receiver) 2125bool isAllowedInitOnlySet(BoundExpression receiver) 2156private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics, 2175BoundExpression expression, 2506var receiver = methodInvocationInfo.Receiver; 2617var receiver = methodInvocationInfo.Receiver; 2650var argument = argsOpt[argIndex]; 2697static bool isMixableArgument(BoundExpression argument) 2710static EscapeArgument getReceiver(in MethodInfo methodInfo, BoundExpression receiver) 2736static EscapeArgument getReceiverCore(MethodSymbol? method, BoundExpression receiver) 2762ImmutableArray<BoundExpression> argsOpt, 2769var argument = argsOpt[argIndex]; 3102private bool ShouldInferDeclarationExpressionValEscape(BoundExpression argument, [NotNullWhen(true)] out SourceLocalSymbol? localSymbol) 3280void inferDeclarationExpressionValEscape(ImmutableArray<BoundExpression> argsOpt, SafeContext localScopeDepth, ArrayBuilder<EscapeValue> escapeValues) 3292foreach (var argument in argsOpt) 3644internal void ValidateEscape(BoundExpression expr, SafeContext escapeTo, bool isByRef, BindingDiagnosticBag diagnostics) 3667internal SafeContext GetRefEscape(BoundExpression expr, SafeContext localScopeDepth) 3867ImmutableArray<BoundExpression> arguments; 3950internal bool CheckRefEscape(SyntaxNode node, BoundExpression expr, SafeContext escapeFrom, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 4169ImmutableArray<BoundExpression> arguments; 4297foreach (var element in expr.Arguments) 4320internal SafeContext GetValEscape(BoundExpression expr, SafeContext localScopeDepth) 4505ImmutableArray<BoundExpression> arguments; 4594ImmutableArray<BoundExpression> arguments; 4817private SafeContext GetTupleValEscape(ImmutableArray<BoundExpression> elements, SafeContext localScopeDepth) 4820foreach (var element in elements) 4831foreach (var expr in colExpr.Initializers) 4851foreach (var expr in initExpr.Initializers) 4860private SafeContext GetValEscapeOfObjectMemberInitializer(BoundExpression expr, SafeContext localScopeDepth) 4965private SafeContext GetValEscape(ImmutableArray<BoundExpression> expressions, SafeContext localScopeDepth) 4968foreach (var expression in expressions) 4981internal bool CheckValEscape(SyntaxNode node, BoundExpression expr, SafeContext escapeFrom, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 5066BoundExpression underlyingReceiver = ((BoundCapturedReceiverPlaceholder)expr).Receiver; 5216ImmutableArray<BoundExpression> arguments; 5346ImmutableArray<BoundExpression> arguments; 5482var clauseValue = ((BoundQueryClause)expr).Value; 5486var variableValue = ((BoundRangeVariable)expr).Value; 5498var accessedExpression = ((BoundPointerElementAccess)expr).Expression; 5502var operandExpression = ((BoundPointerIndirectionOperator)expr).Operand; 5517var result = arm.Value; 5658private SignatureOnlyMethodSymbol GetInlineArrayAccessEquivalentSignatureMethod(BoundInlineArrayAccess elementAccess, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5720private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundConversion conversion, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5726private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundExpression inlineArray, TypeSymbol resultType, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5760private bool CheckTupleValEscape(ImmutableArray<BoundExpression> elements, SafeContext escapeFrom, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5762foreach (var element in elements) 5777foreach (var expr in colExpr.Initializers) 5803foreach (var expr in initExpr.Initializers) 5817private bool CheckInterpolatedStringHandlerConversionEscape(BoundExpression expression, SafeContext escapeFrom, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5844private SafeContext GetValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression, SafeContext localScopeDepth) 5869foreach (var part in interpolatedString.Parts) 5886private bool CheckValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression, SafeContext escapeFrom, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5911foreach (var part in interpolatedString.Parts)
Binder\Binder.WithQueryLambdaParametersBinder.cs (5)
37protected override BoundExpression BindRangeVariable(SimpleNameSyntax node, RangeVariableSymbol qv, BindingDiagnosticBag diagnostics) 41BoundExpression translation; 72private BoundExpression SelectField(SimpleNameSyntax node, BoundExpression receiver, string name, BindingDiagnosticBag diagnostics) 99var result = BindMemberOfType(node, node, name, 0, invoked: false, indexed: false, receiver, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), lookupResult, BoundMethodGroupFlags.None, diagnostics);
Binder\Binder_AnonymousTypes.cs (4)
21private BoundExpression BindAnonymousObjectCreation(AnonymousObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 31BoundExpression[] boundExpressions = new BoundExpression[fieldCount]; 211private TypeSymbol GetAnonymousTypeFieldType(BoundExpression expression, CSharpSyntaxNode errorSyntax, BindingDiagnosticBag diagnostics, ref bool hasError)
Binder\Binder_Attributes.cs (12)
188ImmutableArray<BoundExpression> boundConstructorArguments; 524var rhs = BindRValueWithoutTargetType(namedArgument.Expression, diagnostics); 563BoundExpression namedArgumentValue = this.BindValue(namedArgument.Expression, diagnostics, BindValueKind.RValue); 568BoundExpression lvalue; 763public ImmutableArray<TypedConstant> VisitArguments(ImmutableArray<BoundExpression> arguments, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool parentHasErrors = false) 771foreach (var argument in arguments) 837private TypedConstant VisitExpression(BoundExpression node, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors) 847private TypedConstant VisitExpression(BoundExpression node, TypedConstantKind typedConstantKind, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors) 897return VisitExpression((BoundExpression)node, diagnostics, ref attrHasErrors, curArgumentHasErrors); 913var operand = node.Operand; 975ImmutableArray<BoundExpression> bounds = node.Bounds; 1014private static TypedConstant CreateTypedConstant(BoundExpression node, TypedConstantKind typedConstantKind, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors,
Binder\Binder_Await.cs (22)
20private BoundExpression BindAwait(AwaitExpressionSyntax node, BindingDiagnosticBag diagnostics) 24BoundExpression expression = BindRValueWithoutTargetType(node.Expression, diagnostics); 29private BoundAwaitExpression BindAwait(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics) 52internal BoundAwaitableInfo BindAwaitInfo(BoundAwaitableValuePlaceholder getAwaiterPlaceholder, SyntaxNode node, BindingDiagnosticBag diagnostics, ref bool hasErrors, BoundExpression? expressionOpt = null) 58out BoundExpression? getAwaiter, 74private bool CouldBeAwaited(BoundExpression expression) 247BoundExpression expression, 248out BoundExpression? getAwaiterGetResultCall, 257BoundExpression expression, 258BoundExpression getAwaiterArgument, 260out BoundExpression? getAwaiter, 263out BoundExpression? getAwaiterGetResultCall, 311bool tryGetRuntimeAwaitHelper(BoundExpression expression, out BoundAwaitableValuePlaceholder? placeholder, out BoundCall? runtimeAwaitCall, BindingDiagnosticBag diagnostics) 362BoundExpression argument = CreateConversion(placeholder, argumentConversion, destination: method.Parameters[0].Type, diagnostics); 542private static bool ValidateAwaitedExpression(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics) 570private bool GetGetAwaiterMethod(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundExpression? getAwaiterCall) 580getAwaiterCall = MakeInvocationExpression(node, expression, WellKnownMemberNames.GetAwaiter, ImmutableArray<BoundExpression>.Empty, diagnostics); 621var qualified = BindInstanceMemberAccess(node, node, receiver, name, 0, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), invoked: false, indexed: false, diagnostics); 684private bool GetGetResultMethod(BoundExpression awaiterExpression, SyntaxNode node, TypeSymbol awaitedExpressionType, BindingDiagnosticBag diagnostics, out MethodSymbol? getResultMethod, [NotNullWhen(true)] out BoundExpression? getAwaiterGetResultCall) 687getAwaiterGetResultCall = MakeInvocationExpression(node, awaiterExpression, WellKnownMemberNames.GetResult, ImmutableArray<BoundExpression>.Empty, diagnostics);
Binder\Binder_Conversions.cs (75)
20internal BoundExpression CreateConversion( 21BoundExpression source, 32internal BoundExpression CreateConversion( 33BoundExpression source, 41internal BoundExpression CreateConversion( 43BoundExpression source, 53protected BoundExpression CreateConversion( 55BoundExpression source, 65var result = createConversion(syntax, source, conversion, isCast, conversionGroupOpt, wasCompilerGenerated, destination, diagnostics, hasErrors); 78var result2 = createConversion(syntax, placeholder2, conversion, isCast, conversionGroupOpt, wasCompilerGenerated, destination, BindingDiagnosticBag.Discarded, hasErrors); 95BoundExpression createConversion( 97BoundExpression source, 161var convertedSwitch = ConvertSwitchExpression((BoundUnconvertedSwitchExpression)source, destination, conversionIfTargetTyped: conversion, diagnostics); 176var convertedConditional = ConvertConditionalExpression((BoundUnconvertedConditionalOperator)source, destination, conversionIfTargetTyped: conversion, diagnostics); 300void reportUseSiteDiagnostics(SyntaxNode syntax, Conversion conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics) 314void ensureAllUnderlyingConversionsChecked(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool wasCompilerGenerated, TypeSymbol destination, BindingDiagnosticBag diagnostics) 407void checkConstraintLanguageVersionAndRuntimeSupportForConversion(SyntaxNode syntax, Conversion conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics) 707private BoundExpression BindUnconvertedInterpolatedExpressionToFormattableStringFactory(BoundUnconvertedInterpolatedString unconvertedSource, TypeSymbol destination, BindingDiagnosticBag diagnostics) 712ImmutableArray<BoundExpression> parts = BindInterpolatedStringPartsForFactory(unconvertedSource, diagnostics, out bool haveErrors); 741private static BoundExpression ConvertObjectCreationExpression( 746BoundExpression expr = bindObjectCreationExpression(node.Syntax, node.InitializerOpt, node.Binder, destination.StrippedType(), arguments, diagnostics); 774static BoundExpression bindObjectCreationExpression( 839BoundExpression? collectionBuilderInvocationConversion = null; 880BoundExpression? collectionCreation = null; 921ImmutableArray.Create((BoundExpression)element), 961(BoundExpression)element, 995var convertElement = CreateConversion( 1077internal BoundExpression BindCollectionExpressionConstructor(SyntaxNode syntax, TypeSymbol targetType, MethodSymbol? constructor, BindingDiagnosticBag diagnostics) 1086BoundExpression collectionCreation; 1296BoundExpression receiver, 1301var boundExpression = addMethodBinder.BindInstanceMemberAccess( 1538ImmutableArray.Create<BoundExpression>(methodGroup.ReceiverOpt, new BoundValuePlaceholder(syntax, secondArgumentType) { WasCompilerGenerated = true }), 1628internal static BoundExpression GetUnderlyingCollectionExpressionElement(BoundCollectionExpression expr, BoundExpression element, bool throwOnErrors) 1664static BoundExpression getCollectionInitializerElement(BoundCollectionElementInitializer collectionInitializer) 1667var arg = collectionInitializer.Arguments[argIndex]; 1677else if (arg is BoundConversion { Operand: BoundCollectionExpression { Elements: [BoundExpression collectionElement] } }) 1691BoundExpression collectionExpr = new BoundValuePlaceholder(syntax, collectionType); 1720var result = element is BoundExpression expression ? 1812Conversion elementConversion = Conversions.ClassifyImplicitConversionFromExpression((BoundExpression)element, elementType, ref useSiteInfo); 1815GenerateImplicitConversionError(diagnostics, element.Syntax, elementConversion, (BoundExpression)element, elementType); 1922private BoundExpression ConvertConditionalExpression( 1933var condition = source.Condition; 1936var trueExpr = 1940var falseExpr = 1965private BoundExpression ConvertSwitchExpression(BoundUnconvertedSwitchExpression source, TypeSymbol destination, Conversion? conversionIfTargetTyped, BindingDiagnosticBag diagnostics, bool hasErrors = false) 1975var oldValue = oldCase.Value; 1976var newValue = 1992private BoundExpression CreateUserDefinedConversion( 1994BoundExpression source, 2054BoundExpression convertedOperand = CreateConversion( 2082BoundExpression userDefinedConversion; 2146BoundExpression finalConversion = CreateConversion( 2163private BoundExpression CreateFunctionTypeConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics) 2186BoundExpression expr; 2211private BoundExpression CreateAnonymousFunctionConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics) 2238private BoundExpression CreateMethodGroupConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics) 2396private BoundExpression CreateStackAllocConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics) 2424private BoundExpression CreateTupleLiteralConversion(SyntaxNode syntax, BoundTupleLiteral sourceTuple, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics) 2475var convertedArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length); 2484var argument = arguments[i]; 2491BoundExpression result = new BoundConvertedTupleLiteral( 2549BoundExpression? receiverOpt = group.ReceiverOpt; 2577private bool MemberGroupFinalValidation(BoundExpression? receiverOpt, MethodSymbol methodSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod) 2652private bool MemberGroupFinalValidationAccessibilityChecks(BoundExpression? receiverOpt, Symbol memberSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod) 2762private static bool IsMemberAccessedThroughVariableOrValue(BoundExpression? receiverOpt) 2772internal static bool IsMemberAccessedThroughType([NotNullWhen(true)] BoundExpression? receiverOpt) 2790internal static bool WasImplicitReceiver([NotNullWhen(false)] BoundExpression? receiverOpt) 2808internal bool MethodIsCompatibleWithDelegateOrFunctionPointer(BoundExpression? receiverOpt, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, Location errorLocation, BindingDiagnosticBag diagnostics) 2994BoundExpression? receiverOpt, 3091BoundExpression source,
Binder\Binder_Deconstruct.cs (28)
29internal BoundExpression BindDeconstruction(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics, bool resultIsUsedOverride = false) 99BoundExpression boundRight = rightPlaceholder ?? BindValue(right, deconstructionDiagnostics, BindValueKind.RValue); 115BoundExpression boundRHS, 208private BoundExpression FixTupleLiteral(ArrayBuilder<DeconstructionVariable> checkedVariables, BoundExpression boundRHS, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics) 277BoundExpression deconstructInvocation = MakeDeconstructInvocationExpression(variables.Count, 295var nestedConversions = ArrayBuilder<(BoundValuePlaceholder?, BoundExpression?)>.GetInstance(count); 319var single = variable.Single; 367private BoundExpression SetInferredType(BoundExpression expression, TypeSymbol type, BindingDiagnosticBag diagnostics) 407BoundExpression errorLocal = ((DeconstructionVariablePendingInference)variable.Single).FailInference(this, diagnostics); 432internal readonly BoundExpression? Single; 436internal DeconstructionVariable(BoundExpression variable, SyntaxNode syntax) 480BoundExpression element = rhsLiteral.Arguments[i]; 549var valuesBuilder = ArrayBuilder<BoundExpression>.GetInstance(count); 556BoundExpression value; 572ImmutableArray<BoundExpression> arguments = valuesBuilder.ToImmutableAndFree(); 595private static string? ExtractDeconstructResultElementName(BoundExpression expression) 611private BoundExpression MakeDeconstructInvocationExpression( 613BoundExpression receiver, 638var variableOpt = variablesOpt?[i].Single; 652var memberAccess = BindInstanceMemberAccess( 670BoundExpression result = BindMethodGroupInvocation( 715private BoundBadExpression MissingDeconstruct(BoundExpression receiver, SyntaxNode rightSyntax, int numParameters, BindingDiagnosticBag diagnostics, 716out ImmutableArray<BoundDeconstructValuePlaceholder> outPlaceholders, BoundExpression childNode) 791var boundVariable = BindExpression(node, diagnostics, invoked: false, indexed: false); 792var checkedVariable = CheckValue(boundVariable, BindValueKind.Assignable, diagnostics); 865private BoundExpression BindDeconstructionVariable(
Binder\Binder_Expressions.cs (399)
26/// This portion of the binder converts an <see cref="ExpressionSyntax"/> into a <see cref="BoundExpression"/>. 120private BoundBadExpression BadExpression(SyntaxNode syntax, BoundExpression childNode) 128private BoundBadExpression BadExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> childNodes) 144protected BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind lookupResultKind, BoundExpression childNode) 157ImmutableArray<BoundExpression>.Empty, 165private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode) 178private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false) 200private BoundExpression ToBadExpression(BoundExpression expr, LookupResultKind resultKind = LookupResultKind.Empty) 242internal BoundExpression BindValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind) 244var result = this.BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false); 248internal BoundExpression BindRValueWithoutTargetType(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true) 257internal BoundExpression BindTypeOrRValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 259var valueOrType = BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false); 270internal BoundExpression BindToTypeForErrorRecovery(BoundExpression expression, TypeSymbol type = null) 274var result = 288internal BoundExpression BindToNaturalType(BoundExpression expression, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true) 293BoundExpression result; 338var boundArgs = ArrayBuilder<BoundExpression>.GetInstance(sourceTuple.Arguments.Length); 339foreach (var arg in sourceTuple.Arguments) 415private BoundExpression BindToInferredDelegateType(BoundExpression expr, BindingDiagnosticBag diagnostics) 436internal BoundExpression BindValueAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind) 438var result = this.BindExpressionAllowArgList(node, diagnostics: diagnostics); 457BoundExpression result = initializerBinder.BindVariableOrAutoPropInitializerValue(initializerOpt, field.RefKind, 470internal BoundExpression BindVariableOrAutoPropInitializerValue( 484BoundExpression initializer = BindPossibleArrayInitializer(value, varType, valueKind, diagnostics); 503out BoundExpression valueBeforeConversion) 532var initializer = initializerBinder.BindValue(equalsValueSyntax.Value, diagnostics, BindValueKind.RValue); 537public BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 542protected BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 544BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked, indexed); 560protected BoundExpression BindExpressionAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 562BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked: false, indexed: false); 567private void CheckContextForPointerTypes(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression expr) 580private BoundExpression BindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 587BoundExpression result = bindExpressionInternal(node, diagnostics, invoked, indexed); 596BoundExpression bindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 857private BoundExpression BindRefExpression(RefExpressionSyntax node, BindingDiagnosticBag diagnostics) 862node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(BindToTypeForErrorRecovery(BindValue(node.Expression, BindingDiagnosticBag.Discarded, BindValueKind.RefersToLocation))), 866private BoundExpression BindRefType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 873private BoundExpression BindScopedType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 880private BoundExpression BindThrowExpression(ThrowExpressionSyntax node, BindingDiagnosticBag diagnostics) 891var thrownExpression = BindThrownExpression(node.Expression, diagnostics, ref hasErrors); 930private BoundExpression BindDeclarationExpressionAsError(DeclarationExpressionSyntax node, BindingDiagnosticBag diagnostics) 947private BoundExpression BindDeclarationVariablesForErrorRecovery(TypeWithAnnotations declTypeWithAnnotations, VariableDesignationSyntax node, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics) 955var result = BindDeconstructionVariable(declTypeWithAnnotations, single, syntax, diagnostics); 966var builder = ArrayBuilder<BoundExpression>.GetInstance(count); 974ImmutableArray<BoundExpression> subExpressions = builder.ToImmutableAndFree(); 1003private BoundExpression BindTupleExpression(TupleExpressionSyntax node, BindingDiagnosticBag diagnostics) 1015ImmutableArray<BoundExpression>.Empty; 1022var boundArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Count); 1044BoundExpression boundArgument = BindValue(argumentSyntax.Expression, diagnostics, BindValueKind.RValue); 1050ImmutableArray.Create<BoundExpression>(boundArgument), CreateErrorType("void")); 1220private BoundExpression BindRefValue(RefValueExpressionSyntax node, BindingDiagnosticBag diagnostics) 1225BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue); 1245private BoundExpression BindMakeRef(MakeRefExpressionSyntax node, BindingDiagnosticBag diagnostics) 1248BoundExpression argument = this.BindValue(node.Expression, diagnostics, BindValueKind.RefOrOut); 1269private BoundExpression BindRefType(RefTypeExpressionSyntax node, BindingDiagnosticBag diagnostics) 1273BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue); 1291private BoundExpression BindArgList(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics) 1358private BoundExpression BindQualifiedName(QualifiedNameSyntax node, BindingDiagnosticBag diagnostics) 1363private BoundExpression BindParenthesizedExpression(ExpressionSyntax innerExpression, BindingDiagnosticBag diagnostics) 1365var result = BindExpression(innerExpression, diagnostics); 1375private BoundExpression BindTypeOf(TypeOfExpressionSyntax node, BindingDiagnosticBag diagnostics) 1430private BoundExpression BindSizeOf(SizeOfExpressionSyntax node, BindingDiagnosticBag diagnostics) 1446private BoundExpression BindFieldExpression(FieldExpressionSyntax node, BindingDiagnosticBag diagnostics) 1591private BoundExpression BindDefaultExpression(DefaultExpressionSyntax node, BindingDiagnosticBag diagnostics) 1604private BoundExpression BindIdentifier( 1637BoundExpression expression; 1671var receiver = SynthesizeMethodGroupReceiver(node, members); 1902private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members) 2012private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError) 2237BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2243BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2249BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2310protected virtual BoundExpression BindRangeVariable(SimpleNameSyntax node, RangeVariableSymbol qv, BindingDiagnosticBag diagnostics) 2315private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics) 2391private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType) 2433public BoundExpression BindNamespaceOrTypeOrExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2459public BoundExpression BindLabel(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2487public BoundExpression BindNamespaceOrType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2493public BoundExpression BindNamespaceAlias(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics) 2499private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol) 2607private BoundExpression BindCast(CastExpressionSyntax node, BindingDiagnosticBag diagnostics) 2609BoundExpression operand = this.BindValue(node.Expression, diagnostics, BindValueKind.RValue); 2625private BoundExpression BindFromEndIndexExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 2634BoundExpression boundOperand = BindValue(node.Operand, diagnostics, BindValueKind.RValue); 2662BoundExpression boundConversion = CreateConversion(boundOperand, conversion, intType, diagnostics); 2668private BoundExpression BindRangeExpression(RangeExpressionSyntax node, BindingDiagnosticBag diagnostics) 2714BoundExpression left = BindRangeExpressionOperand(node.LeftOperand, diagnostics); 2715BoundExpression right = BindRangeExpressionOperand(node.RightOperand, diagnostics); 2735private BoundExpression BindRangeExpressionOperand(ExpressionSyntax operand, BindingDiagnosticBag diagnostics) 2742BoundExpression boundOperand = BindValue(operand, diagnostics, BindValueKind.RValue); 2771private BoundExpression BindCastCore(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, bool wasCompilerGenerated, BindingDiagnosticBag diagnostics) 2793BoundExpression operand, 2918ImmutableArray<BoundExpression> tupleArguments, 2930var argument = tupleArguments[i]; 2950private BoundExpression BindExplicitNullableCastFromNonNullable(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, BindingDiagnosticBag diagnostics) 2968var underlyingExpr = BindCastCore(node, operand, underlyingTargetTypeWithAnnotations, wasCompilerGenerated: false, diagnostics: bag); 2984var result = BindCastCore(node, operand, targetTypeWithAnnotations, wasCompilerGenerated: operand.WasCompilerGenerated, diagnostics: bag2); 3126BoundExpression boundArgument = BindArgumentValue(diagnostics, argumentSyntax, allowArglist, refKind); 3140var arg = result.Argument(0); 3157private BoundExpression BindArgumentValue(BindingDiagnosticBag diagnostics, ArgumentSyntax argumentSyntax, bool allowArglist, RefKind refKind) 3177private BoundExpression BindOutDeclarationArgument(DeclarationExpressionSyntax declarationExpression, BindingDiagnosticBag diagnostics) 3214private BoundExpression BindOutVariableDeclarationArgument( 3279BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics); 3356BoundExpression boundArgumentExpression, 3424private BoundExpression BindArgumentExpression(BindingDiagnosticBag diagnostics, ExpressionSyntax argumentExpression, RefKind refKind, bool allowArglist) 3433BoundExpression argument; 3452BoundExpression? receiver, 3460ArrayBuilder<BoundExpression>? paramsArgsBuilder = null; 3468BoundExpression argument = arguments[arg]; 3507BoundExpression coerceArgument( 3509BoundExpression? receiver, 3511ArrayBuilder<BoundExpression>? argumentsForInterpolationConversion, 3512BoundExpression argument, 3519BoundExpression coercedArgument = argument; 3564static ArrayBuilder<BoundExpression> collectParamsArgs( 3567ArrayBuilder<BoundExpression> arguments, 3572var paramsArgsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 3598BoundExpression? receiver, 3602ArrayBuilder<BoundExpression> paramsArgsBuilder, 3628ImmutableArray<BoundExpression> collectionArgs = paramsArgsBuilder.ToImmutableAndFree(); 3631BoundExpression collection = CreateParamsCollection(node, parameters[paramsIndex], collectionArgs, diagnostics); 3671void reportUnsafeIfNeeded(MemberResolutionResult<TMember> methodResult, BindingDiagnosticBag diagnostics, BoundExpression argument, TypeWithAnnotations parameterTypeWithAnnotations) 3688BoundExpression bindInterpolatedStringHandlerInMemberCall( 3689BoundExpression unconvertedString, 3691ArrayBuilder<BoundExpression>? arguments, 3695BoundExpression? receiver, 3902var interpolatedString = BindUnconvertedInterpolatedExpressionToHandlerType( 3922private void CheckArgumentRefKind(RefKind argRefKind, BoundExpression argument, int arg, ParameterSymbol parameter, 3994private BoundExpression BindArrayCreationExpression(ArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4078ArrayBuilder<BoundExpression> sizes = ArrayBuilder<BoundExpression>.GetInstance(); 4083var size = BindArrayDimension(arg, diagnostics, ref hasErrors); 4104var size = BindRValueWithoutTargetType(arg, diagnostics); 4113ImmutableArray<BoundExpression> arraySizes = sizes.ToImmutableAndFree(); 4120private BoundExpression BindArrayDimension(ExpressionSyntax dimension, BindingDiagnosticBag diagnostics, ref bool hasErrors) 4125var size = BindValue(dimension, diagnostics, BindValueKind.RValue); 4145private BoundExpression BindImplicitArrayCreationExpression(ImplicitArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4153ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: rank); 4174sizes: ImmutableArray<BoundExpression>.Empty, boundInitExprOpt: boundInitializerExpressions); 4177private BoundExpression BindImplicitStackAllocArrayCreationExpression(ImplicitStackAllocArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4180ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: 1); 4212private ImmutableArray<BoundExpression> BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, BindingDiagnosticBag diagnostics, int dimension, int rank) 4214var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 4229private void BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, ArrayBuilder<BoundExpression> exprBuilder, BindingDiagnosticBag diagnostics, int dimension, int rank) 4241var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue); 4258var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue); 4300ImmutableArray<BoundExpression> boundInitExpr, 4306ArrayBuilder<BoundExpression> initializers = ArrayBuilder<BoundExpression>.GetInstance(); 4316BoundExpression boundExpression = boundInitExpr[boundInitExprIndex]; 4319BoundExpression convertedExpression = GenerateConversionForAssignment(elemType, boundExpression, diagnostics); 4328BoundExpression init = null; 4381ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>)) 4448ImmutableArray<BoundExpression> sizes, 4449ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>), 4476var size = sizes[i]; 4501BoundExpression[] sizeArray = new BoundExpression[rank]; 4527private BoundExpression BindStackAllocArrayCreationExpression( 4540ImmutableArray<BoundExpression>.Empty, 4563var builder = ArrayBuilder<BoundExpression>.GetInstance(); 4584BoundExpression count = null; 4688private BoundExpression BindStackAllocWithInitializer( 4694BoundExpression sizeOpt, 4697ImmutableArray<BoundExpression> boundInitExprOpt = default) 4740private static int? GetIntegerConstantForArraySize(BoundExpression expression) 4761private static bool IsNegativeConstantForArraySize(BoundExpression expression) 4807internal BoundExpression BindConstructorInitializer( 4819var result = (argumentListBinder ?? this).BindConstructorInitializerCore(initializerArgumentListOpt, constructor, diagnostics); 4831private BoundExpression BindConstructorInitializerCore( 4992private BoundExpression BindConstructorInitializerCoreContinued( 5025BoundExpression receiver = ThisReference(nonNullSyntax, initializerType, wasCompilerGenerated: true); 5165private static (ParameterSymbol, SyntaxNode) TryGetPrimaryConstructorParameterUsedAsValue(SynthesizedPrimaryConstructor primaryConstructor, BoundExpression boundExpression) 5200private BoundExpression BindImplicitObjectCreationExpression(ImplicitObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5217protected BoundExpression BindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5219BoundExpression result = bindObjectCreationExpression(node, diagnostics); 5226BoundExpression bindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5277private BoundExpression BindCollectionExpression(CollectionExpressionSyntax syntax, BindingDiagnosticBag diagnostics, int nestingLevel = 0) 5284return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType()); 5315var expression = @this.BindRValueWithoutTargetType(syntax.Expression, diagnostics); 5342var convertedExpression = @this.ConvertForEachCollection(expressionPlaceholder, conversion, collectionType, diagnostics); 5344BoundExpression? lengthOrCount; 5371private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics) 5375var result = BindDelegateCreationExpression(node, type, analyzedArguments, node.Initializer, wasTargetTyped: false, diagnostics); 5380private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics) 5414BoundExpression argument = analyzedArguments.Arguments.Count >= 1 ? BindToNaturalType(analyzedArguments.Arguments[0], diagnostics) : null; 5549private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null) 5583private BoundExpression MakeConstructorInvocation( 5585ArrayBuilder<BoundExpression> arguments, 5604var creation = BindClassCreationExpression(node, type.Name, node, type, analyzedArguments, diagnostics); 5614internal BoundExpression BindObjectCreationForErrorRecovery(BoundUnconvertedObjectCreationExpression node, BindingDiagnosticBag diagnostics) 5617var result = MakeBadExpressionForObjectCreation(node.Syntax, CreateErrorType(), arguments, node.InitializerOpt, typeSyntax: node.Syntax, diagnostics); 5622private BoundExpression MakeBadExpressionForObjectCreation(ObjectCreationExpressionSyntax node, TypeSymbol type, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics, bool wasCompilerGenerated = false) 5628private BoundExpression MakeBadExpressionForObjectCreation(SyntaxNode node, TypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax? initializerOpt, SyntaxNode? typeSyntax, BindingDiagnosticBag diagnostics, bool wasCompilerGenerated = false) 5630var children = ArrayBuilder<BoundExpression>.GetInstance(); 5678private BoundExpression BindInitializerExpressionOrValue( 5730var initializers = ArrayBuilder<BoundExpression>.GetInstance(initializerSyntax.Expressions.Count); 5736BoundExpression boundMemberInitializer = BindInitializerMemberAssignment( 5751private BoundExpression BindInitializerMemberAssignment( 5773BoundExpression boundLeft = objectInitializerMemberBinder.BindObjectInitializerMember(initializer, implicitReceiver, diagnostics); 5784BoundExpression boundRight = BindInitializerExpressionOrValue( 5807var boundNode = objectInitializerMemberBinder.BindObjectInitializerMemberMissingAssignment(identifierName, implicitReceiver, diagnostics); 5829var boundExpression = BindValue(memberInitializer, diagnostics, BindValueKind.RValue); 5835private BoundExpression BindObjectInitializerMember( 5851private BoundExpression BindObjectInitializerMemberMissingAssignment( 5861private BoundExpression BindObjectInitializerMemberCommon( 5868BoundExpression boundMember; 5950ImmutableArray<BoundExpression> arguments = ImmutableArray<BoundExpression>.Empty; 6002foreach (var argument in arguments) 6101private BoundExpression BadObjectInitializerMemberAccess( 6102BoundExpression boundMember, 6143private static void ReportDuplicateObjectMemberInitializers(BoundExpression boundMemberInitializer, HashSet<string> memberNameMap, BindingDiagnosticBag diagnostics) 6185ImmutableArray<BoundExpression> initializers, 6204foreach (var initializer in initializers) 6295var initializerBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 6320BoundExpression boundElementInitializer = BindCollectionInitializerElement(elementInitializer, initializerType, 6365private BoundExpression BindCollectionInitializerElement( 6395var boundElementInitializer = BindInitializerExpressionOrValue(elementInitializer, initializerType, BindValueKind.RValue, implicitReceiver.Syntax, diagnostics); 6397BoundExpression result = BindCollectionInitializerElementAddMethod( 6410private BoundExpression BindComplexElementInitializerExpression( 6421var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 6442private BoundExpression BindUnexpectedComplexElementInitializer(InitializerExpressionSyntax node, BindingDiagnosticBag diagnostics) 6449private BoundExpression BindCollectionInitializerElementAddMethod( 6451ImmutableArray<BoundExpression> boundElementInitializerExpressions, 6482var result = bindCollectionInitializerElementAddMethod(elementInitializer, boundElementInitializerExpressions, collectionInitializerAddMethodBinder, diagnostics, implicitReceiver); 6501BoundExpression bindCollectionInitializerElementAddMethod( 6503ImmutableArray<BoundExpression> boundElementInitializerExpressions, 6529var addMethodInvocation = collectionInitializerAddMethodBinder.MakeInvocationExpression( 6625var addMethodInvocation = BindCollectionInitializerElementAddMethod( 6627ImmutableArray.Create((BoundExpression)addElementPlaceholder), 6703protected BoundExpression BindClassCreationExpression( 6721BoundExpression result = null; 6886private BoundExpression CreateBadClassCreationExpression( 6936var childNodes = ArrayBuilder<BoundExpression>.GetInstance(); 6959private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics) 6963var result = BindInterfaceCreationExpression(node, type, diagnostics, node.Type, analyzedArguments, node.Initializer, wasTargetTyped: false); 6968private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped) 6994private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped) 7032var classCreation = BindClassCreationExpression( 7075private BoundExpression BindNoPiaObjectCreationExpression( 7117private BoundExpression BindTypeParameterCreationExpression(ObjectCreationExpressionSyntax node, TypeParameterSymbol typeParameter, BindingDiagnosticBag diagnostics) 7121var result = BindTypeParameterCreationExpression(node, typeParameter, analyzedArguments, node.Initializer, node.Type, wasTargetTyped: false, diagnostics); 7138private BoundExpression BindTypeParameterCreationExpression( 7447private BoundExpression BindCheckedExpression(CheckedExpressionSyntax node, BindingDiagnosticBag diagnostics) 7456private BoundExpression BindMemberAccess( 7465BoundExpression boundLeft; 7509private BoundExpression BindLeftOfPotentialColorColorMemberAccess(ExpressionSyntax left, BindingDiagnosticBag diagnostics) 7522private BoundExpression BindLeftIdentifierOfPotentialColorColorMemberAccess(IdentifierNameSyntax left, BindingDiagnosticBag diagnostics) 7537var boundValue = BindIdentifier(left, invoked: false, indexed: false, diagnostics: valueDiagnostics); 7567var boundType = BindNamespaceOrType(left, typeDiagnostics); 7619private BoundExpression BindDynamicMemberAccess( 7621BoundExpression boundLeft, 7678/// <see cref="MakeQueryInvocation(CSharpSyntaxNode, BoundExpression, bool, string, SeparatedSyntaxList{TypeSyntax}, ImmutableArray{TypeWithAnnotations}, ImmutableArray{BoundExpression}, BindingDiagnosticBag, string?)"/>. 7690private BoundExpression BindMemberAccessWithBoundLeft( 7692BoundExpression boundLeft, 7775BoundExpression result; 7840BoundExpression tryBindMemberAccessWithBoundNamespaceLeft( 7843BoundExpression boundLeft, 7912BoundExpression tryBindMemberAccessWithBoundTypeLeft( 7914BoundExpression boundLeft, 7963var nonMethodExtensionMember = ResolveExtensionMemberAccessIfResultIsNonMethod(node, boundLeft, rightName, 7980private void WarnOnAccessOfOffDefault(SyntaxNode node, BoundExpression boundLeft, BindingDiagnosticBag diagnostics) 7994private BoundExpression MakeMemberAccessValue(BoundExpression expr, BindingDiagnosticBag diagnostics) 8042internal BoundExpression? ResolveExtensionMemberAccessIfResultIsNonMethod(SyntaxNode syntax, BoundExpression receiver, string name, 8071private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics) 8098private BoundExpression BindInstanceMemberAccess( 8101BoundExpression boundLeft, 8151var nonMethodExtensionMember = ResolveExtensionMemberAccessIfResultIsNonMethod(node, boundLeft, rightName, 8173private BoundMethodGroup MakeBoundMethodGroupAndCheckOmittedTypeArguments(BoundExpression boundLeft, string rightName, 8226BoundExpression boundLeft, 8301private BoundExpression BindMemberAccessBadResult(BoundMethodGroup node) 8311private BoundExpression BindMemberAccessBadResult( 8314BoundExpression boundLeft, 8353boundLeft == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(BindToTypeForErrorRecovery(boundLeft)), 8385private static void CombineExtensionMethodArguments(BoundExpression receiver, AnalyzedArguments? originalArguments, AnalyzedArguments extensionMethodArguments) 8415private static void InitializeExtensionPropertyArguments(BoundExpression receiver, AnalyzedArguments extensionPropertyArguments) 8429private BoundExpression BindMemberOfType( 8436BoundExpression left, 8449BoundExpression result; 8515boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 8555BoundExpression left, 8635BoundExpression left, 8744BoundExpression left, 8829BoundExpression left, 8875private bool AllowRefOmittedArguments(BoundExpression receiver) 8883protected BoundExpression BindFieldAccess( 8885BoundExpression receiver, 8988BoundExpression expr = new BoundFieldAccess(node, receiver, fieldSymbol, constantValueOpt, resultKind, fieldType, hasErrors: (hasErrors || hasError)); 9043private BoundExpression BindPropertyAccess( 9045BoundExpression? receiver, 9064private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics) 9123private BoundExpression BindEventAccess( 9125BoundExpression receiver, 9146private static bool? IsInstanceReceiver(BoundExpression receiver) 9171BoundExpression receiver, 9339private BoundExpression BindElementAccess(ElementAccessExpressionSyntax node, BindingDiagnosticBag diagnostics) 9341BoundExpression receiver = BindExpression(node.Expression, diagnostics: diagnostics, invoked: false, indexed: true); 9345private BoundExpression BindElementAccess(ExpressionSyntax node, BoundExpression receiver, BracketedArgumentListSyntax argumentList, bool allowInlineArrayElementAccess, BindingDiagnosticBag diagnostics) 9370private BoundExpression BindElementOrIndexerAccess(ExpressionSyntax node, BoundExpression expr, AnalyzedArguments analyzedArguments, bool allowInlineArrayElementAccess, BindingDiagnosticBag diagnostics) 9417BoundExpression result = BindElementAccessCore(node, expr, analyzedArguments, diagnosticsForBindElementAccessCore); 9436BoundExpression tryImplicitConversionToInlineArrayIndex(ExpressionSyntax node, BoundExpression index, BindingDiagnosticBag diagnostics, out WellKnownType indexOrRangeWellknownType) 9439BoundExpression convertedIndex = TryImplicitConversionToArrayIndex(index, SpecialType.System_Int32, node, diagnostics); 9462BoundExpression bindInlineArrayElementAccess(ExpressionSyntax node, BoundExpression expr, int length, AnalyzedArguments analyzedArguments, BoundExpression convertedIndex, WellKnownType indexOrRangeWellknownType, FieldSymbol elementField, BindingDiagnosticBag diagnostics) 9537if (rangeExpr.LeftOperandOpt is BoundExpression left) 9542if (rangeExpr.RightOperandOpt is BoundExpression right) 9587void checkInlineArrayBoundsForSystemIndex(BoundExpression convertedIndex, int length, bool excludeEnd, BindingDiagnosticBag diagnostics) 9599internal static int? InferConstantIndexFromSystemIndex(CSharpCompilation compilation, BoundExpression convertedIndex, int length, out SyntaxNode location) 9632private BoundExpression BadIndexerExpression(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, DiagnosticInfo errorOpt, BindingDiagnosticBag diagnostics) 9643private BoundExpression BindElementAccessCore( 9645BoundExpression expr, 9678private BoundExpression BindArrayAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics) 9713BoundExpression[] convertedArguments = new BoundExpression[arguments.Arguments.Count]; 9717BoundExpression argument = arguments.Arguments[i]; 9719BoundExpression index = ConvertToArrayIndex(argument, diagnostics, allowIndexAndRange: rank == 1, out indexOrRangeWellknownType); 9753indexerOrSliceAccess: new BoundArrayAccess(node, receiverPlaceholder, ImmutableArray<BoundExpression>.CastUp(argumentPlaceholders), resultType) { WasCompilerGenerated = true }, 9761private BoundExpression ConvertToArrayIndex(BoundExpression index, BindingDiagnosticBag diagnostics, bool allowIndexAndRange, out WellKnownType indexOrRangeWellknownType) 9777var result = 9828private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, WellKnownType wellKnownType, SyntaxNode node, BindingDiagnosticBag diagnostics) 9839var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics); 9849private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, SpecialType specialType, SyntaxNode node, BindingDiagnosticBag diagnostics) 9855var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics); 9866private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, TypeSymbol targetType, SyntaxNode node, BindingDiagnosticBag diagnostics) 9884BoundExpression result = CreateConversion(expr.Syntax, expr, conversion, isCast: false, conversionGroupOpt: null, destination: targetType, diagnostics); // UNDONE: was cast? 9890private BoundExpression BindPointerElementAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics) 9912ArrayBuilder<BoundExpression> arguments = analyzedArguments.Arguments; 9929BoundExpression index = arguments[0]; 9951private BoundExpression BindIndexerAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics) 9965BoundExpression indexerAccessExpression; 10021private BoundExpression BindIndexedPropertyAccess(BoundPropertyGroup propertyGroup, bool mustHaveAllOptionalParameters, BindingDiagnosticBag diagnostics) 10024var receiver = propertyGroup.ReceiverOpt; 10038ImmutableArray<BoundExpression>.Empty, 10045var result = BindIndexedPropertyAccess(syntax, receiver, properties, arguments, diagnostics); 10051private BoundExpression BindIndexedPropertyAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<PropertySymbol> propertyGroup, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics) 10058var result = BindIndexerOrIndexedPropertyAccess(syntax, receiver, properties, arguments, diagnostics); 10064private BoundExpression BindDynamicIndexer( 10066BoundExpression receiver, 10108private BoundExpression BindIndexerOrIndexedPropertyAccess( 10110BoundExpression receiver, 10148private BoundExpression BindIndexerOrIndexedPropertyAccessContinued( 10150BoundExpression receiver, 10156BoundExpression propertyAccess; 10195ImmutableArray<BoundExpression> arguments = BuildArgumentsForErrorRecovery(analyzedArguments, candidates); 10257BoundExpression receiver, 10274var argument = arguments.Arguments[0]; 10291out var lengthOrCountAccess, out var indexerOrSliceAccess, out var argumentPlaceholders, diagnostics)) 10344[NotNullWhen(true)] out BoundExpression? lengthOrCountAccess, 10345[NotNullWhen(true)] out BoundExpression? indexerOrSliceAccess, 10377[NotNullWhen(true)] out BoundExpression? indexerOrSliceAccess, 10479void makeCall(SyntaxNode syntax, BoundExpression receiver, MethodSymbol method, 10480out BoundExpression indexerOrSliceAccess, out ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders) 10517out BoundExpression lengthOrCountAccess, 10884BoundExpression receiver = node.ReceiverOpt; 11002private static bool IsStaticInstanceMismatchForUniqueSignatureFromMethodGroup(BoundExpression receiver, Symbol extensionMember) 11099BoundExpression receiver = node.ReceiverOpt; 11357BoundExpression receiver = BindConditionalAccessReceiver(node, diagnostics); 11360var access = conditionalAccessBinder.BindValue(node.WhenNotNull, diagnostics, BindValueKind.RValue); 11461private BoundConditionalAccess GenerateBadConditionalAccessNodeError(ConditionalAccessExpressionSyntax node, BoundExpression receiver, BoundExpression access, BindingDiagnosticBag diagnostics) 11470private BoundExpression BindMemberBindingExpression(MemberBindingExpressionSyntax node, bool invoked, bool indexed, BindingDiagnosticBag diagnostics) 11472BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics); 11474var memberAccess = BindMemberAccessWithBoundLeft(node, receiver, node.Name, node.OperatorToken, invoked, indexed, diagnostics); 11478private BoundExpression BindElementBindingExpression(ElementBindingExpressionSyntax node, BindingDiagnosticBag diagnostics) 11480BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics); 11482var memberAccess = BindElementAccess(node, receiver, node.ArgumentList, allowInlineArrayElementAccess: true, diagnostics); 11501private BoundExpression GetReceiverForConditionalBinding(ExpressionSyntax binding, BindingDiagnosticBag diagnostics) 11506BoundExpression receiver = this.ConditionalReceiverExpression; 11526private BoundExpression BindConditionalAccessReceiver(ConditionalAccessExpressionSyntax node, BindingDiagnosticBag diagnostics) 11529var receiver = BindRValueWithoutTargetType(receiverSyntax, diagnostics);
Binder\Binder_Flags.cs (3)
48private readonly BoundExpression _receiverExpression; 50internal BinderWithConditionalReceiver(Binder next, BoundExpression receiverExpression) 58internal override BoundExpression ConditionalReceiverExpression
Binder\Binder_Initializers.cs (1)
257var expression = InitializerRewriter.GetTrailingScriptExpression(statement);
Binder\Binder_InterpolatedString.cs (58)
19private BoundExpression BindInterpolatedString(InterpolatedStringExpressionSyntax node, BindingDiagnosticBag diagnostics) 40var builder = ArrayBuilder<BoundExpression>.GetInstance(); 90var value = BindValue(interpolation.Expression, diagnostics, BindValueKind.RValue); 97BoundExpression? alignment = null; 257ImmutableArray<BoundExpression> parts = BindInterpolatedStringPartsForFactory(unconvertedInterpolatedString, diagnostics, out bool haveErrors); 266BoundInterpolatedString constructWithoutData(ImmutableArray<BoundExpression> parts) 295bool canLowerToStringConcatenation(ImmutableArray<BoundExpression> parts) 297foreach (var part in parts) 317private ImmutableArray<BoundExpression> BindInterpolatedStringPartsForFactory(BoundUnconvertedInterpolatedString unconvertedInterpolatedString, BindingDiagnosticBag diagnostics, out bool haveErrors) 321ImmutableArray<BoundExpression> parts = BindInterpolatedStringParts(unconvertedInterpolatedString, partsDiagnostics); 333ImmutableArray<BoundExpression> parts, 340ImmutableArray<BoundExpression> expressions = makeInterpolatedStringFactoryArguments(syntax, parts, diagnostics); 342BoundExpression construction = MakeInvocationExpression( // Tracked by https://github.com/dotnet/roslyn/issues/78965 : interpolated string, test this scenario with a delegate-returning property (should be blocked by virtue of allowFieldsAndProperties: false) 370ImmutableArray<BoundExpression> makeInterpolatedStringFactoryArguments(SyntaxNode syntax, ImmutableArray<BoundExpression> parts, BindingDiagnosticBag diagnostics) 375var expressions = ArrayBuilder<BoundExpression>.GetInstance(n + 1); 380var part = parts[i]; 396var value = fillin.Value; 435private static bool AllInterpolatedStringPartsAreStrings(ImmutableArray<BoundExpression> parts) 465var partsArrayBuilder = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance(); 469static (BoundUnconvertedInterpolatedString unconvertedInterpolatedString, ArrayBuilder<ImmutableArray<BoundExpression>> partsArrayBuilder) => 515private BoundBinaryOperator UpdateBinaryOperatorWithInterpolatedContents(BoundBinaryOperator originalOperator, ImmutableArray<ImmutableArray<BoundExpression>> appendCalls, InterpolatedStringHandlerData data, SyntaxNode rootSyntax, BindingDiagnosticBag diagnostics) 519Func<BoundUnconvertedInterpolatedString, int, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> interpolationFactory = 521Func<BoundBinaryOperator, BoundExpression, BoundExpression, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> binaryOperatorFactory = 528static BoundInterpolatedString createInterpolation(BoundUnconvertedInterpolatedString expression, int i, (ImmutableArray<ImmutableArray<BoundExpression>> AppendCalls, TypeSymbol _) arg) 540static BoundBinaryOperator createBinaryOperator(BoundBinaryOperator original, BoundExpression left, BoundExpression right, (ImmutableArray<ImmutableArray<BoundExpression>> _, TypeSymbol @string) arg) 555private BoundExpression BindUnconvertedInterpolatedExpressionToHandlerType( 556BoundExpression unconvertedExpression, 610var partsArrayBuilder = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance(); 613static (BoundUnconvertedInterpolatedString unconvertedInterpolatedString, ArrayBuilder<ImmutableArray<BoundExpression>> partsArrayBuilder) => 632private (ImmutableArray<ImmutableArray<BoundExpression>> AppendCalls, InterpolatedStringHandlerData Data) BindUnconvertedInterpolatedPartsToHandlerType( 634ImmutableArray<ImmutableArray<BoundExpression>> partsArray, 678foreach (var currentPart in parts) 682var value = insert.Value; 713var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(constructorArgumentLength); 730BoundExpression constructorCall; 732var outConstructorCall = MakeConstructorInvocation(interpolatedStringHandlerType, argumentsBuilder, refKindsBuilder, syntax, outConstructorDiagnostics); 744BoundExpression nonOutConstructorCall = MakeConstructorInvocation(interpolatedStringHandlerType, argumentsBuilder, refKindsBuilder, syntax, nonOutConstructorDiagnostics); 817static void populateArguments(SyntaxNode syntax, ImmutableArray<BoundInterpolatedStringArgumentPlaceholder> additionalConstructorArguments, int baseStringLength, int numFormatHoles, NamedTypeSymbol intType, ArrayBuilder<BoundExpression> argumentsBuilder) 850private ImmutableArray<BoundExpression> BindInterpolatedStringParts(BoundUnconvertedInterpolatedString unconvertedInterpolatedString, BindingDiagnosticBag diagnostics) 852ArrayBuilder<BoundExpression>? partsBuilder = null; 856var part = unconvertedInterpolatedString.Parts[i]; 859BoundExpression newValue; 874partsBuilder = ArrayBuilder<BoundExpression>.GetInstance(unconvertedInterpolatedString.Parts.Length); 895private (ImmutableArray<ImmutableArray<BoundExpression>> AppendFormatCalls, bool UsesBoolReturn, ImmutableArray<ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>>, int BaseStringLength, int NumFormatHoles) BindInterpolatedStringAppendCalls( 896ImmutableArray<ImmutableArray<BoundExpression>> partsArray, 902return (ImmutableArray<ImmutableArray<BoundExpression>>.Empty, false, ImmutableArray<ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>>.Empty, 0, 0); 907var builderAppendCallsArray = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance(partsArray.Length); 908var builderAppendCalls = ArrayBuilder<BoundExpression>.GetInstance(firstPartsLength); 911var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(3); 918foreach (var part in parts) 975var call = MakeInvocationExpression(part.Syntax, implicitBuilderReceiver, methodName, arguments, diagnostics, names: parameterNamesAndLocations, searchExtensionsIfNecessary: false);
Binder\Binder_Invocation.cs (92)
21/// This portion of the binder converts an <see cref="ExpressionSyntax"/> into a <see cref="BoundExpression"/>. 25private BoundExpression BindMethodGroup(ExpressionSyntax node, bool invoked, bool indexed, BindingDiagnosticBag diagnostics) 78internal BoundExpression MakeInvocationExpression( 80BoundExpression receiver, 82ImmutableArray<BoundExpression> args, 105var boundExpression = BindInstanceMemberAccess(node, node, receiver, methodName, typeArgs.NullToEmpty().Length, typeArgsSyntax, typeArgs, invoked: true, indexed: false, diagnostics, searchExtensionsIfNecessary); 140BoundExpression result = BindInvocationExpression( 159private static void ReportMakeInvocationExpressionBadMemberKind(SyntaxNode node, string methodName, BoundExpression boundExpression, BindingDiagnosticBag diagnostics) 183private BoundExpression BindInvocationExpression( 187BoundExpression result; 214BoundExpression boundExpression = BindMethodGroup(node.Expression, invoked: true, indexed: false, diagnostics: diagnostics); 237BoundExpression boundExpression = BindMethodGroup(node.Expression, invoked: true, indexed: false, diagnostics: diagnostics); 244BoundExpression bindArgumentsAndInvocation(InvocationExpressionSyntax node, BoundExpression boundExpression, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics) 265private BoundExpression BindArgListOperator(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics, AnalyzedArguments analyzedArguments) 279BoundExpression argument = analyzedArguments.Arguments[i]; 319ImmutableArray<BoundExpression> arguments = analyzedArguments.Arguments.ToImmutable(); 327private BoundExpression BindInvocationExpression( 331BoundExpression boundExpression, 347BoundExpression result; 399private BoundExpression BindDynamicInvocation( 401BoundExpression expression, 410BoundExpression? receiver; 458BoundExpression finalReceiver = ReplaceTypeOrValueReceiver(typeOrValue, useType, diagnostics); 488ImmutableArray<BoundExpression> argArray = BuildArgumentsForDynamicInvocation(arguments, diagnostics); 532private ImmutableArray<BoundExpression> BuildArgumentsForDynamicInvocation(AnalyzedArguments arguments, BindingDiagnosticBag diagnostics) 534var builder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Arguments.Count); 553BoundExpression? receiver, 554ImmutableArray<BoundExpression> arguments, 582foreach (var arg in arguments) 629private BoundExpression BindDelegateInvocation( 633BoundExpression boundExpression, 639BoundExpression result; 698private BoundExpression BindMethodGroupInvocation( 719BoundExpression result = null; 733BoundExpression extensionMemberAccess = GetExtensionMemberAccess(expression, methodGroup.ReceiverOpt, extensionMember, diagnostics); 738BoundExpression extensionMemberInvocation = BindInvocationExpression(syntax, expression, methodName: null, extensionMemberAccess, analyzedArguments, diagnostics, acceptOnlyMethods: false); 752BoundExpression receiverOpt = methodGroup.ReceiverOpt; 894private bool IsAmbiguousDynamicParamsArgument<TMethodOrPropertySymbol>(ArrayBuilder<BoundExpression> arguments, MemberResolutionResult<TMethodOrPropertySymbol> candidate, out SyntaxNode argumentSyntax) 905var arg = arguments[i]; 972private BoundExpression TryEarlyBindSingleCandidateInvocationWithDynamicArgument( 992BoundExpression result = BindInvocationExpressionContinued( 1011BoundExpression receiverOpt, 1072private void CheckRestrictedTypeReceiver(BoundExpression expression, CSharpCompilation compilation, BindingDiagnosticBag diagnostics) 1184foreach (var argument in analyzedArguments.Arguments) 1256var receiver = ReplaceTypeOrValueReceiver(methodGroup.Receiver, !method.RequiresInstanceReceiver && !invokedAsExtensionMethod, diagnostics); 1262var extensionReceiver = isNewExtensionMethod && !method.IsStatic ? receiver : null; 1275BoundExpression receiverArgument = analyzedArguments.Argument(0); 1386private BoundExpression CheckAndConvertExtensionReceiver(BoundExpression receiver, ParameterSymbol extensionParameter, BindingDiagnosticBag diagnostics) 1401internal ThreeState ReceiverIsSubjectToCloning(BoundExpression? receiver, PropertySymbol property) 1414internal ThreeState ReceiverIsSubjectToCloning(BoundExpression? receiver, MethodSymbol method) 1443private BoundExpression GetDefaultParameterSpecialNoConversion(SyntaxNode syntax, ParameterSymbol parameter, BindingDiagnosticBag diagnostics) 1460BoundExpression? defaultValue = null; 1547BoundExpression? extensionReceiver, 1548ArrayBuilder<BoundExpression> argumentsBuilder, 1653BoundExpression collection = CreateParamsCollection(node, parameters[paramsIndex], collectionArgs: ImmutableArray<BoundExpression>.Empty, diagnostics); 1679BoundExpression bindDefaultArgument(SyntaxNode syntax, ParameterSymbol parameter, Symbol? containingMember, bool enableCallerInfo, BindingDiagnosticBag diagnostics, 1680BoundExpression? extensionReceiver, ArrayBuilder<BoundExpression> argumentsBuilder, int argumentsCount, ImmutableArray<int> argsToParamsOpt) 1707BoundExpression defaultValue; 1727&& tryGetArgument(parameter.CallerArgumentExpressionParameterIndex, extensionReceiver, argumentsBuilder, argumentsCount, argsToParamsOpt, out var argument)) 1792BoundExpression? extensionReceiver, ArrayBuilder<BoundExpression> argumentsBuilder, int argumentsCount, ImmutableArray<int> argsToParamsOpt, 1793[NotNullWhen(true)] out BoundExpression? argument) 1850private BoundExpression CreateParamsCollection(SyntaxNode node, ParameterSymbol paramsParameter, ImmutableArray<BoundExpression> collectionArgs, BindingDiagnosticBag diagnostics) 1853BoundExpression collection; 1858BoundExpression arraySize = new BoundLiteral(node, ConstantValue.Create(collectionArgs.Length), int32Type) { WasCompilerGenerated = true }; 1913internal bool CheckImplicitThisCopyInReadOnlyMember(BoundExpression receiver, MethodSymbol method, BindingDiagnosticBag diagnostics) 1961private BoundExpression ReplaceTypeOrValueReceiver(BoundExpression receiver, bool useType, BindingDiagnosticBag diagnostics) 1999var value = q.Value; 2000var replaced = ReplaceTypeOrValueReceiver(value, useType, diagnostics); 2008private static BoundExpression GetValueExpressionIfTypeOrValueReceiver(BoundExpression receiver) 2032private static NamedTypeSymbol GetDelegateType(BoundExpression expr) 2048BoundExpression receiver, 2057ImmutableArray<BoundExpression> args; 2123private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<MethodSymbol> methods) 2143private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<PropertySymbol> properties) 2164private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, IEnumerable<ImmutableArray<ParameterSymbol>> parameterListList) 2167ArrayBuilder<BoundExpression> newArguments = ArrayBuilder<BoundExpression>.GetInstance(argumentCount); 2171var argument = newArguments[i]; 2319private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments) 2326BoundExpression expr, 2362private bool TryBindNameofOperator(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics, out BoundExpression result) 2378private BoundExpression BindNameofOperatorInternal(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics) 2382var boundArgument = BindExpression(argument, diagnostics); 2522private BoundFunctionPointerInvocation BindFunctionPointerInvocation(SyntaxNode node, BoundExpression boundExpression, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
Binder\Binder_Operators.cs (155)
24private BoundExpression BindCompoundAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 28BoundExpression left = BindValue(node.Left, diagnostics, GetBinaryAssignmentKind(node.Kind())); 30BoundExpression right = BindValue(node.Right, diagnostics, BindValueKind.RValue); 258BoundExpression rightConverted = CreateConversion(right, best.RightConversion, bestSignature.RightType, diagnostics); 267BoundExpression? finalConversion = GenerateConversionForAssignment(leftType, finalPlaceholder, diagnostics, 310var leftConversion = CreateConversion(node.Left, leftPlaceholder, best.LeftConversion, isCast: false, conversionGroupOpt: null, best.Signature.LeftType, diagnostics); 318BoundExpression left, 319BoundExpression right, 331bool shouldTryUserDefinedInstanceOperator(AssignmentExpressionSyntax node, bool checkOverflowAtRuntime, BoundExpression left, out string? checkedName, out string? ordinaryName) 371BoundExpression left, 372BoundExpression right, 415BoundExpression left, 416BoundExpression right, 467BoundExpression rightConverted = CreateConversion(right, overloadResolutionResult.ValidResult.Result.ConversionForArg(isExtension ? 1 : 0), method.Parameters[0].Type, diagnostics); 473BoundExpression? leftConversion = null; 564BoundExpression left, 565BoundExpression right, 633BoundExpression left, 634BoundExpression right, 664private BoundExpression BindEventAssignment(AssignmentExpressionSyntax node, BoundEventAccess left, BoundExpression right, BinaryOperatorKind opKind, BindingDiagnosticBag diagnostics) 671BoundExpression receiverOpt = left.ReceiverOpt; 687BoundExpression argument = CreateConversion(right, argumentConversion, delegateType, diagnostics); 749private static bool IsLegalDynamicOperand(BoundExpression operand) 772private BoundExpression BindDynamicBinaryOperator( 775BoundExpression left, 776BoundExpression right, 856private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 875BoundExpression result = BindExpression(current, diagnostics); 901BoundExpression left = CheckValue(result, bindValueKind, diagnostics); 902BoundExpression right = BindValue(syntaxNode.Right, diagnostics, BindValueKind.RValue); 903BoundExpression boundOp = BindSimpleBinaryOperator(syntaxNode, diagnostics, left, right, leaveUnconvertedIfInterpolatedString: true); 911private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics, 912BoundExpression left, BoundExpression right, bool leaveUnconvertedIfInterpolatedString) 1038BoundExpression resultLeft = left; 1039BoundExpression resultRight = right; 1105private bool BindSimpleBinaryOperatorParts(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, BinaryOperatorKind kind, 1127BoundExpression left, 1128BoundExpression right, 1212private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics) 1219var result = doRebind(diagnostics, unconvertedBinaryOperator); 1222BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current) 1234BoundExpression? left = null; 1237var right = current.Right switch 1257private static void ReportUnaryOperatorError(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics, string operatorName, BoundExpression operand, LookupResultKind resultKind) 1272private void ReportAssignmentOperatorError(AssignmentExpressionSyntax node, BinaryOperatorKind kind, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, LookupResultKind resultKind) 1291private void ReportBinaryOperatorError(ExpressionSyntax node, BindingDiagnosticBag diagnostics, SyntaxToken operatorToken, BoundExpression left, BoundExpression right, LookupResultKind resultKind) 1349private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 1372BoundExpression left = BindRValueWithoutTargetType(child, diagnostics); 1377BoundExpression right = BindRValueWithoutTargetType(binary.Right, diagnostics); 1386private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 1475var resultLeft = CreateConversion(left, best.LeftConversion, signature.LeftType, diagnostics); 1476var resultRight = CreateConversion(right, best.RightConversion, signature.RightType, diagnostics); 1497BoundExpression operandConversion = CreateConversion( 1547private bool IsValidDynamicCondition(BoundExpression left, bool isNegative, BindingDiagnosticBag diagnostics, out MethodSymbol userDefinedOperator) 1967BoundExpression left, 1968BoundExpression right, 1984BoundExpression left, 1985BoundExpression right, 2024BoundExpression left, 2025BoundExpression right, 2072BoundExpression left, 2073BoundExpression right, 2147private bool IsTypelessExpressionAllowedInBinaryOperator(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 2171BoundExpression operand, 2211BoundExpression operand, 2236BoundExpression operand, 2314BoundExpression operand, 2530internal static TypeSymbol GetEnumType(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 2580BoundExpression left, 2581BoundExpression right, 2598BoundExpression newLeftOperand = CreateConversion(left, underlyingType, diagnostics); 2599BoundExpression newRightOperand = CreateConversion(right, underlyingType, diagnostics); 2655BoundExpression left, 2656BoundExpression right, 2809private static ConstantValue? TryFoldingNullableEquality(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 3139private BoundExpression BindIncrementOperator(ExpressionSyntax node, ExpressionSyntax operandSyntax, SyntaxToken operatorToken, BindingDiagnosticBag diagnostics) 3143BoundExpression operand = BindToNaturalType(BindValue(operandSyntax, diagnostics, BindValueKind.IncrementDecrement), diagnostics); 3269BoundExpression? resultConversion = GenerateConversionForAssignment(operandType, resultPlaceholder, diagnostics, ConversionForAssignmentFlags.IncrementAssignment); 3291var operandConversion = CreateConversion(node, operandPlaceholder, best.Conversion, isCast: false, conversionGroupOpt: null, best.Signature.OperandType, diagnostics); 3312BoundExpression operand, 3359BoundExpression operand, 3397BoundExpression operand, 3451BoundExpression? operandConversion = null; 3544BoundExpression operand, 3616BoundExpression operand, 3898private BoundExpression BindSuppressNullableWarningExpression(PostfixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 3902var expr = BindExpression(node.Operand, diagnostics); 3922private BoundExpression BindPointerIndirectionExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 3924BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics); 3933private static void BindPointerIndirectionExpressionInternal(CSharpSyntaxNode node, BoundExpression operand, BindingDiagnosticBag diagnostics, out TypeSymbol pointedAtType, out bool hasErrors) 3969private BoundExpression BindAddressOfExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 3971BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, BindValueKind.AddressOf), diagnostics); 4021internal bool IsMoveableVariable(BoundExpression expr, out Symbol accessedLocalOrParameterOpt) 4034BoundExpression receiver; 4147BoundExpression underlyingExpr = ((BoundPointerElementAccess)expr).Expression; 4166private BoundExpression BindUnaryOperator(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4168BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics); 4173private void ReportSuppressionIfNeeded(BoundExpression expr, BindingDiagnosticBag diagnostics) 4182private BoundExpression BindUnaryOperatorCore(CSharpSyntaxNode node, string operatorText, BoundExpression operand, BindingDiagnosticBag diagnostics) 4247var resultOperand = CreateConversion(operand.Syntax, operand, best.Conversion, isCast: false, conversionGroupOpt: null, signature.OperandType, diagnostics); 4269BoundExpression operand, 4274BoundExpression newOperand = CreateConversion(operand, underlyingType, diagnostics); 4304BoundExpression operand, 4525private BoundLiteral BindIntegralMinValConstants(PrefixUnaryExpressionSyntax node, BoundExpression operand, BindingDiagnosticBag diagnostics) 4614private bool IsOperandErrors(CSharpSyntaxNode node, ref BoundExpression operand, BindingDiagnosticBag diagnostics) 4676private BoundExpression BindIsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4679var operand = BindRValueWithoutTargetType(node.Left, diagnostics); 4701var convertedExpression = BindExpressionForPattern(operand.Type, node.Right, ref hasErrors, isPatternDiagnostics, out var constantValueOpt, out var wasExpression, out _); 5147private BoundExpression BindAsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 5149var operand = BindRValueWithoutTargetType(node.Left, diagnostics); 5234BoundExpression operandConversion; 5429private BoundExpression GenerateNullCoalescingBadBinaryOpsError(BinaryExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics) 5439private BoundExpression BindNullCoalescingOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 5441var leftOperand = BindValue(node.Left, diagnostics, BindValueKind.RValue); 5443var rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue); 5509var leftConversion = CreateConversion(node, leftPlaceholder, 5531var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType0, diagnostics); 5547var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType, diagnostics); 5599var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, optRightType, diagnostics); 5613var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, optRightType, diagnostics); 5626private BoundExpression BindNullCoalescingAssignmentOperator(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 5630BoundExpression leftOperand = BindValue(node.Left, diagnostics, BindValueKind.CompoundAssignment); 5632BoundExpression rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue); 5665var convertedRightOperand = CreateConversion(rightOperand, underlyingRightConversion, underlyingLeftType, diagnostics); 5679var convertedRightOperand = CreateConversion(rightOperand, rightConversion, leftType, diagnostics); 5687private BoundExpression GenerateNullCoalescingAssignmentBadBinaryOpsError(AssignmentExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics) 5729private BoundExpression BindConditionalOperator(ConditionalExpressionSyntax node, BindingDiagnosticBag diagnostics) 5756private BoundExpression BindValueConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics) 5758BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics); 5759BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue); 5760BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue); 5797private BoundExpression BindRefConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics) 5799BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics); 5800BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation); 5801BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation); 5834private void ValidateRefConditionalOperator(SyntaxNode node, BoundExpression trueExpr, BoundExpression falseExpr, BindingDiagnosticBag diagnostics) 5860private static ConstantValue FoldConditionalOperator(BoundExpression condition, BoundExpression trueExpr, BoundExpression falseExpr)
Binder\Binder_Patterns.cs (36)
19private BoundExpression BindIsPatternExpression(IsPatternExpressionSyntax node, BindingDiagnosticBag diagnostics) 23BoundExpression expression = BindRValueWithoutTargetType(node.Expression, diagnostics); 46private BoundExpression MakeIsPatternExpression( 48BoundExpression expression, 144private BoundExpression BindSwitchExpression(SwitchExpressionSyntax node, BindingDiagnosticBag diagnostics) 155internal virtual BoundExpression BindSwitchExpressionCore( 216BoundExpression? indexerAccess = null; 299BoundExpression? indexerAccess; 300BoundExpression? lengthAccess; 335out Symbol? variableSymbol, out BoundExpression? variableAccess); 350indexerAccess: out _, out var lengthAccess, receiverPlaceholder: out _, argumentPlaceholder: out _); 356out BoundExpression indexerAccess, out BoundExpression lengthAccess, out BoundListPatternReceiverPlaceholder? receiverPlaceholder, out BoundListPatternIndexPlaceholder argumentPlaceholder) 371lengthAccess = new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType(), hasErrors: true) { WasCompilerGenerated = true }; 425var convertedExpression = BindExpressionOrTypeForPattern(inputType, innerExpression, ref hasErrors, diagnostics, out var constantValueOpt, out bool wasExpression, out Conversion patternConversion); 498private BoundExpression BindExpressionOrTypeForPattern( 508BoundExpression expression = BindTypeOrRValue(patternExpression, diagnostics); 526private BoundExpression BindExpressionForPattern( 536var expression = BindExpression(patternExpression, diagnostics: diagnostics, invoked: false, indexed: false); 543private BoundExpression BindExpressionForPatternContinued( 544BoundExpression expression, 552BoundExpression convertedExpression = ConvertPatternExpression( 588internal BoundExpression ConvertPatternExpression( 591BoundExpression expression, 597BoundExpression convertedExpression; 690BoundExpression operand = conversion.Operand; 848hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess); 874out BoundExpression? variableAccess) 910BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics); 1001BoundExpression deconstruct = MakeDeconstructInvocationExpression( 1035ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess); 1052BoundExpression deconstruct, 1362variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess); 1397BoundExpression deconstruct = MakeDeconstructInvocationExpression( 1550BoundExpression boundMember = BindInstanceMemberAccess( 1632BoundExpression value = BindExpressionForPattern(inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out Conversion patternConversion);
Binder\Binder_Query.cs (53)
24internal BoundExpression BindQuery(QueryExpressionSyntax node, BindingDiagnosticBag diagnostics) 29var boundFromExpression = BindLeftOfPotentialColorColorMemberAccess(fromClause.Expression, diagnostics); 53BoundExpression? cast = null; 69BoundExpression result = BindQueryInternal1(state, diagnostics); 165private BoundExpression BindQueryInternal1(QueryTranslationState state, BindingDiagnosticBag diagnostics) 184private BoundExpression BindQueryInternal2(QueryTranslationState state, BindingDiagnosticBag diagnostics) 201var result = state.fromExpression; 204BoundExpression? unoptimized = FinalTranslation(state, BindingDiagnosticBag.Discarded); 217private BoundExpression FinalTranslation(QueryTranslationState state, BindingDiagnosticBag diagnostics) 230var e = state.fromExpression; 253var e = state.fromExpression; 262BoundExpression lambdaRight = MakeQueryUnboundLambda(state.RangeVariableMap(), x, v, diagnostics.AccumulatesDependencies); 274BoundExpression? unoptimizedForm = null; 315var arguments = ArrayBuilder<BoundExpression>.GetInstance(); 317var lastArgument = arguments[n - 1]; 380var inExpression = BindRValueWithoutTargetType(join.InExpression, diagnostics); 390BoundExpression? castInvocation = null; 591BoundExpression collectionSelectorLambda; 631BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null; 678BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null; 683private static BoundExpression? ExtractCastInvocation(BoundCall invocation) 706var construction = MakePair(node, x1.Name, x1Expression, x2.Name, x2Expression, state, d); 742var yExpression = lambdaBodyBinder.BindRValueWithoutTargetType(let.Expression, d); 756var construction = MakePair(let, x.Name, xExpression, let.Identifier.ValueText, yExpression, state, d); 779private BoundBlock CreateLambdaBlockForQueryClause(ExpressionSyntax expression, BoundExpression result, BindingDiagnosticBag diagnostics) 792BoundExpression expression, 794BoundExpression? queryInvocation = null, 795BoundExpression? castInvocation = null, 796BoundExpression? unoptimizedForm = null) 808private BoundExpression MakePair(CSharpSyntaxNode node, string field1Name, BoundExpression field1Value, string field2Name, BoundExpression field2Value, QueryTranslationState state, BindingDiagnosticBag diagnostics) 828AnonymousTypeField createField(string fieldName, BoundExpression fieldValue) => 832private TypeSymbol TypeOrError(BoundExpression e) 848BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue); 858BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue); 885protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, bool receiverIsCheckedForRValue, string methodName, BoundExpression arg, BindingDiagnosticBag diagnostics 898protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, bool receiverIsCheckedForRValue, string methodName, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics 911protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, bool receiverIsCheckedForRValue, string methodName, TypeSyntax typeArgSyntax, TypeWithAnnotations typeArg, BindingDiagnosticBag diagnostics 917return MakeQueryInvocation(node, receiver, receiverIsCheckedForRValue, methodName, new SeparatedSyntaxList<TypeSyntax>(new SyntaxNodeOrTokenList(typeArgSyntax, 0)), ImmutableArray.Create(typeArg), ImmutableArray<BoundExpression>.Empty, diagnostics 924protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, bool receiverIsCheckedForRValue, string methodName, SeparatedSyntaxList<TypeSyntax> typeArgsSyntax, ImmutableArray<TypeWithAnnotations> typeArgs, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics 934var ultimateReceiver = receiver; 998var checkedUltimateReceiver = CheckValue(ultimateReceiver, BindValueKind.RValue, diagnostics); 1023static BoundExpression updateUltimateReceiver(BoundExpression receiver, BoundExpression originalUltimateReceiver, BoundExpression replacementUltimateReceiver) 1042protected BoundExpression MakeConstruction(CSharpSyntaxNode node, NamedTypeSymbol toCreate, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics) 1046var result = BindClassCreationExpression(node, toCreate.Name, node, toCreate, analyzedArguments, diagnostics);
Binder\Binder_QueryErrors.cs (4)
27BoundExpression instanceArgument, 164internal static void ReportQueryInferenceFailed(CSharpSyntaxNode queryClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics) 213private static bool ReportQueryInferenceFailedSelectMany(FromClauseSyntax fromClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics) 218BoundExpression arg = arguments.Argument(arguments.IncludesReceiverAsArgument ? 1 : 0);
Binder\Binder_Statements.cs (82)
238BoundExpression argument = (node.Expression == null) 393private BoundExpression BindThrownExpression(ExpressionSyntax exprSyntax, BindingDiagnosticBag diagnostics, ref bool hasErrors) 395var boundExpr = BindValue(exprSyntax, diagnostics, BindValueKind.RValue); 436BoundExpression boundExpr = null; 515var expression = BindLabel(node.Expression, diagnostics); 538var value = BindRValueWithoutTargetType(node.Expression, BindingDiagnosticBag.Discarded); 653var expression = BindRValueWithoutTargetType(syntax, diagnostics); 680private void CheckForUnobservedAwaitable(BoundExpression expression, BindingDiagnosticBag diagnostics) 756internal MethodSymbol TryFindDisposePatternMethod(BoundExpression expr, SyntaxNode syntaxNode, bool hasAwait, BindingDiagnosticBag diagnostics, out bool isExpanded) 863internal BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, RefKind refKind, EqualsValueClauseSyntax initializer, 873protected BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, ExpressionSyntax initializer, BindValueKind valueKind, CSharpSyntaxNode errorSyntax) 893BoundExpression value = BindValue(initializer, diagnostics, valueKind); 894BoundExpression expression = value.Kind is BoundKind.UnboundLambda or BoundKind.MethodGroup ? 1014BoundExpression initializerOpt; 1108ImmutableArray<BoundExpression> arguments = BindDeclaratorArguments(declarator, localDiagnostics); 1136var invalidDimensions = ArrayBuilder<BoundExpression>.GetInstance(); 1143var size = args.binder.BindArrayDimension(expressionSyntax, args.diagnostics, ref _); 1174internal ImmutableArray<BoundExpression> BindDeclaratorArguments(VariableDeclaratorSyntax declarator, BindingDiagnosticBag diagnostics) 1183var arguments = default(ImmutableArray<BoundExpression>); 1222private bool IsValidFixedVariableInitializer(TypeSymbol declType, ref BoundExpression initializerOpt, BindingDiagnosticBag diagnostics) 1320private MethodSymbol GetFixedPatternMethodOpt(BoundExpression initializer, BindingDiagnosticBag additionalDiagnostics) 1353private BoundExpression GetFixedLocalCollectionInitializer( 1354BoundExpression initializer, 1371BoundExpression elementConversion; 1402private BoundExpression BindAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 1422var op1 = BindValue(node.Left, diagnostics, lhsKind); 1426var op2 = BindValue(rhsExpr, diagnostics, rhsKind); 1438private static BindValueKind GetRequiredRHSValueKindForRefAssignment(BoundExpression boundLeft) 1457private BoundExpression InferTypeForDiscardAssignment(BoundDiscardExpression op1, BoundExpression op2, BindingDiagnosticBag diagnostics) 1475BoundExpression op1, 1476BoundExpression op2, 1500var conversion = GenerateConversionForAssignment(lhsType, op2, 1544BoundExpression op1, 1545BoundExpression op2, 1629static object getName(BoundExpression expr) 1660internal static PropertySymbol GetPropertySymbol(BoundExpression expr, out BoundExpression receiver, out SyntaxNode propertySyntax) 1737internal static Symbol? GetIndexerOrImplicitIndexerSymbol(BoundExpression? e) 1797private static bool AccessingAutoPropertyFromConstructor(BoundExpression? receiver, PropertySymbol propertySymbol, Symbol fromMember, AccessorKind accessorKind) 1839private TypeSymbol GetAccessThroughType(BoundExpression receiver) 1858private BoundExpression BindPossibleArrayInitializer( 1871BoundExpression result; 1876ImmutableArray<BoundExpression>.Empty); 1955internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None) 1958internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, out Conversion conversion, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None) 2342BoundExpression operand, 2461void tryConversion(BoundExpression expr, ref bool reportedError, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 2546ImmutableArray<BoundExpression> tupleArguments, 2560var argument = tupleArguments[i]; 2578var stack = ArrayBuilder<(Binder, IfStatementSyntax IfStatementSyntax, BoundExpression Condition, BoundStatement Consequence)>.GetInstance(); 2583var condition = binder.BindBooleanExpression(node.Condition, diagnostics); 2617BoundExpression condition; 2642internal BoundExpression BindBooleanExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2678var expr = BindValue(node, diagnostics, BindValueKind.RValue); 2755BoundExpression resultOperand = CreateConversion( 3028BoundExpression arg = null; 3163internal BoundExpression CreateReturnConversion( 3166BoundExpression argument, 3278BoundExpression boundFilter = null; 3368BoundExpression exceptionSource = null; 3388private BoundExpression BindCatchFilter(CatchFilterClauseSyntax filter, BindingDiagnosticBag diagnostics) 3392BoundExpression boundFilter = this.BindBooleanExpression(filter.FilterExpression, diagnostics); 3455private static bool IsValidStatementExpression(SyntaxNode syntax, BoundExpression expression) 3485internal BoundBlock CreateBlockFromExpression(CSharpSyntaxNode node, ImmutableArray<LocalSymbol> locals, RefKind refKind, BoundExpression expression, ExpressionSyntax expressionSyntax, BindingDiagnosticBag diagnostics) 3574private static bool IsValidExpressionBody(SyntaxNode expressionSyntax, BoundExpression expression) 3615BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind); 3631BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind); 3635public BoundBlock CreateBlockFromExpression(ExpressionSyntax body, BoundExpression expression, BindingDiagnosticBag diagnostics) 3745BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics); 3811BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics); 3822BoundExpression? initializerInvocation; 3843internal static BoundExpression? BindImplicitConstructorInitializer( 3993BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true }; 3999arguments: ImmutableArray<BoundExpression>.Empty, 4035BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true }; 4036BoundExpression argument = new BoundParameter(syntax, constructor.Parameters[0]); 4133internal PatternLookupResult PerformPatternMethodLookup(BoundExpression receiver, string methodName, 4143var boundAccess = BindInstanceMemberAccess( 4168var patternMethodCall = BindMethodGroupInvocation(
Binder\Binder_Symbols.cs (5)
1427BoundExpression receiver, 1472private BoundExpression CheckAmbiguousPrimaryConstructorParameterAsColorColorReceiver(BoundExpression receiver, SyntaxNode right, string plainName, 1522bool isPossiblyCapturingPrimaryConstructorParameterReference(BoundExpression receiver, out ParameterSymbol parameterSymbol) 1524BoundExpression colorColorValueReceiver = GetValueExpressionIfTypeOrValueReceiver(receiver);
Binder\Binder_TupleOperators.cs (32)
26BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 30BoundExpression convertedLeft = ApplyConvertedTypes(left, operators, isRight: false, diagnostics); 31BoundExpression convertedRight = ApplyConvertedTypes(right, operators, isRight: true, diagnostics); 38private BoundExpression ApplyConvertedTypes(BoundExpression expr, TupleBinaryOperatorInfo @operator, bool isRight, BindingDiagnosticBag diagnostics) 54ImmutableArray<BoundExpression> arguments = tuple.Arguments; 58var builder = ArrayBuilder<BoundExpression>.GetInstance(length); 83BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 98BoundExpression comparison = BindSimpleBinaryOperator(node, diagnostics, left, right, leaveUnconvertedIfInterpolatedString: false); 107out BoundExpression conversionIntoBoolOperator, out BoundValuePlaceholder conversionIntoBoolOperatorPlaceholder, 126out BoundExpression conversionForBool, out BoundValuePlaceholder conversionForBoolPlaceholder, out UnaryOperatorSignature boolOperator) 160BoundExpression comparisonResult = new BoundTupleOperandPlaceholder(node, type); 180BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 203BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 229(ImmutableArray<BoundExpression> leftParts, ImmutableArray<string> leftNames) = GetTupleArgumentsOrPlaceholders(left); 230(ImmutableArray<BoundExpression> rightParts, ImmutableArray<string> rightNames) = GetTupleArgumentsOrPlaceholders(right); 265private static void ReportNamesMismatchesIfAny(BoundExpression left, BoundExpression right, 325internal static BoundExpression GiveTupleTypeToDefaultLiteralIfNeeded(BoundExpression expr, TypeSymbol targetType) 336private static bool IsTupleBinaryOperation(BoundExpression left, BoundExpression right) 349private static int GetTupleCardinality(BoundExpression expr) 375private static (ImmutableArray<BoundExpression> Elements, ImmutableArray<string> Names) GetTupleArgumentsOrPlaceholders(BoundExpression expr) 384ImmutableArray<BoundExpression> placeholders = tupleType.TupleElementTypesWithAnnotations 385.SelectAsArray((t, s) => (BoundExpression)new BoundTupleOperandPlaceholder(s, t.Type), expr.Syntax); 396ImmutableArray<BoundExpression> elements, ImmutableArray<string> names,
Binder\Binder_WithExpression.cs (3)
11/// This portion of the binder converts a <see cref="WithExpressionSyntax"/> into a <see cref="BoundExpression"/>. 15private BoundExpression BindWithExpression(WithExpressionSyntax syntax, BindingDiagnosticBag diagnostics) 19var receiver = BindRValueWithoutTargetType(syntax.Expression, diagnostics);
Binder\BuckStopsHereBinder.cs (2)
142internal override BoundExpression? ConditionalReceiverExpression 192internal override BoundExpression BindSwitchExpressionCore(SwitchExpressionSyntax node, Binder originalBinder, BindingDiagnosticBag diagnostics)
Binder\DecisionDagBuilder.cs (10)
84BoundExpression switchGoverningExpression, 100BoundExpression switchExpressionInput, 116BoundExpression inputExpression, 129BoundExpression inputExpression, 143BoundExpression switchGoverningExpression, 168BoundExpression switchExpressionInput, 188BoundExpression? whenClause, 404BoundExpression? variableAccess = declaration.VariableAccess; 1993public readonly BoundExpression? WhenClause; 2000BoundExpression? WhenClause,
Binder\ForEachEnumeratorInfo.cs (3)
52public readonly BoundExpression? CurrentConversion; // current to element type 70BoundExpression? currentConversion, 123public BoundExpression? CurrentConversion;
Binder\ForEachLoopBinder.cs (30)
192BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics); 224BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics); 277BoundExpression iterationErrorExpression = null; 514BoundExpression elementConversion = CreateConversion(_syntax, elementPlaceholder, elementConversionClassification, isCast: false, conversionGroupOpt: null, iterationVariableType.Type, createConversionDiagnostics); 565BoundExpression convertedCollectionExpression = ConvertForEachCollection(collectionExpr, collectionConversionClassification, builder.CollectionType, diagnostics); 629BoundExpression collectionExpr = this.GetBinder(collectionSyntax).BindValue(collectionSyntax, diagnostics, BindValueKind.RValue); 638protected BoundExpression ConvertForEachCollection( 639BoundExpression collectionExpr, 648BoundExpression convertedCollectionExpression = CreateConversion( 680ref BoundExpression collectionExpr, 716private BoundExpression UnwrapCollectionExpressionIfNullable(BoundExpression collectionExpr, BindingDiagnosticBag diagnostics) 776ref BoundExpression collectionExpr, 784BoundExpression originalCollectionExpr = collectionExpr; 830private EnumeratorResult GetEnumeratorInfoCore(SyntaxNode syntax, SyntaxNode collectionSyntax, ref BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, out ForEachEnumeratorInfo.Builder builder) 871BoundExpression span = new BoundValuePlaceholder(collectionExpr.Syntax, spanType).MakeCompilerGenerated(); 873var originalSpan = span; 919var originalCollectionExpr = collectionExpr; 932EnumeratorResult getEnumeratorInfo(SyntaxNode syntax, SyntaxNode collectionSyntax, ref BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, out ForEachEnumeratorInfo.Builder builder) 976var unwrappedCollectionExpr = UnwrapCollectionExpressionIfNullable(collectionExpr, diagnostics); 1034EnumeratorResult createPatternBasedEnumeratorResult(ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics) 1074private EnumeratorResult SatisfiesIEnumerableInterfaces(SyntaxNode collectionSyntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, TypeSymbol unwrappedCollectionExprType) 1206private bool ReportConstantNullCollectionExpr(BoundExpression collectionExpr, BindingDiagnosticBag diagnostics) 1217private void GetDisposalInfoForEnumerator(SyntaxNode syntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression expr, bool isAsync, BindingDiagnosticBag diagnostics) 1239var argsBuilder = ArrayBuilder<BoundExpression>.GetInstance(patternDisposeMethod.ParameterCount); 1358private bool SatisfiesGetEnumeratorPattern(SyntaxNode syntax, SyntaxNode collectionSyntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics) 1534private MethodArgumentInfo FindForEachPatternMethodViaExtension(SyntaxNode syntax, SyntaxNode collectionSyntax, BoundExpression collectionExpr, string methodName, BindingDiagnosticBag diagnostics) 1601BoundExpression extensionReceiver = result.GetIsNewExtensionMember() ? collectionExpr : null; 1969private MethodArgumentInfo BindDefaultArguments(MethodSymbol method, BoundExpression extensionReceiverOpt, bool expanded, SyntaxNode syntax, BindingDiagnosticBag diagnostics) 1979var argsBuilder = ArrayBuilder<BoundExpression>.GetInstance(method.ParameterCount);
Binder\ForLoopBinder.cs (1)
91BoundExpression condition = null;
Binder\LockBinder.cs (1)
39BoundExpression expr = BindTargetExpression(diagnostics, originalBinder);
Binder\LockOrUsingBinder.cs (5)
56BoundExpression expression = BindTargetExpression(diagnostics: null, // Diagnostics reported by BindUsingStatementParts. 78protected BoundExpression BindTargetExpression(BindingDiagnosticBag diagnostics, Binder originalBinder, TypeSymbol targetTypeOpt = null) 84BoundExpression boundExpression = originalBinder.BindValue(TargetExpressionSyntax, expressionDiagnostics, Binder.BindValueKind.RValueOrMethodGroup); 112public readonly BoundExpression Expression; 115public ExpressionAndDiagnostics(BoundExpression expression, ReadOnlyBindingDiagnostic<AssemblySymbol> diagnostics)
Binder\MethodArgumentInfo.cs (3)
18public readonly ImmutableArray<BoundExpression> Arguments; 24ImmutableArray<BoundExpression> arguments, 37return new MethodArgumentInfo(method, arguments: ImmutableArray<BoundExpression>.Empty, defaultArguments: default, expanded: false);
Binder\RefSafetyAnalysis.cs (19)
69private HashSet<BoundExpression>? _visited = new HashSet<BoundExpression>(); 322else if (node is BoundExpression expr) 332private void AssertVisited(BoundExpression expr) 723private void VisitArgumentsAndGetArgumentPlaceholders(BoundExpression? receiverOpt, ImmutableArray<BoundExpression> arguments, bool isNewExtensionMethod) 727var arg = arguments[i]; 854BoundExpression? receiver, 856ImmutableArray<BoundExpression> arguments, 902SafeContext getArgumentEscapeScope(int nArgumentsVisited, ImmutableArray<BoundExpression> arguments, int argIndex) 1106private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, SyntaxNode syntax, Conversion conversion, BoundExpression right) 1186internal readonly BoundExpression Expression; 1190internal DeconstructionVariable(BoundExpression expression, SafeContext valEscape, ArrayBuilder<DeconstructionVariable>? nestedVariables) 1202foreach (var arg in arguments) 1208DeconstructionVariable getDeconstructionAssignmentVariable(BoundExpression expr) 1216private static ImmutableArray<BoundExpression> GetDeconstructionRightParts(BoundExpression expr) 1242ImmutableArray<BoundExpression> arguments; 1247inlineArray: node.Expression is not BoundConversion { Conversion.IsIdentity: true, ExplicitCastInCode: false, Operand: BoundExpression operand } ? node.Expression : operand,
Binder\Semantics\BestTypeInferrer.cs (4)
52ImmutableArray<BoundExpression> exprs, 70foreach (BoundExpression expr in exprs) 117BoundExpression expr1, 118BoundExpression expr2,
Binder\Semantics\Conversions\Conversion.cs (6)
96internal DeconstructionUncommonData(DeconstructMethodInfo deconstructMethodInfoOpt, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo) 104internal readonly ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> DeconstructConversionInfo; 180internal Conversion(ConversionKind kind, DeconstructMethodInfo deconstructMethodInfo, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo) 538internal ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> DeconstructConversionInfo 1253internal DeconstructMethodInfo(BoundExpression invocation, BoundDeconstructValuePlaceholder inputPlaceholder, 1260internal readonly BoundExpression Invocation;
Binder\Semantics\Conversions\Conversions.cs (2)
131protected override Conversion GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 225_ => ClassifyImplicitConversionFromExpression((BoundExpression)element, elementType, ref useSiteInfo),
Binder\Semantics\Conversions\ConversionsBase.cs (25)
75protected abstract Conversion GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo); 98public Conversion ClassifyImplicitConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 283public Conversion ClassifyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false) 375private Conversion ClassifyConversionFromExpressionForCast(BoundExpression source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 541public Conversion ClassifyStandardConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 605private Conversion ClassifyStandardImplicitConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 782private Conversion GetImplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 872private Conversion GetExplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1029private Conversion ClassifyImplicitBuiltInConversionFromExpression(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1074var innerExpression = ((BoundExpressionWithNullability)sourceExpression).Expression; 1184private Conversion GetSwitchExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1213private Conversion GetConditionalExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1231private static Conversion ClassifyNullLiteralConversion(BoundExpression source, TypeSymbol destination) 1270private static Conversion ClassifyImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination) 1349internal static bool HasImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination) 1401private Conversion ClassifyExplicitOnlyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast) 1441private static bool HasImplicitEnumerationConversion(BoundExpression source, TypeSymbol destination) 1641private static bool HasAnonymousFunctionConversion(BoundExpression source, TypeSymbol destination, CSharpCompilation compilation) 1920public Conversion ClassifyImplicitExtensionMethodThisArgConversion(BoundExpression sourceExpressionOpt, TypeSymbol sourceType, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool isMethodGroupConversion) 1959(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) => 2279private delegate Conversion ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast); 2294(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) 2312(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) => 2344var argument = arguments[i]; 3033internal bool HasImplicitConversionToOrImplementsVarianceCompatibleInterface(BoundExpression expressionToCheck, NamedTypeSymbol targetInterfaceType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool needSupportForRefStructInterfaces)
Binder\Semantics\Conversions\TypeConversions.cs (1)
54protected override Conversion GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Conversions\UserDefinedExplicitConversions.cs (6)
21BoundExpression sourceExpression, 86BoundExpression sourceExpression, 129BoundExpression sourceExpression, 142BoundExpression sourceExpression, 371BoundExpression sourceExpression, 479private Conversion EncompassingExplicitConversion(BoundExpression expr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Conversions\UserDefinedImplicitConversions.cs (5)
26BoundExpression sourceExpression, 143BoundExpression sourceExpression, 282BoundExpression sourceExpression, 575private bool IsEncompassedBy(BoundExpression aExpr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 594private Conversion EncompassingImplicitConversion(BoundExpression aExpr, TypeSymbol a, TypeSymbol b, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Operators\BinaryOperatorEasyOut.cs (4)
286private void BinaryOperatorEasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result) 323private static bool PossiblyUnusualConstantOperation(BoundExpression left, BoundExpression right)
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (39)
26BoundExpression left, 27BoundExpression right, 41internal void BinaryOperatorOverloadResolution_EasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result) 62BoundExpression left, 63BoundExpression right, 224BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, 336private void GetDelegateOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, 466BoundExpression nonDelegate = leftDelegate ? right : left; 477private void GetEnumOperation(BinaryOperatorKind kind, TypeSymbol enumType, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> operators) 601private void GetEnumOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> results) 688BoundExpression left, 689BoundExpression right, 719private void GetAllBuiltInOperators(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 776static bool useOnlyReferenceEquality(Conversions conversions, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 785static bool isUtf8ByteRepresentation(BoundExpression value) 790Conversion getOperandConversionForAllowByRefLikeNullCheck(bool isChecked, BoundExpression operand, TypeSymbol objectType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 805BoundExpression left, 806BoundExpression right, 870BoundExpression left, 871BoundExpression right, 1103BoundExpression left, 1104BoundExpression right, 1170BoundExpression left, 1171BoundExpression right, 1223private BetterResult BetterOperator(BinaryOperatorSignature op1, BinaryOperatorSignature op2, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1437BoundExpression left, 1438BoundExpression right, 1512void inferTypeArgumentsAndRemoveInapplicableToReceiverType(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> operators, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1586bool isApplicableToReceiver(in BinaryOperatorSignature candidate, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1612bool isOperandApplicableToReceiver(in BinaryOperatorSignature candidate, BoundExpression operand, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Operators\UnaryOperatorEasyOut.cs (1)
97private void UnaryOperatorEasyOut(UnaryOperatorKind kind, BoundExpression operand, UnaryOperatorOverloadResolutionResult result)
Binder\Semantics\Operators\UnaryOperatorOverloadResolution.cs (12)
29BoundExpression operand, 78BoundExpression operand, 153void inferTypeArgumentsAndRemoveInapplicableToReceiverType(UnaryOperatorKind kind, BoundExpression operand, ArrayBuilder<UnaryOperatorSignature> operators, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 218bool isApplicableToReceiver(in UnaryOperatorSignature candidate, BoundExpression operand, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 309BoundExpression operand, 375BoundExpression operand, 427private BetterResult BetterOperator(UnaryOperatorSignature op1, UnaryOperatorSignature op2, BoundExpression operand, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 498private void GetAllBuiltInOperators(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 529private bool CandidateOperators(bool isChecked, ArrayBuilder<UnaryOperatorSignature> operators, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 549private void GetEnumOperations(UnaryOperatorKind kind, BoundExpression operand, ArrayBuilder<UnaryOperatorSignature> operators) 580private static UnaryOperatorSignature? GetPointerOperation(UnaryOperatorKind kind, BoundExpression operand) 609BoundExpression operand,
Binder\Semantics\OverloadResolution\AnalyzedArguments.cs (6)
15public readonly ArrayBuilder<BoundExpression> Arguments; 23this.Arguments = new ArrayBuilder<BoundExpression>(32); 37public BoundExpression Argument(int i) 98var argument = Arguments[i]; 117foreach (var argument in this.Arguments) 148ImmutableArray<BoundExpression> arguments,
Binder\Semantics\OverloadResolution\MethodGroup.cs (6)
17internal BoundExpression Receiver { get; private set; } 31BoundExpression receiverOpt, 41BoundExpression receiverOpt, 66BoundExpression receiverOpt, 80private void PopulateHelper(BoundExpression receiverOpt, LookupResultKind resultKind, DiagnosticInfo error) 108public BoundExpression InstanceOpt
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (28)
97internal abstract TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr); 103internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr) 138private readonly ImmutableArray<BoundExpression> _arguments; 276ImmutableArray<BoundExpression> arguments,// Required; in scenarios like method group conversions where there are 329ImmutableArray<BoundExpression> arguments, 611BoundExpression argument = _arguments[arg]; 620private void MakeExplicitParameterTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations target, ExactOrBoundsKind kind, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 693MakeExplicitParameterTypeInferences(binder, (BoundExpression)element, targetElementType, kind, ref useSiteInfo); 750var sourceArgument = sourceArguments[i]; 870var argument = _arguments[arg]; 875private void MakeOutputTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 912if (element is BoundExpression expression) 943var sourceArgument = sourceArguments[i]; 1008private static bool DoesInputTypeContain(BoundExpression argument, TypeSymbol formalParameterType, TypeParameterSymbol typeParameter) 1044private bool HasUnfixedParamInInputType(BoundExpression pSource, TypeSymbol pDest) 1063private static bool DoesOutputTypeContain(BoundExpression argument, TypeSymbol formalParameterType, 1104private bool HasUnfixedParamInOutputType(BoundExpression argument, TypeSymbol formalParameterType) 1145var argument = _arguments[iArg]; 1367private void OutputTypeInference(Binder binder, BoundExpression expression, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1400private bool InferredReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1436private bool MethodGroupReturnTypeInference(Binder binder, BoundExpression source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1545private void ExplicitParameterTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1600private void ExplicitReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3061private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3189BoundExpression receiver, 3243ImmutableArray<BoundExpression> arguments, 3258ImmutableArray<BoundExpression> arguments, 3305var argument = _arguments[0];
Binder\Semantics\OverloadResolution\OverloadResolution.cs (17)
140BoundExpression receiver, 166BoundExpression receiverOpt, 188BoundExpression receiver, 431BoundExpression receiver, 582BoundExpression receiverOpt) where TMember : Symbol 2091ArrayBuilder<BoundExpression> arguments, 2130ArrayBuilder<BoundExpression> arguments, 2608ArrayBuilder<BoundExpression> arguments, 2711private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol 2863private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, TypeSymbol t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 2878BoundExpression node, 2933private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, Conversion conv1, TypeSymbol t2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither) 3138elementBetterResult = BetterConversionFromExpression((BoundExpression)element, elementType1, conversionToE1, elementType2, conversionToE2, ref useSiteInfo, okToDowngradeToNeither: out _); 3258private bool ExpressionMatchExactly(BoundExpression node, TypeSymbol t, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3416if (!(node is BoundExpression)) 4544BoundExpression argument = arguments.Argument(argumentPosition); 4689BoundExpression argument,
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (9)
194BoundExpression receiver, 644BoundExpression receiverOpt, 741BoundExpression receiver, 770var instanceArgument = arguments.Arguments[0]; 1068foreach (var argument in arguments.Arguments) 1083BoundExpression receiver, 1160BoundExpression argument = arguments.Argument(arg); 1370static bool isStringLiteralToInterpolatedStringHandlerArgumentConversion(BoundExpression argument, ParameterSymbol parameter) 1391private bool HadAmbiguousWorseMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isQuery, BoundExpression receiver, string name)
Binder\SwitchBinder.cs (9)
24private BoundExpression _switchGoverningExpression; 38protected BoundExpression SwitchGoverningExpression 64var boundSwitchExpression = BindSwitchGoverningExpression(switchGoverningDiagnostics); 212var boundLabelExpression = sectionBinder.BindTypeOrRValue(caseLabel.Value, tempDiagnosticBag); 240protected BoundExpression ConvertCaseExpression(CSharpSyntaxNode node, BoundExpression caseExpression, out ConstantValue constantValueOpt, BindingDiagnosticBag diagnostics, bool isGotoCaseExpr = false) 359private BoundExpression BindSwitchGoverningExpression(BindingDiagnosticBag diagnostics) 379var switchGoverningExpression = binder.BindRValueWithoutTargetType(node, diagnostics); 475BoundExpression gotoCaseExpressionOpt = null;
Binder\SwitchBinder_Patterns.cs (1)
39BoundExpression boundSwitchGoverningExpression = SwitchGoverningExpression;
Binder\SwitchExpressionArmBinder.cs (2)
43BoundExpression? whenClause = node.WhenClause != null 46BoundExpression armResult = armBinder.BindValue(node.Expression, diagnostics, BindValueKind.RValue);
Binder\SwitchExpressionBinder.cs (7)
26internal override BoundExpression BindSwitchExpressionCore(SwitchExpressionSyntax node, Binder originalBinder, BindingDiagnosticBag diagnostics) 31var boundInputExpression = BindSwitchGoverningExpression(diagnostics); 56BoundExpression boundInputExpression, 175private ImmutableArray<BoundSwitchExpressionArm> BindSwitchExpressionArms(SwitchExpressionSyntax node, Binder originalBinder, BoundExpression inputExpression, BindingDiagnosticBag diagnostics) 190internal TypeSymbol GetInputType(BoundExpression? inputExpression = null) 197private BoundExpression BindSwitchGoverningExpression(BindingDiagnosticBag diagnostics) 199var switchGoverningExpression = BindRValueWithoutTargetType(SwitchExpressionSyntax.GoverningExpression, diagnostics);
Binder\UsingStatementBinder.cs (3)
110BoundExpression? expressionOpt = null; 195BoundExpression? receiver = fromExpression 209var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(disposeMethod.ParameterCount);
Binder\WhileBinder.cs (2)
32var condition = originalBinder.BindBooleanExpression(node.Condition, diagnostics); 42var condition = originalBinder.BindBooleanExpression(node.Condition, diagnostics);
BoundTree\BoundArrayInitialization.cs (1)
11public BoundArrayInitialization Update(ImmutableArray<BoundExpression> initializers)
BoundTree\BoundDagEvaluation.cs (1)
51static Symbol? getSymbolFromIndexerAccess(BoundExpression indexerAccess)
BoundTree\BoundDecisionDag.cs (1)
144public BoundDecisionDag SimplifyDecisionDagIfConstantInput(BoundExpression input)
BoundTree\BoundDiscardExpression.cs (1)
12public BoundExpression SetInferredTypeWithAnnotations(TypeWithAnnotations type)
BoundTree\BoundExpression.cs (16)
34internal BoundExpression WithSuppression(bool suppress = true) 44var result = (BoundExpression)MemberwiseClone(); 49internal BoundExpression WithWasConverted() 59var result = (BoundExpression)MemberwiseClone(); 67internal new BoundExpression WithHasErrors() 69return (BoundExpression)base.WithHasErrors(); 485public BoundConversion UpdateOperand(BoundExpression operand) 545ImmutableArray<BoundExpression> newArguments, 676public BoundExpression ValueExpression { get; } 678public BoundExpression TypeExpression { get; } 681public BoundTypeOrValueData(Symbol valueSymbol, BoundExpression valueExpression, ReadOnlyBindingDiagnostic<AssemblySymbol> valueDiagnostics, BoundExpression typeExpression, ReadOnlyBindingDiagnostic<AssemblySymbol> typeDiagnostics) 734internal void VisitAllElements<T>(Action<BoundExpression, T> action, T args) 736foreach (var argument in this.Arguments)
BoundTree\BoundExpressionExtensions.cs (15)
20public static RefKind GetRefKind(this BoundExpression node) 81public static bool IsLiteralNull(this BoundExpression node) 86public static bool IsLiteralDefault(this BoundExpression node) 91public static bool IsImplicitObjectCreation(this BoundExpression node) 96public static bool IsLiteralDefaultOrImplicitObjectCreation(this BoundExpression node) 107public static bool IsDefaultValue(this BoundExpression node) 123public static bool HasExpressionType(this BoundExpression node) 129public static bool HasDynamicType(this BoundExpression node) 135public static NamedTypeSymbol? GetInferredDelegateType(this BoundExpression expr, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 144public static TypeSymbol? GetTypeOrFunctionType(this BoundExpression expr) 153public static FunctionTypeSymbol? GetFunctionType(this BoundExpression expr) 168public static void GetExpressionSymbols(this BoundExpression node, ArrayBuilder<Symbol> symbols, BoundNode parent, Binder binder) 240public static Conversion GetConversion(this BoundExpression boundNode) 253internal static bool IsExpressionOfComImportType([NotNullWhen(true)] this BoundExpression? expressionOpt) 268internal static bool IsDiscardExpression(this BoundExpression expr)
BoundTree\BoundExpressionWithNullability.cs (1)
11public BoundExpressionWithNullability(SyntaxNode syntax, BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type)
BoundTree\BoundImplicitIndexerAccess.cs (1)
12internal BoundImplicitIndexerAccess WithLengthOrCountAccess(BoundExpression lengthOrCountAccess)
BoundTree\BoundMethodGroup.cs (2)
16BoundExpression receiverOpt, 57public BoundExpression? InstanceOpt
BoundTree\BoundNewT.cs (2)
13public override ImmutableArray<BoundExpression> Arguments => ImmutableArray<BoundExpression>.Empty;
BoundTree\BoundNode.cs (5)
110var expression = this as BoundExpression; 157Debug.Assert(original is BoundExpression || !original.IsSuppressed); 368ImmutableArray<BoundNode>.CastUp(collection.Elements.CastArray<BoundExpression>()) == collection.Elements); 443public static Conversion GetConversion(BoundExpression? conversion, BoundValuePlaceholder? placeholder)
BoundTree\BoundNode_Source.cs (6)
128var expression = seqPoint.Expression; 151var value = returnStatement.ExpressionOpt; 214var receiver = call.ReceiverOpt; 224foreach (var argument in call.Arguments) 269var receiver = fieldAccess.ReceiverOpt; 337foreach (var effect in sequence.SideEffects)
BoundTree\BoundNodeExtensions.cs (5)
44BoundExpression expression = ((BoundExpressionStatement)statement).Expression; 61BoundExpression? receiverOpt = call!.ReceiverOpt; 73public static bool ContainsAwaitExpression(this ImmutableArray<BoundExpression> expressions) 76foreach (var expression in expressions) 249public static InterpolatedStringHandlerData GetInterpolatedStringHandlerData(this BoundExpression e, bool throwOnMissing = true)
BoundTree\BoundNoPiaObjectCreationExpression.cs (2)
13public override ImmutableArray<BoundExpression> Arguments => ImmutableArray<BoundExpression>.Empty;
BoundTree\BoundObjectCreationExpression.cs (3)
12public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, 18public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, 24public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments,
BoundTree\BoundObjectCreationExpressionBase.cs (1)
13public abstract ImmutableArray<BoundExpression> Arguments { get; }
BoundTree\BoundPatternBinding.cs (2)
14public readonly BoundExpression VariableAccess; 16public BoundPatternBinding(BoundExpression variableAccess, BoundDagTemp tempContainingValue)
BoundTree\BoundSpillSequence.cs (4)
18ImmutableArray<BoundExpression> sideEffects, 19BoundExpression value, 26private static ImmutableArray<BoundStatement> MakeStatements(ImmutableArray<BoundExpression> expressions) 28return expressions.SelectAsArray<BoundExpression, BoundStatement>(
BoundTree\BoundTreeRewriter.cs (10)
218if (node is BoundExpression or BoundPattern) 248BoundExpression child = node.Left; 252return node.Update(node.OperatorKind, VisitBinaryOperatorData(node), node.ResultKind, (BoundExpression)this.Visit(node.Left), (BoundExpression)this.Visit(node.Right), this.VisitType(node.Type)); 273var left = (BoundExpression?)this.Visit(child); 279var right = (BoundExpression?)this.Visit(binary.Right); 327BoundExpression condition = (BoundExpression)this.Visit(ifStatement.Condition);
BoundTree\BoundTreeVisitors.cs (1)
202Debug.Assert(node is BoundExpression or BoundPattern);
BoundTree\BoundTreeWalker.cs (5)
30BoundExpression? unoptimizedForm = queryClause.UnoptimizedForm; 73if (node is BoundExpression or BoundPattern) 88Debug.Assert(node is BoundExpression or BoundPattern); 112var rightOperands = ArrayBuilder<BoundExpression>.GetInstance(); 119BoundExpression? current = binary.Left;
BoundTree\Constructors.cs (66)
16BoundExpression? receiver, 26BoundExpression? receiver, 38BoundExpression? receiver, 50BoundExpression? receiver, 59private static bool NeedsByValueFieldAccess(BoundExpression? receiver, FieldSymbol fieldSymbol) 88BoundExpression? receiverOpt, 91ImmutableArray<BoundExpression> arguments, 106public BoundCall Update(BoundExpression? receiverOpt, 109ImmutableArray<BoundExpression> arguments, 123BoundExpression receiverOpt, 125ImmutableArray<BoundExpression> arguments, 165public BoundCall Update(ImmutableArray<BoundExpression> arguments) 170public BoundCall Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments) 175public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method) 177return Synthesized(syntax, receiverOpt, initialBindingReceiverIsSubjectToCloning: initialBindingReceiverIsSubjectToCloning, method, ImmutableArray<BoundExpression>.Empty); 180public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, BoundExpression arg0) 185public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, BoundExpression arg0, BoundExpression arg1) 190public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt = default) 260public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, params BoundExpression[] arguments) 261: this(syntax, constructor, ImmutableArray.Create<BoundExpression>(arguments), default(ImmutableArray<string?>), default(ImmutableArray<RefKind>), false, default(ImmutableArray<int>), default(BitVector), null, null, constructor.ContainingType) 264public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments) 274BoundExpression receiverOpt, 276ImmutableArray<BoundExpression> arguments, 299BoundExpression? receiverOpt, 302ImmutableArray<BoundExpression> arguments, 314public BoundIndexerAccess Update(BoundExpression? receiverOpt, 317ImmutableArray<BoundExpression> arguments, 335public static BoundConversion SynthesizedNonUserDefined(SyntaxNode syntax, BoundExpression operand, Conversion conversion, TypeSymbol type, ConstantValue? constantValueOpt = null) 357BoundExpression operand, 383BoundExpression operand, 410BoundExpression left, 411BoundExpression right, 437BoundExpression left, 438BoundExpression right, 450BoundExpression left, 451BoundExpression right, 479public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false) 486: this(syntax, aliasOpt, boundContainingTypeOpt, ImmutableArray<BoundExpression>.Empty, typeWithAnnotations, hasErrors) 500public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, ImmutableArray<BoundExpression> dimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false) 526public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, 535public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol type) 567public static BoundReturnStatement Synthesized(SyntaxNode syntax, RefKind refKind, BoundExpression expression, bool hasErrors = false) 631public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 644public static BoundDagTemp ForOriginalInput(BoundExpression expr) => new BoundDagTemp(expr.Syntax, expr.Type!, source: null); 651BoundExpression left, 652BoundExpression right, 654BoundExpression? leftConversion, 656BoundExpression? finalConversion, 665BoundExpression left, 666BoundExpression right, 668BoundExpression? leftConversion, 670BoundExpression? finalConversion, 681BoundExpression operand, 693BoundExpression operand, 707BoundExpression operand, 711BoundExpression? operandConversion, 713BoundExpression? resultConversion, 721public BoundIncrementOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, TypeSymbol type)
BoundTree\Expression.cs (6)
12internal static ImmutableArray<BoundExpression> GetChildInitializers(BoundExpression? objectOrCollectionInitializer) 26return ImmutableArray<BoundExpression>.Empty; 76protected override ImmutableArray<BoundNode?> Children => StaticCast<BoundNode?>.From(this.ConstructorArguments.AddRange(StaticCast<BoundExpression>.From(this.NamedArguments))); 131internal static ImmutableArray<BoundExpression> GetChildInitializers(BoundArrayInitialization? arrayInitializer) 133return arrayInitializer?.Initializers ?? ImmutableArray<BoundExpression>.Empty;
BoundTree\InterpolatedStringHandlerData.cs (3)
14public readonly BoundExpression Construction; 31BoundExpression construction, 50public InterpolatedStringHandlerData(BoundExpression construction)
BoundTree\NullabilityRewriter.cs (20)
32var stack = ArrayBuilder<(BoundIfStatement, BoundExpression, BoundStatement)>.GetInstance(); 37var rewrittenCondition = (BoundExpression)Visit(node.Condition); 88var leftChild = (BoundExpression)Visit(stack.Peek().Left); 95var right = (BoundExpression)Visit(currentBinary.Right); 140BoundExpression left = (BoundExpression)this.Visit(node.Left); 141BoundExpression right = (BoundExpression)this.Visit(node.Right); 143BoundExpression? leftConversion = node.LeftConversion; 145BoundExpression? finalConversion = node.FinalConversion; 252BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 253BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 254BoundExpression lengthOrCountAccess = node.LengthOrCountAccess; 255BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerOrSliceAccess);
BoundTree\PseudoVariableExpressions.cs (2)
13internal abstract BoundExpression GetValue(BoundPseudoVariable variable, DiagnosticBag diagnostics); 14internal abstract BoundExpression GetAddress(BoundPseudoVariable variable);
BoundTree\TupleBinaryOperatorInfo.cs (2)
52internal readonly BoundExpression? ConversionForBool; // If a conversion to bool exists, then no operator needed. If an operator is needed, this holds the conversion for input to that operator. 63BoundExpression? conversionForBool,
BoundTree\UnboundLambda.cs (10)
212var types = ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)>.GetInstance(); 253ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns, 362if (!(node is BoundExpression)) 383var expression = node.ExpressionOpt; 614protected abstract BoundExpression? GetLambdaExpressionBody(BoundBlock body); 619protected abstract BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics); 830GetLambdaExpressionBody(returnInferenceLambda.Body) is BoundExpression expression && 1594protected override BoundExpression? GetLambdaExpressionBody(BoundBlock body) 1601statements[0] is BoundReturnStatement { RefKind: Microsoft.CodeAnalysis.RefKind.None, ExpressionOpt: BoundExpression expr }) 1609protected override BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics)
BoundTree\VariablePendingInference.cs (3)
27internal BoundExpression SetInferredTypeWithAnnotations(TypeWithAnnotations type, BindingDiagnosticBag? diagnosticsOpt) 34internal BoundExpression SetInferredTypeWithAnnotations(TypeWithAnnotations type, Binder? binderOpt, BindingDiagnosticBag? diagnosticsOpt) 114internal BoundExpression FailInference(Binder binder, BindingDiagnosticBag? diagnosticsOpt)
CodeGen\CodeGenerator_HasHome.cs (2)
43BoundExpression expression, 228var receiver = fieldAccess.ReceiverOpt;
CodeGen\EmitAddress.cs (9)
24private LocalDefinition EmitAddress(BoundExpression expression, AddressKind addressKind) 101BoundExpression operand = ((BoundPointerIndirectionOperator)expression).Operand; 328private LocalDefinition EmitAddressOfTempClone(BoundExpression expression) 351private static LocalSymbol DigForValueLocal(BoundSequence topSequence, BoundExpression value) 371var receiver = fieldAccess.ReceiverOpt; 383private void EmitArrayIndices(ImmutableArray<BoundExpression> indices) 387BoundExpression index = indices[i]; 466private bool HasHome(BoundExpression expression, AddressKind addressKind) 502private LocalDefinition EmitReceiverRef(BoundExpression receiver, AddressKind addressKind)
CodeGen\EmitArrayInitializer.cs (29)
68ImmutableArray<BoundExpression> inits, 82ImmutableArray<BoundExpression> inits, 87var init = inits[i]; 101private static bool ShouldEmitInitExpression(bool includeConstants, BoundExpression init) 124public IndexDesc(int index, ImmutableArray<BoundExpression> initializers) 131public readonly ImmutableArray<BoundExpression> Initializers; 135ImmutableArray<BoundExpression> inits, 189var init = inits[i]; 206var initExpr = inits[i]; 216private static ConstantValue AsConstOrDefault(BoundExpression init) 246private ArrayInitializerStyle ShouldEmitBlockInitializer(TypeSymbol elementType, ImmutableArray<BoundExpression> inits) 296private void InitializerCountRecursive(ImmutableArray<BoundExpression> inits, ref int initCount, ref int constInits) 303foreach (var init in inits) 331private ImmutableArray<byte> GetRawData(ImmutableArray<BoundExpression> initializers) 343private void SerializeArrayRecursive(BlobBuilder bw, ImmutableArray<BoundExpression> inits) 349foreach (var init in inits) 356foreach (var init in inits) 367private static bool IsMultidimensionalInitializer(ImmutableArray<BoundExpression> inits) 397private bool TryEmitOptimizedReadonlySpanCreation(NamedTypeSymbol spanType, BoundExpression wrappedExpression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace, BoundExpression? start = null, BoundExpression? length = null) 480ImmutableArray<BoundExpression> initializers = initializer.Initializers; 630bool tryEmitAsCachedArrayFromBlob(NamedTypeSymbol spanType, BoundExpression wrappedExpression, int elementCount, ImmutableArray<byte> data, ref ArrayTypeSymbol arrayType, TypeSymbol elementType) 680bool tryEmitAsCachedArrayOfConstants(BoundArrayCreation arrayCreation, ArrayTypeSymbol arrayType, TypeSymbol elementType, NamedTypeSymbol spanType, bool used, BoundExpression? inPlaceTarget, out bool avoidInPlace) 754void emitEmptyReadonlySpan(NamedTypeSymbol spanType, BoundExpression wrappedExpression, bool used, BoundExpression? inPlaceTarget) 811private ImmutableArray<byte> GetRawDataForArrayInit(ImmutableArray<BoundExpression> initializers) 818foreach (var init in initializers)
CodeGen\EmitConversion.cs (4)
54var operand = conversion.Operand; 70BoundExpression operand = expression.Operand; 311private void EmitDelegateCreation(BoundExpression node, BoundExpression receiver, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, bool used)
CodeGen\EmitExpression.cs (51)
36private void EmitExpression(BoundExpression expression, bool used) 77private void EmitExpressionCoreWithStackGuard(BoundExpression expression, bool used) 94private void EmitExpressionCore(BoundExpression expression, bool used) 407var receiver = expression.Receiver; 542var whenNull = expression.WhenNullOpt; 709BoundExpression argument = expression.Arguments[i]; 715private void EmitArgument(BoundExpression argument, RefKind refKind) 811var receiver = mg != null ? mg.ReceiverOpt : expression.Argument; 950foreach (var se in sideEffects) 957private void EmitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 978internal static RefKind GetArgumentRefKind(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt, int i) 1180var receiver = fieldAccess.ReceiverOpt; 1208private LocalDefinition EmitFieldLoadReceiver(BoundExpression receiver) 1236private bool EmitFieldLoadReceiverAddress(BoundExpression receiver) 1275private bool FieldLoadPrefersRef(BoundExpression receiver) 1328internal static bool FieldLoadMustUseRef(BoundExpression expr) 1517private bool CanUseCallOnRefTypeReceiver(BoundExpression receiver) 1585var seqValue = ((BoundSequence)(receiver)).Value; 1589var rhs = ((BoundAssignmentOperator)receiver).Right; 1607private bool IsThisReceiver(BoundExpression receiver) 1615var seqValue = ((BoundSequence)(receiver)).Value; 1649var receiver = call.ReceiverOpt; 1669var receiver = call.ReceiverOpt; 1853var receiver = call.ReceiverOpt; 1943var receiver = call.ReceiverOpt; 1970var receiver = call.ReceiverOpt; 2049var receiver = call.ReceiverOpt; 2111internal static bool IsPossibleReferenceTypeReceiverOfConstrainedCall(BoundExpression receiver) 2123internal static bool ReceiverIsKnownToReferToTempIfReferenceType(BoundExpression receiver) 2141internal static bool IsSafeToDereferenceReceiverRefAfterEvaluatingArguments(ImmutableArray<BoundExpression> arguments) 2145static bool isSafeToDereferenceReceiverRefAfterEvaluatingArgument(BoundExpression expression) 2147var current = expression; 2236internal static bool IsRef(BoundExpression receiver) 2262private static int GetCallStackBehavior(MethodSymbol method, ImmutableArray<BoundExpression> arguments) 2440foreach (var init in initializer.Initializers) 2461foreach (var arg in expression.Arguments) 2495private bool TryEmitOptimizedReadonlySpan(BoundObjectCreationExpression expression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace) 2614var left = assignmentOperator.Left; 2629var right = assignmentOperator.Right; 2677private bool SafeToGetWriteableReference(BoundExpression left) 2704private void InPlaceInit(BoundExpression target, bool used) 2719private bool TryInPlaceCtorCall(BoundExpression target, BoundObjectCreationExpression objCreation, bool used) 2765private bool PartialCtorResultCannotEscape(BoundExpression left) 2791private static bool TargetIsNotOnHeap(BoundExpression left) 2809var assignmentTarget = assignmentOperator.Left; 3029BoundExpression lhs = assignmentOperator.Left; 3100BoundExpression expression = assignment.Left; 3135var array = ((BoundArrayAccess)expression).Expression; 3420var operand = isOp.Operand; 3446var operand = asOp.Operand; 3942private TypeSymbol StackMergeType(BoundExpression expr)
CodeGen\EmitOperators.cs (9)
92BoundExpression child = expression.Left; 361var comparand = binOp.Right; 454private void EmitIsNotNullOrZero(BoundExpression comparand, ConstantValue nullOrZero) 468private void EmitIsNullOrZero(BoundExpression comparand, ConstantValue nullOrZero) 482private void EmitBinaryCondOperatorHelper(ILOpCode opCode, BoundExpression left, BoundExpression right, bool sense) 492private void EmitCondExpr(BoundExpression condition, bool sense) 527private bool TryEmitComparison(BoundExpression condition, bool sense) 571private static void RemoveNegation(ref BoundExpression condition, ref bool sense)
CodeGen\EmitStackAllocInitializer.cs (8)
16private void EmitStackAlloc(TypeSymbol type, BoundArrayInitialization? inits, BoundExpression count) 129private ArrayInitializerStyle ShouldEmitBlockInitializerForStackAlloc(TypeSymbol elementType, ImmutableArray<BoundExpression> inits) 162private void StackAllocInitializerCount(ImmutableArray<BoundExpression> inits, ref int initCount, ref int constInits) 169foreach (var init in inits) 181private void EmitElementStackAllocInitializers(TypeSymbol elementType, ImmutableArray<BoundExpression> inits, bool includeConstants) 185foreach (BoundExpression init in inits) 199private void EmitPointerElementAccess(BoundExpression init, TypeSymbol elementType, int elementTypeSizeInBytes, int index) 226private void EmitIntConstantOrSizeOf(BoundExpression init, TypeSymbol elementType, int elementTypeSizeInBytes)
CodeGen\EmitStatement.cs (19)
172private void EmitThrow(BoundExpression thrown) 228private static BoundExpression TryReduce(BoundBinaryOperator condition, ref bool sense) 235BoundExpression nonConstOp; 236BoundExpression constOp = (condition.Left.ConstantValueOpt != null) ? condition.Left : null; 358private void EmitCondBranch(BoundExpression condition, ref object dest, bool sense) 376private void EmitCondBranchCoreWithStackGuard(BoundExpression condition, ref object dest, bool sense) 393private void EmitCondBranchCore(BoundExpression condition, ref object dest, bool sense) 426var stack = ArrayBuilder<(BoundExpression? condition, StrongBox<object?> destBox, bool sense)>.GetInstance(); 432(BoundExpression? condition, StrongBox<object?> destBox, bool sense) top = stack.Pop(); 500var reduced = TryReduce(binOp, ref sense); 529var receiver = ca.Receiver; 587var operand = isOp.Operand; 874var expressionOpt = boundReturnStatement.ExpressionOpt; 1144var exceptionSourceOpt = catchBlock.ExceptionSourceOpt; 1157BoundExpression exceptionSource = exceptionSourceOpt; 1276BoundExpression expression, 1991BoundExpression caseExpressionOpt = node.CaseExpressionOpt; 2003BoundExpression condition = node.Condition; 2011BoundExpression expression = node.Expression;
CodeGen\Optimizer.cs (118)
397private readonly ArrayBuilder<(BoundExpression, ExprContext)> _evalStack; 418ArrayBuilder<ValueTuple<BoundExpression, ExprContext>> evalStack, 435var evalStack = ArrayBuilder<ValueTuple<BoundExpression, ExprContext>>.GetInstance(); 447BoundExpression expr = node as BoundExpression; 461private BoundExpression VisitExpressionCore(BoundExpression node, ExprContext context) 468var result = node.ConstantValueOpt == null ? 469node = (BoundExpression)base.Visit(node) : 498private BoundExpression VisitExpression(BoundExpression node, ExprContext context) 500BoundExpression result; 518private BoundExpression VisitExpressionCoreWithStackGuard(BoundExpression node, ExprContext context) 524var result = VisitExpressionCore(node, context); 539private void PushEvalStack(BoundExpression result, ExprContext context) 720ArrayBuilder<BoundExpression> rewrittenSideeffects = null; 725var sideeffect = sideeffects[i]; 726var rewrittenSideeffect = this.VisitExpression(sideeffect, ExprContext.Sideeffects); 730rewrittenSideeffects = ArrayBuilder<BoundExpression>.GetInstance(); 741var value = this.VisitExpression(node.Value, origContext); 758var value = node.Value; 764var lastSideeffect = sideeffects.LastOrDefault(); 905BoundExpression rewritten = sequence.Update(sequence.Locals, 910rewritten = (BoundExpression)Visit(rewritten); 920var left = VisitExpression(node.Left, isIndirectAssignment ? 948BoundExpression right = node.Right; 1025internal static bool IsFixedBufferAssignmentToRefLocal(BoundExpression left, BoundExpression right, bool isRef) 1037var lhs = node.Left; 1108var lhs = node.Left; 1133BoundExpression rewrittenReceiver = visitReceiver(node); 1159BoundExpression rewrittenReceiver = visitReceiver(node); 1163BoundExpression visitReceiver(BoundCall node) 1165var receiver = node.ReceiverOpt; 1183receiver = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 1195BoundCall visitArgumentsAndUpdateCall(BoundCall node, BoundExpression receiver) 1202private BoundExpression VisitCallOrConditionalAccessReceiver(BoundExpression receiver, BoundCall callOpt) 1217private void CheckCallReceiver(BoundExpression receiver, BoundCall call) 1223var unwrappedSequence = receiver; 1237private static ExprContext GetReceiverContext(BoundExpression receiver) 1264private ImmutableArray<BoundExpression> VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 1271ArrayBuilder<BoundExpression> rewrittenArguments = null; 1281private void VisitArgument(ImmutableArray<BoundExpression> arguments, ref ArrayBuilder<BoundExpression> rewrittenArguments, int i, RefKind argRefKind) 1285var arg = arguments[i]; 1286BoundExpression rewrittenArg = VisitExpression(arg, context); 1290rewrittenArguments = ArrayBuilder<BoundExpression>.GetInstance(); 1303ArrayBuilder<BoundExpression> rewrittenArguments = null; 1304ImmutableArray<BoundExpression> arguments = node.Arguments; 1321var rewrittenOperand = VisitExpression(node.Operand, ExprContext.Address); 1351var receiver = node.ReceiverOpt; 1433BoundExpression boundExpression = node.Expression; 1443boundExpression = (BoundExpression)this.Visit(boundExpression); 1463BoundExpression condition = this.VisitExpression(node.Condition, ExprContext.Value); 1470BoundExpression consequence = this.VisitExpression(node.Consequence, context); 1475BoundExpression alternative = this.VisitExpression(node.Alternative, context); 1484BoundExpression child = node.Left; 1513var left = (BoundExpression)this.Visit(child); 1528var right = (BoundExpression)this.Visit(binary.Right); 1561BoundExpression left = (BoundExpression)this.Visit(node.Left); 1566BoundExpression right = (BoundExpression)this.Visit(node.Right); 1581BoundExpression left = (BoundExpression)this.Visit(node.LeftOperand); 1588BoundExpression right = (BoundExpression)this.Visit(node.RightOperand); 1598BoundExpression receiver = VisitCallOrConditionalAccessReceiver(node.Receiver, callOpt: null); 1605BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 1609var whenNull = node.WhenNullOpt; 1613whenNull = (BoundExpression)this.Visit(whenNull); 1636var valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 1642var unwrappedSequence = node.ReferenceTypeReceiver; 1654var referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 1668BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 1696var exceptionSourceOpt = node.ExceptionSourceOpt; 1733BoundExpression boundFilter; 1736boundFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt); 1769ArrayBuilder<BoundExpression> rewrittenInitializers = null; 1777var initializer = initializers[i]; 1778var rewrittenInitializer = this.VisitExpression(initializer, ExprContext.Value); 1782rewrittenInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 1800BoundExpression visitedOperand = this.VisitExpression(node.Operand, ExprContext.Address); 1806BoundExpression expressionOpt = (BoundExpression)this.Visit(node.ExpressionOpt); 2061var asExpression = node as BoundExpression; 2078BoundExpression child = node.Left; 2104var left = (BoundExpression)this.Visit(child); 2109var right = (BoundExpression)this.Visit(binary.Right); 2152ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 2189var right = (BoundExpression)Visit(node.Right); 2235BoundExpression? rewrittenReceiver = visitReceiver(node); 2256BoundExpression? rewrittenReceiver = visitReceiver(node); 2260BoundExpression? visitReceiver(BoundCall node) 2262BoundExpression? receiverOpt = node.ReceiverOpt; 2266receiverOpt = (BoundExpression?)this.Visit(receiverOpt); 2274receiverOpt = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 2286BoundExpression visitArgumentsAndUpdateCall(BoundCall node, BoundExpression? receiverOpt) 2288ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 2297var exceptionSource = node.ExceptionSourceOpt; 2300var filter = node.ExceptionFilterOpt; 2322exceptionSource = (BoundExpression)Visit(exceptionSource); 2333filter = (BoundExpression)this.Visit(filter); 2425internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Compilation\CSharpCompilation.cs (1)
2243var success = binder.GetAwaitableExpressionInfo(dumbInstance, out BoundExpression? result, out BoundCall? runtimeAwaitCall, syntax, diagnostics);
Compilation\CSharpSemanticModel.cs (27)
168internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols); 252private static BoundExpression GetSpeculativelyBoundExpressionHelper(Binder binder, ExpressionSyntax expression, SpeculativeBindingOption bindingOption) 259BoundExpression boundNode; 280protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols) 321var boundNode = GetSpeculativelyBoundExpressionHelper(binder, expression, bindingOption); 827BoundExpression expression = bnode.Expression; 1887BoundExpression boundExpr; 1902case BoundExpression boundExpr2: 1919if (highestBoundNode is BoundExpression highestBoundExpr) 2048var boundExpr = lowestBoundNode as BoundExpression; 2049var highestBoundExpr = highestBoundNode as BoundExpression; 2279static (TypeSymbol, NullabilityInfo) getTypeAndNullability(BoundExpression expr) => (expr.Type, expr.TopLevelNullability); 2292if (lowestBoundNode is BoundExpression boundExpr) 2313var boundExpr = lowestBoundNode as BoundExpression; 2868var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded); 2920var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded); 3356BoundExpression boundNode, 3441BoundExpression valueExpression = ((BoundTypeOrValueExpression)boundNode).Data.ValueExpression; 3959private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out OneOrMany<Symbol> symbols, out LookupResultKind resultKind) 3982BoundExpression boundNode, 4101private ImmutableArray<IPropertySymbol> GetIndexerGroupSemanticSymbols(BoundExpression boundNode, Binder binderOpt) 4625var receiver = node.ReceiverOpt; 4804BoundExpression receiver = call.Arguments[0]; 4813private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundDelegateCreationExpression delegateCreation, BoundExpression receiverOpt)
Compilation\MemberSemanticModel.cs (22)
192internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols) 205var boundRoot = binder.BindExpression(expression, BindingDiagnosticBag.Discarded); 207return (BoundExpression)NullableWalker.AnalyzeAndRewriteSpeculation(position, boundRoot, binder, snapshotManager, newSnapshots: out _, remappedSymbols: ref ignored); 476var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression; 500var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression; 1094var operation = call.IsDelegateCall ? call.ReceiverOpt : call; 1298BoundExpression boundExpr = this.GetLowerBoundNode(bindableNode) as BoundExpression; 1314var boundAdd = boundCollectionInitializer.Initializers[collectionInitializer.Expressions.IndexOf(node)]; 1806BoundExpression node = queryClause; 1824BoundExpression receiver = call.ReceiverOpt; 1870private static BoundExpression GetContainingArgument(ImmutableArray<BoundExpression> arguments, int position) 1872BoundExpression result = null; 1874foreach (var arg in arguments) 1876var expr = GetContainingExprOrQueryClause(arg, position); 1893private static BoundExpression GetContainingExprOrQueryClause(BoundExpression expr, int position) 1897var value = GetQueryClauseValue((BoundQueryClause)expr); 1910private static BoundExpression GetQueryClauseValue(BoundQueryClause queryClause)
Compilation\MemberSemanticModel.NodeMapBuilder.cs (1)
196var stack = ArrayBuilder<BoundExpression>.GetInstance();
Compilation\SpeculativeSemanticModelWithMemberModel.cs (1)
575internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
Compilation\SyntaxTreeSemanticModel.cs (2)
233BoundExpression bound = binder.BindExpression((ExpressionSyntax)node, BindingDiagnosticBag.Discarded); 738internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
Compiler\AnonymousTypeMethodBodySynthesizer.cs (7)
39BoundExpression call = Binder.GenerateBaseParameterlessConstructorInitializer(this, diagnostics); 125BoundExpression retExpression = F.Binary(BinaryOperatorKind.ObjectNotEqual, 194BoundExpression retExpression = F.Literal(initHash); 244BoundExpression retExpression = null; 249BoundExpression[] arguments = new BoundExpression[fieldCount]; 278BoundExpression format = F.Literal(formatString.ToStringAndFree());
Compiler\MethodBodySynthesizer.cs (12)
40BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true }; 48arguments: ImmutableArray<BoundExpression>.Empty, 106ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(slotIndex), intType) { WasCompilerGenerated = true }), 126ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(0), intType) { WasCompilerGenerated = true }), 154ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(targetSubmissionIndex), intType) { WasCompilerGenerated = true }), 180BoundExpression thisReference = null; 390BoundExpression delegateUpdate; 402arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundParameter)), 467arguments: ImmutableArray.Create<BoundExpression>(boundTmps[1], boundParameter)), 481BoundExpression compareExchange = BoundCall.Synthesized(syntax, 485arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundTmps[2], boundTmps[1])); 497BoundExpression loopExitCondition = new BoundBinaryOperator(syntax,
Compiler\MethodBodySynthesizer.Lowered.cs (12)
352public static BoundExpression GenerateHashCombine( 353BoundExpression currentHashValue, 357BoundExpression valueToHash, 380BoundExpression valueToHash, 398public static BoundExpression GenerateFieldEquals( 399BoundExpression? initialExpression, 400BoundExpression otherReceiver, 420BoundExpression? retExpression = initialExpression; 430BoundExpression nextEquals = F.Call( 457var argBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 465BoundExpression invocation = F.Call(methodToInvoke.IsStatic ? null : (useBaseReference ? (BoundExpression)F.Base(baseType: methodToInvoke.ContainingType) : F.This()),
Compiler\MethodCompiler.cs (2)
2482var initializerInvocation = Binder.BindImplicitConstructorInitializer(method, diagnostics, compilation); 2498private static void ReportCtorInitializerCycles(MethodSymbol method, BoundExpression initializerInvocation, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics)
FlowAnalysis\AbstractFlowPass.cs (58)
363if (node is BoundExpression or BoundPattern) 549protected void VisitLvalue(BoundExpression node) 625protected void VisitCondition(BoundExpression node) 631protected void AdjustConditionalState(BoundExpression node) 659protected virtual void VisitRvalue(BoundExpression node, bool isKnownToBeAnLvalue = false) 675protected static bool IsConstantTrue(BoundExpression node) 680protected static bool IsConstantFalse(BoundExpression node) 685protected static bool IsConstantNull(BoundExpression node) 1174(BoundExpression? construction, bool useBoolReturns, bool firstPartIsConditional) = data switch 1195protected virtual void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor) 1419private void VisitReceiverBeforeCall(BoundExpression receiverOpt, MethodSymbol method) 1427private void VisitReceiverAfterCall(BoundExpression receiverOpt, MethodSymbol method) 1516protected virtual void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1523private void VisitArgumentsBeforeCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt) 1544private void VisitArgumentsAfterCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol? method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1578protected virtual void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 1584foreach (var child in node.ChildBoundNodes) 1586VisitRvalue(child as BoundExpression); 1602VisitRvalue(child as BoundExpression); 1611foreach (var child in node.Initializers) 1673protected void SplitIfBooleanConstant(BoundExpression node) 1747BoundExpression receiver = ((BoundMethodGroup)node.Operand).ReceiverOpt; 2091if (element is BoundExpression expression) 2121protected virtual void PropertySetter(BoundExpression node, BoundExpression receiver, MethodSymbol setter, BoundExpression value = null) 2129private bool RegularPropertyAccess(BoundExpression expr) 2238private void VisitFieldAccessInternal(BoundExpression receiverOpt, FieldSymbol fieldSymbol) 2364foreach (var i in node.Indices) 2416private void VisitBinaryLogicalOperatorChildren(BoundExpression node) 2419var stack = ArrayBuilder<BoundExpression>.GetInstance(); 2421BoundExpression binary; 2422BoundExpression child = node; 2458protected virtual void VisitBinaryLogicalOperatorChildren(ArrayBuilder<BoundExpression> stack) 2460BoundExpression binary; 2465BoundExpression child; 2485BoundExpression right; 2525protected virtual void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression binary, BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse) 2531protected void AfterRightChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse) 2660static bool isKnownNullOrNotNull(BoundExpression expr) 2759ReadOnlySpan<BoundExpression> parts; 2772foreach (var part in parts) 2856foreach (var expr in node.Bounds) 3004private bool TryVisitConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull) 3055private bool VisitPossibleConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull) 3114BoundExpression expr = node.AccessExpression; 3128Debug.Assert(expr is BoundExpression); 3188foreach (var se in sideEffects) 3284BoundExpression node, 3286BoundExpression condition, 3287BoundExpression consequence, 3288BoundExpression alternative) 3332private void VisitConditionalOperand(TLocalState state, BoundExpression operand, bool isByRef) 3457BoundExpression expr = node.ExpressionOpt; 3514protected void VisitAddressOfOperand(BoundExpression operand, bool shouldReadOperand) 3605private BoundNode VisitObjectOrCollectionInitializerExpression(ImmutableArray<BoundExpression> initializers) 3607foreach (var initializer in initializers)
FlowAnalysis\AlwaysAssignedWalker.cs (1)
73protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method)
FlowAnalysis\ControlFlowPass.cs (1)
124if (!(node is BoundExpression))
FlowAnalysis\DataFlowsOutWalker.cs (2)
91protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef) 201protected override void AssignImpl(BoundNode node, BoundExpression value, bool isRef, bool written, bool read)
FlowAnalysis\DefiniteAssignment.cs (21)
313protected override void VisitRvalue(BoundExpression node, bool isKnownToBeAnLvalue = false) 801protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef) 852internal static bool WriteConsideredUse(TypeSymbol type, BoundExpression value) 909private void NoteWrite(BoundExpression n, BoundExpression value, bool read, bool isRef) 1017protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member) 1086protected bool MayRequireTracking(BoundExpression receiverOpt, FieldSymbol fieldSymbol) 1320protected virtual void CheckAssigned(BoundExpression expr, FieldSymbol fieldSymbol, SyntaxNode node) 1330private bool IsAssigned(BoundExpression node, out int unassignedSlot) 1433private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression) 1468protected void Assign(BoundNode node, BoundExpression value, bool isRef = false, bool read = true) 1485protected virtual void AssignImpl(BoundNode node, BoundExpression value, bool isRef, bool written, bool read) 1602var expression = (BoundExpression)node; 1885foreach (var attributeArgument in boundAttribute.ConstructorArguments) 2477var initializer = node.Expression; 2495BoundExpression operand = node.Operand; 2523protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 2546protected void CheckAssigned(BoundExpression expr, SyntaxNode node) 2639var exceptionSource = catchBlock.ExceptionSourceOpt;
FlowAnalysis\LocalDataFlowPass.cs (5)
204protected abstract bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member); 211protected virtual int MakeSlot(BoundExpression node) 227if (TryGetReceiverAndMember(node, out BoundExpression? receiver, out Symbol? member)) 239protected int MakeMemberSlot(BoundExpression? receiverOpt, Symbol member)
FlowAnalysis\NullableWalker.cs (300)
241private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)>.Builder? _analyzedNullabilityMapOpt; 256private PooledDictionary<BoundExpression, TypeWithState>? _methodGroupReceiverMapOpt; 258private PooledDictionary<BoundValuePlaceholderBase, (BoundExpression? Replacement, VisitResult Result)>? _resultForPlaceholdersOpt; 267private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>? _targetTypedAnalysisCompletionOpt; 272/// The delegate is invoked by <see cref="VisitConversion(BoundConversion, BoundExpression, Conversion, TypeWithAnnotations, TypeWithState, bool, bool, bool, AssignmentKind, ParameterSymbol, bool, bool, bool, bool, Optional&lt;LocalState&gt;,bool, Location, ArrayBuilder&lt;VisitResult&gt;)"/>. 274private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>> TargetTypedAnalysisCompletion 275=> _targetTypedAnalysisCompletionOpt ??= PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>.GetInstance(); 321private void SetResultType(BoundExpression? expression, TypeWithState type, bool updateAnalyzedNullability = true) 326private void SetAnalyzedNullability(BoundExpression? expression, TypeWithState type) 334private void UseRvalueOnly(BoundExpression? expression) 345private void SetLvalueResultType(BoundExpression? expression, TypeWithAnnotations type) 353private void UseLvalueOnly(BoundExpression? expression) 360private void SetResult(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool updateAnalyzedNullability = true, bool? isLvalue = null) 365private void SetResult(BoundExpression? expression, VisitResult visitResult, bool updateAnalyzedNullability, bool? isLvalue) 380private void SetAnalyzedNullability(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool? isLvalue = null) 388private void SetAnalyzedNullability(BoundExpression? expr, VisitResult result, bool? isLvalue = null) 457/// Used to allow <see cref="MakeSlot(BoundExpression)"/> to substitute the correct slot for a <see cref="BoundConditionalReceiver"/> when 492ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt, 569private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression? expression, VisitResult result) 576_resultForPlaceholdersOpt ??= PooledDictionary<BoundValuePlaceholderBase, (BoundExpression? Replacement, VisitResult Result)>.GetInstance(); 1608ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> analyzedNullabilitiesMap; 1613private static (SnapshotManager?, ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>) AnalyzeWithSemanticInfo( 1623var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance); 1681var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance); 1721private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols) 1848ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt, 2061protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member) 2119protected override int MakeSlot(BoundExpression node) 2139int makeSlot(BoundExpression node) 2162var operand = conv.Operand; 2216int getPlaceholderSlot(BoundExpression expr) 2317protected override void VisitRvalue(BoundExpression? node, bool isKnownToBeAnLvalue = false) 2331private void VisitRvalueEpilogue(BoundExpression? node) 2337private TypeWithState VisitRvalueWithState(BoundExpression? node) 2343private TypeWithAnnotations VisitLvalueWithAnnotations(BoundExpression node) 2419BoundExpression? value, 2441var unwrappedValue = SkipReferenceConversions(value); 2608private static bool IsDefaultValue(BoundExpression expr) 2641BoundExpression? valueOpt, 3063var expr = node.ExpressionOpt; 3133private TypeWithState VisitRefExpression(BoundExpression expr, TypeWithAnnotations destinationType) 3569var receiver = withExpr.Receiver; 3666var initializer = node.InitializerOpt; 3708Debug.Assert(node is BoundExpression or BoundPattern); 3712if (node is BoundExpression expr) 3720private void VisitExpressionWithoutStackGuardEpilogue(BoundExpression node) 3737bool shouldMakeNotNullRvalue(BoundExpression node) => node.IsSuppressed || node.HasAnyErrors || !IsReachable(); 3917var addArgument = initializer.Arguments[argIndex]; 3962var iteratorBody = ((BoundExpressionStatement)spread.IteratorBody).Expression; 3978var elementExpr = (BoundExpression)element; 4186BoundExpression node, TypeSymbol type, MethodSymbol? constructor, 4187ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitResult> argumentResults, 4239var operand = arguments[0]; 4257BoundExpression node, 4258ImmutableArray<BoundExpression> arguments, 4285foreach (var initializer in objectInitializer.Initializers) 4300foreach (var initializer in collectionInitializer.Initializers) 4331var left = node.Left; 4683private void SetNotNullResult(BoundExpression node) 4688private void SetNotNullResultForLambda(BoundExpression node, LocalState stateForLambda) 4735private int GetOrCreatePlaceholderSlot(BoundExpression node) 4778var argument = arguments[i]; 4822foreach (var expr in node.Bounds) 4842var expressions = ArrayBuilder<BoundExpression>.GetInstance(initialization.Initializers.Length); 4859foreach (var expr in expressions) 4867var expressionsNoConversions = ArrayBuilder<BoundExpression>.GetInstance(n); 4870var placeholderBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 4871foreach (var expression in expressions) 4874(BoundExpression expressionNoConversion, Conversion conversion) = RemoveConversion(expression, includeExplicitConversions: false); 4903var expressionNoConversion = expressionsNoConversions[i]; 4959internal static bool IsTargetTypedExpression(BoundExpression node) 4974ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns, 4998var placeholdersBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 5018BoundExpression placeholder = placeholders[i]; 5039private static void GetArrayElements(BoundArrayInitialization node, ArrayBuilder<BoundExpression> builder) 5041foreach (var child in node.Initializers) 5068foreach (var i in node.Indices) 5241static bool isKnownNullOrNotNull(BoundExpression expr, TypeWithState resultType) 5247LocalState getUnconditionalStateWhenNotNull(BoundExpression otherOperand, PossiblyConditionalState conditionalStateWhenNotNull) 5335BoundExpression leftOperand, 5338BoundExpression rightOperand, 5348BoundExpression binary, 5352BoundExpression left, 5353BoundExpression leftOperand, 5356BoundExpression right, 5357BoundExpression rightOperand, 5389BoundExpression expr, 5390BoundExpression operand, 5433BoundExpression leftOperand, 5434BoundExpression rightOperand, 5484TypeSymbol? getTypeIfContainingType(TypeSymbol baseType, TypeSymbol? derivedType, BoundExpression operand) 5502BoundExpression expr, BoundExpression operand, Conversion conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted, 5526private void VisitBinaryOperatorOperandConversionAndPostConditions(BoundExpression expr, BoundExpression operand, Conversion conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted) 5540BoundExpression leftOperand, 5558BoundExpression? operandComparedToNull = null; 5581BoundExpression? operandComparedToNonNull = null; 5611private void SplitAndLearnFromNonNullTest(BoundExpression operandComparedToNonNull, bool whenTrue) 5643private void GetSlotsToMarkAsNotNullable(BoundExpression operand, ArrayBuilder<int> slotBuilder) 5737private void LearnFromNonNullTest(BoundExpression expression, ref LocalState state) 5765private void LearnFromNullTest(BoundExpression expression, ref LocalState state) 5772var expressionWithoutConversion = RemoveConversion(expression, includeExplicitConversions: true).expression; 5858private static BoundExpression SkipReferenceConversions(BoundExpression possiblyConversion) 5879BoundExpression leftOperand = node.LeftOperand; 5880BoundExpression rightOperand = node.RightOperand; 5918BoundExpression leftOperand = node.LeftOperand; 5919BoundExpression rightOperand = node.RightOperand; 6014private bool TryVisitConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull) 6050private bool VisitPossibleConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull) 6083var receiver = node.Receiver; 6122BoundExpression expr = node.AccessExpression; 6139Debug.Assert(expr is BoundExpression); 6149Debug.Assert(expr is BoundExpression); 6183void makeAndAdjustReceiverSlot(BoundExpression receiver) 6205BoundExpression node, 6207BoundExpression condition, 6208BoundExpression originalConsequence, 6209BoundExpression originalAlternative) 6240BoundExpression consequencePlaceholder = CreatePlaceholderIfNecessary(originalConsequence, consequenceLValue); 6241BoundExpression alternativePlaceholder = CreatePlaceholderIfNecessary(originalAlternative, alternativeLValue); 6259(var consequence, var consequenceConversion, consequenceRValue) = visitConditionalOperand(consequenceState, originalConsequence); 6264(var alternative, var alternativeConversion, alternativeRValue) = visitConditionalOperand(alternativeState, originalAlternative); 6296BoundExpression consequencePlaceholder = CreatePlaceholderIfNecessary(consequence, consequenceRValue.ToTypeWithAnnotations(compilation)); 6297BoundExpression alternativePlaceholder = CreatePlaceholderIfNecessary(alternative, alternativeRValue.ToTypeWithAnnotations(compilation)); 6338BoundExpression node, BoundExpression originalConsequence, BoundExpression originalAlternative, LocalState consequenceState, LocalState alternativeState, 6339TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence, Conversion consequenceConversion, bool consequenceEndReachable, 6340BoundExpression alternative, Conversion alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped) 6382BoundExpression node, 6383BoundExpression originalConsequence, 6384BoundExpression originalAlternative, 6389BoundExpression consequence, 6392BoundExpression alternative, 6406(BoundExpression, Conversion, TypeWithState) visitConditionalOperand(LocalState state, BoundExpression operand) 6412BoundExpression operandNoConversion; 6419(TypeWithAnnotations LValueType, TypeWithState RValueType) visitConditionalRefOperand(LocalState state, BoundExpression operand) 6427void reportMismatchIfNecessary(BoundExpression node, TypeWithAnnotations source, TypeWithAnnotations destination) 6437BoundExpression node, 6438BoundExpression operand, 6488private static BoundExpression CreatePlaceholderIfNecessary(BoundExpression expr, TypeWithAnnotations type) 6651BoundExpression? child = node.Arguments[i]; 6687private TypeWithState VisitAndCheckReceiver(BoundExpression? receiverOpt, MethodSymbol method) 6703BoundExpression? receiverOpt, 6706ImmutableArray<BoundExpression> arguments, 6738static ImmutableArray<BoundExpression> getArguments(ImmutableArray<BoundExpression> arguments, bool isNewExtension, BoundExpression? receiver) 6850if (node.ReceiverOpt is BoundExpression receiver && 6957void learnFromEqualsMethodArguments(BoundExpression left, TypeWithState leftType, BoundExpression right, TypeWithState rightType) 6999public readonly ImmutableArray<BoundExpression> Arguments; 7003public CompareExchangeInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitResult> results, ImmutableArray<int> argsToParamsOpt) 7042var comparand = compareExchangeInfo.Arguments[comparandIndex]; 7058private void CheckCallReceiver(BoundExpression? receiverOpt, TypeWithState receiverType, MethodSymbol method) 7229protected override void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 7236BoundExpression node, 7237ImmutableArray<BoundExpression> arguments, 7249BoundExpression node, 7250ImmutableArray<BoundExpression> arguments, 7263ImmutableArray<BoundExpression> arguments, 7285ImmutableArray<BoundExpression> arguments, 7311(ImmutableArray<BoundExpression> argumentsNoConversions, ImmutableArray<Conversion> conversions) = RemoveArgumentConversions(arguments, refKindsOpt); 7324ImmutableArray<BoundExpression> arguments, 7325ImmutableArray<BoundExpression> argumentsNoConversions, 7393var argumentNoConversion = argumentsNoConversions[i]; 7394var argument = i < arguments.Length ? arguments[i] : argumentNoConversion; 7496var argument = arguments[i]; 7498var argumentNoConversion = argumentsNoConversions[i]; 7514ImmutableArray<BoundExpression> arguments, 7515ImmutableArray<BoundExpression> argumentsNoConversions, 7535static void expandParamsCollection(ref ImmutableArray<BoundExpression> arguments, ref ImmutableArray<RefKind> refKindsOpt, ImmutableArray<ParameterSymbol> parametersOpt, ref ImmutableArray<int> argsToParamsOpt, ref BitVector defaultArguments) 7545BoundExpression argument = arguments[a]; 7549ImmutableArray<BoundExpression> elements; 7557elements = ((BoundCollectionExpression)((BoundConversion)argument).Operand).UnconvertedCollectionExpression.Elements.CastArray<BoundExpression>(); 7578var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length + elements.Length - 1); 7610bool tryShortCircuitTargetTypedExpression(BoundExpression argument, BoundExpression argumentNoConversion) 7630private void ApplyMemberPostConditions(BoundExpression? receiverOpt, MethodSymbol? method) 7769ImmutableArray<BoundExpression> arguments, 7803private ImmutableArray<FlowAnalysisAnnotations> GetParametersAnnotations(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parametersOpt, ImmutableArray<int> argsToParamsOpt, bool expanded) 7831private VisitResult VisitArgumentEvaluate(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 7837private bool VisitArgumentEvaluateNeedsCloningState(BoundExpression argument) 7843private VisitResult VisitArgumentEvaluateEpilogue(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 7896BoundExpression argumentNoConversion, 7983private bool CheckDisallowedNullAssignment(TypeWithState state, FlowAnalysisAnnotations annotations, SyntaxNode node, BoundExpression? boundValueOpt = null) 8034BoundExpression argument, 8150void trackNullableStateForAssignment(BoundExpression parameterValue, TypeWithAnnotations lValueType, int targetSlot, TypeWithState parameterWithState, bool isSuppressed, FlowAnalysisAnnotations parameterAnnotations) 8240private void LearnFromPostConditions(BoundExpression argument, FlowAnalysisAnnotations parameterAnnotations) 8286private (ImmutableArray<BoundExpression> arguments, ImmutableArray<Conversion> conversions) RemoveArgumentConversions( 8287ImmutableArray<BoundExpression> arguments, 8294var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 8300var argument = arguments[i]; 8304var before = argument; 8369ImmutableArray<BoundExpression> arguments, 8483internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr) 8494private static NullableAnnotation GetNullableAnnotation(BoundExpression expr) 8529private ImmutableArray<BoundExpression> GetArgumentsForMethodTypeInference(ImmutableArray<VisitResult> argumentResults, ImmutableArray<BoundExpression> arguments) 8537var builder = ArrayBuilder<BoundExpression>.GetInstance(n); 8545BoundExpression getArgumentForMethodTypeInference(BoundExpression argument, VisitResult visitResult) 8569if (collection.Elements[i] is BoundExpression elementExpression) 8677private static (BoundExpression expression, Conversion conversion) RemoveConversion(BoundExpression expr, bool includeExplicitConversions) 8715private Conversion GenerateConversionForConditionalOperator(BoundExpression sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool reportMismatch, bool isChecked) 8726private Conversion GenerateConversion(Conversions conversions, BoundExpression? sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool fromExplicitCast, bool extensionMethodThisArgument, bool isChecked) 8755private bool UseExpressionForConversion([NotNullWhen(true)] BoundExpression? value) 8910(BoundExpression operand, Conversion conversion) = RemoveConversion(node, includeExplicitConversions: true); 8945private TypeWithState VisitOptionalImplicitConversion(BoundExpression expr, TypeWithAnnotations targetTypeOpt, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind) 8958BoundExpression expr, 8965(BoundExpression operand, Conversion conversion) = RemoveConversion(expr, includeExplicitConversions: false); 8972BoundExpression expr, 8975BoundExpression operand, 9008Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand, Conversion conversion, TypeWithState operandType) 9100ImmutableArray<BoundExpression> values, 9131void trackState(BoundExpression value, FieldSymbol field, TypeWithState valueType) 9145private void TrackNullableStateOfNullableValue(int containingSlot, TypeSymbol containingType, BoundExpression? value, TypeWithState valueType, int valueSlot) 9160BoundExpression convertedNode, 9383private static BoundConversion? GetConversionIfApplicable(BoundExpression? conversionOpt, BoundExpression convertedNode) 9414BoundExpression conversionOperand, 9974BoundExpression conversionOperand, 10118private void SnapshotWalkerThroughConversionGroup(BoundExpression conversionExpression, BoundExpression convertedNode) 10137private void TrackAnalyzedNullabilityThroughConversionGroup(TypeWithState resultType, BoundConversion? conversionOpt, BoundExpression convertedNode) 10194BoundExpression node, 10260case BoundExpression arg when arg.Type is { TypeKind: TypeKind.Delegate }: 10372Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped) 10386Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped) 10406Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg) 10416var receiverOpt = node.ReceiverOpt; 10430private bool TryGetMethodGroupReceiverNullability([NotNullWhen(true)] BoundExpression? receiverOpt, out TypeWithState type) 10445private void SetMethodGroupReceiverNullability(BoundExpression receiver, TypeWithState type) 10447_methodGroupReceiverMapOpt ??= PooledDictionary<BoundExpression, TypeWithState>.GetInstance(); 10453var receiverOpt = group.ReceiverOpt; 10466var arguments = ArrayBuilder<BoundExpression>.GetInstance(); 10572private void VisitThisOrBaseReference(BoundExpression node) 10593var left = node.Left; 10594var right = node.Right; 10679private void AdjustSetValue(BoundExpression left, ref TypeWithState rightState) 10694private FlowAnalysisAnnotations GetLValueAnnotations(BoundExpression expr) 10755private static bool UseLegacyWarnings(BoundExpression expr) 10803private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt = null) 10817private void VisitDeconstructMethodArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt) 10849ArrayBuilder<BoundExpression> placeholderArgs = ArrayBuilder<BoundExpression>.GetInstance(n + 1); 10889var nestedRight = CreatePlaceholderIfNecessary(invocation.Arguments[i + offset], parameter.TypeWithAnnotations); 10916private void VisitTupleDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo, BoundExpression right, TypeWithState? rightResultOpt) 10927var rightPart = rightParts[i]; 11002internal readonly BoundExpression Expression; 11006internal DeconstructionVariable(BoundExpression expression, TypeWithAnnotations type) 11013internal DeconstructionVariable(BoundExpression expression, ArrayBuilder<DeconstructionVariable> nestedVariables) 11025foreach (var argument in arguments) 11031DeconstructionVariable getDeconstructionAssignmentVariable(BoundExpression expr) 11049private ImmutableArray<BoundExpression> GetDeconstructionRightParts(BoundExpression expr, TypeWithState? rightResultOpt) 11079return fields.SelectAsArray((f, e) => (BoundExpression)new BoundFieldAccess(e.Syntax, e, f, constantValueOpt: null), expr); 11395var initializer = node.Expression; 11417private void ReportNullabilityMismatchInRefArgument(BoundExpression argument, TypeSymbol argumentType, ParameterSymbol parameter, TypeSymbol parameterType) 11472private (PropertySymbol updatedProperty, bool returnNotNull) ReInferAndVisitExtensionPropertyAccess(BoundNode node, PropertySymbol property, BoundExpression receiver) 11475ImmutableArray<BoundExpression> arguments = [receiver]; 11530var receiverOpt = node.ReceiverOpt; 11599private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member) 11702BoundExpression collectionExpression, 11704BoundExpression expr, 12028foreach (var child in node.ChildBoundNodes) 12038private TypeWithState VisitBadExpressionChild(BoundExpression? child) 12049VisitRvalue(child as BoundExpression); 12152private MethodSymbol ReInferUnaryOperator(SyntaxNode syntax, MethodSymbol method, BoundExpression operand, TypeWithState operandType) 12225protected override void VisitBinaryLogicalOperatorChildren(ArrayBuilder<BoundExpression> stack) 12227BoundExpression binary; 12232BoundExpression? leftOperand = null; 12301void afterLeftChildOfBoundUserDefinedConditionalLogicalOperatorHasBeenVisited(BoundUserDefinedConditionalLogicalOperator binary, BoundExpression leftOperand, Conversion leftConversion) 12375protected override void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression node, BoundExpression right, bool isAnd, bool isBool, ref LocalState leftTrue, ref LocalState leftFalse) 12464var operand = node.Operand; 12608var receiver = node.Receiver; 12620var expr = node.Expression; 12624var receiverOpt = (expr as BoundMethodGroup)?.ReceiverOpt; 12640var receiverOpt = node.ReceiverOpt; 12725private void SetUnknownResultNullability(BoundExpression expression) 12732var receiver = node.Receiver; 12744private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, bool checkNullableValueType = false) 12749private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, TypeWithState resultType, bool checkNullableValueType) 12793private void CheckExtensionMethodThisNullability(BoundExpression expr, Conversion conversion, ParameterSymbol parameter, TypeWithState result) 12860protected override void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor) 12929private void VisitThrow(BoundExpression? expr) 12948BoundExpression expr = node.Expression;
FlowAnalysis\NullableWalker.DebugVerifier.cs (12)
21private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _analyzedNullabilityMap; 23private readonly HashSet<BoundExpression> _visitedExpressions = new HashSet<BoundExpression>(); 26private DebugVerifier(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> analyzedNullabilityMap, SnapshotManager? snapshotManager) 37public static void Verify(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> analyzedNullabilityMap, SnapshotManager? snapshotManagerOpt, BoundNode node) 46foreach (var analyzedNode in verifier._analyzedNullabilityMap.Keys) 56foreach (var verifiedNode in verifier._visitedExpressions) 66private void VerifyExpression(BoundExpression expression, bool overrideSkippedExpression = false) 82if (node is BoundExpression expr) 98if (node is BoundExpression or BoundPattern) 160foreach (var child in node.ChildBoundNodes) 234foreach (var arg in enumeratorInfo.GetEnumeratorInfo.Arguments)
FlowAnalysis\NullableWalker.PlaceholderLocal.cs (1)
62internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) => ReadOnlyBindingDiagnostic<AssemblySymbol>.Empty;
FlowAnalysis\NullableWalker_Patterns.cs (13)
25BoundExpression expression, 377BoundExpression expression, 405var originalInputMap = PooledDictionary<int, BoundExpression>.GetInstance(); 676var variableAccess = binding.VariableAccess; 738if (originalInputMap.TryGetValue(inputSlot, out var expression)) 848static TypeWithAnnotations getIndexerOutputType(TypeSymbol inputType, BoundExpression e, bool isSlice) 917var expressions = ArrayBuilder<BoundExpression>.GetInstance(numSwitchArms); 918var placeholderBuilder = ArrayBuilder<BoundExpression>.GetInstance(numSwitchArms); 933(BoundExpression expression, Conversion conversion) = RemoveConversion(arm.Value, includeExplicitConversions: false); 992ArrayBuilder<BoundExpression> expressions, 1001var nodeForSyntax = expressions[i]; 1037ArrayBuilder<BoundExpression> expressions) 1050private int GetSlotForSwitchInputValue(BoundExpression node)
FlowAnalysis\ReadWriteWalker.cs (5)
137protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef) 144protected override void CheckAssigned(BoundExpression expr, FieldSymbol fieldSymbol, SyntaxNode node) 179var receiver = expr.ReceiverOpt; 183private void NoteExpressionReadOrWritten(BoundExpression receiver, HashSet<Symbol> readOrWritten) 236protected override void AssignImpl(BoundNode node, BoundExpression value, bool isRef, bool written, bool read)
Generated\BoundNodes.xml.Generated.cs (1047)
273protected BoundEqualsValue(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 285public BoundExpression Value { get; } 290public BoundFieldEqualsValue(SyntaxNode syntax, FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 306public BoundFieldEqualsValue Update(FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value) 320public BoundPropertyEqualsValue(SyntaxNode syntax, PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 336public BoundPropertyEqualsValue Update(PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value) 350public BoundParameterEqualsValue(SyntaxNode syntax, ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 366public BoundParameterEqualsValue Update(ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value) 481public BoundCapturedReceiverPlaceholder(SyntaxNode syntax, BoundExpression receiver, SafeContext localScopeDepth, TypeSymbol? type, bool hasErrors = false) 491public BoundExpression Receiver { get; } 497public BoundCapturedReceiverPlaceholder Update(BoundExpression receiver, SafeContext localScopeDepth, TypeSymbol? type) 933public BoundPassByCopy(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 942public BoundExpression Expression { get; } 947public BoundPassByCopy Update(BoundExpression expression, TypeSymbol? type) 961public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false) 975public ImmutableArray<BoundExpression> ChildBoundNodes { get; } 980public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type) 1050public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type, bool hasErrors = false) 1064public ImmutableArray<BoundExpression> BoundDimensionsOpt { get; } 1071public BoundTypeExpression Update(AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type) 1164public BoundUnaryOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false) 1182public BoundExpression Operand { get; } 1192public BoundUnaryOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type) 1206public BoundIncrementOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false) 1227public BoundExpression Operand { get; } 1231public BoundExpression? OperandConversion { get; } 1233public BoundExpression? ResultConversion { get; } 1240public BoundIncrementOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type) 1254public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, bool isManaged, TypeSymbol type, bool hasErrors = false) 1266public BoundExpression Operand { get; } 1272public BoundAddressOfOperator Update(BoundExpression operand, bool isManaged, TypeSymbol type) 1358public BoundPointerIndirectionOperator(SyntaxNode syntax, BoundExpression operand, bool refersToLocation, TypeSymbol type, bool hasErrors = false) 1370public BoundExpression Operand { get; } 1376public BoundPointerIndirectionOperator Update(BoundExpression operand, bool refersToLocation, TypeSymbol type) 1390public BoundPointerElementAccess(SyntaxNode syntax, BoundExpression expression, BoundExpression index, bool @checked, bool refersToLocation, TypeSymbol type, bool hasErrors = false) 1405public BoundExpression Expression { get; } 1406public BoundExpression Index { get; } 1413public BoundPointerElementAccess Update(BoundExpression expression, BoundExpression index, bool @checked, bool refersToLocation, TypeSymbol type) 1427public BoundFunctionPointerInvocation(SyntaxNode syntax, BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 1442public BoundExpression InvokedExpression { get; } 1443public ImmutableArray<BoundExpression> Arguments { get; } 1450public BoundFunctionPointerInvocation Update(BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type) 1464public BoundRefTypeOperator(SyntaxNode syntax, BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors = false) 1476public BoundExpression Operand { get; } 1482public BoundRefTypeOperator Update(BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type) 1496public BoundMakeRefOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 1507public BoundExpression Operand { get; } 1512public BoundMakeRefOperator Update(BoundExpression operand, TypeSymbol type) 1526public BoundRefValueOperator(SyntaxNode syntax, NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 1539public BoundExpression Operand { get; } 1544public BoundRefValueOperator Update(NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type) 1558public BoundFromEndIndexExpression(SyntaxNode syntax, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false) 1570public BoundExpression Operand { get; } 1576public BoundFromEndIndexExpression Update(BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type) 1590public BoundRangeExpression(SyntaxNode syntax, BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false) 1602public BoundExpression? LeftOperandOpt { get; } 1603public BoundExpression? RightOperandOpt { get; } 1609public BoundRangeExpression Update(BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type) 1623protected BoundBinaryOperatorBase(BoundKind kind, SyntaxNode syntax, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1636public BoundExpression Left { get; } 1637public BoundExpression Right { get; } 1642public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1662public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type) 1676public BoundTupleBinaryOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type, bool hasErrors = false) 1692public BoundExpression Left { get; } 1693public BoundExpression Right { get; } 1700public BoundTupleBinaryOperator Update(BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type) 1714public BoundUserDefinedConditionalLogicalOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, BoundValuePlaceholder? trueFalseOperandPlaceholder, BoundExpression? trueFalseOperandConversion, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1745public BoundExpression? TrueFalseOperandConversion { get; } 1753public BoundUserDefinedConditionalLogicalOperator Update(BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, BoundValuePlaceholder? trueFalseOperandPlaceholder, BoundExpression? trueFalseOperandConversion, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type) 1767public BoundCompoundAssignmentOperator(SyntaxNode syntax, BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false) 1788public BoundExpression Left { get; } 1789public BoundExpression Right { get; } 1791public BoundExpression? LeftConversion { get; } 1793public BoundExpression? FinalConversion { get; } 1800public BoundCompoundAssignmentOperator Update(BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type) 1814public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type, bool hasErrors = false) 1827public BoundExpression Left { get; } 1828public BoundExpression Right { get; } 1834public BoundAssignmentOperator Update(BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type) 1883public BoundNullCoalescingOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type, bool hasErrors = false) 1900public BoundExpression LeftOperand { get; } 1901public BoundExpression RightOperand { get; } 1903public BoundExpression? LeftConversion { get; } 1910public BoundNullCoalescingOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type) 1924public BoundNullCoalescingAssignmentOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type, bool hasErrors = false) 1935public BoundExpression LeftOperand { get; } 1936public BoundExpression RightOperand { get; } 1941public BoundNullCoalescingAssignmentOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type) 1955public BoundUnconvertedConditionalOperator(SyntaxNode syntax, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError, bool hasErrors = false) 1971public BoundExpression Condition { get; } 1972public BoundExpression Consequence { get; } 1973public BoundExpression Alternative { get; } 1980public BoundUnconvertedConditionalOperator Update(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError) 1994public BoundConditionalOperator(SyntaxNode syntax, bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 2014public BoundExpression Condition { get; } 2015public BoundExpression Consequence { get; } 2016public BoundExpression Alternative { get; } 2024public BoundConditionalOperator Update(bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type) 2038public BoundArrayAccess(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type, bool hasErrors = false) 2051public BoundExpression Expression { get; } 2052public ImmutableArray<BoundExpression> Indices { get; } 2057public BoundArrayAccess Update(BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type) 2100public BoundArrayLength(SyntaxNode syntax, BoundExpression expression, TypeSymbol type, bool hasErrors = false) 2111public BoundExpression Expression { get; } 2116public BoundArrayLength Update(BoundExpression expression, TypeSymbol type) 2130public BoundAwaitableInfo(SyntaxNode syntax, BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, BoundCall? runtimeAsyncAwaitCall, BoundAwaitableValuePlaceholder? runtimeAsyncAwaitCallPlaceholder, bool hasErrors = false) 2148public BoundExpression? GetAwaiter { get; } 2157public BoundAwaitableInfo Update(BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, BoundCall? runtimeAsyncAwaitCall, BoundAwaitableValuePlaceholder? runtimeAsyncAwaitCallPlaceholder) 2171public BoundAwaitExpression(SyntaxNode syntax, BoundExpression expression, BoundAwaitableInfo awaitableInfo, BoundAwaitExpressionDebugInfo debugInfo, TypeSymbol type, bool hasErrors = false) 2185public BoundExpression Expression { get; } 2192public BoundAwaitExpression Update(BoundExpression expression, BoundAwaitableInfo awaitableInfo, BoundAwaitExpressionDebugInfo debugInfo, TypeSymbol type) 2849public BoundIsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type, bool hasErrors = false) 2863public BoundExpression Operand { get; } 2870public BoundIsOperator Update(BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type) 2884public BoundAsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type, bool hasErrors = false) 2899public BoundExpression Operand { get; } 2902public BoundExpression? OperandConversion { get; } 2907public BoundAsOperator Update(BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type) 2953public BoundConversion(SyntaxNode syntax, BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, TypeSymbol type, bool hasErrors = false) 2970public BoundExpression Operand { get; } 2981public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, TypeSymbol type) 2995public BoundReadOnlySpanFromArray(SyntaxNode syntax, BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type, bool hasErrors = false) 3008public BoundExpression Operand { get; } 3014public BoundReadOnlySpanFromArray Update(BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type) 3063public BoundArgListOperator(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type, bool hasErrors = false) 3074public ImmutableArray<BoundExpression> Arguments { get; } 3080public BoundArgListOperator Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type) 3094public BoundFixedLocalCollectionInitializer(SyntaxNode syntax, TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type, bool hasErrors = false) 3112public BoundExpression? ElementPointerConversion { get; } 3113public BoundExpression Expression { get; } 3119public BoundFixedLocalCollectionInitializer Update(TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type) 3400public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false) 3415public BoundExpression? InitializerOpt { get; } 3416public ImmutableArray<BoundExpression> ArgumentsOpt { get; } 3422public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType) 3569public BoundReturnStatement(SyntaxNode syntax, RefKind refKind, BoundExpression? expressionOpt, bool @checked, bool hasErrors = false) 3578public BoundExpression? ExpressionOpt { get; } 3584public BoundReturnStatement Update(RefKind refKind, BoundExpression? expressionOpt, bool @checked) 3598public BoundYieldReturnStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false) 3607public BoundExpression Expression { get; } 3612public BoundYieldReturnStatement Update(BoundExpression expression) 3643public BoundThrowStatement(SyntaxNode syntax, BoundExpression? expressionOpt, bool hasErrors = false) 3649public BoundExpression? ExpressionOpt { get; } 3654public BoundThrowStatement Update(BoundExpression? expressionOpt) 3668public BoundExpressionStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false) 3677public BoundExpression Expression { get; } 3682public BoundExpressionStatement Update(BoundExpression expression) 3770public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel, bool hasErrors = false) 3790public BoundExpression Expression { get; } 3801public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel) 3815public BoundSwitchDispatch(SyntaxNode syntax, BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt, bool hasErrors = false) 3829public BoundExpression Expression { get; } 3837public BoundSwitchDispatch Update(BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt) 3851public BoundIfStatement(SyntaxNode syntax, BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt, bool hasErrors = false) 3863public BoundExpression Condition { get; } 3870public BoundIfStatement Update(BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt) 3912protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 3928public BoundExpression Condition { get; } 3934public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 3950public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 3964public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 3980public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 3994public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 4015public BoundExpression? Condition { get; } 4022public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 4036public BoundForEachStatement(SyntaxNode syntax, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 4060public BoundExpression? ElementConversion { get; } 4063public BoundExpression? IterationErrorExpressionOpt { get; } 4064public BoundExpression Expression { get; } 4071public BoundForEachStatement Update(ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 4116public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false) 4133public BoundExpression? ExpressionOpt { get; } 4141public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt) 4189public BoundLockStatement(SyntaxNode syntax, BoundExpression argument, BoundStatement body, bool hasErrors = false) 4200public BoundExpression Argument { get; } 4206public BoundLockStatement Update(BoundExpression argument, BoundStatement body) 4257public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false) 4274public BoundExpression? ExceptionSourceOpt { get; } 4277public BoundExpression? ExceptionFilterOpt { get; } 4284public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll) 4597public BoundRangeVariable(SyntaxNode syntax, RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type, bool hasErrors = false) 4611public BoundExpression Value { get; } 4616public BoundRangeVariable Update(RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type) 4707public BoundGotoStatement(SyntaxNode syntax, LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt, bool hasErrors = false) 4719public BoundExpression? CaseExpressionOpt { get; } 4725public BoundGotoStatement Update(LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt) 4844public BoundConditionalGoto(SyntaxNode syntax, BoundExpression condition, bool jumpIfTrue, LabelSymbol label, bool hasErrors = false) 4856public BoundExpression Condition { get; } 4863public BoundConditionalGoto Update(BoundExpression condition, bool jumpIfTrue, LabelSymbol label) 4877protected BoundSwitchExpression(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false) 4892public BoundExpression Expression { get; } 4901public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false) 4919public BoundExpression? WhenClause { get; } 4920public BoundExpression Value { get; } 4926public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label) 4940public BoundUnconvertedSwitchExpression(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false) 4954public BoundUnconvertedSwitchExpression Update(BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type) 4968public BoundConvertedSwitchExpression(SyntaxNode syntax, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type, bool hasErrors = false) 4988public BoundConvertedSwitchExpression Update(TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type) 5109public BoundWhenDecisionDagNode(SyntaxNode syntax, ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse, bool hasErrors = false) 5123public BoundExpression? WhenExpression { get; } 5130public BoundWhenDecisionDagNode Update(ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse) 5531public BoundDagIndexerEvaluation(SyntaxNode syntax, TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false) 5557public BoundExpression IndexerAccess { get; } 5564public BoundDagIndexerEvaluation Update(TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input) 5578public BoundDagSliceEvaluation(SyntaxNode syntax, TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false) 5606public BoundExpression IndexerAccess { get; } 5613public BoundDagSliceEvaluation Update(TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input) 5688public BoundSwitchLabel(SyntaxNode syntax, LabelSymbol label, BoundPattern pattern, BoundExpression? whenClause, bool hasErrors = false) 5702public BoundExpression? WhenClause { get; } 5707public BoundSwitchLabel Update(LabelSymbol label, BoundPattern pattern, BoundExpression? whenClause) 5721protected BoundMethodOrPropertyGroup(BoundKind kind, SyntaxNode syntax, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false) 5729public BoundExpression? ReceiverOpt { get; } 5735public BoundSequencePointExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 5744public BoundExpression Expression { get; } 5749public BoundSequencePointExpression Update(BoundExpression expression, TypeSymbol? type) 5763public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false) 5779public ImmutableArray<BoundExpression> SideEffects { get; } 5780public BoundExpression Value { get; } 5785public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type) 5799public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false) 5816public BoundExpression Value { get; } 5821public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type) 5835public BoundDynamicMemberAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type, bool hasErrors = false) 5851public BoundExpression Receiver { get; } 5860public BoundDynamicMemberAccess Update(BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type) 5874protected BoundDynamicInvocableBase(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol? type, bool hasErrors = false) 5885public BoundExpression Expression { get; } 5886public ImmutableArray<BoundExpression> Arguments { get; } 5891public BoundDynamicInvocation(SyntaxNode syntax, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false) 5913public BoundDynamicInvocation Update(ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type) 5927public BoundConditionalAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type, bool hasErrors = false) 5940public BoundExpression Receiver { get; } 5941public BoundExpression AccessExpression { get; } 5946public BoundConditionalAccess Update(BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type) 5960public BoundLoweredConditionalAccess(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type, bool hasErrors = false) 5977public BoundExpression Receiver { get; } 5979public BoundExpression WhenNotNull { get; } 5980public BoundExpression? WhenNullOpt { get; } 5987public BoundLoweredConditionalAccess Update(BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type) 6039public BoundComplexConditionalReceiver(SyntaxNode syntax, BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type, bool hasErrors = false) 6052public BoundExpression ValueTypeReceiver { get; } 6053public BoundExpression ReferenceTypeReceiver { get; } 6058public BoundComplexConditionalReceiver Update(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type) 6072public BoundMethodGroup(SyntaxNode syntax, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false) 6099public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind) 6113public BoundPropertyGroup(SyntaxNode syntax, ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false) 6127public BoundPropertyGroup Update(ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind) 6141public BoundCall(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type, bool hasErrors = false) 6169public BoundExpression? ReceiverOpt { get; } 6172public ImmutableArray<BoundExpression> Arguments { get; } 6186public BoundCall Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type) 6200public BoundEventAssignmentOperator(SyntaxNode syntax, EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type, bool hasErrors = false) 6219public BoundExpression? ReceiverOpt { get; } 6220public BoundExpression Argument { get; } 6225public BoundEventAssignmentOperator Update(EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type) 6239public BoundAttribute(SyntaxNode syntax, MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 6259public ImmutableArray<BoundExpression> ConstructorArguments { get; } 6270public BoundAttribute Update(MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type) 6284public BoundUnconvertedObjectCreationExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder, bool hasErrors = false) 6299public ImmutableArray<BoundExpression> Arguments { get; } 6308public BoundUnconvertedObjectCreationExpression Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder) 6343public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 6367public override ImmutableArray<BoundExpression> Arguments { get; } 6380public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type) 6435public BoundCollectionExpression(SyntaxNode syntax, CollectionExpressionTypeKind collectionTypeKind, BoundObjectOrCollectionValuePlaceholder? placeholder, BoundExpression? collectionCreation, MethodSymbol? collectionBuilderMethod, BoundValuePlaceholder? collectionBuilderInvocationPlaceholder, BoundExpression? collectionBuilderInvocationConversion, bool wasTargetTyped, BoundUnconvertedCollectionExpression unconvertedCollectionExpression, ImmutableArray<BoundNode> elements, TypeSymbol type, bool hasErrors = false) 6456public BoundExpression? CollectionCreation { get; } 6459public BoundExpression? CollectionBuilderInvocationConversion { get; } 6466public BoundCollectionExpression Update(CollectionExpressionTypeKind collectionTypeKind, BoundObjectOrCollectionValuePlaceholder? placeholder, BoundExpression? collectionCreation, MethodSymbol? collectionBuilderMethod, BoundValuePlaceholder? collectionBuilderInvocationPlaceholder, BoundExpression? collectionBuilderInvocationConversion, bool wasTargetTyped, BoundUnconvertedCollectionExpression unconvertedCollectionExpression, ImmutableArray<BoundNode> elements, TypeSymbol type) 6508public BoundCollectionExpressionSpreadElement(SyntaxNode syntax, BoundExpression expression, BoundCollectionExpressionSpreadExpressionPlaceholder? expressionPlaceholder, BoundExpression? conversion, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundExpression? lengthOrCount, BoundValuePlaceholder? elementPlaceholder, BoundStatement? iteratorBody, bool hasErrors = false) 6523public BoundExpression Expression { get; } 6525public BoundExpression? Conversion { get; } 6527public BoundExpression? LengthOrCount { get; } 6534public BoundCollectionExpressionSpreadElement Update(BoundExpression expression, BoundCollectionExpressionSpreadExpressionPlaceholder? expressionPlaceholder, BoundExpression? conversion, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundExpression? lengthOrCount, BoundValuePlaceholder? elementPlaceholder, BoundStatement? iteratorBody) 6548protected BoundTupleExpression(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6559public ImmutableArray<BoundExpression> Arguments { get; } 6566public BoundTupleLiteral(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6579public BoundTupleLiteral Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type) 6593public BoundConvertedTupleLiteral(SyntaxNode syntax, BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6609public BoundConvertedTupleLiteral Update(BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type) 6623public BoundDynamicObjectCreationExpression(SyntaxNode syntax, string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 6642public override ImmutableArray<BoundExpression> Arguments { get; } 6652public BoundDynamicObjectCreationExpression Update(string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type) 6698protected BoundObjectInitializerExpressionBase(BoundKind kind, SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6712public ImmutableArray<BoundExpression> Initializers { get; } 6717public BoundObjectInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6731public BoundObjectInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type) 6745public BoundObjectInitializerMember(SyntaxNode syntax, Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type, bool hasErrors = false) 6767public ImmutableArray<BoundExpression> Arguments { get; } 6780public BoundObjectInitializerMember Update(Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type) 6839public BoundCollectionInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6853public BoundCollectionInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type) 6867public BoundCollectionElementInitializer(SyntaxNode syntax, MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 6887public ImmutableArray<BoundExpression> Arguments { get; } 6888public BoundExpression? ImplicitReceiverOpt { get; } 6898public BoundCollectionElementInitializer Update(MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type) 6912public BoundDynamicCollectionElementInitializer(SyntaxNode syntax, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false) 6930public BoundDynamicCollectionElementInitializer Update(ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type) 6979public BoundAnonymousObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type, bool hasErrors = false) 6995public ImmutableArray<BoundExpression> Arguments { get; } 7001public BoundAnonymousObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type) 7085public BoundDelegateCreationExpression(SyntaxNode syntax, BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 7099public BoundExpression Argument { get; } 7107public BoundDelegateCreationExpression Update(BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type) 7121public BoundArrayCreation(SyntaxNode syntax, ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false) 7133public ImmutableArray<BoundExpression> Bounds { get; } 7139public BoundArrayCreation Update(ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type) 7153public BoundArrayInitialization(SyntaxNode syntax, bool isInferred, ImmutableArray<BoundExpression> initializers, bool hasErrors = false) 7165public ImmutableArray<BoundExpression> Initializers { get; } 7170public BoundArrayInitialization Update(bool isInferred, ImmutableArray<BoundExpression> initializers) 7184protected BoundStackAllocArrayCreationBase(BoundKind kind, SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false) 7197public BoundExpression Count { get; } 7203public BoundStackAllocArrayCreation(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false) 7216public BoundStackAllocArrayCreation Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type) 7230public BoundConvertedStackAllocExpression(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false) 7245public BoundConvertedStackAllocExpression Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type) 7259public BoundFieldAccess(SyntaxNode syntax, BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type, bool hasErrors = false) 7275public BoundExpression? ReceiverOpt { get; } 7285public BoundFieldAccess Update(BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type) 7339public BoundPropertyAccess(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol propertySymbol, AccessorKind autoPropertyAccessorKind, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 7354public BoundExpression? ReceiverOpt { get; } 7363public BoundPropertyAccess Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol propertySymbol, AccessorKind autoPropertyAccessorKind, LookupResultKind resultKind, TypeSymbol type) 7377public BoundEventAccess(SyntaxNode syntax, BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 7391public BoundExpression? ReceiverOpt { get; } 7399public BoundEventAccess Update(BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type) 7413public BoundIndexerAccess(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, AccessorKind accessorKind, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type, bool hasErrors = false) 7435public BoundExpression? ReceiverOpt { get; } 7438public ImmutableArray<BoundExpression> Arguments { get; } 7450public BoundIndexerAccess Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, AccessorKind accessorKind, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type) 7464public BoundImplicitIndexerAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type, bool hasErrors = false) 7489public BoundExpression Receiver { get; } 7490public BoundExpression Argument { get; } 7491public BoundExpression LengthOrCountAccess { get; } 7493public BoundExpression IndexerOrSliceAccess { get; } 7499public BoundImplicitIndexerAccess Update(BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type) 7513public BoundInlineArrayAccess(SyntaxNode syntax, BoundExpression expression, BoundExpression argument, bool isValue, WellKnownMember getItemOrSliceHelper, TypeSymbol type, bool hasErrors = false) 7532public BoundExpression Expression { get; } 7533public BoundExpression Argument { get; } 7540public BoundInlineArrayAccess Update(BoundExpression expression, BoundExpression argument, bool isValue, WellKnownMember getItemOrSliceHelper, TypeSymbol type) 7554public BoundDynamicIndexerAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type, bool hasErrors = false) 7571public BoundExpression Receiver { get; } 7572public ImmutableArray<BoundExpression> Arguments { get; } 7580public BoundDynamicIndexerAccess Update(BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type) 7678public BoundQueryClause(SyntaxNode syntax, BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type, bool hasErrors = false) 7695public BoundExpression Value { get; } 7697public BoundExpression? Operation { get; } 7698public BoundExpression? Cast { get; } 7700public BoundExpression? UnoptimizedForm { get; } 7705public BoundQueryClause Update(BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type) 7745public BoundNameOfOperator(SyntaxNode syntax, BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type, bool hasErrors = false) 7758public BoundExpression Argument { get; } 7764public BoundNameOfOperator Update(BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type) 7778protected BoundInterpolatedStringBase(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7788public ImmutableArray<BoundExpression> Parts { get; } 7794public BoundUnconvertedInterpolatedString(SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7806public BoundUnconvertedInterpolatedString Update(ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type) 7820public BoundInterpolatedString(SyntaxNode syntax, InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7834public BoundInterpolatedString Update(InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type) 7914public BoundStringInsert(SyntaxNode syntax, BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall, bool hasErrors = false) 7927public BoundExpression Value { get; } 7928public BoundExpression? Alignment { get; } 7935public BoundStringInsert Update(BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall) 7949public BoundIsPatternExpression(SyntaxNode syntax, BoundExpression expression, BoundPattern pattern, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type, bool hasErrors = false) 7967public BoundExpression Expression { get; } 7977public BoundIsPatternExpression Update(BoundExpression expression, BoundPattern pattern, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type) 8019public BoundConstantPattern(SyntaxNode syntax, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8036public BoundExpression Value { get; } 8042public BoundConstantPattern Update(BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType) 8096protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8108public BoundExpression? VariableAccess { get; } 8113public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8135public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8149public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8176public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8190public BoundListPattern(SyntaxNode syntax, ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8212public BoundExpression? LengthAccess { get; } 8213public BoundExpression? IndexerAccess { get; } 8220public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8234public BoundSlicePattern(SyntaxNode syntax, BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8252public BoundExpression? IndexerAccess { get; } 8259public BoundSlicePattern Update(BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType) 8526public BoundRelationalPattern(SyntaxNode syntax, BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8545public BoundExpression Value { get; } 8551public BoundRelationalPattern Update(BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType) 8600public BoundThrowExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 8609public BoundExpression Expression { get; } 8614public BoundThrowExpression Update(BoundExpression expression, TypeSymbol? type) 8628protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8640public BoundExpression? ReceiverOpt { get; } 8645public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8657public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt) 8671public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8683public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt) 8798public BoundExpressionWithNullability(SyntaxNode syntax, BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type, bool hasErrors = false) 8808public BoundExpression Expression { get; } 8815public BoundExpressionWithNullability Update(BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type) 8829public BoundWithExpression(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type, bool hasErrors = false) 8843public BoundExpression Receiver { get; } 8850public BoundWithExpression Update(BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type) 10842BoundExpression value = (BoundExpression)this.Visit(node.Value); 10849BoundExpression value = (BoundExpression)this.Visit(node.Value); 10856BoundExpression value = (BoundExpression)this.Visit(node.Value); 10871BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 10938BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 10945ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes); 10963ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt); 10983BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 10992BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 10994BoundExpression? operandConversion = node.OperandConversion; 10996BoundExpression? resultConversion = node.ResultConversion; 11003BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11022BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11028BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11029BoundExpression index = (BoundExpression)this.Visit(node.Index); 11035BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression); 11036ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11043BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11049BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11055BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11062BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11069BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt); 11070BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt); 11076BoundExpression left = (BoundExpression)this.Visit(node.Left); 11077BoundExpression right = (BoundExpression)this.Visit(node.Right); 11083BoundExpression left = (BoundExpression)this.Visit(node.Left); 11084BoundExpression right = (BoundExpression)this.Visit(node.Right); 11095BoundExpression? trueFalseOperandConversion = node.TrueFalseOperandConversion; 11096BoundExpression left = (BoundExpression)this.Visit(node.Left); 11097BoundExpression right = (BoundExpression)this.Visit(node.Right); 11105BoundExpression left = (BoundExpression)this.Visit(node.Left); 11106BoundExpression right = (BoundExpression)this.Visit(node.Right); 11108BoundExpression? leftConversion = node.LeftConversion; 11110BoundExpression? finalConversion = node.FinalConversion; 11116BoundExpression left = (BoundExpression)this.Visit(node.Left); 11117BoundExpression right = (BoundExpression)this.Visit(node.Right); 11130BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 11131BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 11133BoundExpression? leftConversion = node.LeftConversion; 11139BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 11140BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 11146BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11147BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 11148BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 11154BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11155BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 11156BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 11163BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11164ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices); 11176BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11185BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 11192BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11298BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11305BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11308BoundExpression? operandConversion = node.OperandConversion; 11320BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11327BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11338ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11346BoundExpression? elementPointerConversion = node.ElementPointerConversion; 11347BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11389BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt); 11390ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt); 11414BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11419BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11425BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11430BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11448BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11457BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11462BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11472BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11481BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11492BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition); 11503BoundExpression? elementConversion = node.ElementConversion; 11505BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt); 11506BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11521BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11535BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 11550BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 11552BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt); 11602BoundExpression value = (BoundExpression)this.Visit(node.Value); 11620BoundExpression? caseExpressionOpt = (BoundExpression?)this.Visit(node.CaseExpressionOpt); 11644BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11652BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 11653BoundExpression value = (BoundExpression)this.Visit(node.Value); 11659BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11668BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11695BoundExpression? whenExpression = (BoundExpression?)this.Visit(node.WhenExpression); 11770BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 11780BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 11804BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 11809BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11816ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects); 11817BoundExpression value = (BoundExpression)this.Visit(node.Value); 11825BoundExpression value = (BoundExpression)this.Visit(node.Value); 11831BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 11838BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11839ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11845BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 11846BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression); 11853BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 11854BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 11855BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt); 11866BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 11867BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 11876BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 11883BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 11891BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 11892ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11899BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 11900BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 11907ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments); 11914ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11922ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11937BoundExpression? collectionCreation = node.CollectionCreation; 11939BoundExpression? collectionBuilderInvocationConversion = node.CollectionBuilderInvocationConversion; 11952BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11954BoundExpression? conversion = node.Conversion; 11955BoundExpression? lengthOrCount = node.LengthOrCount; 11962ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11969ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11976ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11990ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 11997ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12011ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 12018ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12019BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt); 12026BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12027ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12039ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12059BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12065ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds); 12072ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 12078BoundExpression count = (BoundExpression)this.Visit(node.Count); 12086BoundExpression count = (BoundExpression)this.Visit(node.Count); 12095BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12108BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12115BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12123BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12124ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12130BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12131BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12132BoundExpression lengthOrCountAccess = node.LengthOrCountAccess; 12134BoundExpression indexerOrSliceAccess = node.IndexerOrSliceAccess; 12141BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12142BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12149BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12150ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12171BoundExpression value = (BoundExpression)this.Visit(node.Value); 12172BoundExpression? operation = node.Operation; 12173BoundExpression? cast = node.Cast; 12174BoundExpression? unoptimizedForm = node.UnoptimizedForm; 12185BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12191ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 12197ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 12213BoundExpression value = (BoundExpression)this.Visit(node.Value); 12214BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment); 12223BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12231BoundExpression value = (BoundExpression)this.Visit(node.Value); 12246BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12258BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12267BoundExpression? lengthAccess = node.LengthAccess; 12268BoundExpression? indexerAccess = node.IndexerAccess; 12271BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12279BoundExpression? indexerAccess = node.IndexerAccess; 12338BoundExpression value = (BoundExpression)this.Visit(node.Value); 12350BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12357BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12364BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12390BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12397BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12406private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _updatedNullabilities; 12410public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols) 12421BoundExpression value = (BoundExpression)this.Visit(node.Value); 12429BoundExpression value = (BoundExpression)this.Visit(node.Value); 12437BoundExpression value = (BoundExpression)this.Visit(node.Value); 12455BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12621BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12639ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes); 12657ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt); 12701BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12721BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12723BoundExpression? operandConversion = node.OperandConversion; 12725BoundExpression? resultConversion = node.ResultConversion; 12742BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12794BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12811BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12812BoundExpression index = (BoundExpression)this.Visit(node.Index); 12829BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression); 12830ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12848BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12865BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12882BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12900BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 12918BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt); 12919BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt); 12936BoundExpression left = (BoundExpression)this.Visit(node.Left); 12937BoundExpression right = (BoundExpression)this.Visit(node.Right); 12954BoundExpression left = (BoundExpression)this.Visit(node.Left); 12955BoundExpression right = (BoundExpression)this.Visit(node.Right); 12990BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 12991BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 12993BoundExpression? leftConversion = node.LeftConversion; 13010BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 13011BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 13028BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13029BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 13030BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 13048BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13049BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 13050BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 13067BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13068ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices); 13102BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13122BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 13130BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13388BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13406BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13409BoundExpression? operandConversion = node.OperandConversion; 13443BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13461BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13490ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 13510BoundExpression? elementPointerConversion = node.ElementPointerConversion; 13511BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13553BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt); 13554ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt); 13570BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13580BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13588BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13598BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition); 13608BoundExpression? elementConversion = node.ElementConversion; 13610BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt); 13611BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13621BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 13639BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 13641BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt); 13755BoundExpression value = (BoundExpression)this.Visit(node.Value); 13803BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 13804BoundExpression value = (BoundExpression)this.Visit(node.Value); 13810BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13830BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13879BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 13890BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 13907BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13925ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects); 13926BoundExpression value = (BoundExpression)this.Visit(node.Value); 13945BoundExpression value = (BoundExpression)this.Visit(node.Value); 13962BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 13980BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13981ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 13998BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 13999BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression); 14017BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 14018BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 14019BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt); 14048BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 14049BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 14069BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14087BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14106BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14107ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14125BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14126BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14144ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments); 14162ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14181ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14218BoundExpression? collectionCreation = node.CollectionCreation; 14220BoundExpression? collectionBuilderInvocationConversion = node.CollectionBuilderInvocationConversion; 14251ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14269ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14287ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14323ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14342ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14377ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14395ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14396BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt); 14414BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14415ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14445ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14498BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14515ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds); 14533ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14551BoundExpression count = (BoundExpression)this.Visit(node.Count); 14570BoundExpression count = (BoundExpression)this.Visit(node.Count); 14589BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14624BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14642BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14661BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14662ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14679BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14680BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14698BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 14699ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14753BoundExpression value = (BoundExpression)this.Visit(node.Value); 14754BoundExpression? operation = node.Operation; 14755BoundExpression? cast = node.Cast; 14756BoundExpression? unoptimizedForm = node.UnoptimizedForm; 14773BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14790ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 14807ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 14848BoundExpression value = (BoundExpression)this.Visit(node.Value); 14849BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment); 14867BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14888BoundExpression value = (BoundExpression)this.Visit(node.Value); 14905BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 14918BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 14928BoundExpression? lengthAccess = node.LengthAccess; 14929BoundExpression? indexerAccess = node.IndexerAccess; 14932BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 14941BoundExpression? indexerAccess = node.IndexerAccess; 15000BoundExpression value = (BoundExpression)this.Visit(node.Value); 15018BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15036BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 15054BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 15097BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15115BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
Lowering\AsyncRewriter\AsyncExceptionHandlerRewriter.cs (17)
400BoundExpression caseExpressionOpt = (BoundExpression)this.Visit(node.CaseExpressionOpt); 425var returnExpr = (BoundExpression)(this.Visit(node.ExpressionOpt)); 617var storePending = _F.AssignmentExpression( 635var filterOpt = node.ExceptionFilterOpt; 672var sourceOpt = node.ExceptionSourceOpt; 676prologueBuilder.Add(_F.ExpressionStatement(AssignCatchSource((BoundExpression)this.Visit(sourceOpt), currentAwaitCatchFrame))); 685var rewrittenFilter = (BoundExpression)this.Visit(filterOpt); 705var sourceOpt = node.ExceptionSourceOpt; 708BoundExpression assignSource = AssignCatchSource((BoundExpression)this.Visit(sourceOpt), currentAwaitCatchFrame); 725private BoundExpression AssignCatchSource(BoundExpression rewrittenSource, AwaitCatchFrame currentAwaitCatchFrame) 727BoundExpression assignSource = null; 1059BoundExpression valueOpt,
Lowering\AsyncRewriter\AsyncIteratorMethodToStateMachineRewriter.cs (3)
161ImmutableArray<BoundExpression>.Empty)); 279var rewrittenExpression = (BoundExpression)Visit(node.Expression);
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (20)
64private readonly Dictionary<BoundValuePlaceholderBase, BoundExpression> _placeholderMap; 103_placeholderMap = new Dictionary<BoundValuePlaceholderBase, BoundExpression>(); 265? ImmutableArray.Create<BoundExpression>(F.Local(_exprRetValue)) 266: ImmutableArray<BoundExpression>.Empty)); 328BoundExpression expr = (BoundExpression)this.Visit(node.Expression); 348private BoundBlock VisitAwaitExpression(BoundAwaitExpression node, BoundExpression resultPlace) 353var expression = (BoundExpression)Visit(node.Expression); 361var getAwaiter = node.AwaitableInfo.IsDynamic ? 363(BoundExpression)Visit(node.AwaitableInfo.GetAwaiter); 365resultPlace = (BoundExpression)Visit(resultPlace); 393BoundExpression getResultCall = MakeCallMaybeDynamic( 420private BoundExpression MakeCallMaybeDynamic( 421BoundExpression receiver, 442loweredArguments: ImmutableArray<BoundExpression>.Empty, 449private BoundExpression GenerateGetIsCompleted(LocalSymbol awaiterTemp, MethodSymbol getIsCompletedMethod) 640BoundExpression result = 650ImmutableArray.Create<BoundExpression>(F.AssignmentExpression(F.Local(thisTemp), F.This())), 668F.Assignment(F.Local(_exprRetValue), (BoundExpression)Visit(node.ExpressionOpt)),
Lowering\AsyncRewriter\AsyncRewriter.AsyncIteratorRewriter.cs (5)
171var managedThreadId = MakeCurrentThreadId(); 210protected override BoundStatement InitializeParameterField(MethodSymbol getEnumeratorMethod, ParameterSymbol parameter, BoundExpression resultParameter, BoundExpression parameterProxy) 398ImmutableArray.Create<BoundExpression>(instLocal))); 659BoundExpression managedThreadId = null;
Lowering\AsyncRewriter\AsyncRewriter.cs (2)
185new BoundExpression[] { F.Parameter(F.CurrentFunction.Parameters[0]) })), 265ImmutableArray.Create<BoundExpression>(F.Local(stateMachineVariable)))));
Lowering\AsyncRewriter\RuntimeAsyncRewriter.cs (12)
74private readonly Dictionary<BoundAwaitableValuePlaceholder, BoundExpression> _placeholderMap; 102public BoundExpression? VisitExpression(BoundExpression? node) 105return (BoundExpression?)result; 140var expr = VisitExpression(node.Expression); 152private BoundExpression RewriteCustomAwaiterAwait(BoundAwaitExpression node) 161var expr = VisitExpression(node.Expression); 171var getAwaiter = VisitExpression(awaitableInfo.GetAwaiter); 222BoundExpression visitedRight; 240var visitedLeftOrProxy = VisitExpression(leftLocal); 248var assignment = _factory.AssignmentExpression(leftLocal, visitedLeftOrProxy, isRef: true); 318var expr = VisitExpression(node.Expression);
Lowering\BoundTreeToDifferentEnclosingContextRewriter.cs (3)
131var getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 178(BoundExpression)Visit(node.Operand),
Lowering\ClosureConversion\ClosureConversion.cs (50)
122private BoundExpression _thisProxyInitDeferred; 582private BoundExpression FrameOfType(SyntaxNode syntax, NamedTypeSymbol frameType) 584BoundExpression result = FramePointer(syntax, frameType.OriginalDefinition); 597protected override BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass) 650result.Add(new BoundExpressionStatement(node.Syntax, (BoundExpression)(BoundNode)node)); 664private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F) 677var prologue = ArrayBuilder<BoundExpression>.GetInstance(); 698BoundExpression left = new BoundFieldAccess(syntax, new BoundLocal(syntax, framePointer, null, frameType), frameParent, null); 699BoundExpression right = FrameOfType(syntax, frameParent.Type as NamedTypeSymbol); 700BoundExpression assignment = new BoundAssignmentOperator(syntax, left, right, left.Type); 749private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue) 754BoundExpression value; 788var left = proxy.Replacement( 876out BoundExpression receiver, 878ref ImmutableArray<BoundExpression> arguments, 895var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(loweredSymbol.ParameterCount); 914var frame = FrameOfType(syntax, frameType); 1021out BoundExpression receiver, 1087out var receiver, 1129sideEffects: ImmutableArray.Create<BoundExpression>(rewritten), 1139private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1143foreach (var effect in node.SideEffects) 1145var replacement = (BoundExpression)this.Visit(effect); 1149var newValue = (BoundExpression)this.Visit(node.Value); 1160return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1165return RewriteBlock(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1169private BoundBlock RewriteBlock(BoundBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1222return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1229return RewriteCatch(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1233private BoundNode RewriteCatch(BoundCatchBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1241BoundExpression rewrittenExceptionSource = null; 1243var rewrittenFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt); 1246rewrittenExceptionSource = (BoundExpression)Visit(node.ExceptionSourceOpt); 1261foreach (var p in prologue) 1296return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1303return RewriteSequence(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1313return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1343var arguments = default(ImmutableArray<BoundExpression>); 1349out var receiver, 1370ImmutableArray<BoundExpression> arguments = default; 1376out BoundExpression receiver, 1400var result = (BoundExpression)RewriteLambdaConversion((BoundLambda)conversion.Operand); 1652BoundExpression receiver; 1664BoundExpression result = new BoundDelegateCreationExpression( 1691BoundExpression cache; 1734return new BoundBadExpression(F.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (136)
21private readonly Dictionary<ParameterSymbol, BoundExpression> _parameterMap = new Dictionary<ParameterSymbol, BoundExpression>(); 117var result = r.VisitLambdaInternal(node); 131private BoundExpression TranslateLambdaBody(BoundBlock block) 141var result = Visit(((BoundReturnStatement)stmt).ExpressionOpt); 165private BoundExpression Visit(BoundExpression node) 174var result = VisitInternal(node); 179private BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node) 253private BoundExpression VisitInternal(BoundExpression node) 255BoundExpression result; 279private BoundExpression VisitExpressionWithStackGuard(BoundExpression node) 291private BoundExpression VisitArrayAccess(BoundArrayAccess node) 293var array = Visit(node.Expression); 296var arg = node.Indices[0]; 297var index = Visit(arg); 310private BoundExpression Indices(ImmutableArray<BoundExpression> expressions) 312var builder = ArrayBuilder<BoundExpression>.GetInstance(); 313foreach (var arg in expressions) 315var index = Visit(arg); 326private BoundExpression Expressions(ImmutableArray<BoundExpression> expressions) 328var builder = ArrayBuilder<BoundExpression>.GetInstance(); 329foreach (var arg in expressions) 337private BoundExpression VisitArrayCreation(BoundArrayCreation node) 340var boundType = _bound.Typeof(arrayType.ElementType, _bound.WellKnownType(WellKnownType.System_Type)); 351return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType); 360private BoundExpression VisitArrayLength(BoundArrayLength node) 365private BoundExpression VisitAsOperator(BoundAsOperator node) 369var operand = _bound.Null(_bound.SpecialType(SpecialType.System_Object)); 378private BoundExpression VisitBaseReference(BoundBaseReference node) 382return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType); 487private BoundExpression VisitBinaryOperator(BinaryOperatorKind opKind, MethodSymbol methodOpt, TypeSymbol type, BoundExpression left, BoundExpression right) 509var enumOperand = (opKind.OperandTypes() == BinaryOperatorKind.UnderlyingAndEnum) ? right : left; 516var loweredLeft = VisitAndPromoteEnumOperand(left, promotedType, isChecked); 517var loweredRight = VisitAndPromoteEnumOperand(right, promotedType, isChecked); 519var result = MakeBinary(methodOpt, type, isLifted, requiresLifted, opFactory, loweredLeft, loweredRight); 524var loweredLeft = Visit(left); 525var loweredRight = Visit(right); 531private static BoundExpression DemoteEnumOperand(BoundExpression operand) 548private BoundExpression VisitAndPromoteEnumOperand(BoundExpression operand, TypeSymbol promotedType, bool isChecked) 561var demotedOperand = DemoteEnumOperand(operand); 562var loweredOperand = Visit(demotedOperand); 567private BoundExpression MakeBinary(MethodSymbol methodOpt, TypeSymbol type, bool isLifted, bool requiresLifted, WellKnownMember opFactory, BoundExpression loweredLeft, BoundExpression loweredRight) 598private BoundExpression Demote(BoundExpression node, TypeSymbol type, bool isChecked) 618private BoundExpression ConvertIndex(BoundExpression expr, TypeSymbol oldType, TypeSymbol newType) 636private BoundExpression VisitCall(BoundCall node) 655private BoundExpression VisitConditionalOperator(BoundConditionalOperator node) 657var condition = Visit(node.Condition); 658var consequence = VisitExactType(node.Consequence); 659var alternative = VisitExactType(node.Alternative); 667private BoundExpression VisitExactType(BoundExpression e) 686private BoundExpression VisitConversion(BoundConversion node) 708var e1 = requireAdditionalCast 711var e2 = _bound.StaticCall(node.Checked && SyntaxFacts.IsCheckedOperator(method.Name) ? 721var operand = Visit(node.Operand); 734var e1 = Convert(Visit(node.Operand), node.Operand.Type, intermediate, node.Checked, false); 744private BoundExpression Convert(BoundExpression operand, TypeSymbol oldType, TypeSymbol newType, bool isChecked, bool isExplicit) 749private BoundExpression Convert(BoundExpression expr, TypeSymbol type, bool isChecked) 757private BoundExpression DelegateCreation(BoundExpression receiver, MethodSymbol method, TypeSymbol delegateType, bool requiresInstanceReceiver) 759var nullObject = _bound.Null(_objectType); 763BoundExpression unquoted; 785private BoundExpression VisitDelegateCreationExpression(BoundDelegateCreationExpression node) 808private BoundExpression VisitFieldAccess(BoundFieldAccess node) 810var receiver = node.FieldSymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt); 816private BoundExpression VisitIsOperator(BoundIsOperator node) 818var operand = node.Operand; 827private BoundExpression VisitLambda(BoundLambda node) 829var result = VisitLambdaInternal(node); 833private BoundExpression VisitLambdaInternal(BoundLambda node) 837var initializers = ArrayBuilder<BoundExpression>.GetInstance(); 838var parameters = ArrayBuilder<BoundExpression>.GetInstance(); 845var parameter = _bound.StaticCall( 853var result = _bound.Sequence(locals.ToImmutableAndFree(), initializers.ToImmutableAndFree(), 868private BoundExpression VisitNewT(BoundNewT node) 873private BoundExpression VisitNullCoalescingOperator(BoundNullCoalescingOperator node) 875var left = Visit(node.LeftOperand); 876var right = Visit(node.RightOperand); 889private BoundExpression MakeConversionLambda(Conversion conversion, TypeSymbol fromType, TypeSymbol toType) 895var parameter = _bound.StaticCall(WellKnownMember.System_Linq_Expressions_Expression__Parameter, _bound.Typeof(fromType, _bound.WellKnownType(WellKnownType.System_Type)), _bound.Literal(parameterName)); 897var convertedValue = Visit(_bound.Convert(toType, _bound.Parameter(lambdaParameter), conversion)); 899var result = _bound.Sequence( 901ImmutableArray.Create<BoundExpression>(_bound.AssignmentExpression(parameterReference, parameter)), 905_bound.ArrayOrEmpty(ParameterExpressionType, ImmutableArray.Create<BoundExpression>(parameterReference)))); 909private BoundExpression InitializerMemberSetter(Symbol symbol) 924private BoundExpression InitializerMemberGetter(Symbol symbol) 941private BoundExpression VisitInitializer(BoundExpression node, out InitializerKind kind) 948var builder = ArrayBuilder<BoundExpression>.GetInstance(); 957var value = VisitInitializer(a.Right, out elementKind); 962var left = InitializerMemberGetter(sym); 971var left = InitializerMemberSetter(sym); 980var left = InitializerMemberGetter(sym); 1002var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1008BoundExpression elementInit = _bound.StaticCall(WellKnownMember.System_Linq_Expressions_Expression__ElementInit, 1025private BoundExpression VisitObjectCreationExpression(BoundObjectCreationExpression node) 1030private BoundExpression VisitObjectCreationContinued(BoundExpression creation, BoundExpression initializerExpressionOpt) 1032var result = creation; 1035var init = VisitInitializer(initializerExpressionOpt, out initializerKind); 1047private BoundExpression VisitObjectCreationExpressionInternal(BoundObjectCreationExpression node) 1062var ctor = _bound.ConstructorInfo(node.Constructor); 1063var args = _bound.Convert(_IEnumerableType.Construct(ExpressionType), Expressions(node.Arguments)); 1067var membersBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 1082private BoundExpression VisitParameter(BoundParameter node) 1087private static BoundExpression VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node) 1091return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1094private static BoundExpression VisitPointerElementAccess(BoundPointerElementAccess node) 1098return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1101private BoundExpression VisitPropertyAccess(BoundPropertyAccess node) 1103var receiver = node.PropertySymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt); 1126private static BoundExpression VisitSizeOfOperator(BoundSizeOfOperator node) 1130return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1133private BoundExpression VisitUnaryOperator(BoundUnaryOperator node) 1135var arg = node.Operand; 1136var loweredArg = Visit(arg); 1191var result = _bound.StaticCall(opFactory, loweredArg); 1202private BoundExpression Constant(BoundExpression node)
Lowering\DiagnosticsPass_ExpressionTrees.cs (8)
64private void CheckUnsafeType(BoundExpression e) 193private void CheckReferenceToThisOrBase(BoundExpression node) 206private void CheckReferenceToVariable(BoundExpression node, Symbol symbol) 221private void CheckReferenceToMethodIfLocalFunction(BoundExpression node, MethodSymbol method) 307ImmutableArray<BoundExpression> arguments, 366static bool hasDefaultArgument(ImmutableArray<BoundExpression> arguments, BitVector defaultArguments) 401node is BoundExpression expr && 812BoundExpression operand = node.Operand;
Lowering\DiagnosticsPass_Warnings.cs (21)
21private void CheckArguments(ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<BoundExpression> arguments, Symbol method) 30var argument = arguments[i]; 95private void CheckReceiverIfField(BoundExpression receiverOpt) 135BoundExpression receiver = fieldAccess.ReceiverOpt; 160private static BoundExpression StripImplicitCasts(BoundExpression expr) 162BoundExpression current = expr; 176private static bool IsSameLocalOrField(BoundExpression expr1, BoundExpression expr2) 235private static bool IsComCallWithRefOmitted(MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt) 286BoundExpression left = node.Left; 345private static bool IsExplicitCast(BoundExpression node) 460private void CheckForBitwiseOrSignExtend(BoundExpression node, BinaryOperatorKind operatorKind, BoundExpression leftOperand, BoundExpression rightOperand) 572private static ConstantValue GetConstantValueForBitwiseOrCheck(BoundExpression operand) 604private static ulong FindSurprisingSignExtensionBits(BoundExpression expr) 851private static TypeSymbol GetTypeForLiftedComparisonWarning(BoundExpression node) 887private void CheckForDeconstructionAssignmentToSelf(BoundTupleExpression leftTuple, BoundExpression right) 916var leftArgument = leftArguments[i]; 917var rightArgument = rightTuple.Arguments[i];
Lowering\ExtensionMethodReferenceRewriter.cs (14)
38BoundExpression rewrittenCall; 55BoundExpression? rewrittenReceiver = (BoundExpression?)rewriter.Visit(node.ReceiverOpt); 69BoundExpression? rewrittenReceiver = (BoundExpression?)rewriter.Visit(node.ReceiverOpt); 75static BoundExpression visitArgumentsAndFinishRewrite(BoundTreeRewriter rewriter, BoundCall node, BoundExpression? rewrittenReceiver) 90static BoundExpression updateCall( 94BoundExpression? receiverOpt, 95ImmutableArray<BoundExpression> arguments, 215var argument = (BoundExpression)rewriter.Visit(node.Argument); 282BoundExpression operand = (BoundExpression)rewriter.Visit(node.Operand);
Lowering\Extensions.cs (3)
32public static bool NullableAlwaysHasValue(this BoundExpression expr) 76public static bool NullableNeverHasValue(this BoundExpression expr) 129public static bool IsNullableNonBoolean(this BoundExpression expr)
Lowering\InitializerRewriter.cs (3)
37BoundExpression trailingExpression = null; 50var expression = GetTrailingScriptExpression(lastStatement); 82internal static BoundExpression GetTrailingScriptExpression(BoundStatement statement)
Lowering\Instrumentation\CodeCoverageInstrumenter.cs (10)
171BoundExpression mvid, 172BoundExpression methodToken, 173BoundExpression payloadSlot, 178BoundExpression fileIndexOrIndicesArgument; 192var fileIndices = ArrayBuilder<BoundExpression>.GetInstance(); 268BoundExpression mvid = _methodBodyFactory.ModuleVersionId(); 269BoundExpression methodToken = _methodBodyFactory.MethodDefIndex(_method); 271BoundExpression payloadSlot = 289BoundExpression payloadNullTest = 437public override BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody)
Lowering\Instrumentation\CompoundInstrumenter.cs (25)
94public override BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 129public override BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 139public override BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 154public override BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original) 159public override BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten) 166ref BoundExpression? receiver, 167ref ImmutableArray<BoundExpression> arguments, 173public override BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten) 178public override BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten) 198public override BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody) 208public override BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 220ref BoundExpression? rewrittenSource, 222ref BoundExpression? rewrittenFilter, 237public override BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory) 242public override BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\DebugInfoInjector.cs (16)
227public override BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 234public override BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 351public override BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 370public override BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 437public override BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody) 456ref BoundExpression? rewrittenSource, 458ref BoundExpression? rewrittenFilter, 486public override BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory) 493public override BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\DebugInfoInjector_SequencePoints.cs (4)
171private static BoundExpression AddConditionSequencePoint(BoundExpression condition, SyntaxNode synthesizedVariableSyntax, SyntheticBoundNodeFactory factory) 186var valueExpression = (condition.ConstantValueOpt == null) ? 193ImmutableArray.Create<BoundExpression>(factory.AssignmentExpression(factory.Local(local), condition)),
Lowering\Instrumentation\Instrumenter.cs (25)
112public virtual BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 120public virtual BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 184public virtual BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 198public virtual BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 220public virtual BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original) 227public virtual BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten) 240ref BoundExpression? receiver, 241ref ImmutableArray<BoundExpression> arguments, 246public virtual BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten) 251public virtual BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten) 279public virtual BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody) 295ref BoundExpression? rewrittenSource, 297ref BoundExpression? rewrittenFilter, 305public virtual BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory) 317public virtual BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (29)
360public override BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original) 364var assignment = base.InstrumentUserDefinedLocalAssignment(original); 367BoundExpression? refAssignmentSourceIndex; 392if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex)) 413private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression) 439private ImmutableArray<BoundExpression> MakeStoreLoggerArguments( 443BoundExpression value, 444BoundExpression? refAssignmentSourceIndex, 445BoundExpression index) 460var addressOf = value is BoundLocal or BoundParameter ? 461(BoundExpression)new BoundAddressOfOperator(_factory.Syntax, value, isManaged: false, parameter.Type) : 471BoundExpression toString; 490private BoundExpression VariableRead(Symbol localOrParameterSymbol) 500ref BoundExpression? rewrittenSource, 502ref BoundExpression? rewrittenFilter, 528var targetIndex = _factory.LocalId(targetSymbol); 548public override BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten) 550ImmutableArray<BoundExpression> arguments = original.Arguments; 564public override BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten) 567public override BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten) 570private BoundExpression InstrumentCall(BoundExpression invocation, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds) 580var builder = ArrayBuilder<BoundExpression>.GetInstance(); 602if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex)) 626var lastExpression = builder.Last();
Lowering\Instrumentation\ModuleCancellationInstrumenter.cs (10)
94private BoundExpression InstrumentExpression(BoundExpression expression) 100public override BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 103public override BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 106public override BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory) 120ref BoundExpression? receiver, 121ref ImmutableArray<BoundExpression> arguments,
Lowering\IteratorRewriter\IteratorMethodToStateMachineRewriter.cs (4)
345var rewrittenExpression = (BoundExpression)Visit(node.Expression); 358BoundExpression caseExpressionOpt = (BoundExpression)this.Visit(node.CaseExpressionOpt);
Lowering\IteratorRewriter\IteratorRewriter.cs (3)
193BoundExpression managedThreadId = null; // Thread.CurrentThread.ManagedThreadId 254private void GenerateEnumerableImplementation(ref BoundExpression managedThreadId) 269private void GenerateConstructor(BoundExpression managedThreadId)
Lowering\LocalRewriter\DelegateCacheRewriter.cs (2)
43internal BoundExpression Rewrite(BoundDelegateCreationExpression boundDelegateCreation) 54var rewrittenNode = _factory.Coalesce(boundCacheField, _factory.AssignmentExpression(boundCacheField, boundDelegateCreation));
Lowering\LocalRewriter\LocalRewriter.cs (32)
53private Dictionary<BoundValuePlaceholderBase, BoundExpression>? _placeholderReplacementMapDoNotUseDirectly; 211BoundExpression? expr = node as BoundExpression; 221private BoundExpression? VisitExpression(BoundExpression? node) 244private BoundExpression? VisitExpressionImpl(BoundExpression node) 262var result = MakeLiteral(node.Syntax, constantValue, type); 273var visited = (BoundExpression)VisitExpressionOrPatternWithStackGuard(node); 297private static BoundExpression RefAccessMustMakeCopy(BoundExpression visited) 307private static bool IsUnusedDeconstruction(BoundExpression node) 501private BoundExpression PlaceholderReplacement(BoundValuePlaceholderBase placeholder) 504var value = _placeholderReplacementMapDoNotUseDirectly[placeholder]; 510private static void AssertPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value) 531private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value) 537_placeholderReplacementMapDoNotUseDirectly = new Dictionary<BoundValuePlaceholderBase, BoundExpression>(); 575private static BoundExpression BadExpression(BoundExpression node) 581private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child) 586private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child1, BoundExpression child2) 591private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, ImmutableArray<BoundExpression> children) 683var operand = this.VisitExpression(node.Operand); 930BoundExpression rhs = assignment.Right; 1011internal static bool CanBePassedByReference(BoundExpression expr) 1144private BoundExpression ConvertReceiverForExtensionMemberIfNeeded(Symbol member, BoundExpression receiver, bool markAsChecked)
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (23)
131public bool MightAssignSomething(BoundExpression expr) 144if (node is BoundExpression { ConstantValueOpt: { } }) 167private static bool MethodMayMutateReceiver(BoundExpression receiver, MethodSymbol method) 339BoundExpression loweredSwitchGoverningExpression, 341out BoundExpression savedInputExpression) 360BoundExpression inputTemp = _tempAllocator.GetTemp(BoundDagTemp.ForOriginalInput(loweredSwitchGoverningExpression)); 447TryLowerTypeTestAndCast(testNode.Test, evaluationNode.Evaluation, out BoundExpression sideEffect, out BoundExpression test) 471private void GenerateTest(BoundExpression test, BoundDecisionDagNode whenTrue, BoundDecisionDagNode whenFalse, BoundDecisionDagNode nextNode) 658private void LowerValueDispatchNode(ValueDispatchNode n, BoundExpression input) 676private void LowerRelationalDispatchNode(ValueDispatchNode.RelationalDispatch rel, BoundExpression input) 678var test = MakeRelationalTest(rel.Syntax, input, rel.Operator, rel.Value); 742private void LowerSwitchDispatchNode(ValueDispatchNode.SwitchDispatch node, BoundExpression input) 1002var whenExpressionMap = PooledDictionary<BoundExpression, (LabelSymbol LabelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> WhenNodes)>.GetInstance(); 1008var whenExpression = whenNode.WhenExpression; 1056var whenExpression = whenNode.WhenExpression; 1079void lowerWhenExpressionIfShared(BoundExpression whenExpression, LabelSymbol labelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> whenNodes) 1123void addConditionalGoto(BoundExpression whenExpression, SyntaxNode whenClauseSyntax, LabelSymbol whenTrueLabel, ArrayBuilder<BoundStatement> sectionBuilder) 1137bool isSharedWhenExpression(BoundExpression? whenExpression) 1181BoundExpression left = _localRewriter.VisitExpression(binding.VariableAccess); 1185BoundExpression right = _tempAllocator.GetTemp(binding.TempContainingValue); 1205BoundExpression sideEffect = LowerEvaluation(evaluationNode.Evaluation); 1226BoundExpression test = base.LowerTest(testNode.Test);
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (55)
56private readonly PooledDictionary<BoundDagTemp, BoundExpression> _map = PooledDictionary<BoundDagTemp, BoundExpression>.GetInstance(); 94public BoundExpression GetTemp(BoundDagTemp dagTemp) 96if (!_map.TryGetValue(dagTemp, out BoundExpression result)) 115public bool TrySetTemp(BoundDagTemp dagTemp, BoundExpression translation) 135protected BoundExpression LowerEvaluation(BoundDagEvaluation evaluation) 137BoundExpression input = _tempAllocator.GetTemp(evaluation.Input); 144BoundExpression output = _tempAllocator.GetTemp(outputTemp); 145BoundExpression access = _localRewriter.MakeFieldAccess(f.Syntax, input, field, null, LookupResultKind.Viable, field.Type); 154BoundExpression output = _tempAllocator.GetTemp(outputTemp); 164var argBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 165BoundExpression receiver; 166void addArg(RefKind refKind, BoundExpression expression) 213BoundExpression output = _tempAllocator.GetTemp(outputTemp); 219BoundExpression evaluated; 250BoundExpression output = _tempAllocator.GetTemp(outputTemp); 260var indexerAccess = e.IndexerAccess; 266var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance(); 272var access = (BoundExpression)_localRewriter.Visit(indexerAccess); 275BoundExpression output = _tempAllocator.GetTemp(outputTemp); 286var indexerAccess = e.IndexerAccess; 292var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance(); 298var access = (BoundExpression)_localRewriter.Visit(indexerAccess); 301BoundExpression output = _tempAllocator.GetTemp(outputTemp); 310BoundExpression makeUnloweredIndexArgument(int index) 324BoundExpression makeUnloweredRangeArgument(BoundDagSliceEvaluation e) 340protected BoundExpression LowerTest(BoundDagTest test) 343BoundExpression input = _tempAllocator.GetTemp(test.Input); 371private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 391protected BoundExpression MakeValueTest(SyntaxNode syntax, BoundExpression input, ConstantValue value) 405protected BoundExpression MakeRelationalTest(SyntaxNode syntax, BoundExpression input, BinaryOperatorKind operatorKind, ConstantValue value) 414BoundExpression literal = _localRewriter.MakeLiteral(syntax, value, input.Type); 435private BoundExpression MakeSpanStringTest(BoundExpression input, ConstantValue value) 465[NotNullWhen(true)] out BoundExpression sideEffect, 466[NotNullWhen(true)] out BoundExpression testExpression) 477BoundExpression input = _tempAllocator.GetTemp(test.Input); 478BoundExpression output = _tempAllocator.GetTemp(new BoundDagTemp(evaluation.Syntax, typeEvaluation1.Type, evaluation)); 492BoundExpression input = _tempAllocator.GetTemp(test.Input); 494BoundExpression output = _tempAllocator.GetTemp(new BoundDagTemp(evaluation.Syntax, baseType, evaluation)); 510BoundExpression loweredInput, 512Action<BoundExpression> addCode, 513out BoundExpression savedInputExpression) 571BoundExpression inputTemp = _tempAllocator.GetTemp(inputDagTemp); 616Action<BoundExpression> addCode, 618out BoundExpression savedInputExpression) 624var newArguments = ArrayBuilder<BoundExpression>.GetInstance(loweredInput.Arguments.Length); 629var expr = loweredInput.Arguments[i]; 644void storeToTemp(BoundDagTemp temp, BoundExpression expr) 654var tempToHoldInput = _tempAllocator.GetTemp(temp);
Lowering\LocalRewriter\LocalRewriter.PlaceholderReplacer.cs (7)
14private readonly Dictionary<BoundEarlyValuePlaceholderBase, BoundExpression> _placeholders; 16private PlaceholderReplacer(Dictionary<BoundEarlyValuePlaceholderBase, BoundExpression> placeholders) 21public static BoundExpression Replace(Dictionary<BoundEarlyValuePlaceholderBase, BoundExpression> placeholders, BoundExpression expr) 25return (BoundExpression)result; 30var value = _placeholders[placeholder];
Lowering\LocalRewriter\LocalRewriter_AsOperator.cs (7)
18BoundExpression rewrittenOperand = VisitExpression(node.Operand); 32private BoundExpression MakeAsOperator( 35BoundExpression rewrittenOperand, 38BoundExpression? operandConversion, 61BoundExpression result = rewrittenType.IsNullableType() ? new BoundDefaultExpression(syntax, rewrittenType) : MakeLiteral(syntax, constantValue, rewrittenType); 74sideEffects: ImmutableArray.Create<BoundExpression>(rewrittenOperand), 87BoundExpression result = VisitExpression(operandConversion);
Lowering\LocalRewriter\LocalRewriter_AssignmentOperator.cs (31)
21private BoundExpression VisitAssignmentOperator(BoundAssignmentOperator node, bool used) 23var loweredRight = VisitExpression(node.Right); 25BoundExpression left = node.Left; 26BoundExpression loweredLeft; 58var loweredReceiver = VisitExpression(memberAccess.Receiver); 66var loweredReceiver = VisitExpression(indexerAccess.Receiver); 100private BoundExpression MakeAssignmentOperator(SyntaxNode syntax, BoundExpression rewrittenLeft, BoundExpression rewrittenRight, 148private BoundExpression MakeDynamicSetIndex( 150BoundExpression loweredReceiver, 151ImmutableArray<BoundExpression> loweredArguments, 154BoundExpression loweredRight, 175private BoundExpression MakeStaticAssignmentOperator( 177BoundExpression rewrittenLeft, 178BoundExpression rewrittenRight, 193BoundExpression? rewrittenReceiver = propertyAccess.ReceiverOpt; 200ImmutableArray<BoundExpression>.Empty, 213BoundExpression? rewrittenReceiver = indexerAccess.ReceiverOpt; 214ImmutableArray<BoundExpression> arguments = indexerAccess.Arguments; 280private bool IsExtensionPropertyWithByValPossiblyStructReceiverWhichHasHomeAndCanChangeValueBetweenReads(BoundExpression rewrittenReceiver, PropertySymbol property) 291private BoundExpression MakePropertyAssignment( 293BoundExpression? rewrittenReceiver, 295ImmutableArray<BoundExpression> arguments, 299BoundExpression rewrittenRight, 323ArrayBuilder<BoundExpression>? storesOpt = null; 338storesOpt = ArrayBuilder<BoundExpression>.GetInstance(); 342BoundExpression? rewrittenReceiverBeforePossibleCapture = rewrittenReceiver; 400BoundExpression boundRhs = new BoundLocal(syntax, rhsTemp, null, exprType); 402BoundExpression rhsAssignment = new BoundAssignmentOperator( 408BoundExpression setterCall = BoundCall.Synthesized(
Lowering\LocalRewriter\LocalRewriter_Await.cs (7)
18public BoundExpression VisitAwaitExpression(BoundAwaitExpression node, bool used) 20return RewriteAwaitExpression((BoundExpression)base.VisitAwaitExpression(node)!, used); 23private BoundExpression RewriteAwaitExpression(SyntaxNode syntax, BoundExpression rewrittenExpression, BoundAwaitableInfo awaitableInfo, TypeSymbol type, BoundAwaitExpressionDebugInfo debugInfo, bool used) 31private BoundExpression RewriteAwaitExpression(BoundExpression rewrittenAwait, bool used) 53sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (211)
75BoundExpression loweredLeft = VisitExpression(node.Left); 76BoundExpression loweredRight = VisitExpression(node.Right); 93var andOperatorCall = LowerUserDefinedBinaryOperator(syntax, operatorKind & ~BinaryOperatorKind.Logical, boundTemp, loweredRight, type, node.LogicalOperator, node.ConstrainedToTypeOpt); 96BoundExpression conditionalExpression = RewriteConditionalOperator( 109sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 114public BoundExpression VisitBinaryOperator(BoundBinaryOperator node, BoundUnaryOperator? applyParentUnaryOperator) 119ImmutableArray<BoundExpression> parts = CollectBinaryOperatorInterpolatedStringParts(node); 154BoundExpression loweredLeft = VisitExpression(stack.Peek().Left); 158BoundExpression loweredRight = VisitExpression(original.Right); 167private static ImmutableArray<BoundExpression> CollectBinaryOperatorInterpolatedStringParts(BoundBinaryOperator node) 171var partsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 173static (BoundInterpolatedString interpolatedString, ArrayBuilder<BoundExpression> partsBuilder) => 181private BoundExpression MakeBinaryOperator( 184BoundExpression loweredLeft, 185BoundExpression loweredRight, 196private BoundExpression MakeBinaryOperator( 200BoundExpression loweredLeft, 201BoundExpression loweredRight, 544private BoundExpression RewriteLiftedBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt) 561var result = operatorKind.IsComparison() ? 569BoundExpression? whenNullOpt = null; 597private BoundExpression UnconvertArrayLength(BoundArrayLength arrLength) 602private BoundExpression MakeDynamicLogicalBinaryOperator( 605BoundExpression loweredLeft, 606BoundExpression loweredRight, 652BoundExpression result; 673var op = _dynamicFactory.MakeDynamicBinaryOperator(operatorKind, loweredLeft, loweredRight, isCompoundAssignment, type).ToExpression(); 687BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, operatorKind, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd); 703BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, operatorKind, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd); 704var convertedLeft = MakeConversionNode(loweredLeft, type, @checked: false); 712return _factory.Sequence(ImmutableArray.Create(temp.LocalSymbol), ImmutableArray.Create<BoundExpression>(tempAssignment), result); 718private static ConstantValue? UnboxConstant(BoundExpression expression) 732private BoundExpression MakeTruthTestForDynamicLogicalOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, TypeSymbol boolean, MethodSymbol? leftTruthOperator, TypeSymbol? constrainedToTypeOpt, bool negative) 753var converted = MakeConversionNode(loweredLeft, boolean, @checked: false, markAsChecked: true); // The conversion was checked in binding 785private BoundExpression LowerUserDefinedBinaryOperator( 788BoundExpression loweredLeft, 789BoundExpression loweredRight, 813private BoundExpression? TrivialLiftedComparisonOperatorOptimizations( 816BoundExpression left, 817BoundExpression right, 839BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 840BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 861BoundExpression result = MakeLiteral(syntax, ConstantValue.Create(operatorKind == BinaryOperatorKind.NotEqual), boolType); 863BoundExpression? nonNull = leftAlwaysNull ? rightNonNull : leftNonNull; 871sideEffects: ImmutableArray.Create<BoundExpression>(nonNull), 886BoundExpression maybeNull = leftAlwaysNull ? right : left; 890BoundExpression callHasValue = _factory.MakeNullableHasValue(syntax, maybeNull); 891BoundExpression result = operatorKind == BinaryOperatorKind.Equal ? 898BoundExpression falseExpr = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual); 906private BoundExpression MakeOptimizedGetValueOrDefault(SyntaxNode syntax, BoundExpression expression) 924private BoundExpression MakeBooleanConstant(SyntaxNode syntax, bool value) 929private BoundExpression MakeOptimizedHasValue(SyntaxNode syntax, BoundExpression expression) 943private BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression) 953private BoundExpression LowerLiftedBuiltInComparisonOperator( 956BoundExpression loweredLeft, 957BoundExpression loweredRight) 973BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method: null, constrainedToTypeOpt: null); 1012BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft); 1013BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight); 1050BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1051BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1052BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1053BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1073BoundExpression leftExpression = MakeBinaryOperator( 1083BoundExpression rightExpression = MakeBinaryOperator( 1094BoundExpression binaryExpression = MakeBinaryOperator( 1117sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1143private BoundExpression LowerLiftedUserDefinedComparisonOperator( 1146BoundExpression loweredLeft, 1147BoundExpression loweredRight, 1153BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method, constrainedToTypeOpt); 1208BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft); 1209BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight); 1223BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1224BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1225BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1226BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1244BoundExpression condition = MakeBinaryOperator( 1254BoundExpression unliftedOp = MakeBinaryOperator( 1263BoundExpression consequence; 1292BoundExpression alternative = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual); 1294BoundExpression conditionalExpression = RewriteConditionalOperator( 1306sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1311private BoundExpression? TrivialLiftedBinaryArithmeticOptimizations( 1314BoundExpression left, 1315BoundExpression right, 1340BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 1341BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 1351private BoundExpression MakeLiftedBinaryOperatorConsequence( 1354BoundExpression left, 1355BoundExpression right, 1361BoundExpression unliftedOp = MakeBinaryOperator( 1377private static BoundExpression? OptimizeLiftedArithmeticOperatorOneNull( 1379BoundExpression left, 1380BoundExpression right, 1398BoundExpression notAlwaysNull = leftAlwaysNull ? right : left; 1399BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull); 1400BoundExpression sideEffect = neverNull ?? notAlwaysNull; 1415sideEffects: ImmutableArray.Create<BoundExpression>(sideEffect), 1420private BoundExpression LowerLiftedBinaryArithmeticOperator( 1423BoundExpression loweredLeft, 1424BoundExpression loweredRight, 1433BoundExpression? optimized = OptimizeLiftedBinaryArithmetic(syntax, kind, loweredLeft, loweredRight, type, method, constrainedToTypeOpt); 1457var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(); 1460BoundExpression? leftNeverNull = NullableAlwaysHasValue(loweredLeft); 1461BoundExpression? rightNeverNull = NullableAlwaysHasValue(loweredRight); 1463BoundExpression boundTempX = leftNeverNull ?? loweredLeft; 1466BoundExpression boundTempY = rightNeverNull ?? loweredRight; 1469BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1470BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1471BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1472BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1476BoundExpression condition = MakeBinaryOperator(syntax, BinaryOperatorKind.BoolAnd, callX_HasValue, callY_HasValue, boolType, method: null, constrainedToTypeOpt: null); 1479BoundExpression consequence = MakeLiftedBinaryOperatorConsequence(syntax, kind, callX_GetValueOrDefault, callY_GetValueOrDefault, type, method, constrainedToTypeOpt); 1482BoundExpression alternative = new BoundDefaultExpression(syntax, type); 1487BoundExpression conditionalExpression = RewriteConditionalOperator( 1504private BoundExpression CaptureExpressionInTempIfNeeded( 1505BoundExpression operand, 1506ArrayBuilder<BoundExpression> sideeffects, 1522private BoundExpression? OptimizeLiftedBinaryArithmetic( 1525BoundExpression left, 1526BoundExpression right, 1531BoundExpression? optimized = TrivialLiftedBinaryArithmeticOptimizations(syntax, kind, left, right, type, method, constrainedToTypeOpt); 1625BoundExpression? nonNullRight = NullableAlwaysHasValue(right); 1658private BoundExpression MakeNewNullableBoolean(SyntaxNode syntax, bool? value) 1673private BoundExpression? OptimizeLiftedBooleanOperatorOneNull( 1676BoundExpression left, 1677BoundExpression right) 1704BoundExpression alwaysNull = leftAlwaysNull ? left : right; 1705BoundExpression notAlwaysNull = leftAlwaysNull ? right : left; 1706BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull); 1708BoundExpression nullBool = new BoundDefaultExpression(syntax, alwaysNull.Type); 1712BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr); 1738BoundExpression condition = MakeOptimizedGetValueOrDefault(syntax, boundTemp); 1739BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? nullBool : boundTemp; 1740BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTemp : nullBool; 1741BoundExpression conditionalExpression = RewriteConditionalOperator( 1753sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1758private BoundExpression? OptimizeLiftedBooleanOperatorOneNonNull( 1761BoundExpression left, 1762BoundExpression right) 1780BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 1781BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 1797BoundExpression nonNullTemp = leftNonNull == null ? boundTempY : boundTempX; 1798BoundExpression maybeNullTemp = leftNonNull == null ? boundTempX : boundTempY; 1799BoundExpression condition = nonNullTemp; 1800BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr); 1801BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolOr ? newNullBool : maybeNullTemp; 1802BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolOr ? maybeNullTemp : newNullBool; 1803BoundExpression conditionalExpression = RewriteConditionalOperator( 1814sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1819private BoundExpression LowerLiftedBooleanOperator( 1822BoundExpression loweredLeft, 1823BoundExpression loweredRight) 1829BoundExpression? optimized = OptimizeLiftedBooleanOperatorOneNull(syntax, kind, loweredLeft, loweredRight); 1858BoundExpression callX_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempX, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefaultX); 1860BoundExpression callY_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempY, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefaultY); 1862BoundExpression callX_HasValue = _factory.MakeNullableHasValue(syntax, boundTempX); 1865BoundExpression innerOr = MakeBinaryOperator( 1875BoundExpression invert = MakeUnaryOperator(UnaryOperatorKind.BoolLogicalNegation, syntax, method: null, constrainedToTypeOpt: null, innerOr, boolType); 1878BoundExpression condition = MakeBinaryOperator( 1887BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempY : boundTempX; 1888BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempX : boundTempY; 1890BoundExpression conditionalExpression = RewriteConditionalOperator( 1902sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1941private BoundExpression RewriteNullableNullEquality( 1944BoundExpression loweredLeft, 1945BoundExpression loweredRight, 1963BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight; 1972BoundExpression? nonNullValue = NullableAlwaysHasValue(nullable); 1983sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue), 1993BoundExpression whenNotNull = RewriteNullableNullEquality( 2000var whenNull = kind == BinaryOperatorKind.NullableNullEqual ? MakeBooleanConstant(syntax, true) : null; 2005BoundExpression call = MakeNullableHasValue(syntax, nullable); 2006BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ? 2013private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member) 2026private BoundExpression RewriteDelegateOperation(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member) 2047BoundExpression call = _inExpressionLambda 2049: (BoundExpression)BoundCall.Synthesized(syntax, receiverOpt: null, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method, loweredLeft, loweredRight); 2050BoundExpression result = method.ReturnType.SpecialType == SpecialType.System_Delegate ? 2056private BoundExpression RewriteDecimalBinaryOperation(SyntaxNode syntax, BoundExpression loweredLeft, BoundExpression loweredRight, BinaryOperatorKind operatorKind) 2087private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 2144private BoundExpression RewriteBuiltInShiftOperation( 2148BoundExpression loweredLeft, 2149BoundExpression loweredRight, 2206private BoundExpression RewriteBuiltInNativeShiftOperation( 2210BoundExpression loweredLeft, 2211BoundExpression loweredRight, 2267private BoundExpression RewritePointerNumericOperator( 2270BoundExpression loweredLeft, 2271BoundExpression loweredRight, 2320private BoundExpression MakeSizeOfMultiplication(BoundExpression numericOperand, PointerTypeSymbol pointerType, bool isChecked) 2322var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType); 2464private BoundExpression RewritePointerSubtraction( 2466BoundExpression loweredLeft, 2467BoundExpression loweredRight, 2475var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType);
Lowering\LocalRewriter\LocalRewriter_Call.cs (84)
23public BoundExpression VisitDynamicInvocation(BoundDynamicInvocation node, bool resultDiscarded) 30BoundExpression loweredReceiver; 82var loweredExpression = VisitExpression(node.Expression); 98private void EmbedIfNeedTo(BoundExpression receiver, ImmutableArray<MethodSymbol> methods, SyntaxNode syntaxNode) 117private void EmbedIfNeedTo(BoundExpression receiver, ImmutableArray<PropertySymbol> properties, SyntaxNode syntaxNode) 138ref BoundExpression? receiverOpt, 139ref ImmutableArray<BoundExpression> arguments, 340BoundExpression rewrittenCall; 357BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 371BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 377BoundExpression visitArgumentsAndFinishRewrite(BoundCall node, BoundExpression? rewrittenReceiver) 382ImmutableArray<BoundExpression> arguments = node.Arguments; 386BoundExpression? firstRewrittenArgument = null; 422var rewrittenCall = MakeCall(node, node.Syntax, rewrittenReceiver, method, rewrittenArguments, argRefKindsOpt, node.ResultKind, temps.ToImmutableAndFree()); 455private BoundExpression MakeCall( 458BoundExpression? rewrittenReceiver, 460ImmutableArray<BoundExpression> rewrittenArguments, 465BoundExpression rewrittenBoundCall; 532sideEffects: ImmutableArray<BoundExpression>.Empty, 540private BoundExpression MakeCall(SyntaxNode syntax, BoundExpression? rewrittenReceiver, MethodSymbol method, ImmutableArray<BoundExpression> rewrittenArguments) 553private static bool IsSafeForReordering(BoundExpression expression, RefKind kind) 560var current = expression; 639internal static bool IsCapturedPrimaryConstructorParameter(BoundExpression expression) 661private ImmutableArray<BoundExpression> VisitArgumentsAndCaptureReceiverIfNeeded( 662[NotNullIfNotNull(nameof(rewrittenReceiver))] ref BoundExpression? rewrittenReceiver, 664ImmutableArray<BoundExpression> arguments, 668ArrayBuilder<BoundExpression>? storesOpt, 670BoundExpression? firstRewrittenArgument = null) 737ImmutableArray<BoundExpression> rewrittenArguments; 746var visitedArgumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length); 755var argument = arguments[i]; 826extraRefInitialization is object ? ImmutableArray.Create<BoundExpression>(extraRefInitialization, assignmentToTemp) : ImmutableArray.Create<BoundExpression>(assignmentToTemp), 845ArrayBuilder<BoundExpression> visitedArgumentsBuilder, 851var argument = arguments[argumentIndex]; 900var visitedArgument = visitedArgumentsBuilder[argIndex]; 903visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local); 925static bool usesReceiver(BoundExpression argument) 949private RefKind GetNewExtensionMemberReceiverCaptureRefKind(BoundExpression rewrittenReceiver, Symbol methodOrIndexer) 1025_factory.Sequence(new BoundExpression[] { _factory.AssignmentExpression(cache, intermediateRef) }, cache), 1043_factory.Sequence(new BoundExpression[] { _factory.AssignmentExpression(cache, assignmentToTemp.Right) }, cache), 1058private ImmutableArray<BoundExpression> MakeArguments( 1059ImmutableArray<BoundExpression> rewrittenArguments, 1078BoundExpression? optimized; 1144BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter. 1191private bool TryOptimizeParamsArray(BoundExpression possibleParamsArray, [NotNullWhen(true)] out BoundExpression? optimized) 1293ImmutableArray<BoundExpression> rewrittenArguments, 1352private delegate BoundExpression ParamsArrayElementRewriter<TArg>(BoundExpression element, ref TArg arg); 1353private static BoundExpression RewriteParamsArray<TArg>(BoundExpression paramsArray, ParamsArrayElementRewriter<TArg> elementRewriter, ref TArg arg) 1359ArrayBuilder<BoundExpression>? elementsBuilder = null; 1363var element = elements[i]; 1364var replacement = elementRewriter(element, ref arg); 1370elementsBuilder = ArrayBuilder<BoundExpression>.GetInstance(elements.Length); 1403ImmutableArray<BoundExpression> rewrittenArguments, 1405/* out */ BoundExpression[] arguments, 1416BoundExpression argument = rewrittenArguments[a]; 1442static (BoundExpression element, ref (LocalRewriter rewriter, bool forceLambdaSpilling, ArrayBuilder<BoundAssignmentOperator> storesToTemps) arg) => 1459private BoundExpression StoreArgumentToTempIfNecessary(bool forceLambdaSpilling, ArrayBuilder<BoundAssignmentOperator> storesToTemps, BoundExpression argument, RefKind argRefKind, RefKind paramRefKind) 1478bool isLambdaConversion(BoundExpression expr) 1482private BoundExpression CreateEmptyArray(SyntaxNode syntax, ArrayTypeSymbol arrayType) 1484BoundExpression? arrayEmpty = CreateArrayEmptyCallIfAvailable(syntax, arrayType.ElementType); 1492ImmutableArray.Create<BoundExpression>( 1502private BoundExpression? CreateArrayEmptyCallIfAvailable(SyntaxNode syntax, TypeSymbol elementType) 1524ImmutableArray<BoundExpression>.Empty, 1537BoundExpression[] arguments, 1567BoundExpression[] arguments, 1592var argument = arguments[a]; 1599static (BoundExpression element, ref (ArrayBuilder<BoundAssignmentOperator> tempStores, int tempsRemainedInUse, int firstUnclaimedStore) arg) => 1614static BoundExpression mergeArgumentAndSideEffect(BoundExpression argument, ArrayBuilder<BoundAssignmentOperator> tempStores, ref int tempsRemainedInUse, ref int firstUnclaimedStore) 1636var value = tempStores[correspondingStore].Right; 1652var sideeffects = new BoundExpression[correspondingStore - firstUnclaimedStore]; 1685BoundExpression[] actualArguments, //already re-ordered to match parameters 1709var argument = actualArguments[argIndex]; 1728sideEffects: ImmutableArray.Create<BoundExpression>(boundAssignmentToTemp), 1747var loweredReceiver = VisitExpression(node.Receiver);
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (108)
30private BoundExpression RewriteCollectionExpressionConversion(Conversion conversion, BoundCollectionExpression node) 47if (TryRewriteSingleElementSpreadToList(node, listElementType, out var result)) 115BoundExpression expr; 123expr = (BoundExpression)element; 137var iteratorBody = Binder.GetUnderlyingCollectionExpressionElement(node, ((BoundExpressionStatement)spreadElement.IteratorBody).Expression, throwOnErrors: true); 150var result = Binder.GetUnderlyingCollectionExpressionElement(node, (BoundExpression)element, throwOnErrors: true); 159private bool TryRewriteSingleElementSpreadToList(BoundCollectionExpression node, TypeWithAnnotations listElementType, [NotNullWhen(true)] out BoundExpression? result) 182var rewrittenSpreadExpression = VisitExpression(singleSpread.Expression); 216private static bool CanOptimizeSingleSpreadAsCollectionBuilderArgument(BoundCollectionExpression node, [NotNullWhen(true)] out BoundExpression? spreadExpression) 234private BoundExpression VisitImmutableArrayCollectionExpression(BoundCollectionExpression node, TypeWithAnnotations elementType, MethodSymbol asImmutableArray) 236var arrayCreation = VisitArrayOrSpanCollectionExpression( 245private BoundExpression VisitArrayOrSpanCollectionExpression(BoundCollectionExpression node, CollectionExpressionTypeKind collectionTypeKind, TypeSymbol collectionType, TypeWithAnnotations elementType) 279var rewrittenElements = elements.SelectAsArray(static (element, rewriter) => rewriter.VisitExpression((BoundExpression)element), this); 300BoundExpression array; 313var list = CreateAndPopulateList(node, elementType, elements); 331private BoundExpression VisitCollectionInitializerCollectionExpression(BoundCollectionExpression node, TypeSymbol collectionType) 336var rewrittenReceiver = VisitExpression(node.CollectionCreation); 343var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(elements.Length + 1); 353var rewrittenElement = element is BoundCollectionExpressionSpreadElement spreadElement ? 360var rewrittenValue = rewriteCollectionInitializer(temp, ((BoundExpressionStatement)iteratorBody).Expression); 366rewriteCollectionInitializer(temp, (BoundExpression)element); 382BoundExpression? rewriteCollectionInitializer(BoundLocal rewrittenReceiver, BoundExpression expressionElement) 393private BoundExpression VisitListInterfaceCollectionExpression(BoundCollectionExpression node) 406BoundExpression arrayOrList; 436BoundExpression fieldValue = kind switch 439SynthesizedReadOnlyListKind.SingleElement => this.VisitExpression((BoundExpression)elements.Single()), 458BoundExpression createArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType) 467private BoundExpression VisitCollectionBuilderCollectionExpression(BoundCollectionExpression node) 488BoundExpression span = CanOptimizeSingleSpreadAsCollectionBuilderArgument(node, out var spreadExpression) 510var result = VisitExpression(node.CollectionBuilderInvocationConversion); 529node.Elements.All(e => ((BoundExpression)e).ConstantValueOpt is { }); 539private BoundExpression CreateAndPopulateSpanFromInlineArray( 546Debug.Assert(elements.All(e => e is BoundExpression)); 563var element = VisitExpression((BoundExpression)elements[0]); 581var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 591var element = VisitExpression((BoundExpression)elements[i]); 656private BoundExpression? TryOptimizeSingleSpreadToArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType) 669var rewrittenSpreadExpression = VisitExpression(spreadExpression); 693var rewrittenSpreadExpression = CallAsSpanMethod(VisitExpression(spreadExpression), asSpanMethod); 718private BoundExpression CreateAndPopulateArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType) 744elements.SelectAsArray(static (element, rewriter) => rewriter.VisitExpression((BoundExpression)element), this)); 747ImmutableArray.Create<BoundExpression>( 759var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 786addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression arrayTemp, BoundExpression rewrittenValue, bool isLastElement) => 814tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression arrayTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 821if (!TryConvertToSpan(arrayTemp, writableOnly: true, out var targetSpan)) 900private bool TryConvertToSpan(BoundExpression expression, bool writableOnly, [NotNullWhen(true)] out BoundExpression? span) 915private BoundExpression CallAsSpanMethod(BoundExpression spreadExpression, MethodSymbol? asSpanMethod) 939private (MethodSymbol spanSliceMethod, BoundExpression spreadElementAsSpan, MethodSymbol getLengthMethod, MethodSymbol copyToMethod)? PrepareCopyToOptimization( 941BoundExpression rewrittenSpreadOperand) 951if (!TryConvertToSpan(rewrittenSpreadOperand, writableOnly: false, out var spreadOperandAsSpan)) 981ArrayBuilder<BoundExpression> sideEffects, 984BoundExpression spanTemp, 985BoundExpression rewrittenSpreadOperand, 987BoundExpression spreadOperandAsSpan, 1020private BoundExpression CreateAndPopulateList(BoundCollectionExpression node, TypeWithAnnotations elementType, ImmutableArray<BoundNode> elements) 1028var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(elements.Length + 1); 1058var knownLengthExpression = GetKnownLengthExpression(elements, numberIncludingLastSpread, localsBuilder); 1070rewrittenReceiver = _factory.New(constructor, ImmutableArray.Create<BoundExpression>(knownLengthTemp)); 1082rewrittenReceiver = _factory.New(constructor, ImmutableArray<BoundExpression>.Empty); 1122addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression spanTemp, BoundExpression rewrittenValue, bool isLastElement) => 1150tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression spanTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 1169addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression listTemp, BoundExpression rewrittenValue, bool isLastElement) => 1175tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression listTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 1203private BoundExpression RewriteCollectionExpressionElementExpression(BoundNode element) 1205var expression = element is BoundCollectionExpressionSpreadElement spreadElement ? 1207(BoundExpression)element; 1215ArrayBuilder<BoundExpression> sideEffects) 1219var rewrittenExpression = RewriteCollectionExpressionElementExpression(elements[i]); 1229BoundExpression rewrittenReceiver, 1232ArrayBuilder<BoundExpression> sideEffects, 1233Action<ArrayBuilder<BoundExpression>, BoundExpression, BoundExpression, bool> addElement, 1234Func<ArrayBuilder<BoundExpression>, BoundExpression, BoundCollectionExpressionSpreadElement, BoundExpression, bool> tryOptimizeSpreadElement) 1239var rewrittenExpression = i < numberIncludingLastSpread ? 1248var rewrittenElement = MakeCollectionExpressionSpreadElement( 1253var rewrittenValue = VisitExpression(((BoundExpressionStatement)iteratorBody).Expression); 1254var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1273private BoundExpression GetKnownLengthExpression(ImmutableArray<BoundNode> elements, int numberIncludingLastSpread, ArrayBuilder<BoundLocal> rewrittenExpressions) 1278BoundExpression? sum = null; 1288var lengthAccess = VisitExpression(spreadElement.LengthOrCount); 1313BoundExpression add(BoundExpression? sum, BoundExpression value) 1321private BoundExpression MakeCollectionExpressionSpreadElement( 1323BoundExpression rewrittenExpression,
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (67)
22private BoundExpression VisitCompoundAssignmentOperator(BoundCompoundAssignmentOperator node, bool used) 36private BoundExpression VisitInstanceCompoundAssignmentOperator(BoundCompoundAssignmentOperator node, bool used) 82private BoundExpression VisitBuiltInOrStaticCompoundAssignmentOperator(BoundCompoundAssignmentOperator node, bool used) 86var stores = ArrayBuilder<BoundExpression>.GetInstance(); 95BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.Left, stores, temps, isDynamic); 96var lhsRead = MakeRValue(transformedLHS); 97BoundExpression rewrittenAssignment; 119var sequence = ArrayBuilder<BoundExpression>.GetInstance(); 137BoundExpression loweredRight = VisitExpression(node.Right); 156var condition = _factory.Conditional(isEvent, invokeEventAccessor.ToExpression(), rewrittenAssignment, rewrittenAssignment.Type); 166BoundExpression result = (temps.Count == 0 && stores.Count == 0) ? 179BoundExpression rewriteAssignment(BoundExpression leftRead, BoundExpression right, bool rightIsVisited) 192BoundExpression opLHS = leftRead; 203BoundExpression operand; 212var loweredRight = rightIsVisited ? right : VisitExpression(right); 217BoundExpression opFinal = operand; 234BoundExpression assignment = MakeAssignmentOperator(syntax, transformedLHS, binaryResult, used: used, isChecked: isChecked, AssignmentKind.CompoundAssignment); 243private static bool IsNewExtensionMemberAccessWithByValPossiblyStructReceiver(BoundExpression transformedLHS) 261private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 291BoundExpression rewrittenReceiver = VisitExpression(receiverOpt); 351private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 359var rewrittenReceiver = VisitExpression(memberAccess.Receiver); 368private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 370var receiverOpt = indexerAccess.ReceiverOpt; 373BoundExpression transformedReceiver = VisitExpression(receiverOpt); 420ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 437BoundExpression transformedReceiver, 438ImmutableArray<BoundExpression> rewrittenArguments, 439ArrayBuilder<BoundExpression> stores, 471private ImmutableArray<BoundExpression> ExtractSideEffectsFromArguments( 472ImmutableArray<BoundExpression> rewrittenArguments, 477ArrayBuilder<BoundExpression> stores, 481BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter. 502if (TryOptimizeParamsArray(array, out BoundExpression? optimized)) 537private BoundExpression TransformImplicitIndexerAccess( 539ArrayBuilder<BoundExpression> stores, 554private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment) 557var access = GetUnderlyingIndexerOrSliceAccess( 590private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 612BoundExpression rewrittenReceiver = VisitExpression(receiver); 633private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 635BoundExpression loweredReceiver; 650var loweredArguments = new BoundExpression[arguments.Length]; 692private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment) 771BoundExpression? receiverOpt = fieldAccess.ReceiverOpt; 800var loweredArray = VisitExpression(arrayAccess.Expression); 824var result = VisitExpression(originalLHS); 854BoundExpression? receiverOpt = eventAccess.ReceiverOpt; 882BoundExpression rewrittenVariable = VisitExpression(originalLHS); 896private BoundExpression BoxReceiver(BoundExpression rewrittenReceiver, NamedTypeSymbol memberContainingType) 907private BoundExpression SpillArrayElementAccess( 908BoundExpression loweredExpression, 909ImmutableArray<BoundExpression> loweredIndices, 910ArrayBuilder<BoundExpression> stores, 919var boundTempIndices = new BoundExpression[loweredIndices.Length]; 953BoundExpression expression, 1001BoundExpression expression)
Lowering\LocalRewriter\LocalRewriter_ConditionalAccess.cs (9)
26private BoundExpression? _currentConditionalAccessTarget; 38internal BoundExpression? RewriteConditionalAccess(BoundConditionalAccess node, bool used) 43var loweredReceiver = this.VisitExpression(node.Receiver); 76var previousConditionalAccessTarget = _currentConditionalAccessTarget; 104BoundExpression? loweredAccessExpression; 144BoundExpression result; 176var condition = _factory.IsNotNullReference(loweredReceiver); 178var consequence = loweredAccessExpression; 204var newtarget = _currentConditionalAccessTarget;
Lowering\LocalRewriter\LocalRewriter_ConditionalOperator.cs (7)
23var rewrittenCondition = VisitExpression(node.Condition); 24var rewrittenConsequence = VisitExpression(node.Consequence); 25var rewrittenAlternative = VisitExpression(node.Alternative); 42private static BoundExpression RewriteConditionalOperator( 44BoundExpression rewrittenCondition, 45BoundExpression rewrittenConsequence, 46BoundExpression rewrittenAlternative,
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (82)
48var objectCreation = VisitExpression(node.Operand); 62var rewrittenCollection = RewriteCollectionExpressionConversion(node.Conversion.UnderlyingConversions[0], (BoundCollectionExpression)node.Operand); 75var rewrittenOperand = VisitExpression(node.Operand); 79var result = MakeConversionNode(node, node.Syntax, rewrittenOperand, node.Conversion, node.Checked, node.ExplicitCastInCode, node.ConstantValueOpt, rewrittenType); 92private BoundExpression MakeUtf8Span(BoundExpression node, IReadOnlyList<byte>? bytes) 103BoundExpression result; 105BoundExpression utf8Bytes = bytes is null ? 106BadExpression(node.Syntax, byteArray, ImmutableArray<BoundExpression>.Empty) : 111result = BadExpression(node.Syntax, node.Type, ImmutableArray<BoundExpression>.Empty); 145var builder = ArrayBuilder<BoundExpression>.GetInstance(bytes.Count + 1); 158ImmutableArray.Create<BoundExpression>(_factory.Literal(builder.Count)), 164private BoundExpression VisitUtf8Addition(BoundBinaryOperator node) 170var stack = ArrayBuilder<BoundExpression>.GetInstance(); 176var current = stack.Pop(); 206BoundExpression result = MakeUtf8Span(node, haveRepresentationError ? null : bytesBuilder); 212private static bool IsFloatingPointExpressionOfUnknownPrecision(BoundExpression rewrittenNode) 260private BoundExpression MakeConversionNode( 263BoundExpression rewrittenOperand, 270var result = MakeConversionNodeCore(oldNodeOpt, syntax, rewrittenOperand, conversion, @checked, explicitCastInCode, constantValueOpt, rewrittenType); 295private BoundExpression MakeConversionNodeCore( 298BoundExpression rewrittenOperand, 388BoundExpression? nullableValue = NullableAlwaysHasValue(rewrittenOperand); 461var operand = MakeConversionNode( 510var rewrittenNode = RewriteDecimalConversion(syntax, rewrittenOperand, rewrittenOperand.Type, underlyingTypeTo, @checked, isImplicit: false, constantValueOpt: constantValueOpt); 568var receiver = (!method.RequiresInstanceReceiver && !oldNodeOpt.IsExtensionMethod && !method.IsAbstract && !method.IsVirtual) ? _factory.Type(method.ContainingType) : mg.ReceiverOpt; 789private BoundExpression MakeConversionNode(BoundExpression rewrittenOperand, TypeSymbol rewrittenType, bool @checked, bool acceptFailingConversion = false, bool markAsChecked = false) 808BoundExpression rewrittenOperand, 838private BoundExpression MakeConversionNode( 840BoundExpression rewrittenOperand, 908BoundExpression userDefined = RewriteUserDefinedConversion( 948private BoundExpression RewriteTupleConversion( 950BoundExpression rewrittenOperand, 962var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 971var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]); 972var convertedFieldAccess = MakeConversionNode(syntax, fieldAccess, elementConversions[i], destElementTypes[i].Type, @checked, explicitCastInCode); 976var result = MakeTupleCreationExpression(syntax, rewrittenType, fieldAccessorsBuilder.ToImmutableAndFree()); 980internal static bool NullableNeverHasValue(BoundExpression expression) 995internal static BoundExpression? NullableAlwaysHasValue(BoundExpression expression) 1035private BoundExpression RewriteNullableConversion( 1037BoundExpression rewrittenOperand, 1065BoundExpression rewrittenConversion = MakeConversionNode(syntax, rewrittenOperand, conversion.UnderlyingConversions[0], rewrittenType.GetNullableUnderlyingType(), @checked); 1077BoundExpression? value = NullableAlwaysHasValue(rewrittenOperand); 1091private BoundExpression RewriteLiftedConversionInExpressionTree( 1093BoundExpression rewrittenOperand, 1143private BoundExpression RewriteFullyLiftedBuiltInConversion( 1145BoundExpression operand, 1157BoundExpression? optimized = OptimizeLiftedBuiltInConversion(syntax, operand, conversion, @checked, type); 1176BoundExpression condition = MakeNullableHasValue(syntax, boundTemp); 1178BoundExpression consequence = new BoundObjectCreationExpression( 1187BoundExpression alternative = new BoundDefaultExpression(syntax, type); 1188BoundExpression conditionalExpression = RewriteConditionalOperator( 1200sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1205private BoundExpression? OptimizeLiftedUserDefinedConversion( 1207BoundExpression operand, 1221BoundExpression? nonNullValue = NullableAlwaysHasValue(operand); 1237private BoundExpression? OptimizeLiftedBuiltInConversion( 1239BoundExpression operand, 1258BoundExpression? nonNullValue = NullableAlwaysHasValue(operand); 1277private BoundExpression? DistributeLiftedConversionIntoLiftedOperand( 1279BoundExpression operand, 1339private BoundExpression RewriteUserDefinedConversion( 1341BoundExpression rewrittenOperand, 1371BoundExpression result = BoundCall.Synthesized( 1381private BoundExpression MakeLiftedUserDefinedConversionConsequence(BoundCall call, TypeSymbol resultType) 1393private BoundExpression RewriteLiftedUserDefinedConversion( 1395BoundExpression rewrittenOperand, 1417BoundExpression? optimized = OptimizeLiftedUserDefinedConversion(syntax, rewrittenOperand, conversion, rewrittenType); 1440BoundExpression condition = _factory.MakeNullableHasValue(syntax, boundTemp); 1456BoundExpression consequence = MakeLiftedUserDefinedConversionConsequence(userDefinedCall, rewrittenType); 1459BoundExpression alternative = new BoundDefaultExpression(syntax, rewrittenType); 1462BoundExpression conditionalExpression = RewriteConditionalOperator( 1476sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1481private BoundExpression RewriteIntPtrConversion( 1483BoundExpression rewrittenOperand, 1528var rewrittenCall = MakeCall( 1697private BoundExpression RewriteDecimalConversion(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit, ConstantValue? constantValueOpt) 1728private BoundExpression RewriteDecimalConversionCore(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool isImplicit, ConstantValue? constantValueOpt)
Lowering\LocalRewriter\LocalRewriter_DeconstructionAssignmentOperator.cs (51)
37private BoundExpression? RewriteDeconstruction(BoundTupleExpression left, Conversion conversion, BoundExpression right, bool isUsed) 40var lhsEffects = ArrayBuilder<BoundExpression>.GetInstance(); 43BoundExpression? result = RewriteDeconstruction(lhsTargets, conversion, left.Type, right, isUsed); 55private BoundExpression? RewriteDeconstruction( 59BoundExpression right, 79BoundExpression? returnValue = ApplyDeconstructionConversion(lhsTargets, right, conversion, temps, effects, isUsed, inInit: true); 88var last = effects.PopLast(); 210private BoundExpression? ApplyDeconstructionConversion( 212BoundExpression right, 220ImmutableArray<BoundExpression> rightParts = GetRightParts(right, conversion, temps, effects, ref inInit); 222ImmutableArray<(BoundValuePlaceholder?, BoundExpression?)> deconstructConversionInfo = conversion.DeconstructConversionInfo; 226var builder = isUsed ? ArrayBuilder<BoundExpression>.GetInstance(leftTargets.Count) : null; 229BoundExpression? resultPart; 241var rightPart = rightParts[i]; 246BoundExpression? leftTarget = leftTargets[i].Single; 277private ImmutableArray<BoundExpression> GetRightParts(BoundExpression right, Conversion conversion, 287BoundExpression evaluationResult = EvaluateSideEffectingArgumentToTemp(right, 334private ImmutableArray<BoundExpression> AccessTupleFields(BoundExpression expression, ArrayBuilder<LocalSymbol> temps, 335ArrayBuilder<BoundExpression> effects) 345BoundExpression tuple; 361var builder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 364var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(tuple, expression.Syntax, fields[i]); 370private BoundExpression EvaluateConversionToTemp(BoundExpression expression, BoundValuePlaceholder placeholder, BoundExpression conversion, 371ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 381private ImmutableArray<BoundExpression> InvokeDeconstructMethod(DeconstructMethodInfo deconstruction, BoundExpression target, 382ArrayBuilder<BoundExpression> effects, ArrayBuilder<LocalSymbol> temps) 387var outLocals = ArrayBuilder<BoundExpression>.GetInstance(outputPlaceholders.Length); 418private BoundExpression EvaluateSideEffectingArgumentToTemp( 419BoundExpression arg, 420ArrayBuilder<BoundExpression> effects, 423var loweredArg = VisitExpression(arg); 443private ArrayBuilder<Binder.DeconstructionVariable> GetAssignmentTargetsAndSideEffects(BoundTupleExpression variables, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 447foreach (var variable in variables.Arguments) 463var temp = this.TransformCompoundAssignmentLHS(variable, 475internal ArrayBuilder<BoundExpression> init = null!; 476internal ArrayBuilder<BoundExpression> deconstructions = null!; 477internal ArrayBuilder<BoundExpression> conversions = null!; 478internal ArrayBuilder<BoundExpression> assignments = null!; 483result.init = ArrayBuilder<BoundExpression>.GetInstance(); 484result.deconstructions = ArrayBuilder<BoundExpression>.GetInstance(); 485result.conversions = ArrayBuilder<BoundExpression>.GetInstance(); 486result.assignments = ArrayBuilder<BoundExpression>.GetInstance(); 502internal BoundExpression? PopLast() 509var last = init.Last(); 515internal ImmutableArray<BoundExpression> ToImmutableAndFree()
Lowering\LocalRewriter\LocalRewriter_DelegateCreationExpression.cs (3)
20var loweredArgument = VisitExpression(node.Argument); 23var loweredReceiver = _dynamicFactory.MakeDynamicConversion(loweredArgument, isExplicit: false, isArrayIndex: false, isChecked: false, resultType: node.Type).ToExpression(); 35var receiver = (!method.RequiresInstanceReceiver && !node.IsExtensionMethod && !method.IsAbstract && !method.IsVirtual) ? _factory.Type(method.ContainingType) : VisitExpression(mg.ReceiverOpt)!;
Lowering\LocalRewriter\LocalRewriter_DoStatement.cs (1)
19var rewrittenCondition = VisitExpression(node.Condition);
Lowering\LocalRewriter\LocalRewriter_Event.cs (29)
21BoundExpression? rewrittenReceiverOpt = VisitExpression(node.ReceiverOpt); 22BoundExpression rewrittenArgument = VisitExpression(node.Argument); 54var rewrittenArguments = ImmutableArray.Create<BoundExpression>(rewrittenArgument); 87private BoundExpression RewriteWindowsRuntimeEventAssignmentOperator(SyntaxNode syntax, EventSymbol eventSymbol, EventAssignmentKind kind, BoundExpression? rewrittenReceiverOpt, BoundExpression rewrittenArgument) 104BoundExpression delegateCreationArgument = boundTemp ?? rewrittenReceiverOpt ?? _factory.Type(eventType); 114BoundExpression? clearCall = null; 124rewrittenArguments: ImmutableArray.Create<BoundExpression>(removeDelegate)); 128clearCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(removeDelegate), ErrorTypeSymbol.UnknownResultType); 132ImmutableArray<BoundExpression> marshalArguments; 137marshalArguments = ImmutableArray.Create<BoundExpression>(removeDelegate, rewrittenArgument); 152marshalArguments = ImmutableArray.Create<BoundExpression>(addDelegate, removeDelegate, rewrittenArgument); 155BoundExpression marshalCall; 183ArrayBuilder<BoundExpression> sideEffects = ArrayBuilder<BoundExpression>.GetInstance(2); //max size 191private BoundExpression VisitWindowsRuntimeEventFieldAssignmentOperator(SyntaxNode syntax, BoundEventAccess left, BoundExpression rewrittenRight) 199BoundExpression? rewrittenReceiverOpt = VisitExpression(left.ReceiverOpt); 215BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 219private BoundExpression MakeEventAccess( 221BoundExpression? rewrittenReceiver, 248BoundExpression getOrCreateCall; 265getOrCreateCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(fieldAccess), ErrorTypeSymbol.UnknownResultType); 290private BoundExpression RewriteNoPiaEventAssignmentOperator(BoundEventAssignmentOperator node, BoundExpression rewrittenReceiver, BoundExpression rewrittenArgument) 296BoundExpression? result = null; 310BoundExpression eventInfo = _factory.New(ctor, _factory.Typeof(node.Event.ContainingType, ctor.Parameters[0].Type), _factory.Literal(node.Event.MetadataName));
Lowering\LocalRewriter\LocalRewriter_ExpressionStatement.cs (3)
23var loweredExpression = VisitUnusedExpression(node.Expression); 41private BoundExpression? VisitUnusedExpression(BoundExpression expression)
Lowering\LocalRewriter\LocalRewriter_Field.cs (8)
13BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 17private BoundExpression MakeFieldAccess( 19BoundExpression? rewrittenReceiver, 31BoundExpression result = oldNodeOpt != null ? 50private BoundExpression MakeTupleFieldAccess( 53BoundExpression? rewrittenReceiver) 98private BoundExpression MakeTupleFieldAccessAndReportUseSiteDiagnostics(BoundExpression tuple, SyntaxNode syntax, FieldSymbol field)
Lowering\LocalRewriter\LocalRewriter_FixedStatement.cs (29)
199BoundExpression? initializer = localDecl.InitializerOpt; 240BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 281var pointerValue = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr); 307BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 329BoundExpression callReceiver; 365var tempAssignment = factory.AssignmentExpression( 377var pointerValue = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr); 380BoundExpression pinAndGetPtr = factory.Sequence( 382sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 404sideEffects: ImmutableArray.Create<BoundExpression>(nullableTempAssignment), 444BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 465var addr = factory.Convert( 470var convertedStringTemp = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr); 475BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, factory.Local(localSymbol), BinaryOperatorKind.NotEqual); 476BoundExpression helperCall; 485helperCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 488BoundExpression addition = factory.Binary(BinaryOperatorKind.PointerAndIntAddition, localType, factory.Local(localSymbol), helperCall); 513BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 526BoundExpression arrayTempInit = factory.AssignmentExpression(factory.Local(pinnedTemp), initializerExpr); 529BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, arrayTempInit, BinaryOperatorKind.NotEqual); 531BoundExpression lengthCall; 546lengthCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(factory.Local(pinnedTemp)), ErrorTypeSymbol.UnknownResultType); 552BoundExpression lengthCheck = factory.Binary(BinaryOperatorKind.IntNotEqual, factory.SpecialType(SpecialType.System_Boolean), lengthCall, factory.Literal(0)); 555BoundExpression condition = factory.Binary(BinaryOperatorKind.LogicalBoolAnd, factory.SpecialType(SpecialType.System_Boolean), notNullCheck, lengthCheck); 558BoundExpression firstElement = factory.ArrayAccessFirstElement(factory.Local(pinnedTemp)); 562BoundExpression firstElementAddress = new BoundAddressOfOperator(factory.Syntax, firstElement, type: new PointerTypeSymbol(arrayElementType)); 563BoundExpression convertedFirstElementAddress = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, firstElementAddress); 566BoundExpression consequenceAssignment = factory.AssignmentExpression(factory.Local(localSymbol), convertedFirstElementAddress); 569BoundExpression alternativeAssignment = factory.AssignmentExpression(factory.Local(localSymbol), factory.Null(localType));
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (52)
42BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 145BoundExpression? elementConversion, 155BoundExpression rewrittenExpression = VisitExpression(convertedCollection.Operand); 166var receiver = ConvertReceiverForInvocation(forEachSyntax, rewrittenExpression, getEnumeratorInfo.Method, convertedCollection.Conversion, enumeratorInfo.CollectionType); 167BoundExpression? firstRewrittenArgument = null; 173var builder = ArrayBuilder<BoundExpression>.GetInstance(getEnumeratorInfo.Arguments.Length); 187BoundExpression enumeratorVarInitValue = MakeCall(getEnumeratorInfo, forEachSyntax, receiver, 196BoundExpression iterationVarAssignValue = ApplyConversionIfNotIdentity( 221BoundExpression rewrittenCondition = MakeCall( 361BoundExpression receiver; 362BoundExpression disposeCall; 438BoundExpression disposableVarInitValue = new BoundAsOperator(forEachSyntax, 449BoundExpression disposeCall = BoundCall.Synthesized(syntax: forEachSyntax, receiverOpt: boundDisposableVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method: disposeMethod); 479private BoundStatement WrapWithAwait(SyntaxNode forEachSyntax, BoundExpression disposeCall, BoundAwaitableInfo disposeAwaitableInfoOpt) 483var awaitExpr = RewriteAwaitExpression(forEachSyntax, disposeCall, disposeAwaitableInfoOpt, awaitExpressionType, debugInfo, used: false); 499private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method, Conversion receiverConversion, TypeSymbol convertedReceiverType) 561BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 590BoundExpression collectionExpression, 593BoundExpression? elementConversion, 606BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 640BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 654BoundExpression arrayLength = getLength(this, forEachSyntax, boundArrayVar, arg); 657BoundExpression exitCondition = new BoundBinaryOperator( 698private delegate BoundStatement? GetForEachStatementAsForPreamble(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind); 699private delegate BoundExpression GetForEachStatementAsForItem<TArg>(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, BoundLocal boundArrayVar, BoundLocal boundPositionVar, TArg arg); 700private delegate BoundExpression GetForEachStatementAsForLength<TArg>(LocalRewriter rewriter, SyntaxNode syntax, BoundLocal boundArrayVar, TArg arg); 737return static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind) => 788BoundExpression arrayLength = rewriter._factory.Literal(length); 804BoundExpression iterationVarValue) 820BoundExpression loweredAssignment = VisitExpression(assignment); 867BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 887BoundExpression collectionExpression, 889BoundExpression? elementConversion, 901BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 929BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 935indices: ImmutableArray.Create<BoundExpression>(boundPositionVar), 947BoundExpression arrayLength = new BoundArrayLength( 953BoundExpression exitCondition = new BoundBinaryOperator( 1016BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 1036BoundExpression collectionExpression, 1038BoundExpression? elementConversion, 1061BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 1087ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create( 1093BoundExpression currentDimensionUpperBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getUpperBoundMethod, dimensionArgument); 1109BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 1114indices: ImmutableArray.Create((BoundExpression[])boundPositionVar), 1141ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create( 1147BoundExpression currentDimensionLowerBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getLowerBoundMethod, dimensionArgument); 1157BoundExpression exitCondition = new BoundBinaryOperator( 1216private static BoundExpression GetUnconvertedCollectionExpression(BoundForEachStatement node, out Conversion collectionConversion) 1231private BoundStatement MakeLocalDeclaration(CSharpSyntaxNode syntax, LocalSymbol local, BoundExpression rewrittenInitialValue)
Lowering\LocalRewriter\LocalRewriter_ForStatement.cs (3)
20var rewrittenCondition = VisitExpression(node.Condition); 44BoundExpression? rewrittenCondition, 175BoundExpression? rewrittenCondition,
Lowering\LocalRewriter\LocalRewriter_FunctionPointerInvocation.cs (4)
16var rewrittenExpression = VisitExpression(node.InvokedExpression); 24BoundExpression? discardedReceiver = null; 52BoundExpression rewrittenInvocation = node.Update(rewrittenExpression, rewrittenArgs, argumentRefKindsOpt, node.ResultKind, node.Type); 60rewrittenInvocation = new BoundSequence(rewrittenInvocation.Syntax, temps.ToImmutableAndFree(), sideEffects: ImmutableArray<BoundExpression>.Empty, rewrittenInvocation, node.Type);
Lowering\LocalRewriter\LocalRewriter_GotoStatement.cs (1)
18BoundExpression? caseExpressionOpt = null;
Lowering\LocalRewriter\LocalRewriter_IfStatement.cs (2)
23var rewrittenCondition = VisitExpression(node.Condition); 121BoundExpression rewrittenCondition,
Lowering\LocalRewriter\LocalRewriter_Index.cs (12)
18BoundExpression fromEnd = MakeLiteral(node.Syntax, ConstantValue.Create(true), booleanType); 20BoundExpression operand = VisitExpression(node.Operand); 34ArrayBuilder<BoundExpression> sideeffects = ArrayBuilder<BoundExpression>.GetInstance(); 39BoundExpression condition = MakeOptimizedHasValue(operand.Syntax, operand); 42BoundExpression boundOperandGetValueOrDefault = MakeOptimizedGetValueOrDefault(operand.Syntax, operand); 43BoundExpression indexCreation = new BoundObjectCreationExpression(node.Syntax, node.MethodOpt, boundOperandGetValueOrDefault, fromEnd); 46BoundExpression consequence = ConvertToNullable(node.Syntax, node.Type, indexCreation); 49BoundExpression alternative = new BoundDefaultExpression(node.Syntax, node.Type); 52BoundExpression conditionalExpression = RewriteConditionalOperator( 69private BoundExpression ConvertToNullable(SyntaxNode syntax, TypeSymbol targetNullableType, BoundExpression underlyingValue)
Lowering\LocalRewriter\LocalRewriter_IndexerAccess.cs (83)
16private BoundExpression MakeDynamicIndexerAccessReceiver(BoundDynamicIndexerAccess indexerAccess, BoundExpression loweredReceiver) 18BoundExpression result; 41var loweredReceiver = VisitExpression(node.Receiver); 49private BoundExpression MakeDynamicGetIndex( 51BoundExpression loweredReceiver, 52ImmutableArray<BoundExpression> loweredArguments, 76private BoundExpression VisitIndexerAccess(BoundIndexerAccess node, bool isLeftOfAssignment) 84BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 101private BoundExpression MakeIndexerAccess( 103BoundExpression rewrittenReceiver, 105ImmutableArray<BoundExpression> arguments, 111BoundExpression oldNode, 163ArrayBuilder<BoundExpression>? storesOpt = null; 175storesOpt = ArrayBuilder<BoundExpression>.GetInstance(); 179BoundExpression? rewrittenReceiverBeforePossibleCapture = rewrittenReceiver; 181ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 216BoundExpression call = MakePropertyGetAccess(syntax, rewrittenReceiver, indexer, rewrittenArguments, argumentRefKindsOpt, getMethod); 245var rewrittenReceiver = VisitExpression(node.Expression); 257BoundExpression result; 270BoundExpression makeOffsetInput = DetermineMakePatternIndexOffsetExpressionStrategy(node.Argument, out PatternIndexOffsetLoweringStrategy strategy); 271BoundExpression integerArgument = makePatternIndexOffsetExpression(makeOffsetInput, length, strategy); 286BoundExpression? startMakeOffsetInput, endMakeOffsetInput, rewrittenRangeArg; 291var sideEffectsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 293BoundExpression startExpr; 294BoundExpression rangeSizeExpr; 299BoundExpression endExpr = makePatternIndexOffsetExpression(endMakeOffsetInput, length, endStrategy); 308BoundExpression possiblyRefCapturedReceiver = rewrittenReceiver; 337ImmutableArray.Create((BoundExpression)receiverStore), 343BoundExpression makePatternIndexOffsetExpression(BoundExpression? makeOffsetInput, int length, PatternIndexOffsetLoweringStrategy strategy) 345BoundExpression integerArgument; 377BoundExpression getElementRef(BoundInlineArrayAccess node, BoundExpression rewrittenReceiver, BoundExpression index, MethodSymbol getItemOrSliceHelper, int length) 472private BoundExpression VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment) 493private BoundExpression VisitIndexPatternIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment) 496var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(2); 498BoundExpression rewrittenIndexerAccess = GetUnderlyingIndexerOrSliceAccess( 510private BoundExpression GetUnderlyingIndexerOrSliceAccess( 515ArrayBuilder<BoundExpression> sideeffects, 527BoundExpression makeOffsetInput = DetermineMakePatternIndexOffsetExpressionStrategy(node.Argument, out PatternIndexOffsetLoweringStrategy strategy); 529var receiver = VisitExpression(node.Receiver); 570BoundExpression integerArgument; 575BoundExpression lengthAccess = VisitExpression(node.LengthOrCountAccess); 604BoundExpression rewrittenIndexerAccess; 616ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 662rewrittenIndexerAccess = (BoundExpression)VisitArrayAccess((BoundArrayAccess)node.IndexerOrSliceAccess); 682private BoundExpression MakePatternIndexOffsetExpression( 683BoundExpression? loweredExpr, 684BoundExpression? lengthAccess, 745private BoundExpression DetermineMakePatternIndexOffsetExpressionStrategy( 746BoundExpression unloweredExpr, 795private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node) 799var sideEffectsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 801var rewrittenIndexerAccess = VisitRangePatternIndexerAccess(node, localsBuilder, sideEffectsBuilder, cacheAllArgumentsOnly: false); 809private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, bool cacheAllArgumentsOnly) 829var receiver = VisitExpression(node.Receiver); 830var rangeArg = node.Argument; 833BoundExpression? startMakeOffsetInput, endMakeOffsetInput, rewrittenRangeArg; 855var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(2); 891BoundExpression startExpr; 892BoundExpression rangeSizeExpr; 983BoundExpression? lengthAccess = null; 1000BoundExpression endExpr = MakePatternIndexOffsetExpression(endMakeOffsetInput, lengthAccess, endStrategy); 1027var rewrittenIndexerAccess = VisitExpression(sliceCall); 1036private BoundExpression MakeRangeSize(ref BoundExpression startExpr, BoundExpression endExpr, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder) 1040BoundExpression rangeSizeExpr; 1067private void DeconstructRange(BoundExpression rewrittenRangeArg, BoundExpression lengthAccess, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, out BoundExpression startExpr, out BoundExpression rangeSizeExpr) 1108private void RewriteRangeParts(BoundExpression rangeArg, out BoundRangeExpression? rangeExpr, out BoundExpression? startMakeOffsetInput, out PatternIndexOffsetLoweringStrategy startStrategy, out BoundExpression? endMakeOffsetInput, out PatternIndexOffsetLoweringStrategy endStrategy, out BoundExpression? rewrittenRangeArg) 1131if (rangeExpr.LeftOperandOpt is BoundExpression left) 1141if (rangeExpr.RightOperandOpt is BoundExpression right)
Lowering\LocalRewriter\LocalRewriter_IsOperator.cs (7)
18BoundExpression rewrittenOperand = VisitExpression(node.Operand); 25private BoundExpression MakeIsOperator( 28BoundExpression rewrittenOperand, 36BoundExpression? receiver = methodGroup.ReceiverOpt; 80private BoundExpression RewriteConstantIsOperator( 82BoundExpression loweredOperand, 92sideEffects: ImmutableArray.Create<BoundExpression>(loweredOperand),
Lowering\LocalRewriter\LocalRewriter_IsPatternOperator.cs (20)
19BoundExpression result; 109internal BoundExpression LowerGeneralIsPattern(BoundIsPatternExpression node, BoundDecisionDag decisionDag) 113var inputExpression = _localRewriter.VisitExpression(node.Expression); 149private readonly ArrayBuilder<BoundExpression> _sideEffectBuilder; 156private readonly ArrayBuilder<BoundExpression> _conjunctBuilder; 161_conjunctBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 162_sideEffectBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 172private void AddConjunct(BoundExpression test) 198var sideEffect = LowerEvaluation(eval); 204var testExpression = LowerTest(test); 218public BoundExpression LowerIsPatternAsLinearTestSequence( 224BoundExpression loweredInput = _localRewriter.VisitExpression(isPatternExpression.Expression); 237private BoundExpression ProduceLinearTestSequence( 257TryLowerTypeTestAndCast(testNode.Test, e.Evaluation, out BoundExpression? sideEffect, out BoundExpression? testExpression)) 287BoundExpression left = _localRewriter.VisitExpression(binding.VariableAccess); 288BoundExpression right = _tempAllocator.GetTemp(binding.TempContainingValue); 308BoundExpression? result = null; 309foreach (BoundExpression conjunct in _conjunctBuilder) 319result = _factory.Sequence(allTemps, ImmutableArray<BoundExpression>.Empty, result);
Lowering\LocalRewriter\LocalRewriter_Literal.cs (5)
23private BoundExpression MakeLiteral(SyntaxNode syntax, ConstantValue constantValue, TypeSymbol? type, BoundLiteral? oldNodeOpt = null) 51private BoundExpression MakeDecimalLiteral(SyntaxNode syntax, ConstantValue constantValue) 62var arguments = new ArrayBuilder<BoundExpression>(); 142private BoundExpression MakeDateTimeLiteral(SyntaxNode syntax, ConstantValue constantValue) 147var arguments = new ArrayBuilder<BoundExpression>();
Lowering\LocalRewriter\LocalRewriter_LocalDeclaration.cs (1)
19private BoundStatement? RewriteLocalDeclaration(BoundLocalDeclaration? originalOpt, SyntaxNode syntax, LocalSymbol localSymbol, BoundExpression? rewrittenInitializer, bool hasErrors = false)
Lowering\LocalRewriter\LocalRewriter_LockStatement.cs (5)
26BoundExpression rewrittenArgument = VisitExpression(node.Argument); 103BoundExpression exitCallExpr; 117exitCallExpr = new BoundBadExpression(lockSyntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(boundLockTemp), ErrorTypeSymbol.UnknownResultType); 197BoundExpression enterCallExpr; 212enterCallExpr = new BoundBadExpression(lockSyntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(boundLockTemp), ErrorTypeSymbol.UnknownResultType);
Lowering\LocalRewriter\LocalRewriter_NullCoalescingAssignmentOperator.cs (13)
19var stores = ArrayBuilder<BoundExpression>.GetInstance(); 23BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.LeftOperand, stores, temps, node.LeftOperand.HasDynamicType()); 25var lhsRead = MakeRValue(transformedLHS); 26BoundExpression loweredRight = VisitExpression(node.RightOperand); 32BoundExpression rewriteNullCoalscingAssignmentStandard() 42BoundExpression assignment; 59BoundExpression conditionalExpression = MakeNullCoalescingOperator(syntax, lhsRead, assignment, leftPlaceholder: leftPlaceholder, leftConversion: leftPlaceholder, BoundNullCoalescingOperatorResultKind.LeftType, node.LeftOperand.Type); 74BoundExpression rewriteNullCoalescingAssignmentForValueType() 83var leftOperand = node.LeftOperand; 123var tmpAssignment = MakeAssignmentOperator(node.Syntax, tmp, loweredRight, used: true, isChecked: false, AssignmentKind.SimpleAssignment); 129var transformedLhsAssignment = 142var alternative = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create(tmpAssignment, transformedLhsAssignment), tmp); 145var ternary = _factory.Conditional(lhsReadHasValue, tmp, alternative, tmp.Type);
Lowering\LocalRewriter\LocalRewriter_NullCoalescingOperator.cs (19)
15BoundExpression rewrittenLeft = VisitExpression(node.LeftOperand); 16BoundExpression rewrittenRight = VisitExpression(node.RightOperand); 22private BoundExpression MakeNullCoalescingOperator( 24BoundExpression rewrittenLeft, 25BoundExpression rewrittenRight, 27BoundExpression? leftConversion, 105var notNullAccess = NullableAlwaysHasValue(conditionalAccess.WhenNotNull); 108BoundExpression? whenNullOpt = rewrittenRight; 136var unwrappedRight = RemoveIdentityConversions(rewrittenRight); 163BoundExpression nullCheck = _factory.MakeNullCheck(syntax, boundTemp, BinaryOperatorKind.NotEqual); 166BoundExpression convertedLeft = GetConvertedLeftForNullCoalescingOperator(boundTemp, leftPlaceholder, leftConversion, rewrittenResultType); 170BoundExpression conditionalExpression = RewriteConditionalOperator( 185sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 190private bool IsStringConcat(BoundExpression expression) 219private static BoundExpression RemoveIdentityConversions(BoundExpression expression) 235private BoundExpression GetConvertedLeftForNullCoalescingOperator(BoundExpression rewrittenLeft, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, TypeSymbol rewrittenResultType)
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (35)
21var constructorInvocation = _dynamicFactory.MakeDynamicConstructorInvocation(node.Syntax, node.Type, loweredArguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt).ToExpression(); 41BoundExpression? receiverDiscard = null; 45ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 67BoundExpression rewrittenObjectCreation; 90BoundExpression? receiver = null; 107ImmutableArray<BoundExpression>.Empty, 134BoundExpression receiver = withExpr.Receiver; 160BoundExpression rewrittenReceiver = VisitExpression(receiver); 165var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 171BoundExpression value = _factory.New(anonymousType, getAnonymousTypeValues(withExpr, oldValue, anonymousType, sideEffects, temps)); 176BoundExpression expression; 199ImmutableArray<BoundExpression> getAnonymousTypeValues(BoundWithExpression withExpr, BoundExpression oldValue, AnonymousTypeManager.AnonymousTypePublicSymbol anonymousType, 200ArrayBuilder<BoundExpression> sideEffects, ArrayBuilder<LocalSymbol> temps) 203var valueTemps = ArrayBuilder<BoundExpression?>.GetInstance(anonymousType.Properties.Length, fillWithValue: null); 205foreach (BoundExpression initializer in withExpr.InitializerExpression.Initializers) 212var rewrittenRight = VisitExpression(assignment.Right); 222var builder = ArrayBuilder<BoundExpression>.GetInstance(anonymousType.Properties.Length); 225if (valueTemps[property.MemberIndexOpt!.Value] is BoundExpression initializerValue) 255private BoundExpression MakeExpressionWithInitializer( 257BoundExpression rewrittenExpression, 258BoundExpression initializerExpression, 269ArrayBuilder<BoundExpression>? dynamicSiteInitializers = null; 271ArrayBuilder<BoundExpression>? loweredInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 276var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(1 + dynamicSiteCount + loweredInitializers.Count); 314var rewrittenNewT = MakeNewT(node.Syntax, (TypeParameterSymbol)node.Type); 323private BoundExpression MakeNewT(SyntaxNode syntax, TypeParameterSymbol typeParameter) 350ImmutableArray<BoundExpression>.Empty, 380BoundExpression newGuid; 389newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 399BoundExpression callGetTypeFromCLSID; 407callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 411BoundExpression rewrittenObjectCreation; 419rewrittenObjectCreation = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, node.Type);
Lowering\LocalRewriter\LocalRewriter_ObjectOrCollectionInitializerExpression.cs (68)
18private static BoundObjectInitializerExpressionBase UpdateInitializers(BoundObjectInitializerExpressionBase initializerExpression, ImmutableArray<BoundExpression> newInitializers) 32ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers, 34ArrayBuilder<BoundExpression> result, 35BoundExpression rewrittenReceiver, 36BoundExpression initializerExpression) 66private ImmutableArray<BoundExpression> MakeObjectOrCollectionInitializersForExpressionTree(BoundExpression initializerExpression) 76var result = ArrayBuilder<BoundExpression>.GetInstance(); 84void addCollectionInitializersForExpressionTree(ArrayBuilder<BoundExpression> result, ImmutableArray<BoundExpression> initializers) 86foreach (var initializer in initializers) 127private void AddCollectionInitializers(ArrayBuilder<BoundExpression> result, BoundExpression rewrittenReceiver, ImmutableArray<BoundExpression> initializers) 131foreach (var initializer in initializers) 136BoundExpression? rewrittenInitializer; 157private BoundExpression MakeDynamicCollectionInitializer(BoundExpression rewrittenReceiver, BoundDynamicCollectionElementInitializer initializer) 179private BoundExpression? MakeCollectionInitializer(BoundCollectionElementInitializer initializer) 200BoundExpression? rewrittenReceiver = VisitExpression(initializer.ImplicitReceiverOpt); 215ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 245private BoundExpression VisitObjectInitializerMember(BoundObjectInitializerMember node, ref BoundExpression rewrittenReceiver, ArrayBuilder<BoundExpression> sideEffects, ref ArrayBuilder<LocalSymbol>? temps) 249return (BoundExpression)base.VisitObjectInitializerMember(node)!; 252var originalReceiver = rewrittenReceiver; 283ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers, 285ArrayBuilder<BoundExpression> result, 286BoundExpression rewrittenReceiver, 287ImmutableArray<BoundExpression> initializers) 291foreach (var initializer in initializers) 303ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers, 305ArrayBuilder<BoundExpression> result, 306BoundExpression rewrittenReceiver, 312BoundExpression left = assignment.Left; 313BoundExpression right = assignment.Right; 324BoundExpression rewrittenAccess; 364dynamicSiteInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 369var rewrittenRight = VisitExpression(right); 399var rewrittenRight = VisitExpression(right); 414dynamicSiteInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 419var rewrittenRight = VisitExpression(right); 453var rangeArgument = getSubArrayCall.Arguments[1]; 471var rewrittenRight = VisitExpression(right); 483var rewrittenIndex = VisitExpression(pointerAccess.Index); 504var rewrittenRight = VisitExpression(right); 538var rewrittenRight = VisitExpression(right); 568void addIndexes(ArrayBuilder<BoundExpression> result, BoundAssignmentOperator assignment) 571var lhs = assignment.Left; 574foreach (var argument in initializerMember.Arguments) 579foreach (var element in initializers.Initializers) 596foreach (var index in arrayAccess.Indices) 613foreach (var initializer in ((BoundObjectInitializerExpression)assignment.Right).Initializers) 620private ImmutableArray<BoundExpression> EvaluateSideEffectingArgumentsToTemps( 621ImmutableArray<BoundExpression> args, 623ArrayBuilder<BoundExpression> sideeffects, 626ArrayBuilder<BoundExpression>? newArgs = null; 630var arg = args[i]; 632BoundExpression replacement; 638(LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg = (rewriter: this, sideeffects, temps); 641static (BoundExpression element, ref (LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg) => 655newArgs = ArrayBuilder<BoundExpression>.GetInstance(args.Length); 670private BoundExpression EvaluateSideEffects(BoundExpression arg, RefKind refKind, ArrayBuilder<BoundExpression> sideeffects, ref ArrayBuilder<LocalSymbol>? temps) 690private BoundExpression MakeObjectInitializerMemberAccess( 691BoundExpression rewrittenReceiver,
Lowering\LocalRewriter\LocalRewriter_PatternSwitchStatement.cs (2)
76var loweredSwitchGoverningExpression = _localRewriter.VisitExpression(node.Expression); 81var instrumentedExpression = _localRewriter.Instrumenter.InstrumentSwitchStatementExpression(node, loweredSwitchGoverningExpression, _factory);
Lowering\LocalRewriter\LocalRewriter_PointerElementAccess.cs (8)
14BoundExpression rewrittenExpression = LowerReceiverOfPointerElementAccess(node.Expression); 15BoundExpression rewrittenIndex = VisitExpression(node.Index); 20private BoundExpression LowerReceiverOfPointerElementAccess(BoundExpression receiver) 24var loweredFieldReceiver = VisitExpression(fieldAccess.ReceiverOpt); 32private BoundExpression RewritePointerElementAccess(BoundPointerElementAccess node, BoundExpression rewrittenExpression, BoundExpression rewrittenIndex)
Lowering\LocalRewriter\LocalRewriter_PropertyAccess.cs (10)
20private BoundExpression VisitPropertyAccess(BoundPropertyAccess node, bool isLeftOfAssignment) 22var rewrittenReceiverOpt = VisitExpression(node.ReceiverOpt); 26private BoundExpression MakePropertyAccess( 28BoundExpression? rewrittenReceiverOpt, 68private BoundExpression MakePropertyGetAccess(SyntaxNode syntax, BoundExpression? rewrittenReceiver, PropertySymbol property, BoundPropertyAccess? oldNodeOpt) 70return MakePropertyGetAccess(syntax, rewrittenReceiver, property, ImmutableArray<BoundExpression>.Empty, default, null, oldNodeOpt); 73private BoundExpression MakePropertyGetAccess( 75BoundExpression? rewrittenReceiver, 77ImmutableArray<BoundExpression> rewrittenArguments,
Lowering\LocalRewriter\LocalRewriter_Range.cs (25)
24var left = node.LeftOperandOpt; 30var right = node.RightOperandOpt; 42BoundExpression rangeCreation = MakeRangeExpression(node.MethodOpt, left, right); 52BoundExpression tryOptimizeOperand(BoundExpression operand) 77private BoundExpression LiftRangeExpression(BoundRangeExpression node, BoundExpression? left, BoundExpression? right) 84var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(); 88BoundExpression? condition = null; 91var rangeExpr = MakeRangeExpression(node.MethodOpt, left, right); 101BoundExpression consequence = new BoundObjectCreationExpression(node.Syntax, nullableCtor, rangeExpr); 104BoundExpression alternative = new BoundDefaultExpression(node.Syntax, node.Type); 109BoundExpression conditionalExpression = RewriteConditionalOperator( 125BoundExpression? getIndexFromPossibleNullable(BoundExpression? arg) 130BoundExpression tempOperand = CaptureExpressionInTempIfNeeded(arg, sideeffects, locals); 135BoundExpression operandHasValue = MakeOptimizedHasValue(tempOperand.Syntax, tempOperand); 156private BoundExpression MakeRangeExpression( 158BoundExpression? left, 159BoundExpression? right) 185var arg = left ?? right; 195return F.StaticCall(constructionMethod, ImmutableArray<BoundExpression>.Empty); 201BoundExpression newIndexZero(bool fromEnd) => 205ImmutableArray.Create<BoundExpression>(F.Literal(0), F.Literal(fromEnd)));
Lowering\LocalRewriter\LocalRewriter_StackAlloc.cs (12)
27var rewrittenCount = VisitExpression(stackAllocNode.Count); 47var stackSize = RewriteStackAllocCountToSize(rewrittenCount, elementType); 53var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 55var countTemp = CaptureExpressionInTempIfNeeded(rewrittenCount, sideEffects, locals, SynthesizedLocalKind.Spill); 56var stackSize = RewriteStackAllocCountToSize(countTemp, elementType); 60BoundExpression constructorCall; 71childBoundNodes: ImmutableArray<BoundExpression>.Empty, 97private BoundExpression RewriteStackAllocCountToSize(BoundExpression countExpression, TypeSymbol elementType) 117BoundExpression sizeOfExpression = _factory.Sizeof(elementType); 139BoundExpression convertedCount = _factory.Convert(uintType, countExpression, Conversion.ExplicitNumeric); 149BoundExpression product = _factory.Binary(multiplicationKind, uintPtrType, convertedCount, sizeOfExpression);
Lowering\LocalRewriter\LocalRewriter_StringConcat.cs (36)
23private BoundExpression VisitCompoundAssignmentStringConcatenation(BoundExpression left, BoundExpression unvisitedRight, BinaryOperatorKind operatorKind, SyntaxNode syntax) 28ArrayBuilder<BoundExpression> arguments; 36arguments = ArrayBuilder<BoundExpression>.GetInstance(); 46private BoundExpression VisitStringConcatenation(BoundBinaryOperator originalOperator) 72private BoundExpression CreateStringConcat(SyntaxNode originalSyntax, ArrayBuilder<BoundExpression> visitedArguments) 105foreach (var arg in visitedArguments) 139var arg = ConvertConcatExprToString(visitedArguments[0]); 190var array = _factory.ArrayOrEmpty(_factory.SpecialType(SpecialType.System_String), finalArguments); 205/// <see cref="CreateStringConcat(SyntaxNode, ArrayBuilder{BoundExpression})"/> and performs any optimizations on the arguments that can be done. This 208private void CollectAndVisitConcatArguments(BoundBinaryOperator originalOperator, BoundExpression? visitedCompoundAssignmentLeftRead, out ArrayBuilder<BoundExpression> destinationArguments) 211destinationArguments = ArrayBuilder<BoundExpression>.GetInstance(); 229static void pushArguments(LocalRewriter self, BoundBinaryOperator binaryOperator, ArrayBuilder<BoundExpression> arguments, ref WellKnownConcatRelatedMethods concatMethods) 253static bool shouldRecurse(BoundExpression expr, [NotNullWhen(true)] out BoundBinaryOperator? binaryOperator) 278private void VisitAndAddConcatArgumentInReverseOrder(BoundExpression argument, bool argumentAlreadyVisited, ArrayBuilder<BoundExpression> finalArguments, ref WellKnownConcatRelatedMethods wellKnownConcatOptimizationMethods) 301else if (wellKnownConcatOptimizationMethods.IsCharToString(call, out var charExpression)) 366public bool IsWellKnownConcatMethod(BoundCall call, out ImmutableArray<BoundExpression> arguments) 394public bool IsCharToString(BoundCall call, [NotNullWhen(true)] out BoundExpression? charExpression) 416private readonly bool IsConcatNonArray(BoundCall call, ref MethodSymbol? concatMethod, SpecialMember concatSpecialMember, out ImmutableArray<BoundExpression> arguments) 461private static BoundExpression RewriteStringConcatenationWithSpanBasedConcat( 467ArrayBuilder<BoundExpression> args) 473BoundExpression? arg = args[i]; 516var sequence = factory.Sequence( 529private BoundExpression RewriteStringConcatInExpressionLambda(BoundBinaryOperator original) 550BoundExpression currentResult = VisitExpression(stack.Peek().Left); 554var right = VisitExpression(current.Right); 574private BoundExpression ConvertConcatExprToString(BoundExpression expr) 687ImmutableArray.Create<BoundExpression>(store), 691BoundExpression makeConditionalAccess(BoundExpression receiver) 710static bool isFieldOfMarshalByRef(BoundExpression expr, CSharpCompilation compilation)
Lowering\LocalRewriter\LocalRewriter_StringInterpolation.cs (22)
16private BoundExpression RewriteInterpolatedStringConversion(BoundConversion conversion) 29private InterpolationHandlerResult RewriteToInterpolatedStringHandlerPattern(InterpolatedStringHandlerData data, ImmutableArray<BoundExpression> parts, SyntaxNode syntax) 65var handlerConstructionAssignment = _factory.AssignmentExpression(builderTemp, (BoundExpression)VisitObjectCreationExpression(construction)); 69var resultExpressions = ArrayBuilder<BoundExpression>.GetInstance(parts.Length + 1); 71foreach (var part in parts) 76resultExpressions.Add((BoundExpression)VisitCall(call)); 100BoundExpression? currentExpression = appendShouldProceedLocal; 104foreach (var appendCall in resultExpressions) 106var actualCall = appendCall; 165BoundExpression? result = null; 168var part = node.Parts[i]; 219private BoundExpression LowerPartsToString(InterpolatedStringHandlerData data, ImmutableArray<BoundExpression> parts, SyntaxNode syntax, TypeSymbol type) 226BoundExpression toStringAndClearCall = toStringAndClear is not null 228: new BoundBadExpression(syntax, LookupResultKind.Empty, symbols: ImmutableArray<Symbol?>.Empty, childBoundNodes: ImmutableArray<BoundExpression>.Empty, type); 234private static void AssertNoImplicitInterpolatedStringHandlerConversions(ImmutableArray<BoundExpression> arguments, bool allowConversionsWithNoContext = false) 238foreach (var arg in arguments) 258private readonly ImmutableArray<BoundExpression> _expressions; 273public InterpolationHandlerResult(ImmutableArray<BoundExpression> expressions, BoundLocal handlerTemp, LocalSymbol? outTemp, LocalRewriter rewriter) 282public BoundExpression WithFinalResult(BoundExpression result)
Lowering\LocalRewriter\LocalRewriter_SwitchExpression.cs (8)
35public static BoundExpression Rewrite(LocalRewriter localRewriter, BoundConvertedSwitchExpression node) 38BoundExpression result = rewriter.LowerSwitchExpression(node); 43private BoundExpression LowerSwitchExpression(BoundConvertedSwitchExpression node) 51var loweredSwitchGoverningExpression = _localRewriter.VisitExpression(node.Expression); 55loweredSwitchGoverningExpression, result, out BoundExpression savedInputExpression); 97var loweredValue = _localRewriter.VisitExpression(arm.Value); 148bool implicitConversionExists(BoundExpression expression, TypeSymbol type) 156private static BoundStatement ConstructThrowSwitchExpressionExceptionHelperCall(SyntheticBoundNodeFactory factory, BoundExpression unmatchedValue)
Lowering\LocalRewriter\LocalRewriter_TryStatement.cs (4)
85BoundExpression? rewrittenExceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 87BoundExpression? rewrittenFilter = (BoundExpression?)this.Visit(node.ExceptionFilterOpt);
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (75)
31var initEffects = ArrayBuilder<BoundExpression>.GetInstance(); 34BoundExpression newLeft = ReplaceTerminalElementsWithTemps(node.Left, node.Operators, initEffects, temps); 35BoundExpression newRight = ReplaceTerminalElementsWithTemps(node.Right, node.Operators, initEffects, temps); 37var returnValue = RewriteTupleNestedOperators(node.Operators, newLeft, newRight, boolType, temps, node.OperatorKind); 38BoundExpression result = _factory.Sequence(temps.ToImmutableAndFree(), initEffects.ToImmutableAndFree(), returnValue); 42private bool IsLikeTupleExpression(BoundExpression expr, [NotNullWhen(true)] out BoundTupleExpression? tuple) 64var builder = ArrayBuilder<BoundExpression>.GetInstance(tuple.Arguments.Length); 67var element = tuple.Arguments[i]; 98private BoundExpression PushDownImplicitTupleConversion( 99BoundExpression expr, 100ArrayBuilder<BoundExpression> initEffects, 112var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 113var savedTuple = DeferSideEffectingArgumentToTempForTupleEquality(LowerConversions(boundConversion.Operand), initEffects, temps); 119var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]); 138private BoundExpression ReplaceTerminalElementsWithTemps( 139BoundExpression expr, 141ArrayBuilder<BoundExpression> initEffects, 152var builder = ArrayBuilder<BoundExpression>.GetInstance(tuple.Arguments.Length); 155var argument = tuple.Arguments[i]; 156var newArgument = ReplaceTerminalElementsWithTemps(argument, multiple.Operators[i], initEffects, temps); 177/// That resulting expression must be passed through <see cref="LowerConversions(BoundExpression)"/> to 180private BoundExpression DeferSideEffectingArgumentToTempForTupleEquality( 181BoundExpression expr, 182ArrayBuilder<BoundExpression> effects, 202var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality(conv.Operand, effects, temps, conv.ExplicitCastInCode || enclosingConversionWasExplicit); 209var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality( 245private BoundExpression RewriteTupleOperator(TupleBinaryOperatorInfo @operator, 246BoundExpression left, BoundExpression right, TypeSymbol boolType, 266private BoundExpression RewriteTupleNestedOperators(TupleBinaryOperatorInfo.Multiple operators, BoundExpression left, BoundExpression right, 288var outerEffects = ArrayBuilder<BoundExpression>.GetInstance(); 289var innerEffects = ArrayBuilder<BoundExpression>.GetInstance(); 291BoundExpression leftHasValue, leftValue; 295BoundExpression rightHasValue, rightValue; 302BoundExpression logicalExpression = RewriteNonNullableNestedTupleOperators(operators, leftValue, rightValue, boolType, temps, operatorKind); 308BoundExpression innerSequence = _factory.Sequence(locals: ImmutableArray<LocalSymbol>.Empty, innerEffects.ToImmutableAndFree(), logicalExpression); 338BoundExpression outerSequence = 353private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects, 354ArrayBuilder<BoundExpression> outerEffects, bool saveHasValue, out BoundExpression hasValue, out BoundExpression value, out bool isNullable) 376if (NullableAlwaysHasValue(expr) is BoundExpression knownValue) 395BoundExpression makeNullableHasValue(BoundExpression expr) 416private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 427private BoundExpression MakeValueOrDefaultTemp( 428BoundExpression expr, 430ArrayBuilder<BoundExpression> effects) 442var operand = MakeValueOrDefaultTemp(o, temps, effects); 449var argumentBuilder = ArrayBuilder<BoundExpression>.GetInstance(tupleCardinality); 467BoundExpression valueOrDefaultCall = MakeOptimizedGetValueOrDefault(expr.Syntax, expr); 472BoundExpression MakeBoundConversion(BoundExpression expr, Conversion conversion, TypeWithAnnotations type, BoundConversion enclosing) 484private BoundExpression RewriteNonNullableNestedTupleOperators(TupleBinaryOperatorInfo.Multiple operators, 485BoundExpression left, BoundExpression right, TypeSymbol type, 490BoundExpression? currentResult = null; 493BoundExpression leftElement = GetTuplePart(left, i); 494BoundExpression rightElement = GetTuplePart(right, i); 495BoundExpression nextLogicalOperand = RewriteTupleOperator(nestedOperators[i], leftElement, rightElement, type, temps, operatorKind); 515private BoundExpression GetTuplePart(BoundExpression tuple, int i) 541private BoundExpression RewriteTupleSingleOperator(TupleBinaryOperatorInfo.Single single, 542BoundExpression left, BoundExpression right, TypeSymbol boolType, BinaryOperatorKind operatorKind) 555BoundExpression dynamicResult = _dynamicFactory.MakeDynamicBinaryOperator(single.Kind, left, right, isCompoundAssignment: false, _compilation.DynamicType).ToExpression(); 572BoundExpression binary = MakeBinaryOperator(_factory.Syntax, single.Kind, left, right, single.MethodSymbolOpt?.ReturnType ?? boolType, single.MethodSymbolOpt, single.ConstrainedToTypeOpt); 575BoundExpression result; 576BoundExpression convertedBinary = ApplyConversionIfNotIdentity(single.ConversionForBool, single.ConversionForBoolPlaceholder, binary); 606private BoundExpression LowerConversions(BoundExpression expr)
Lowering\LocalRewriter\LocalRewriter_TupleCreationExpression.cs (9)
27ImmutableArray<BoundExpression> rewrittenArguments = VisitList(node.Arguments); 37private BoundExpression RewriteTupleCreationExpression(BoundTupleExpression node, ImmutableArray<BoundExpression> rewrittenArguments) 43private BoundExpression MakeTupleCreationExpression(SyntaxNode syntax, NamedTypeSymbol type, ImmutableArray<BoundExpression> rewrittenArguments) 54ImmutableArray<BoundExpression> smallestCtorArguments = ImmutableArray.Create(rewrittenArguments, 69Binder.CheckRequiredMembersInObjectInitializer(smallestConstructor, initializers: ImmutableArray<BoundExpression>.Empty, syntax, _diagnostics); 83Binder.CheckRequiredMembersInObjectInitializer(tuple8Ctor, initializers: ImmutableArray<BoundExpression>.Empty, syntax, _diagnostics); 88ImmutableArray<BoundExpression> ctorArguments = ImmutableArray.Create(rewrittenArguments,
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (96)
59BoundExpression loweredOperand = VisitExpression(node.Operand); 63private BoundExpression MakeUnaryOperator( 68BoundExpression loweredOperand, 74private BoundExpression MakeUnaryOperator( 80BoundExpression loweredOperand, 140var newOperand = MakeConversionNode(loweredOperand, upconvertType, false); 179private BoundExpression LowerLiftedUnaryOperator( 184BoundExpression loweredOperand, 190BoundExpression? optimized = OptimizeLiftedUnaryOperator(kind, syntax, method, constrainedToTypeOpt, loweredOperand, type); 208BoundExpression condition = _factory.MakeNullableHasValue(syntax, boundTemp); 211BoundExpression call_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTemp, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefault); 214BoundExpression consequence = GetLiftedUnaryOperatorConsequence(kind, syntax, method, constrainedToTypeOpt, type, call_GetValueOrDefault); 217BoundExpression alternative = new BoundDefaultExpression(syntax, type); 222BoundExpression conditionalExpression = RewriteConditionalOperator( 238sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 243private BoundExpression? OptimizeLiftedUnaryOperator( 248BoundExpression loweredOperand, 260BoundExpression? neverNull = NullableAlwaysHasValue(loweredOperand); 276var result = LowerLiftedUnaryOperator(operatorKind, syntax, method, constrainedToTypeOpt, conditionalLeft!.WhenNotNull, type); 354private BoundExpression GetLiftedUnaryOperatorConsequence(UnaryOperatorKind kind, SyntaxNode syntax, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt, TypeSymbol type, BoundExpression nonNullOperand) 359BoundExpression unliftedOp = MakeUnaryOperator( 369BoundExpression consequence = new BoundObjectCreationExpression( 393private BoundExpression VisitIncrementOperator(BoundIncrementOperator node, bool used) 405private BoundExpression VisitInstanceIncrementOperator(BoundIncrementOperator node, bool used) 456private BoundExpression MakeInstanceCompoundAssignmentOperatorResult(SyntaxNode syntax, BoundExpression left, BoundExpression? rightOpt, MethodSymbol operatorMethod, bool isChecked, AssignmentKind assignmentKind) 462ArrayBuilder<BoundExpression> tempInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 466BoundExpression transformedLHS = TransformCompoundAssignmentLHS(left, tempInitializers, tempSymbols, isDynamicAssignment: false); 482BoundExpression assignBack = makeAssignmentBack(syntax, transformedLHS, boundTemp, isChecked, assignmentKind); 498BoundExpression assignBack = makeAssignmentBack(syntax, transformedLHS, boundTemp, isChecked, assignmentKind); 501var isNotClass = _factory.IsNotNullReference(_factory.Default(operandType)); 523static BoundCall makeIncrementCall(SyntaxNode syntax, BoundLocal boundTemp, BoundExpression? rightOpt, MethodSymbol operatorMethod) 528BoundExpression makeAssignmentBack(SyntaxNode syntax, BoundExpression transformedLHS, BoundLocal boundTemp, bool isChecked, AssignmentKind assignmentKind) 572public BoundExpression VisitBuiltInOrStaticIncrementOperator(BoundIncrementOperator node) 579ArrayBuilder<BoundExpression> tempInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 585BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.Operand, tempInitializers, tempSymbols, isDynamic); 594BoundExpression boundTemp = new BoundLocal( 602var newValue = makeBuiltInOrStaticIncrementOperator(node, rewrittenValueToIncrement: (isPrefix ? MakeRValue(transformedLHS) : boundTemp)); 632static bool isIndirectOrInstanceField(BoundExpression expression) 650BoundExpression rewriteWithNotRefOperand( 654ArrayBuilder<BoundExpression> tempInitializers, 656BoundExpression transformedLHS, 657BoundExpression boundTemp, 658BoundExpression newValue) 689BoundExpression rewriteWithRefOperand( 693ArrayBuilder<BoundExpression> tempInitializers, 695BoundExpression operand, 696BoundExpression boundTemp, 697BoundExpression newValue) 701var tempValue = isPrefix ? newValue : MakeRValue(operand); 703var tempAssignment = MakeAssignmentOperator(syntax, boundTemp, tempValue, used: false, isChecked: isChecked, AssignmentKind.SimpleAssignment); 705var operandValue = isPrefix ? boundTemp : newValue; 709ImmutableArray.Create<BoundExpression>(tempAssignment), 715BoundExpression operandAssignment = MakeAssignmentOperator(syntax, operand, tempAssignedAndOperandValue, used: false, isChecked: isChecked, AssignmentKind.IncrementDecrement); 728BoundExpression makeBuiltInOrStaticIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 735BoundExpression result; 754private BoundExpression ApplyConversionIfNotIdentity(BoundExpression? conversion, BoundValuePlaceholder? placeholder, BoundExpression replacement) 765static bool hasNonIdentityConversion([NotNullWhen(true)] BoundExpression? expression) 781private BoundExpression ApplyConversion(BoundExpression conversion, BoundValuePlaceholder placeholder, BoundExpression replacement) 789private BoundExpression MakeUserDefinedStaticIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 806BoundExpression rewrittenArgument = ApplyConversionIfNotIdentity(node.OperandConversion, node.OperandPlaceholder, rewrittenValueToIncrement); 834BoundExpression condition = _factory.MakeNullableHasValue(node.Syntax, boundTemp); 837BoundExpression call_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTemp, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefault); 840BoundExpression userDefinedCall = BoundCall.Synthesized( 848BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, userDefinedCall); 851BoundExpression alternative = new BoundDefaultExpression(syntax, type); 856BoundExpression conditionalExpression = RewriteConditionalOperator( 872sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 877private BoundExpression MakeBuiltInIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 879BoundExpression result; 906BoundExpression boundOne = MakeLiteral( 919BoundExpression binaryOperand = rewrittenValueToIncrement; 945BoundExpression binOp; 983private BoundExpression MakeDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand) 990private BoundExpression MakeLiftedDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand) 1000BoundExpression condition = _factory.MakeNullableHasValue(syntax, operand); 1002BoundExpression getValueCall = BoundCall.Synthesized(syntax, operand, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefault); 1004BoundExpression methodCall = BoundCall.Synthesized(syntax, receiverOpt: null, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method, getValueCall); 1006BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, methodCall); 1008BoundExpression alternative = new BoundDefaultExpression(syntax, operand.Type); 1019private BoundExpression MakeRValue(BoundExpression transformedExpression)
Lowering\LocalRewriter\LocalRewriter_UsingStatement.cs (12)
127BoundExpression rewrittenExpression = VisitExpression(node.ExpressionOpt); 168BoundExpression tempInit = MakeConversionNode( 244BoundExpression tempInit = MakeConversionNode( 358BoundExpression disposedExpression; 373BoundExpression disposeCall = GenerateDisposeCall(resourceTypeSyntax, resourceSyntax, disposedExpression, patternDisposeInfo, awaitOpt, awaitKeywordOpt); 378BoundExpression? ifCondition; 434private BoundExpression GenerateDisposeCall( 437BoundExpression disposedExpression, 460BoundExpression disposeCall; 492private BoundExpression MakeCall(MethodArgumentInfo methodArgumentInfo, SyntaxNode syntax, BoundExpression? expression, BoundExpression? firstRewrittenArgument)
Lowering\LocalRewriter\LocalRewriter_WhileStatement.cs (3)
20var rewrittenCondition = VisitExpression(node.Condition); 43BoundExpression rewrittenCondition, 109BoundExpression rewrittenCondition,
Lowering\LocalRewriter\LoweredDynamicOperation.cs (10)
26public readonly BoundExpression? SiteInitialization; 27public readonly BoundExpression SiteInvocation; 29public LoweredDynamicOperation(SyntheticBoundNodeFactory? factory, BoundExpression? siteInitialization, BoundExpression siteInvocation, TypeSymbol resultType, ImmutableArray<LocalSymbol> temps) 39BoundExpression? loweredReceiver, 40ImmutableArray<BoundExpression> loweredArguments, 41BoundExpression? loweredRight, 44var children = ArrayBuilder<BoundExpression>.GetInstance(); 52public static LoweredDynamicOperation Bad(TypeSymbol resultType, ImmutableArray<BoundExpression> children) 59public BoundExpression ToExpression()
Lowering\LocalRewriter\LoweredDynamicOperationFactory.cs (67)
74BoundExpression loweredOperand, 100var binderConstruction = MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__Convert, new[] 117BoundExpression loweredOperand, 133var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__UnaryOperation, new[] 153BoundExpression loweredLeft, 154BoundExpression loweredRight, 173var loweredArguments = ImmutableArray.Create<BoundExpression>(loweredLeft, loweredRight); 176var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__BinaryOperation, new[] 196BoundExpression loweredReceiver, 198ImmutableArray<BoundExpression> loweredArguments, 239var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeMember, new[] 264BoundExpression loweredReceiver, 265BoundExpression loweredHandler) 271var loweredArguments = ImmutableArray<BoundExpression>.Empty; 275var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeMember, new[] 297BoundExpression loweredReceiver, 298ImmutableArray<BoundExpression> loweredArguments, 318var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__Invoke, new[] 336ImmutableArray<BoundExpression> loweredArguments, 342var loweredReceiver = _factory.Typeof(type, _factory.WellKnownType(WellKnownType.System_Type)); 345var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeConstructor, new[] 361BoundExpression loweredReceiver, 373var loweredArguments = ImmutableArray<BoundExpression>.Empty; 377var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__GetMember, new[] 396BoundExpression loweredReceiver, 398BoundExpression loweredRight, 415var loweredArguments = ImmutableArray<BoundExpression>.Empty; 418var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__SetMember, new[] 437BoundExpression loweredReceiver, 438ImmutableArray<BoundExpression> loweredArguments, 447var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__GetIndex, new[] 463BoundExpression loweredReceiver, 464ImmutableArray<BoundExpression> loweredArguments, 467BoundExpression loweredRight, 486var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__SetIndex, new[] 501internal LoweredDynamicOperation MakeDynamicIsEventTest(string name, BoundExpression loweredReceiver) 505var binderConstruction = MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__IsEvent, new[] 517return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, ImmutableArray<BoundExpression>.Empty, default(ImmutableArray<RefKind>), null, resultType); 525private BoundExpression? MakeBinderConstruction(WellKnownMember factoryMethod, BoundExpression[] args) 543internal RefKind GetReceiverRefKind(BoundExpression loweredReceiver) 559internal BoundExpression MakeCallSiteArgumentInfos( 561ImmutableArray<BoundExpression> loweredArguments, 564BoundExpression? loweredReceiver = null, 567BoundExpression? loweredRight = null) 574var infos = new BoundExpression[(loweredReceiver != null ? 1 : 0) + loweredArguments.Length + (loweredRight != null ? 1 : 0)]; 600BoundExpression? binderConstruction, 601BoundExpression? loweredReceiver, 603ImmutableArray<BoundExpression> loweredArguments, 605BoundExpression? loweredRight, 650var nullCallSite = _factory.Null(callSiteField.Type); 652var siteInitialization = _factory.Conditional( 671private ImmutableArray<LocalSymbol> MakeTempsForDiscardArguments(ref ImmutableArray<BoundExpression> loweredArguments) 720BoundExpression? loweredReceiver, 722ImmutableArray<BoundExpression> loweredArguments, 724BoundExpression? loweredRight, 799private BoundExpression GetArgumentInfo( 801BoundExpression boundArgument, 874private static ImmutableArray<BoundExpression> GetCallSiteArguments(BoundExpression callSiteFieldAccess, BoundExpression? receiver, ImmutableArray<BoundExpression> arguments, BoundExpression? right) 876var result = new BoundExpression[1 + (receiver != null ? 1 : 0) + arguments.Length + (right != null ? 1 : 0)]; 897private TypeSymbol[] MakeCallSiteDelegateSignature(TypeSymbol callSiteType, BoundExpression? receiver, ImmutableArray<BoundExpression> arguments, BoundExpression? right, TypeSymbol resultType)
Lowering\MethodToClassRewriter.cs (22)
27protected abstract BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass); 92var rewrittenReceiver = (BoundExpression?)Visit(node.ReceiverOpt); 99var rewrittenReceiver = (BoundExpression?)this.Visit(node.ReceiverOpt); 100var rewrittenArguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments); 257BoundExpression originalLeft = node.Left; 266BoundExpression originalRight = node.Right; 285BoundExpression rewrittenLeft = (BoundExpression)this.Visit(leftLocal); 286BoundExpression rewrittenRight = (BoundExpression)this.Visit(originalRight); 312ImmutableArray.Create<BoundExpression>(tempAssignment), 329var receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 338BoundExpression originalArgument = node.Argument; 339BoundExpression rewrittenArgument = (BoundExpression)this.Visit(originalArgument); 355ImmutableArray<BoundExpression> arguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments); 375private static bool BaseReferenceInReceiverWasRewritten([NotNullWhen(true)] BoundExpression? originalReceiver, [NotNullWhen(true)] BoundExpression? rewrittenReceiver)
Lowering\SpillSequenceSpiller.cs (76)
39public readonly BoundExpression Value; 44public BoundSpillSequenceBuilder(SyntaxNode syntax, BoundExpression value = null) 82internal BoundSpillSequenceBuilder Update(BoundExpression value) 158internal void AddExpressions(ImmutableArray<BoundExpression> expressions) 160foreach (var expression in expressions) 244private BoundExpression VisitExpression(ref BoundSpillSequenceBuilder builder, BoundExpression expression) 246var e = (BoundExpression)this.Visit(expression); 265private static BoundExpression UpdateExpression(BoundSpillSequenceBuilder builder, BoundExpression expression) 302private BoundExpression Spill( 304BoundExpression expression, 370var left = Spill(builder, assignment.Left, RefKind.Ref); 371var right = Spill(builder, assignment.Right, RefKind.Ref); 419var receiver = Spill(builder, field.ReceiverOpt, fieldSymbol.ContainingType.IsValueType ? refKind : RefKind.None); 520BoundExpression spillInlineArrayHelperWithTwoArguments(BoundSpillSequenceBuilder builder, BoundCall call) 584private ImmutableArray<BoundExpression> VisitExpressionList( 586ImmutableArray<BoundExpression> args, 630var result = ArrayBuilder<BoundExpression>.GetInstance(newList.Length); 636var replacement = Spill(builder, newList[i], refKind, sideEffectsOnly); 667var expression = VisitExpression(ref builder, node.Expression); 674BoundExpression expression = VisitExpression(ref builder, node.ExpressionOpt); 681BoundExpression expr = VisitExpression(ref builder, node.Expression); 690var condition = VisitExpression(ref builder, node.Condition); 697var expression = VisitExpression(ref builder, node.ExpressionOpt); 704var expression = VisitExpression(ref builder, node.Expression); 711BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 721var exceptionFilterOpt = VisitExpression(ref builder, node.ExceptionFilterOpt); 756var expr = VisitExpression(ref builder, node.Expression); 769var value = VisitExpression(ref builder, node.Value); 776var expr = VisitExpression(ref builder, node.Operand); 790var expression = VisitExpression(ref builder, node.Expression); 820ImmutableArray<BoundExpression> bounds; 847BoundExpression count = VisitExpression(ref builder, node.Count); 855var expression = VisitExpression(ref builder, node.Expression); 862var operand = VisitExpression(ref builder, node.Operand); 871var right = VisitExpression(ref builder, node.Right); 873BoundExpression left = node.Left; 902var expression = VisitExpression(ref leftBuilder, arrayAccess.Expression); 928BoundExpression fieldWithSpilledReceiver(BoundFieldAccess field, ref BoundSpillSequenceBuilder leftBuilder, bool isAssignmentTarget) 934BoundExpression receiver; 949var expression = VisitExpression(ref leftBuilder, arrayAccess.Expression); 994var right = VisitExpression(ref builder, node.Right); 995BoundExpression left; 1032BoundExpression receiver = null; 1082private static RefKind ReceiverSpillRefKind(BoundExpression receiver) 1098BoundExpression invokedExpression; 1118var condition = VisitExpression(ref conditionBuilder, node.Condition); 1121var consequence = VisitExpression(ref consequenceBuilder, node.Consequence); 1124var alternative = VisitExpression(ref alternativeBuilder, node.Alternative); 1194var operand = VisitExpression(ref builder, node.Operand); 1203var expression = VisitExpression(ref builder, node.Expression); 1219var argument = VisitExpression(ref builder, node.Argument); 1226var receiver = VisitExpression(ref builder, node.ReceiverOpt); 1233var operand = VisitExpression(ref builder, node.Operand); 1240var operand = VisitExpression(ref builder, node.Operand); 1249var right = VisitExpression(ref builder, node.RightOperand); 1250BoundExpression left; 1279var receiver = VisitExpression(ref receiverBuilder, node.Receiver); 1282var whenNotNull = VisitExpression(ref whenNotNullBuilder, node.WhenNotNull); 1285var whenNullOpt = VisitExpression(ref whenNullBuilder, node.WhenNullOpt); 1296BoundExpression condition; 1321var isNotClass = _F.IsNotNullReference(_F.Default(receiver.Type)); 1365private readonly BoundExpression _receiver; 1373private ConditionalReceiverReplacer(BoundExpression receiver, int receiverId, int recursionDepth) 1380public static BoundStatement Replace(BoundNode node, BoundExpression receiver, int receiverID, int recursionDepth) 1434var index = VisitExpression(ref builder, node.Index); 1435BoundExpression expression; 1455var operand = VisitExpression(ref builder, node.Operand); 1462var value = VisitExpression(ref valueBuilder, node.Value); 1488BoundExpression operand = VisitExpression(ref builder, node.Expression); 1518BoundExpression operand = VisitExpression(ref builder, node.Operand); 1525BoundExpression operand = VisitExpression(ref builder, node.Operand); 1532BoundExpression expression = VisitExpression(ref builder, node.Expression);
Lowering\StateMachineRewriter\CapturedSymbol.cs (12)
26public abstract BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg); 39public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg) 41var frame = makeFrame(this.HoistedField.ContainingType, arg); 57public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg) 59var frame = makeFrame(this.HoistedField.ContainingType, arg); 68private readonly BoundExpression _replacement; 71public CapturedToExpressionSymbolReplacement(BoundExpression replacement, ImmutableArray<THoistedSymbolType> hoistedSymbols, bool isReusable) 78public override BoundExpression Replacement<TArg>(SyntaxNode node, Func<NamedTypeSymbol, TArg, BoundExpression> makeFrame, TArg arg)
Lowering\StateMachineRewriter\IteratorAndAsyncCaptureWalker.cs (5)
44private readonly Dictionary<LocalSymbol, BoundExpression> _boundRefLocalInitializers = new Dictionary<LocalSymbol, BoundExpression>(); 238if (_variablesToHoist.Add(variable) && variable is LocalSymbol local && _boundRefLocalInitializers.TryGetValue(local, out var variableInitializer)) 251private void CaptureRefInitializer(BoundExpression variableInitializer, SyntaxNode syntax) 261case BoundFieldAccess { FieldSymbol: { IsStatic: false, ContainingType: { IsValueType: true } }, ReceiverOpt: BoundExpression receiver }:
Lowering\StateMachineRewriter\MethodToStateMachineRewriter.cs (10)
151BoundExpression thisProxyReplacement = thisProxy.Replacement(F.Syntax, static (frameType, F) => F.This(), F); 208protected override BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass) 348var variableCleanup = ArrayBuilder<BoundExpression>.GetInstance(); 438private void AddVariableCleanup(ArrayBuilder<BoundExpression> cleanup, FieldSymbol field) 452var variableCleanup = ArrayBuilder<BoundExpression>.GetInstance(); 614BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 650var visitedRight = (BoundExpression)Visit(node.Right); 800var fetchThis = proxy.Replacement(F.Syntax, static (frameType, F) => F.This(), F);
Lowering\StateMachineRewriter\RefInitializationHoister.cs (13)
30where THoistedAccess : BoundExpression 58internal BoundExpression? HoistRefInitialization<TArg>( 60BoundExpression visitedRight, 86var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 90var replacement = HoistExpression(visitedRight, local, local.RefKind, sideEffects, hoistedSymbols, ref needsSacrificialEvaluation, createHoistedSymbol, createHoistedAccess, arg, isRuntimeAsync, isFieldAccessOfStruct: false); 108var last = sideEffects.Last(); 134private BoundExpression HoistExpression<TArg>( 135BoundExpression expr, 138ArrayBuilder<BoundExpression> sideEffects, 152BoundExpression expression = HoistExpression( 165var indices = ArrayBuilder<BoundExpression>.GetInstance(); 166foreach (var index in array.Indices) 204var receiver = HoistExpression(
Lowering\StateMachineRewriter\ResumableStateMachineStateAllocator.cs (1)
80public BoundStatement? GenerateThrowMissingStateDispatch(SyntheticBoundNodeFactory f, BoundExpression cachedState, HotReloadExceptionCode errorCode)
Lowering\StateMachineRewriter\StateMachineRewriter.cs (10)
318var leftExpression = proxy.Replacement( 332var leftExpression = proxy.Replacement( 379protected BoundExpression MakeCurrentThreadId() 402protected SynthesizedImplementationMethod GenerateIteratorGetEnumerator(MethodSymbol getEnumeratorMethod, ref BoundExpression managedThreadId, StateMachineState initialState) 472var leftExpression = proxy.Replacement( 477var rightExpression = copySrc[method.ThisParameter].Replacement(F.Syntax, static (stateMachineType, F) => F.This(), F); 491BoundExpression resultParameter = proxy.Replacement( 497BoundExpression parameterProxy = copySrc[parameter].Replacement(F.Syntax, static (stateMachineType, F) => F.This(), F); 519protected virtual BoundStatement InitializeParameterField(MethodSymbol getEnumeratorMethod, ParameterSymbol parameter, BoundExpression resultParameter, BoundExpression parameterProxy)
Lowering\SyntheticBoundNodeFactory.cs (182)
228public BoundExpression This(LocalSymbol thisTempOpt) 230return (thisTempOpt != null) ? Local(thisTempOpt) : (BoundExpression)This(); 241return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true); 249public BoundFieldAccess Field(BoundExpression? receiver, FieldSymbol f) 259public BoundExpression Property(WellKnownMember member) 264public BoundExpression Property(BoundExpression? receiverOpt, WellKnownMember member) 273public BoundExpression Property(BoundExpression? receiverOpt, PropertySymbol property) 288public BoundExpression Indexer(BoundExpression? receiverOpt, PropertySymbol property, BoundExpression arg0) 416public BoundExpressionStatement Assignment(BoundExpression left, BoundExpression right, bool isRef = false) 421public BoundExpressionStatement ExpressionStatement(BoundExpression expr) 429public BoundExpression AssignmentExpression(BoundExpression left, BoundExpression right, bool isRef = false) 437public BoundExpression AssignmentExpression(SyntaxNode syntax, BoundExpression left, BoundExpression right, bool isRef = false, bool hasErrors = false, bool wasCompilerGenerated = false) 556public BoundReturnStatement Return(BoundExpression? expression = null) 642public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right) 647public BoundAsOperator As(BoundExpression operand, TypeSymbol type) 652public BoundIsOperator Is(BoundExpression operand, TypeSymbol type) 661public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right) 668public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right) 675public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right) 680public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right) 685public BoundExpression IsNotNullReference(BoundExpression value) 691public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right) 696public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right) 701public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right) 706public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right) 711public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right) 716public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right) 744public BoundObjectCreationExpression New(NamedTypeSymbol type, params BoundExpression[] args) 750public BoundObjectCreationExpression New(MethodSymbol ctor, params BoundExpression[] args) 753public BoundObjectCreationExpression New(NamedTypeSymbol type, ImmutableArray<BoundExpression> args) 759public BoundObjectCreationExpression New(MethodSymbol ctor, ImmutableArray<BoundExpression> args) 762public BoundObjectCreationExpression New(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKinds) 777public BoundObjectCreationExpression New(WellKnownMember wm, ImmutableArray<BoundExpression> args) 783public BoundExpression MakeIsNotANumberTest(BoundExpression input) 798public BoundExpression StaticCall(TypeSymbol receiver, MethodSymbol method, params BoundExpression[] args) 808public BoundExpression StaticCall(MethodSymbol method, ImmutableArray<BoundExpression> args) 811public BoundExpression StaticCall(WellKnownMember method, params BoundExpression[] args) 819public BoundExpression StaticCall(WellKnownMember method, ImmutableArray<TypeSymbol> typeArgs, params BoundExpression[] args) 830public BoundExpression StaticCall(SpecialMember method, params BoundExpression[] args) 837public BoundCall Call(BoundExpression? receiver, MethodSymbol method) 839return Call(receiver, method, ImmutableArray<BoundExpression>.Empty); 842public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, bool useStrictArgumentRefKinds = false) 847public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, BoundExpression arg1, bool useStrictArgumentRefKinds = false) 852public BoundCall Call(BoundExpression? receiver, MethodSymbol method, params BoundExpression[] args) 854return Call(receiver, method, ImmutableArray.Create<BoundExpression>(args)); 857public BoundCall Call(BoundExpression? receiver, WellKnownMember method, BoundExpression arg0) 860public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<BoundExpression> args, bool useStrictArgumentRefKinds = false) 902public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<RefKind> refKinds, ImmutableArray<BoundExpression> args) 912public BoundExpression Conditional(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, TypeSymbol type, bool isRef = false) 917public BoundComplexConditionalReceiver ComplexConditionalReceiver(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver) 924public BoundExpression Coalesce(BoundExpression left, BoundExpression right) 932public BoundStatement If(BoundExpression condition, BoundStatement thenClause, BoundStatement? elseClauseOpt = null) 937public BoundStatement ConditionalGoto(BoundExpression condition, LabelSymbol label, bool jumpIfTrue) 942public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null) 993public BoundThrowStatement Throw(BoundExpression e) 1003public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts) 1008public BoundExpression MakeSequence(params BoundExpression[] parts) 1013public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts) 1015var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1018var part = parts[i]; 1024var lastExpression = parts[parts.Length - 1]; 1035public BoundSequence Sequence(BoundExpression[] sideEffects, BoundExpression result, TypeSymbol? type = null) 1042public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result) 1051public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result) 1081public BoundStatement Switch(BoundExpression ex, ImmutableArray<SyntheticSwitchSection> sections) 1176public BoundArrayLength ArrayLength(BoundExpression array) 1182public BoundArrayAccess ArrayAccessFirstElement(BoundExpression array) 1186ImmutableArray<BoundExpression> firstElementIndices = ArrayBuilder<BoundExpression>.GetInstance(rank, Literal(0)).ToImmutableAndFree(); 1190public BoundArrayAccess ArrayAccess(BoundExpression array, params BoundExpression[] indices) 1195public BoundArrayAccess ArrayAccess(BoundExpression array, ImmutableArray<BoundExpression> indices) 1230public BoundExpression ThrowExpression(BoundExpression thrown, TypeSymbol type) 1235public BoundExpression Null(TypeSymbol type) 1241public BoundExpression NullRef(TypeWithAnnotations type) 1247public static BoundExpression Null(TypeSymbol type, SyntaxNode syntax) 1250BoundExpression nullLiteral = new BoundLiteral(syntax, ConstantValue.Null, type) { WasCompilerGenerated = true }; 1261public BoundExpression Typeof(WellKnownType type, TypeSymbol systemType) 1266public BoundExpression Typeof(TypeSymbol type, TypeSymbol systemType) 1292public BoundExpression Typeof(TypeWithAnnotations type, TypeSymbol systemType) 1297public ImmutableArray<BoundExpression> TypeOfs(ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol systemType) 1302public BoundExpression TypeofDynamicOperationContextType() 1308public BoundExpression Sizeof(TypeSymbol type) 1313internal BoundExpression ConstructorInfo(MethodSymbol ctor) 1331public BoundExpression MethodDefIndex(MethodSymbol method) 1340public BoundExpression LocalId(LocalSymbol symbol) 1350public BoundExpression ParameterId(ParameterSymbol symbol) 1360public BoundExpression StateMachineInstanceId() 1372public BoundExpression ModuleVersionId() 1377public BoundExpression ModuleVersionIdString() 1382public BoundExpression InstrumentationPayloadRoot(int analysisKind, TypeSymbol payloadType) 1387public BoundExpression ThrowIfModuleCancellationRequested() 1390public BoundExpression ModuleCancellationToken() 1393public BoundExpression MaximumMethodDefIndex() 1404public BoundExpression SourceDocumentIndex(Cci.DebugSourceDocument document) 1413public BoundExpression MethodInfo(MethodSymbol method, TypeSymbol systemReflectionMethodInfo) 1438public BoundExpression FieldInfo(FieldSymbol field) 1480public BoundExpression Convert(TypeSymbol type, BoundExpression arg, bool allowBoxingByRefLikeTypeParametersToObject = false) 1510public BoundExpression Convert(TypeSymbol type, BoundExpression arg, Conversion conversion, bool isChecked = false) 1537public BoundExpression ArrayOrEmpty(TypeSymbol elementType, BoundExpression[] elements) 1549public BoundExpression ArrayOrEmpty(TypeSymbol elementType, ImmutableArray<BoundExpression> elements) 1564public BoundExpression Array(TypeSymbol elementType, ImmutableArray<BoundExpression> elements) 1568ImmutableArray.Create<BoundExpression>(Literal(elements.Length)), 1573public BoundExpression Array(TypeSymbol elementType, BoundExpression length) 1577ImmutableArray.Create<BoundExpression>(length), 1583internal BoundExpression Default(TypeSymbol type) 1588internal static BoundExpression Default(TypeSymbol type, SyntaxNode syntax) 1617BoundExpression source, 1628internal BoundExpression NullOrDefault(TypeSymbol typeSymbol) 1633internal static BoundExpression NullOrDefault(TypeSymbol typeSymbol, SyntaxNode syntax) 1638internal BoundExpression Not(BoundExpression expression) 1649BoundExpression argument, 1744internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder) 1759internal BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 1811internal BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression) 1821internal BoundExpression RewriteNullableNullEquality( 1824BoundExpression loweredLeft, 1825BoundExpression loweredRight, 1843BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight; 1852BoundExpression nonNullValue = LocalRewriter.NullableAlwaysHasValue(nullable); 1863sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue), 1873BoundExpression whenNotNull = RewriteNullableNullEquality( 1885BoundExpression call = MakeNullableHasValue(syntax, nullable); 1886BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ?
Operations\CSharpOperationFactory.cs (42)
307ConstantValue? constantValue = (boundNode as BoundExpression)?.ConstantValueOpt; 322BoundExpression boundExpr => boundExpr.GetPublicTypeSymbol(), 461private static TypeParameterSymbol? GetConstrainedToType(Symbol targetMember, BoundExpression? receiverOpt) 528return CreateFromArray<BoundExpression, IOperation>(declaredTypeOpt.BoundDimensionsOpt); 534ImmutableArray<BoundExpression> dimensions; 543dimensions = ImmutableArray<BoundExpression>.Empty; 545return CreateFromArray<BoundExpression, IOperation>(dimensions); 750ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicObjectCreationExpression.Arguments); 779ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicInvocation.Arguments); 788internal IOperation CreateBoundDynamicIndexerAccessExpressionReceiver(BoundExpression indexer) 803internal ImmutableArray<IOperation> CreateBoundDynamicIndexerAccessArguments(BoundExpression indexer) 808return CreateFromArray<BoundExpression, IOperation>(boundDynamicAccess.Arguments); 812return CreateFromArray<BoundExpression, IOperation>(boundObjectInitializerMember.Arguments); 833ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundObjectInitializerExpression)); 842ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundCollectionInitializerExpression)); 950BoundExpression? receiver, 977ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundCollectionElementInitializer.Arguments); 1019BoundExpression boundOperand = boundConversion.Operand; 1099BoundExpression nestedOperand = nestedConversion.Operand; 1206ImmutableArray<IOperation> dimensionSizes = CreateFromArray<BoundExpression, IOperation>(boundArrayCreation.Bounds); 1217ImmutableArray<IOperation> elementValues = CreateFromArray<BoundExpression, IOperation>(boundArrayInitialization.Initializers); 1262Create(Binder.GetUnderlyingCollectionExpressionElement(expr, (BoundExpression)element, throwOnErrors: false)); 1267var iteratorItem = element.IteratorBody is { } iteratorBody ? 1296ConstantValue? constantValue = ((BoundExpression)boundDefaultExpression).ConstantValueOpt; 1409var children = CreateFromArray<BoundExpression, IOperation>(boundBadExpression.ChildBoundNodes); 1627ImmutableArray<IOperation> indices = CreateFromArray<BoundExpression, IOperation>(boundArrayAccess.Indices); 1978boundForEachStatement.Expression is not BoundConversion { Conversion.IsIdentity: true, ExplicitCastInCode: false, Operand: BoundExpression operand } ? 2250ImmutableArray<IOperation> elements = CreateFromArray<BoundExpression, IOperation>(boundTupleExpression.Arguments); 2271internal ImmutableArray<IInterpolatedStringContentOperation> CreateBoundInterpolatedStringContentOperation(ImmutableArray<BoundExpression> parts, ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>? positionInfo) 2278foreach (var part in parts) 2304var part = parts[i]; 2307BoundExpression value; 2308BoundExpression? alignment; 2309BoundExpression? format; 2377static (BoundExpression Value, BoundExpression? Alignment, BoundExpression? Format) getCallInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, (bool IsLiteral, bool HasAlignment, bool HasFormat) currentPosition) 2379BoundExpression value = arguments[0]; 2389BoundExpression? alignment = alignmentIndex == -1 ? null : arguments[alignmentIndex]; 2391BoundExpression? format = formatIndex == -1 ? null : arguments[formatIndex]; 2435IOperation createContent(BoundExpression current)
Operations\CSharpOperationFactory_Methods.cs (11)
36internal IArgumentOperation CreateArgumentOperation(ArgumentKind kind, IParameterSymbol? parameter, BoundExpression expression) 87ImmutableArray<IOperation> ignoredDimensions = CreateFromArray<BoundExpression, IOperation>(boundLocalDeclaration.ArgumentsOpt); 114private bool IsCallVirtual(MethodSymbol? targetMethod, BoundExpression? receiver) 266ImmutableArray<BoundExpression> boundArguments, 290ImmutableArray<BoundExpression> arguments, 339private static ArgumentKind GetArgumentKind(BoundExpression argument, ref BitVector defaultArguments, int i) 364ImmutableArray<BoundExpression> arguments) 373BoundExpression argument = arguments[a]; 387internal static ImmutableArray<BoundNode> CreateInvalidChildrenFromArgumentsExpression(BoundNode? receiverOpt, ImmutableArray<BoundExpression> arguments, BoundExpression? additionalNodeOpt = null) 408ImmutableArray<BoundExpression> arguments,
Symbols\ConstantValueUtils.cs (3)
79BoundExpression boundValue, 96var unconvertedBoundValue = boundValue; 163internal static void CheckLangVersionForConstantValue(BoundExpression expression, BindingDiagnosticBag diagnostics)
Symbols\FunctionTypeSymbol.cs (5)
40private readonly Func<Binder, BoundExpression, NamedTypeSymbol?>? _calculateDelegate; 42private BoundExpression? _expression; 45internal static FunctionTypeSymbol? CreateIfFeatureEnabled(SyntaxNode syntax, Binder binder, Func<Binder, BoundExpression, NamedTypeSymbol?> calculateDelegate) 52private FunctionTypeSymbol(Binder binder, Func<Binder, BoundExpression, NamedTypeSymbol?> calculateDelegate) 64internal void SetExpression(BoundExpression expression)
Symbols\LocalSymbol.cs (1)
363internal abstract ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue);
Symbols\ReducedExtensionMethodSymbol.cs (1)
149var arguments = new BoundExpression[paramCount];
Symbols\Source\ParameterHelpers.cs (3)
908BoundExpression defaultExpression, 909BoundExpression convertedExpression, 1067private static bool IsValidDefaultValue(BoundExpression expression)
Symbols\Source\SourceComplexParameterSymbol.cs (2)
391parameterEqualsValue = binder.BindParameterDefaultValue(defaultSyntax, this, diagnostics, out var valueBeforeConversion); 397BoundExpression convertedExpression = parameterEqualsValue.Value;
Symbols\Source\SourceFixedFieldSymbol.cs (1)
91BoundExpression boundSizeExpression = binder.GenerateConversionForAssignment(
Symbols\Source\SourceLocalSymbol.cs (4)
475internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) 563BoundExpression initializerOpt = this._initializerBinder.BindInferredVariableInitializer(diagnostics, RefKind, _initializer, _initializer); 575private void MakeConstantTuple(LocalSymbol inProgress, BoundExpression boundInitValue) 609internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\Source\SourceMemberFieldSymbol.cs (1)
550var initializerOpt = executableBinder.BindInferredVariableInitializer(diagnostics, RefKind.None, syntaxNode, declarator);
Symbols\Symbol_Attributes.cs (1)
429Binder.CheckRequiredMembersInObjectInitializer(ctor, ImmutableArray<BoundExpression>.CastUp(boundAttribute.NamedArguments), boundAttribute.Syntax, diagnostics);
Symbols\Synthesized\Records\SynthesizedRecordEqualityOperator.cs (3)
64BoundExpression expression; 71BoundExpression objectEqual = F.ObjectEqual(left, right); 72BoundExpression recordEquals = F.LogicalAnd(F.ObjectNotEqual(left, F.Null(F.SpecialType(SpecialType.System_Object))),
Symbols\Synthesized\Records\SynthesizedRecordEquals.cs (1)
53BoundExpression? retExpr;
Symbols\Synthesized\Records\SynthesizedRecordGetHashCode.cs (1)
48BoundExpression? currentHashValue;
Symbols\Synthesized\Records\SynthesizedRecordObjEquals.cs (1)
56BoundExpression expression;
Symbols\Synthesized\Records\SynthesizedRecordPrintMembers.cs (1)
199var value = member.Kind switch
Symbols\Synthesized\SynthesizedEmbeddedNativeIntegerAttributeSymbol.cs (1)
82ImmutableArray.Create<BoundExpression>(factory.Literal(true))
Symbols\Synthesized\SynthesizedEmbeddedNullableAttributeSymbol.cs (1)
100ImmutableArray.Create<BoundExpression>(
Symbols\Synthesized\SynthesizedEntryPointSymbol.cs (6)
293private static BoundCall CreateParameterlessCall(CSharpSyntaxNode syntax, BoundExpression receiver, ThreeState receiverIsSubjectToCloning, MethodSymbol method) 300ImmutableArray<BoundExpression>.Empty, 336private readonly BoundExpression _getAwaiterGetResultCall; 355var arguments = Parameters.SelectAsArray((p, s) => (BoundExpression)new BoundParameter(s, p, p.Type), _userMainReturnTypeSyntax); 494BoundExpression getAwaiterGetResultCall; 594ImmutableArray.Create<BoundExpression>(submissionArrayParameter),
Symbols\Synthesized\SynthesizedLocal.cs (1)
195internal sealed override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\Synthesized\SynthesizedParameterlessThrowMethod.cs (1)
33var body = F.Throw(F.New(_exceptionConstructor, ImmutableArray<BoundExpression>.Empty));
Symbols\Synthesized\SynthesizedThrowSwitchExpressionExceptionMethod.cs (1)
34var body = F.Throw(F.New(F.WellKnownMethod(WellKnownMember.System_Runtime_CompilerServices_SwitchExpressionException__ctorObject), ImmutableArray.Create<BoundExpression>(F.Parameter(unmatchedValue))));
Symbols\Synthesized\TypeSubstitutedLocalSymbol.cs (1)
129internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\UpdatedContainingSymbolLocal.cs (1)
95internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) =>
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (7)
Semantics\ConstantTests.cs (1)
1456OfType<BoundExpression>().
Semantics\OperatorTests.cs (4)
7362foreach (var left in exprs) 7364foreach (var right in exprs) 7375static BinaryOperatorKind getBinaryOperator(Binder binder, BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, bool useEasyOut)
Semantics\UnsafeTests.cs (2)
5239var expr = node as BoundExpression;
Microsoft.CodeAnalysis.CSharp.Test.Utilities (3)
Extensions.cs (3)
910public static Conversion ClassifyConversionFromExpression(this Conversions conversions, BoundExpression sourceExpression, TypeSymbol destination, ref HashSet<DiagnosticInfo> useSiteDiagnostics, bool forCast = false) 952public static BoundExpression BindExpression(this Microsoft.CodeAnalysis.CSharp.Binder binder, ExpressionSyntax node, DiagnosticBag diagnostics) 955var result = binder.BindExpression(node, bindingDiagnostics);