123 types derived from BoundExpression
Microsoft.CodeAnalysis.CSharp (123)
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 (119)
428internal abstract partial class BoundValuePlaceholderBase : BoundExpression 925internal sealed partial class BoundDup : BoundExpression 959internal sealed partial class BoundPassByCopy : BoundExpression 987internal sealed partial class BoundBadExpression : BoundExpression 1080internal sealed partial class BoundTypeExpression : BoundExpression 1115internal sealed partial class BoundTypeOrValueExpression : BoundExpression 1164internal sealed partial class BoundNamespaceExpression : BoundExpression 1205internal sealed partial class BoundUnaryOperator : BoundExpression 1247internal sealed partial class BoundIncrementOperator : BoundExpression 1295internal sealed partial class BoundAddressOfOperator : BoundExpression 1327internal sealed partial class BoundUnconvertedAddressOfOperator : BoundExpression 1356internal sealed partial class BoundFunctionPointerLoad : BoundExpression 1399internal sealed partial class BoundPointerIndirectionOperator : BoundExpression 1429internal sealed partial class BoundPointerElementAccess : BoundExpression 1464internal sealed partial class BoundFunctionPointerInvocation : BoundExpression 1501internal sealed partial class BoundRefTypeOperator : BoundExpression 1533internal sealed partial class BoundMakeRefOperator : BoundExpression 1563internal sealed partial class BoundRefValueOperator : BoundExpression 1595internal sealed partial class BoundFromEndIndexExpression : BoundExpression 1627internal sealed partial class BoundRangeExpression : BoundExpression 1660internal abstract partial class BoundBinaryOperatorBase : BoundExpression 1717internal sealed partial class BoundTupleBinaryOperator : BoundExpression 1808internal sealed partial class BoundCompoundAssignmentOperator : BoundExpression 1855internal sealed partial class BoundAssignmentOperator : BoundExpression 1889internal sealed partial class BoundDeconstructionAssignmentOperator : BoundExpression 1924internal sealed partial class BoundNullCoalescingOperator : BoundExpression 1965internal sealed partial class BoundNullCoalescingAssignmentOperator : BoundExpression 1996internal sealed partial class BoundUnconvertedConditionalOperator : BoundExpression 2035internal sealed partial class BoundConditionalOperator : BoundExpression 2079internal sealed partial class BoundArrayAccess : BoundExpression 2112internal sealed partial class BoundRefAccess : BoundExpression 2144internal sealed partial class BoundArrayLength : BoundExpression 2215internal sealed partial class BoundAwaitExpression : BoundExpression 2250internal abstract partial class BoundTypeOf : BoundExpression 2335internal sealed partial class BoundMethodDefIndex : BoundExpression 2379internal sealed partial class BoundLocalId : BoundExpression 2422internal sealed partial class BoundParameterId : BoundExpression 2465internal sealed partial class BoundStateMachineInstanceId : BoundExpression 2500internal sealed partial class BoundMaximumMethodDefIndex : BoundExpression 2535internal sealed partial class BoundInstrumentationPayloadRoot : BoundExpression 2573internal sealed partial class BoundThrowIfModuleCancellationRequested : BoundExpression 2608internal sealed partial class ModuleCancellationTokenExpression : BoundExpression 2643internal sealed partial class BoundModuleVersionId : BoundExpression 2678internal sealed partial class BoundModuleVersionIdString : BoundExpression 2713internal sealed partial class BoundSourceDocumentIndex : BoundExpression 2753internal sealed partial class BoundMethodInfo : BoundExpression 2796internal sealed partial class BoundFieldInfo : BoundExpression 2839internal sealed partial class BoundDefaultLiteral : BoundExpression 2862internal sealed partial class BoundDefaultExpression : BoundExpression 2893internal sealed partial class BoundIsOperator : BoundExpression 2928internal sealed partial class BoundAsOperator : BoundExpression 2965internal sealed partial class BoundSizeOfOperator : BoundExpression 2997internal sealed partial class BoundConversion : BoundExpression 3045internal sealed partial class BoundReadOnlySpanFromArray : BoundExpression 3078internal sealed partial class BoundArgList : BoundExpression 3113internal sealed partial class BoundArgListOperator : BoundExpression 3144internal sealed partial class BoundFixedLocalCollectionInitializer : BoundExpression 4338internal sealed partial class BoundLiteral : BoundExpression 4369internal sealed partial class BoundUtf8String : BoundExpression 4409internal sealed partial class BoundThisReference : BoundExpression 4444internal sealed partial class BoundPreviousSubmissionReference : BoundExpression 4479internal sealed partial class BoundHostObjectMemberReference : BoundExpression 4514internal sealed partial class BoundBaseReference : BoundExpression 4543internal sealed partial class BoundLocal : BoundExpression 4592internal sealed partial class BoundPseudoVariable : BoundExpression 4637internal sealed partial class BoundRangeVariable : BoundExpression 4670internal sealed partial class BoundParameter : BoundExpression 4810internal sealed partial class BoundLabel : BoundExpression 4917internal abstract partial class BoundSwitchExpression : BoundExpression 5793internal abstract partial class BoundMethodOrPropertyGroup : BoundExpression 5807internal sealed partial class BoundSequencePointExpression : BoundExpression 5835internal sealed partial class BoundSequence : BoundExpression 5871internal sealed partial class BoundSpillSequence : BoundExpression 5907internal sealed partial class BoundDynamicMemberAccess : BoundExpression 5946internal abstract partial class BoundDynamicInvocableBase : BoundExpression 5999internal sealed partial class BoundConditionalAccess : BoundExpression 6032internal sealed partial class BoundLoweredConditionalAccess : BoundExpression 6073internal sealed partial class BoundConditionalReceiver : BoundExpression 6111internal sealed partial class BoundComplexConditionalReceiver : BoundExpression 6213internal sealed partial class BoundCall : BoundExpression 6272internal sealed partial class BoundEventAssignmentOperator : BoundExpression 6311internal sealed partial class BoundAttribute : BoundExpression 6356internal sealed partial class BoundUnconvertedObjectCreationExpression : BoundExpression 6394internal abstract partial class BoundObjectCreationExpressionBase : BoundExpression 6466internal abstract partial class BoundCollectionExpressionBase : BoundExpression 6662internal abstract partial class BoundTupleExpression : BoundExpression 6812internal abstract partial class BoundObjectInitializerExpressionBase : BoundExpression 6859internal sealed partial class BoundObjectInitializerMember : BoundExpression 6908internal sealed partial class BoundDynamicObjectInitializerMember : BoundExpression 6981internal sealed partial class BoundCollectionElementInitializer : BoundExpression 7058internal sealed partial class BoundImplicitReceiver : BoundExpression 7093internal sealed partial class BoundAnonymousObjectCreationExpression : BoundExpression 7129internal sealed partial class BoundAnonymousPropertyDeclaration : BoundExpression 7199internal sealed partial class BoundDelegateCreationExpression : BoundExpression 7235internal sealed partial class BoundArrayCreation : BoundExpression 7267internal sealed partial class BoundArrayInitialization : BoundExpression 7298internal abstract partial class BoundStackAllocArrayCreationBase : BoundExpression 7373internal sealed partial class BoundFieldAccess : BoundExpression 7413internal sealed partial class BoundHoistedFieldAccess : BoundExpression 7453internal sealed partial class BoundPropertyAccess : BoundExpression 7491internal sealed partial class BoundEventAccess : BoundExpression 7527internal sealed partial class BoundIndexerAccess : BoundExpression 7578internal sealed partial class BoundImplicitIndexerAccess : BoundExpression 7627internal sealed partial class BoundInlineArrayAccess : BoundExpression 7668internal sealed partial class BoundDynamicIndexerAccess : BoundExpression 7708internal sealed partial class BoundLambda : BoundExpression 7748internal sealed partial class UnboundLambda : BoundExpression 7792internal sealed partial class BoundQueryClause : BoundExpression 7859internal sealed partial class BoundNameOfOperator : BoundExpression 7896internal abstract partial class BoundInterpolatedStringBase : BoundExpression 8032internal sealed partial class BoundStringInsert : BoundExpression 8067internal sealed partial class BoundIsPatternExpression : BoundExpression 8745internal sealed partial class BoundDiscardExpression : BoundExpression 8780internal sealed partial class BoundThrowExpression : BoundExpression 8808internal abstract partial class VariablePendingInference : BoundExpression 8877internal sealed partial class OutDeconstructVarPendingInference : BoundExpression 8978internal sealed partial class BoundExpressionWithNullability : BoundExpression 9009internal sealed partial class BoundValueForNullableAnalysis : BoundExpression 9034internal sealed partial class BoundWithExpression : BoundExpression
Lowering\SpillSequenceSpiller.cs (1)
37private sealed class BoundSpillSequenceBuilder : BoundExpression
6022 references to BoundExpression
Microsoft.CodeAnalysis.CSharp (6022)
Binder\Binder_AnonymousTypes.cs (5)
22private BoundExpression BindAnonymousObjectCreation(AnonymousObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 32BoundExpression[] boundExpressions = new BoundExpression[fieldCount]; 208private TypeSymbol GetAnonymousTypeFieldType(BoundExpression expression, CSharpSyntaxNode errorSyntax, BindingDiagnosticBag diagnostics) 218private 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); 569BoundExpression namedArgumentValue = this.BindValue(namedArgument.Expression, diagnostics, BindValueKind.RValue); 574BoundExpression lvalue; 769public ImmutableArray<TypedConstant> VisitArguments(ImmutableArray<BoundExpression> arguments, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool parentHasErrors = false) 777foreach (var argument in arguments) 843private TypedConstant VisitExpression(BoundExpression node, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors) 853private TypedConstant VisitExpression(BoundExpression node, TypedConstantKind typedConstantKind, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors) 903return VisitExpression((BoundExpression)node, diagnostics, ref attrHasErrors, curArgumentHasErrors); 919var operand = node.Operand; 981ImmutableArray<BoundExpression> bounds = node.Bounds; 1020private 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) 267BoundExpression expression, 268out BoundExpression? getAwaiterGetResultCall, 277BoundExpression expression, 278BoundExpression getAwaiterArgument, 280out BoundExpression? getAwaiter, 283out BoundExpression? getAwaiterGetResultCall, 331bool tryGetRuntimeAwaitHelper(BoundExpression expression, out BoundAwaitableValuePlaceholder? placeholder, out BoundCall? runtimeAwaitCall, BindingDiagnosticBag diagnostics) 382BoundExpression argument = CreateConversion(placeholder, argumentConversion, destination: method.Parameters[0].Type, diagnostics); 563private static bool ValidateAwaitedExpression(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics) 591private bool GetGetAwaiterMethod(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundExpression? getAwaiterCall) 601getAwaiterCall = MakeInvocationExpression(node, expression, WellKnownMemberNames.GetAwaiter, ImmutableArray<BoundExpression>.Empty, diagnostics); 642var qualified = BindInstanceMemberAccess(node, node, receiver, name, 0, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), invoked: false, indexed: false, diagnostics); 712private bool GetGetResultMethod(BoundExpression awaiterExpression, SyntaxNode node, TypeSymbol awaitedExpressionType, BindingDiagnosticBag diagnostics, out MethodSymbol? getResultMethod, [NotNullWhen(true)] out BoundExpression? getAwaiterGetResultCall) 715getAwaiterGetResultCall = MakeInvocationExpression(node, awaiterExpression, WellKnownMemberNames.GetResult, ImmutableArray<BoundExpression>.Empty, diagnostics);
Binder\Binder_Conversions.cs (85)
20internal BoundExpression CreateConversion( 21BoundExpression source, 32internal BoundExpression CreateConversion( 33BoundExpression source, 41internal BoundExpression CreateConversion( 43BoundExpression source, 54protected BoundExpression CreateConversion( 56BoundExpression source, 67var result = createConversion(syntax, source, conversion, isCast, conversionGroupOpt, inConversionGroupFlags, wasCompilerGenerated, destination, diagnostics, hasErrors); 135BoundExpression createConversion( 137BoundExpression source, 202var convertedSwitch = ConvertSwitchExpression((BoundUnconvertedSwitchExpression)source, destination, conversionIfTargetTyped: conversion, diagnostics); 218var convertedConditional = ConvertConditionalExpression((BoundUnconvertedConditionalOperator)source, destination, conversionIfTargetTyped: conversion, diagnostics); 360void reportUseSiteDiagnostics(SyntaxNode syntax, Conversion conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics) 375void ensureAllUnderlyingConversionsChecked(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool wasCompilerGenerated, TypeSymbol destination, BindingDiagnosticBag diagnostics) 472void checkConstraintLanguageVersionAndRuntimeSupportForConversion(SyntaxNode syntax, Conversion conversion, BoundExpression source, TypeSymbol destination, BindingDiagnosticBag diagnostics) 784private BoundExpression BindUnconvertedInterpolatedExpressionToFormattableStringFactory(BoundUnconvertedInterpolatedString unconvertedSource, TypeSymbol destination, BindingDiagnosticBag diagnostics) 789ImmutableArray<BoundExpression> parts = BindInterpolatedStringPartsForFactory(unconvertedSource, diagnostics, out bool haveErrors); 818private static BoundExpression ConvertObjectCreationExpression( 823BoundExpression expr = bindObjectCreationExpression(node.Syntax, node.InitializerOpt, node.Binder, destination.StrippedType(), arguments, diagnostics); 852static BoundExpression bindObjectCreationExpression( 916CollectionExpressionTypeKind collectionTypeKind, ImmutableArray<BoundNode> elements, BoundObjectOrCollectionValuePlaceholder? placeholder = null, BoundExpression? collectionCreation = null, MethodSymbol? collectionBuilderMethod = null, BoundCollectionBuilderElementsPlaceholder? collectionBuilderElementsPlaceholder = null) 1046var collectionCreation = bindCollectionConstructorConstruction(in this, _node.WithElement?.Syntax ?? _node.Syntax, constructor); 1076ImmutableArray.Create((BoundExpression)element), 1089static BoundExpression bindCollectionConstructorConstruction( 1104BoundExpression collectionCreation; 1174(BoundExpression)element, 1197var convertElement = @this._binder.CreateConversion( 1262static BoundExpression? bindCollectionArrayInterfaceConstruction(ref readonly CollectionExpressionConverter @this) 1312BoundExpression result; 1353static (BoundExpression? collectionCreation, MethodSymbol? collectionBuilderMethod, BoundCollectionBuilderElementsPlaceholder? elementsPlaceholder) bindCollectionBuilderInfo( 1403var projectionInvocationExpression = @this._binder.BindInvocationExpression( 1476var collectionCreation = @this._binder.CreateConversion(builderCall, @this._targetType, @this._diagnostics); 1893BoundExpression receiver, 1898var boundExpression = addMethodBinder.BindInstanceMemberAccess( 2136ImmutableArray.Create<BoundExpression>(methodGroup.ReceiverOpt, new BoundValuePlaceholder(syntax, secondArgumentType) { WasCompilerGenerated = true }), 2226internal static BoundExpression GetUnderlyingCollectionExpressionElement(BoundCollectionExpression expr, BoundExpression element, bool throwOnErrors) 2262static BoundExpression getCollectionInitializerElement(BoundCollectionElementInitializer collectionInitializer) 2265var arg = collectionInitializer.Arguments[argIndex]; 2275else if (arg is BoundConversion { Operand: BoundCollectionExpression { Elements: [BoundExpression collectionElement] } }) 2289BoundExpression collectionExpr = new BoundValuePlaceholder(syntax, collectionType); 2317var withArgumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(withArguments.Length); 2318foreach (var argument in withArguments) 2330elementsBuilder.Add(element is BoundExpression expression 2426Conversion elementConversion = Conversions.ClassifyImplicitConversionFromExpression((BoundExpression)element, elementType, ref useSiteInfo); 2429GenerateImplicitConversionError(diagnostics, element.Syntax, elementConversion, (BoundExpression)element, elementType); 2448private BoundExpression ConvertConditionalExpression( 2459var condition = source.Condition; 2462var trueExpr = 2466var falseExpr = 2491private BoundExpression ConvertSwitchExpression(BoundUnconvertedSwitchExpression source, TypeSymbol destination, Conversion? conversionIfTargetTyped, BindingDiagnosticBag diagnostics, bool hasErrors = false) 2501var oldValue = oldCase.Value; 2502var newValue = 2518private BoundExpression CreateUserDefinedConversion( 2520BoundExpression source, 2582BoundExpression convertedOperand = CreateConversion( 2617BoundExpression userDefinedConversion; 2690BoundExpression finalConversion = CreateConversion( 2708private BoundExpression CreateUnionConversion( 2710BoundExpression source, 2756BoundExpression convertedOperand = CreateConversion( 2819BoundExpression finalConversion = CreateConversion( 2837private BoundExpression CreateFunctionTypeConversion( 2838SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, 2865BoundExpression expr; 2898private BoundExpression CreateAnonymousFunctionConversion( 2899SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, 2929private BoundExpression CreateMethodGroupConversion( 2930SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, 3090private BoundExpression CreateStackAllocConversion( 3091SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, 3123private BoundExpression CreateTupleLiteralConversion( 3180var convertedArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length); 3189var argument = arguments[i]; 3196BoundExpression result = new BoundConvertedTupleLiteral( 3258BoundExpression? receiverOpt = group.ReceiverOpt; 3286private bool MemberGroupFinalValidation(BoundExpression? receiverOpt, MethodSymbol methodSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod) 3361private bool MemberGroupFinalValidationAccessibilityChecks(BoundExpression? receiverOpt, Symbol memberSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod) 3471private static bool IsMemberAccessedThroughVariableOrValue(BoundExpression? receiverOpt) 3481internal static bool IsMemberAccessedThroughType([NotNullWhen(true)] BoundExpression? receiverOpt) 3499internal static bool WasImplicitReceiver([NotNullWhen(false)] BoundExpression? receiverOpt) 3517internal bool MethodIsCompatibleWithDelegateOrFunctionPointer(BoundExpression? receiverOpt, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, Location errorLocation, BindingDiagnosticBag diagnostics) 3703BoundExpression? receiverOpt, 3801BoundExpression 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, 209private BoundExpression FixTupleLiteral(ArrayBuilder<DeconstructionVariable> checkedVariables, BoundExpression boundRHS, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics) 278BoundExpression deconstructInvocation = MakeDeconstructInvocationExpression(variables.Count, 296var nestedConversions = ArrayBuilder<(BoundValuePlaceholder?, BoundExpression?)>.GetInstance(count); 321var single = variable.Single; 369private BoundExpression SetInferredType(BoundExpression expression, TypeSymbol type, BindingDiagnosticBag diagnostics) 409BoundExpression errorLocal = ((DeconstructionVariablePendingInference)variable.Single).FailInference(this, diagnostics); 434internal readonly BoundExpression? Single; 438internal DeconstructionVariable(BoundExpression variable, SyntaxNode syntax) 482BoundExpression element = rhsLiteral.Arguments[i]; 551var valuesBuilder = ArrayBuilder<BoundExpression>.GetInstance(count); 558BoundExpression value; 574ImmutableArray<BoundExpression> arguments = valuesBuilder.ToImmutableAndFree(); 597private static string? ExtractDeconstructResultElementName(BoundExpression expression) 613private BoundExpression MakeDeconstructInvocationExpression( 615BoundExpression receiver, 640var variableOpt = variablesOpt?[i].Single; 654var memberAccess = BindInstanceMemberAccess( 672BoundExpression result = BindMethodGroupInvocation( 717private BoundBadExpression MissingDeconstruct(BoundExpression receiver, SyntaxNode rightSyntax, int numParameters, BindingDiagnosticBag diagnostics, 718out ImmutableArray<BoundDeconstructValuePlaceholder> outPlaceholders, BoundExpression childNode) 793var boundVariable = BindExpression(node, diagnostics, invoked: false, indexed: false); 794var checkedVariable = CheckValue(boundVariable, BindValueKind.Assignable, diagnostics); 867private BoundExpression BindDeconstructionVariable(
Binder\Binder_Expressions.cs (431)
26/// This portion of the binder converts an <see cref="ExpressionSyntax"/> into a <see cref="BoundExpression"/>. 126private BoundBadExpression BadExpression(SyntaxNode syntax, BoundExpression childNode) 134private BoundBadExpression BadExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> childNodes) 150protected BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind lookupResultKind, BoundExpression childNode) 163ImmutableArray<BoundExpression>.Empty, 171private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode) 180internal BoundExpression AdjustBadExpressionChild(BoundExpression childNode) 196private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false) 218private BoundExpression ToBadExpression(BoundExpression expr, LookupResultKind resultKind = LookupResultKind.Empty) 260internal BoundExpression BindValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind) 262var result = this.BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false); 266internal BoundExpression BindRValueWithoutTargetType(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true) 275internal BoundExpression BindTypeOrRValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 277var valueOrType = BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false); 288internal BoundExpression BindToTypeForErrorRecovery(BoundExpression expression, TypeSymbol type = null) 293internal BoundExpression BindToTypeForErrorRecovery(BoundExpression expression, BindingDiagnosticBag diagnostics, TypeSymbol type = null) 297var result = 311internal BoundExpression BindToNaturalType(BoundExpression expression, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true) 316BoundExpression result; 369var boundArgs = ArrayBuilder<BoundExpression>.GetInstance(sourceTuple.Arguments.Length); 370foreach (var arg in sourceTuple.Arguments) 446private BoundExpression BindToInferredDelegateType(BoundExpression expr, BindingDiagnosticBag diagnostics) 467internal BoundExpression BindValueAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind) 469var result = this.BindExpressionAllowArgList(node, diagnostics: diagnostics); 488BoundExpression result = initializerBinder.BindVariableOrAutoPropInitializerValue(initializerOpt, field.RefKind, 501internal BoundExpression BindVariableOrAutoPropInitializerValue( 515BoundExpression initializer = BindPossibleArrayInitializer(value, varType, valueKind, diagnostics); 534out BoundExpression valueBeforeConversion) 563var initializer = initializerBinder.BindValue(equalsValueSyntax.Value, diagnostics, BindValueKind.RValue); 568public BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 573protected BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 575BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked, indexed); 591protected BoundExpression BindExpressionAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 593BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked: false, indexed: false); 598private void CheckContextForPointerTypes(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression expr) 611private BoundExpression BindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 618BoundExpression result = bindExpressionInternal(node, diagnostics, invoked, indexed); 627BoundExpression bindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed) 891private BoundExpression BindRefExpression(RefExpressionSyntax node, BindingDiagnosticBag diagnostics) 896node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(BindToTypeForErrorRecovery(BindValue(node.Expression, BindingDiagnosticBag.Discarded, BindValueKind.RefersToLocation))), 900private BoundExpression BindRefType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 907private BoundExpression BindScopedType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 914private BoundExpression BindThrowExpression(ThrowExpressionSyntax node, BindingDiagnosticBag diagnostics) 925var thrownExpression = BindThrownExpression(node.Expression, diagnostics, ref hasErrors); 964private BoundExpression BindDeclarationExpressionAsError(DeclarationExpressionSyntax node, BindingDiagnosticBag diagnostics) 981private BoundExpression BindDeclarationVariablesForErrorRecovery(TypeWithAnnotations declTypeWithAnnotations, VariableDesignationSyntax node, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics) 989var result = BindDeconstructionVariable(declTypeWithAnnotations, single, syntax, diagnostics); 1000var builder = ArrayBuilder<BoundExpression>.GetInstance(count); 1008ImmutableArray<BoundExpression> subExpressions = builder.ToImmutableAndFree(); 1037private BoundExpression BindTupleExpression(TupleExpressionSyntax node, BindingDiagnosticBag diagnostics) 1049ImmutableArray<BoundExpression>.Empty; 1056var boundArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Count); 1078BoundExpression boundArgument = BindValue(argumentSyntax.Expression, diagnostics, BindValueKind.RValue); 1084ImmutableArray.Create<BoundExpression>(boundArgument), CreateErrorType("void")); 1254private BoundExpression BindRefValue(RefValueExpressionSyntax node, BindingDiagnosticBag diagnostics) 1259BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue); 1279private BoundExpression BindMakeRef(MakeRefExpressionSyntax node, BindingDiagnosticBag diagnostics) 1282BoundExpression argument = this.BindValue(node.Expression, diagnostics, BindValueKind.RefOrOut); 1303private BoundExpression BindRefType(RefTypeExpressionSyntax node, BindingDiagnosticBag diagnostics) 1307BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue); 1325private BoundExpression BindArgList(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics) 1392private BoundExpression BindQualifiedName(QualifiedNameSyntax node, BindingDiagnosticBag diagnostics) 1397private BoundExpression BindParenthesizedExpression(ExpressionSyntax innerExpression, BindingDiagnosticBag diagnostics) 1399var result = BindExpression(innerExpression, diagnostics); 1409private BoundExpression BindTypeOf(TypeOfExpressionSyntax node, BindingDiagnosticBag diagnostics) 1464private BoundExpression BindSizeOf(SizeOfExpressionSyntax node, BindingDiagnosticBag diagnostics) 1480private BoundExpression BindFieldExpression(FieldExpressionSyntax node, BindingDiagnosticBag diagnostics) 1630private BoundExpression BindDefaultExpression(DefaultExpressionSyntax node, BindingDiagnosticBag diagnostics) 1643private BoundExpression BindIdentifier( 1676BoundExpression expression; 1710var receiver = SynthesizeMethodGroupReceiver(node, members); 1948private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members) 2058private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError) 2194BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2200BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2206BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics); 2364protected virtual BoundExpression BindRangeVariable(SimpleNameSyntax node, RangeVariableSymbol qv, BindingDiagnosticBag diagnostics) 2369private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics) 2445private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType) 2487public BoundExpression BindNamespaceOrTypeOrExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2513public BoundExpression BindLabel(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2541public BoundExpression BindNamespaceOrType(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2547public BoundExpression BindNamespaceAlias(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics) 2553private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol) 2661private BoundExpression BindCast(CastExpressionSyntax node, BindingDiagnosticBag diagnostics) 2663BoundExpression operand = this.BindValue(node.Expression, diagnostics, BindValueKind.RValue); 2679private BoundExpression BindFromEndIndexExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 2688BoundExpression boundOperand = BindValue(node.Operand, diagnostics, BindValueKind.RValue); 2716BoundExpression boundConversion = CreateConversion(boundOperand, conversion, intType, diagnostics); 2722private BoundExpression BindRangeExpression(RangeExpressionSyntax node, BindingDiagnosticBag diagnostics) 2768BoundExpression left = BindRangeExpressionOperand(node.LeftOperand, diagnostics); 2769BoundExpression right = BindRangeExpressionOperand(node.RightOperand, diagnostics); 2789private BoundExpression BindRangeExpressionOperand(ExpressionSyntax operand, BindingDiagnosticBag diagnostics) 2796BoundExpression boundOperand = BindValue(operand, diagnostics, BindValueKind.RValue); 2825private BoundExpression BindCastCore(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, bool wasCompilerGenerated, BindingDiagnosticBag diagnostics) 2847BoundExpression operand, 2972ImmutableArray<BoundExpression> tupleArguments, 2984var argument = tupleArguments[i]; 3004private BoundExpression BindExplicitNullableCastFromNonNullable(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, BindingDiagnosticBag diagnostics) 3022var underlyingExpr = BindCastCore(node, operand, underlyingTargetTypeWithAnnotations, wasCompilerGenerated: false, diagnostics: bag); 3038var result = BindCastCore(node, operand, targetTypeWithAnnotations, wasCompilerGenerated: operand.WasCompilerGenerated, diagnostics: bag2); 3180BoundExpression boundArgument = BindArgumentValue(diagnostics, argumentSyntax, allowArglist, refKind); 3194var arg = result.Argument(0); 3211private BoundExpression BindArgumentValue(BindingDiagnosticBag diagnostics, ArgumentSyntax argumentSyntax, bool allowArglist, RefKind refKind) 3231private BoundExpression BindOutDeclarationArgument(DeclarationExpressionSyntax declarationExpression, BindingDiagnosticBag diagnostics) 3268private BoundExpression BindOutVariableDeclarationArgument( 3333BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics); 3410BoundExpression boundArgumentExpression, 3478private BoundExpression BindArgumentExpression(BindingDiagnosticBag diagnostics, ExpressionSyntax argumentExpression, RefKind refKind, bool allowArglist) 3487BoundExpression argument; 3506BoundExpression? receiver, 3514ArrayBuilder<BoundExpression>? paramsArgsBuilder = null; 3522BoundExpression argument = arguments[arg]; 3561BoundExpression coerceArgument( 3563BoundExpression? receiver, 3565ArrayBuilder<BoundExpression>? argumentsForInterpolationConversion, 3566BoundExpression argument, 3573BoundExpression coercedArgument = argument; 3618static ArrayBuilder<BoundExpression> collectParamsArgs( 3621ArrayBuilder<BoundExpression> arguments, 3626var paramsArgsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 3652BoundExpression? receiver, 3656ArrayBuilder<BoundExpression> paramsArgsBuilder, 3682ImmutableArray<BoundExpression> collectionArgs = paramsArgsBuilder.ToImmutableAndFree(); 3685BoundExpression collection = CreateParamsCollection(node, parameters[paramsIndex], collectionArgs, diagnostics); 3725void reportUnsafeIfNeeded(MemberResolutionResult<TMember> methodResult, BindingDiagnosticBag diagnostics, BoundExpression argument, TypeWithAnnotations parameterTypeWithAnnotations) 3742BoundExpression bindInterpolatedStringHandlerInMemberCall( 3743BoundExpression unconvertedString, 3745ArrayBuilder<BoundExpression>? arguments, 3749BoundExpression? receiver, 3959var interpolatedString = BindUnconvertedInterpolatedExpressionToHandlerType( 3980private void CheckArgumentRefKind(RefKind argRefKind, BoundExpression argument, int arg, ParameterSymbol parameter, 4052private BoundExpression BindArrayCreationExpression(ArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4136ArrayBuilder<BoundExpression> sizes = ArrayBuilder<BoundExpression>.GetInstance(); 4141var size = BindArrayDimension(arg, diagnostics, ref hasErrors); 4162var size = BindRValueWithoutTargetType(arg, diagnostics); 4171ImmutableArray<BoundExpression> arraySizes = sizes.ToImmutableAndFree(); 4178private BoundExpression BindArrayDimension(ExpressionSyntax dimension, BindingDiagnosticBag diagnostics, ref bool hasErrors) 4183var size = BindValue(dimension, diagnostics, BindValueKind.RValue); 4203private BoundExpression BindImplicitArrayCreationExpression(ImplicitArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4211ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: rank); 4232sizes: ImmutableArray<BoundExpression>.Empty, boundInitExprOpt: boundInitializerExpressions); 4235private BoundExpression BindImplicitStackAllocArrayCreationExpression(ImplicitStackAllocArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 4238ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: 1); 4270private ImmutableArray<BoundExpression> BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, BindingDiagnosticBag diagnostics, int dimension, int rank) 4272var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 4287private void BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, ArrayBuilder<BoundExpression> exprBuilder, BindingDiagnosticBag diagnostics, int dimension, int rank) 4299var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue); 4316var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue); 4358ImmutableArray<BoundExpression> boundInitExpr, 4364ArrayBuilder<BoundExpression> initializers = ArrayBuilder<BoundExpression>.GetInstance(); 4374BoundExpression boundExpression = boundInitExpr[boundInitExprIndex]; 4377BoundExpression convertedExpression = GenerateConversionForAssignment(elemType, boundExpression, diagnostics); 4386BoundExpression init = null; 4439ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>)) 4506ImmutableArray<BoundExpression> sizes, 4507ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>), 4534var size = sizes[i]; 4559BoundExpression[] sizeArray = new BoundExpression[rank]; 4585private BoundExpression BindStackAllocArrayCreationExpression( 4598ImmutableArray<BoundExpression>.Empty, 4621var builder = ArrayBuilder<BoundExpression>.GetInstance(); 4642BoundExpression count = null; 4758private BoundExpression BindStackAllocWithInitializer( 4764BoundExpression sizeOpt, 4767ImmutableArray<BoundExpression> boundInitExprOpt = default) 4810private static int? GetIntegerConstantForArraySize(BoundExpression expression) 4831private static bool IsNegativeConstantForArraySize(BoundExpression expression) 4877internal BoundExpression BindConstructorInitializer( 4889var result = (argumentListBinder ?? this).BindConstructorInitializerCore(initializerArgumentListOpt, constructor, diagnostics); 4901private BoundExpression BindConstructorInitializerCore( 5062private BoundExpression BindConstructorInitializerCoreContinued( 5095BoundExpression receiver = ThisReference(nonNullSyntax, initializerType, wasCompilerGenerated: true); 5237private static (ParameterSymbol, SyntaxNode) TryGetPrimaryConstructorParameterUsedAsValue(SynthesizedPrimaryConstructor primaryConstructor, BoundExpression boundExpression) 5272private BoundExpression BindImplicitObjectCreationExpression(ImplicitObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5289protected BoundExpression BindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5291BoundExpression result = bindObjectCreationExpression(node, diagnostics); 5298BoundExpression bindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics) 5349private BoundExpression BindCollectionExpression(CollectionExpressionSyntax syntax, BindingDiagnosticBag diagnostics, int nestingLevel = 0) 5356return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType()); 5402var expression = @this.BindRValueWithoutTargetType(syntax.Expression, diagnostics); 5430var convertedExpression = @this.ConvertForEachCollection(expressionPlaceholder, conversion, collectionType, diagnostics); 5432BoundExpression? lengthOrCount; 5477var arg = arguments[i]; 5520private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics) 5524var result = BindDelegateCreationExpression(node, type, analyzedArguments, node.Initializer, wasTargetTyped: false, diagnostics); 5529private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics) 5563BoundExpression argument = analyzedArguments.Arguments.Count >= 1 ? BindToNaturalType(analyzedArguments.Arguments[0], diagnostics) : null; 5698private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null) 5732private BoundExpression MakeConstructorInvocation( 5734ArrayBuilder<BoundExpression> arguments, 5753var creation = BindClassCreationExpression(node, type.Name, node, type, analyzedArguments, diagnostics); 5763internal BoundExpression BindObjectCreationForErrorRecovery(BoundUnconvertedObjectCreationExpression node, BindingDiagnosticBag diagnostics) 5771private BoundExpression MakeBadExpressionForObjectCreation(ObjectCreationExpressionSyntax node, TypeSymbol type, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics, bool wasCompilerGenerated = false) 5779var children = ArrayBuilder<BoundExpression>.GetInstance(); 5826private BoundExpression BindInitializerExpressionOrValue( 5867var initializers = ArrayBuilder<BoundExpression>.GetInstance(initializerSyntax.Expressions.Count); 5873BoundExpression boundMemberInitializer = BindInitializerMemberAssignment( 5889private BoundExpression BindInitializerMemberAssignment( 5902BoundExpression boundLeft = BindObjectInitializerMember(initializer, implicitReceiver, diagnostics); 5913BoundExpression boundRight = BindInitializerExpressionOrValue( 5934var boundNode = BindObjectInitializerMemberMissingAssignment(identifierName, implicitReceiver, diagnostics); 5956var boundExpression = BindValue(memberInitializer, diagnostics, BindValueKind.RValue); 5962private BoundExpression BindObjectInitializerMember( 5978private BoundExpression BindObjectInitializerMemberMissingAssignment( 5988private BoundExpression BindObjectInitializerMemberCommon( 5995BoundExpression boundMember; 6077ImmutableArray<BoundExpression> arguments = ImmutableArray<BoundExpression>.Empty; 6129foreach (var argument in arguments) 6227private BoundExpression BadObjectInitializerMemberAccess( 6228BoundExpression boundMember, 6269private static void ReportDuplicateObjectMemberInitializers(BoundExpression boundMemberInitializer, HashSet<string> memberNameMap, BindingDiagnosticBag diagnostics) 6311ImmutableArray<BoundExpression> initializers, 6330foreach (var initializer in initializers) 6421var initializerBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 6445BoundExpression boundElementInitializer = BindCollectionInitializerElement(elementInitializer, initializerType, 6490private BoundExpression BindCollectionInitializerElement( 6520var boundElementInitializer = BindInitializerExpressionOrValue(elementInitializer, initializerType, BindValueKind.RValue, implicitReceiver.Syntax, diagnostics); 6522BoundExpression result = BindCollectionInitializerElementAddMethod( 6535private BoundExpression BindComplexElementInitializerExpression( 6546var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 6567private BoundExpression BindUnexpectedComplexElementInitializer(InitializerExpressionSyntax node, BindingDiagnosticBag diagnostics) 6574private BoundExpression BindCollectionInitializerElementAddMethod( 6576ImmutableArray<BoundExpression> boundElementInitializerExpressions, 6607var result = bindCollectionInitializerElementAddMethod(elementInitializer, boundElementInitializerExpressions, collectionInitializerAddMethodBinder, diagnostics, implicitReceiver); 6626BoundExpression bindCollectionInitializerElementAddMethod( 6628ImmutableArray<BoundExpression> boundElementInitializerExpressions, 6654var addMethodInvocation = collectionInitializerAddMethodBinder.MakeInvocationExpression( 6750var addMethodInvocation = BindCollectionInitializerElementAddMethod( 6752ImmutableArray.Create((BoundExpression)addElementPlaceholder), 6832protected BoundExpression BindClassCreationExpression( 6852BoundExpression result = null; 7018private BoundExpression CreateBadClassCreationExpression( 7068var childNodes = ArrayBuilder<BoundExpression>.GetInstance(); 7091private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics) 7095var result = BindInterfaceCreationExpression(node, type, diagnostics, node.Type, analyzedArguments, node.Initializer, wasTargetTyped: false); 7100private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped) 7126private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped) 7164var classCreation = BindClassCreationExpression( 7207private BoundExpression BindNoPiaObjectCreationExpression( 7249private BoundExpression BindTypeParameterCreationExpression(ObjectCreationExpressionSyntax node, TypeParameterSymbol typeParameter, BindingDiagnosticBag diagnostics) 7253var result = BindTypeParameterCreationExpression(node, typeParameter, analyzedArguments, node.Initializer, node.Type, wasTargetTyped: false, diagnostics); 7270private BoundExpression BindTypeParameterCreationExpression( 7613private BoundExpression BindCheckedExpression(CheckedExpressionSyntax node, BindingDiagnosticBag diagnostics) 7619private BoundExpression BindUnsafeExpression(UnsafeExpressionSyntax node, BindingDiagnosticBag diagnostics) 7636private BoundExpression BindMemberAccess( 7645BoundExpression boundLeft; 7694private BoundExpression BindLeftOfPotentialColorColorMemberAccess(ExpressionSyntax left, BindingDiagnosticBag diagnostics) 7707private BoundExpression BindLeftIdentifierOfPotentialColorColorMemberAccess(IdentifierNameSyntax left, BindingDiagnosticBag diagnostics) 7777var boundType = BindNamespaceOrType(left, BindingDiagnosticBag.Discarded); 7789var boundValue = bindAsValue(left, diagnostics); 7795BoundExpression bindAsValue(IdentifierNameSyntax left, BindingDiagnosticBag diagnostics) 7827private BoundExpression BindDynamicMemberAccess( 7829BoundExpression boundLeft, 7901/// <see cref="MakeQueryInvocation(CSharpSyntaxNode, BoundExpression, string, SeparatedSyntaxList{TypeSyntax}, ImmutableArray{TypeWithAnnotations}, ImmutableArray{BoundExpression}, BindingDiagnosticBag)"/>. 7904private BoundExpression BindMemberAccessWithBoundLeft( 7906BoundExpression boundLeft, 7989BoundExpression result; 8054BoundExpression tryBindMemberAccessWithBoundNamespaceLeft( 8057BoundExpression boundLeft, 8127BoundExpression tryBindMemberAccessWithBoundTypeLeft( 8129BoundExpression boundLeft, 8178var nonMethodExtensionMember = ResolveExtensionMemberAccessIfResultIsNonMethod(node, boundLeft, rightName, 8195private void WarnOnAccessOfOffDefault(SyntaxNode node, BoundExpression boundLeft, BindingDiagnosticBag diagnostics) 8209private BoundExpression MakeMemberAccessValue(BoundExpression expr, BindingDiagnosticBag diagnostics) 8257internal BoundExpression? ResolveExtensionMemberAccessIfResultIsNonMethod(SyntaxNode syntax, BoundExpression receiver, string name, 8286private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics) 8313private BoundExpression BindInstanceMemberAccess( 8316BoundExpression boundLeft, 8366var nonMethodExtensionMember = ResolveExtensionMemberAccessIfResultIsNonMethod(node, boundLeft, rightName, 8388private BoundMethodGroup MakeBoundMethodGroupAndCheckOmittedTypeArguments(BoundExpression boundLeft, string rightName, 8441BoundExpression boundLeft, 8520private BoundExpression BindMemberAccessBadResult(BoundMethodGroup node) 8530private BoundExpression BindMemberAccessBadResult( 8533BoundExpression boundLeft, 8572boundLeft == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(AdjustBadExpressionChild(BindToTypeForErrorRecovery(boundLeft))), 8604private static void CombineExtensionMethodArguments(BoundExpression receiver, AnalyzedArguments? originalArguments, AnalyzedArguments extensionMethodArguments) 8637private BoundExpression BindMemberOfType( 8644BoundExpression left, 8657BoundExpression result; 8724boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 8764BoundExpression left, 8846BoundExpression left, 8966BoundExpression left, 8996BoundExpression left, 9035BoundExpression left, 9119BoundExpression receiver, 9182private bool TryBindExtensionRealIndexer(SyntaxNode syntax, BoundExpression left, AnalyzedArguments analyzedArguments, 9183ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundExpression? extensionIndexerAccess) 9209BoundExpression? tryBindExtensionRealIndexer( 9211BoundExpression left, 9224binder: this, scope: scope, ref useSiteInfo, diagnostics: diagnostics, out BoundExpression? extensionIndexerAccess)) 9236BoundExpression receiver, 9244out BoundExpression? extensionIndexerAccess) 9279private bool TryBindImplicitIndexerInAnyScope(SyntaxNode syntax, BoundExpression left, AnalyzedArguments analyzedArguments, 9280ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundExpression? extensionIndexerAccess) 9313BoundExpression receiver, 9321out BoundExpression? indexerAccess) 9335BoundExpression? indexerOrSliceAccess = null; 9336BoundExpression? lengthOrCountAccess = null; 9395out BoundExpression? lengthOrCountAccess, 9474static bool tryResolveLengthOrCount(BoundExpression receiver, ArrayBuilder<PropertySymbol>? properties, Binder binder, 9497out BoundExpression? lengthAccess) 9542out BoundExpression? indexerOrSliceAccess, 9570out BoundExpression? indexerAccess, 9647[NotNullWhen(true)] out BoundExpression? sliceAccess, 9758BoundExpression receiver, 9765out BoundExpression? extensionIndexerAccess) 9793private bool AllowRefOmittedArguments(BoundExpression receiver) 9801protected BoundExpression BindFieldAccess( 9803BoundExpression receiver, 9907BoundExpression expr = new BoundFieldAccess(node, receiver, fieldSymbol, constantValueOpt, resultKind, fieldType, hasErrors: (hasErrors || hasError)); 9980private BoundExpression BindPropertyAccess( 9982BoundExpression? receiver, 10007private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics) 10066private BoundExpression BindEventAccess( 10068BoundExpression receiver, 10094private static bool? IsInstanceReceiver(BoundExpression receiver) 10119BoundExpression receiver, 10292private BoundExpression BindElementAccess(ElementAccessExpressionSyntax node, BindingDiagnosticBag diagnostics) 10294BoundExpression receiver = BindExpression(node.Expression, diagnostics: diagnostics, invoked: false, indexed: true); 10295var result = BindElementAccess(node, receiver, node.ArgumentList, allowInlineArrayElementAccess: true, diagnostics); 10306private BoundExpression BindElementAccess(ExpressionSyntax node, BoundExpression receiver, BracketedArgumentListSyntax argumentList, bool allowInlineArrayElementAccess, BindingDiagnosticBag diagnostics) 10331private BoundExpression BindElementOrIndexerAccess(ExpressionSyntax node, BoundExpression expr, AnalyzedArguments analyzedArguments, bool allowInlineArrayElementAccess, BindingDiagnosticBag diagnostics) 10378BoundExpression result = BindElementAccessCore(node, expr, analyzedArguments, diagnosticsForBindElementAccessCore); 10397BoundExpression tryImplicitConversionToInlineArrayIndex(ExpressionSyntax node, BoundExpression index, BindingDiagnosticBag diagnostics, out WellKnownType indexOrRangeWellknownType) 10400BoundExpression convertedIndex = TryImplicitConversionToArrayIndex(index, SpecialType.System_Int32, node, diagnostics); 10423BoundExpression bindInlineArrayElementAccess(ExpressionSyntax node, BoundExpression expr, int length, AnalyzedArguments analyzedArguments, BoundExpression convertedIndex, WellKnownType indexOrRangeWellknownType, FieldSymbol elementField, BindingDiagnosticBag diagnostics) 10498if (rangeExpr.LeftOperandOpt is BoundExpression left) 10503if (rangeExpr.RightOperandOpt is BoundExpression right) 10548void checkInlineArrayBoundsForSystemIndex(BoundExpression convertedIndex, int length, bool excludeEnd, BindingDiagnosticBag diagnostics) 10560internal static int? InferConstantIndexFromSystemIndex(CSharpCompilation compilation, BoundExpression convertedIndex, int length, out SyntaxNode location) 10593private BoundExpression BadIndexerExpression(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, DiagnosticInfo errorOpt, BindingDiagnosticBag diagnostics) 10604private BoundExpression BindElementAccessCore( 10606BoundExpression expr, 10639private BoundExpression BindArrayAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics) 10674BoundExpression[] convertedArguments = new BoundExpression[arguments.Arguments.Count]; 10678BoundExpression argument = arguments.Arguments[i]; 10680BoundExpression index = ConvertToArrayIndex(argument, diagnostics, allowIndexAndRange: rank == 1, out indexOrRangeWellknownType); 10714indexerOrSliceAccess: new BoundArrayAccess(node, receiverPlaceholder, ImmutableArray<BoundExpression>.CastUp(argumentPlaceholders), resultType) { WasCompilerGenerated = true }, 10722private BoundExpression ConvertToArrayIndex(BoundExpression index, BindingDiagnosticBag diagnostics, bool allowIndexAndRange, out WellKnownType indexOrRangeWellknownType) 10738var result = 10789private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, WellKnownType wellKnownType, SyntaxNode node, BindingDiagnosticBag diagnostics) 10800var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics); 10810private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, SpecialType specialType, SyntaxNode node, BindingDiagnosticBag diagnostics) 10816var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics); 10827private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, TypeSymbol targetType, SyntaxNode node, BindingDiagnosticBag diagnostics) 10845BoundExpression result = CreateConversion(expr.Syntax, expr, conversion, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, destination: targetType, diagnostics); // UNDONE: was cast? 10851private BoundExpression BindPointerElementAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics) 10873ArrayBuilder<BoundExpression> arguments = analyzedArguments.Arguments; 10890BoundExpression index = arguments[0]; 10913private BoundExpression BindIndexerAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics) 10926BoundExpression? indexerAccessExpression = null; 10943BoundExpression? fallbackIndexerAccess = null; 11019private BoundExpression BindIndexedPropertyAccess(BoundPropertyGroup propertyGroup, bool mustHaveAllOptionalParameters, BindingDiagnosticBag diagnostics) 11022var receiver = propertyGroup.ReceiverOpt; 11036ImmutableArray<BoundExpression>.Empty, 11043var result = BindIndexedPropertyAccess(syntax, receiver, properties, arguments, diagnostics); 11049private BoundExpression BindIndexedPropertyAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<PropertySymbol> propertyGroup, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics) 11057var result = BindIndexerOrIndexedPropertyAccess(syntax, receiver, properties, arguments, foundApplicable: out _, ref useSiteInfo, diagnostics); 11064private BoundExpression BindDynamicIndexer( 11066BoundExpression receiver, 11108private BoundExpression BindIndexerOrIndexedPropertyAccess( 11110BoundExpression receiver, 11147private BoundExpression BindIndexerOrIndexedPropertyAccessContinued( 11149BoundExpression receiver, 11155BoundExpression propertyAccess; 11179ImmutableArray<BoundExpression> arguments = BuildArgumentsForErrorRecovery(analyzedArguments, candidates); 11205private BoundIndexerAccess BindResolvedIndexerOrIndexedPropertyAccess(SyntaxNode syntax, BoundExpression receiver, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, MemberResolutionResult<PropertySymbol> resolutionResult) 11254BoundExpression receiver, 11258[NotNullWhen(true)] out BoundExpression? implicitIndexerAccess) 11277out BoundExpression? lengthOrCountAccess, out BoundExpression? indexerOrSliceAccess, ref intIndexerOrSliceArgumentPlaceholders, ref useSiteInfo, diagnostics)) 11290BoundExpression receiver, 11293BoundExpression lengthOrCountAccess, 11294BoundExpression indexerOrSliceAccess, 11349[NotNullWhen(true)] out BoundExpression? lengthOrCountAccess, 11350[NotNullWhen(true)] out BoundExpression? indexerOrSliceAccess, 11394BoundExpression receiver, 11401out BoundExpression sliceAccess, 11492out BoundExpression lengthOrCountAccess, 11866BoundExpression receiver = node.ReceiverOpt; 11985private static bool IsStaticInstanceMismatchForUniqueSignatureFromMethodGroup(BoundExpression receiver, Symbol extensionMember) 12082BoundExpression receiver = node.ReceiverOpt; 12341BoundExpression receiver = BindConditionalAccessReceiver(node, diagnostics); 12344var access = conditionalAccessBinder.BindValue(node.WhenNotNull, diagnostics, BindValueKind.RValue); 12448private BoundConditionalAccess GenerateBadConditionalAccessNodeError(ConditionalAccessExpressionSyntax node, BoundExpression receiver, BoundExpression access, BindingDiagnosticBag diagnostics) 12457private BoundExpression BindMemberBindingExpression(MemberBindingExpressionSyntax node, bool invoked, bool indexed, BindingDiagnosticBag diagnostics) 12459BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics); 12461var memberAccess = BindMemberAccessWithBoundLeft(node, receiver, node.Name, node.OperatorToken, invoked, indexed, diagnostics); 12465private BoundExpression BindElementBindingExpression(ElementBindingExpressionSyntax node, BindingDiagnosticBag diagnostics) 12467BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics); 12469var memberAccess = BindElementAccess(node, receiver, node.ArgumentList, allowInlineArrayElementAccess: true, diagnostics); 12488private BoundExpression GetReceiverForConditionalBinding(ExpressionSyntax binding, BindingDiagnosticBag diagnostics) 12493BoundExpression receiver = this.ConditionalReceiverExpression; 12513private BoundExpression BindConditionalAccessReceiver(ConditionalAccessExpressionSyntax node, BindingDiagnosticBag diagnostics) 12516var 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 (94)
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( 735private BoundExpression BindMethodGroupInvocationCore( 746BoundExpression result = bindMethodGroupInvocationCore(syntax, expression, methodName, methodGroup, analyzedArguments, 752BoundExpression bindMethodGroupInvocationCore(SyntaxNode syntax, SyntaxNode expression, string methodName, BoundMethodGroup methodGroup, AnalyzedArguments analyzedArguments, MethodGroupResolution resolution, BindingDiagnosticBag diagnostics, CSharpSyntaxNode queryClause, out bool anyApplicableCandidates) 757BoundExpression extensionMemberAccess = GetExtensionMemberAccess(expression, methodGroup.ReceiverOpt, extensionMember, diagnostics); 762BoundExpression extensionMemberInvocation = BindInvocationExpression(syntax, expression, methodName: null, extensionMemberAccess, analyzedArguments, diagnostics, acceptOnlyMethods: false); 767BoundExpression result = null; 777BoundExpression receiverOpt = methodGroup.ReceiverOpt; 920private bool IsAmbiguousDynamicParamsArgument<TMethodOrPropertySymbol>(ArrayBuilder<BoundExpression> arguments, MemberResolutionResult<TMethodOrPropertySymbol> candidate, out SyntaxNode argumentSyntax) 931var arg = arguments[i]; 998private BoundExpression TryEarlyBindSingleCandidateInvocationWithDynamicArgument( 1018BoundExpression result = BindInvocationExpressionContinued( 1037BoundExpression receiverOpt, 1098private void CheckRestrictedTypeReceiver(BoundExpression expression, CSharpCompilation compilation, BindingDiagnosticBag diagnostics) 1267var receiver = ReplaceTypeOrValueReceiver(methodGroup.Receiver, useType: !method.RequiresInstanceReceiver && !invokedAsExtensionMethod, diagnostics); 1280var extensionReceiver = isExtensionBlockMethod && !method.IsStatic ? receiver : null; 1293BoundExpression receiverArgument = analyzedArguments.Argument(0); 1396private BoundExpression CheckAndConvertExtensionReceiver(BoundExpression receiver, ParameterSymbol extensionParameter, BindingDiagnosticBag diagnostics) 1411internal ThreeState ReceiverIsSubjectToCloning(BoundExpression? receiver, PropertySymbol property) 1424internal ThreeState ReceiverIsSubjectToCloning(BoundExpression? receiver, MethodSymbol method) 1465private BoundExpression GetDefaultParameterSpecialNoConversion(SyntaxNode syntax, ParameterSymbol parameter, BindingDiagnosticBag diagnostics) 1482BoundExpression? defaultValue = null; 1569BoundExpression? extensionReceiver, 1570ArrayBuilder<BoundExpression> argumentsBuilder, 1675BoundExpression collection = CreateParamsCollection(node, parameters[paramsIndex], collectionArgs: ImmutableArray<BoundExpression>.Empty, diagnostics); 1701BoundExpression bindDefaultArgument(SyntaxNode syntax, ParameterSymbol parameter, Symbol? containingMember, bool enableCallerInfo, BindingDiagnosticBag diagnostics, 1702BoundExpression? extensionReceiver, ArrayBuilder<BoundExpression> argumentsBuilder, int argumentsCount, ImmutableArray<int> argsToParamsOpt) 1729BoundExpression defaultValue; 1749&& tryGetArgument(parameter.CallerArgumentExpressionParameterIndex, extensionReceiver, argumentsBuilder, argumentsCount, argsToParamsOpt, out var argument)) 1815BoundExpression? extensionReceiver, ArrayBuilder<BoundExpression> argumentsBuilder, int argumentsCount, ImmutableArray<int> argsToParamsOpt, 1816[NotNullWhen(true)] out BoundExpression? argument) 1873private BoundExpression CreateParamsCollection(SyntaxNode node, ParameterSymbol paramsParameter, ImmutableArray<BoundExpression> collectionArgs, BindingDiagnosticBag diagnostics) 1876BoundExpression collection; 1881BoundExpression arraySize = new BoundLiteral(node, ConstantValue.Create(collectionArgs.Length), int32Type) { WasCompilerGenerated = true }; 1944internal bool CheckImplicitThisCopyInReadOnlyMember(BoundExpression receiver, MethodSymbol method, BindingDiagnosticBag diagnostics) 1992private BoundExpression ReplaceTypeOrValueReceiver(BoundExpression receiver, bool useType, BindingDiagnosticBag diagnostics) 2018var boundValue = typeOrValue.Binder.BindIdentifier(identifier, invoked: false, indexed: false, diagnostics: diagnostics); 2030var value = q.Value; 2031var replaced = ReplaceTypeOrValueReceiver(value, useType, diagnostics); 2039private static Symbol GetValueSymbolIfTypeOrValueReceiver(BoundExpression receiver) 2063private static NamedTypeSymbol GetDelegateType(BoundExpression expr) 2079BoundExpression receiver, 2089ImmutableArray<BoundExpression> args; 2155private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<MethodSymbol> methods, BindingDiagnosticBag diagnostics) 2175private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<PropertySymbol> properties) 2196private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, IEnumerable<ImmutableArray<ParameterSymbol>> parameterListList, BindingDiagnosticBag diagnostics) 2199ArrayBuilder<BoundExpression> newArguments = ArrayBuilder<BoundExpression>.GetInstance(argumentCount); 2203var argument = newArguments[i]; 2353private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments) 2360BoundExpression expr, 2396private bool TryBindNameofOperator(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics, out BoundExpression result) 2413private BoundExpression BindNameofOperatorInternal(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics) 2417var boundArgument = BindExpression(argument, diagnostics); 2570private BoundFunctionPointerInvocation BindFunctionPointerInvocation(SyntaxNode node, BoundExpression boundExpression, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
Binder\Binder_Operators.cs (167)
24private BoundExpression BindCompoundAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 27BoundExpression result = bindCompoundAssignment(node, ref operatorResolutionForReporting, diagnostics); 31BoundExpression bindCompoundAssignment(AssignmentExpressionSyntax node, ref OperatorResolutionForReporting operatorResolutionForReporting, BindingDiagnosticBag diagnostics) 35BoundExpression left = BindValue(node.Left, diagnostics, BindValueKind.CompoundAssignment); 37BoundExpression right = BindValue(node.Right, diagnostics, BindValueKind.RValue); 263BoundExpression rightConverted = CreateConversion(right, best.RightConversion, bestSignature.RightType, diagnostics); 272BoundExpression? finalConversion = GenerateConversionForAssignment(leftType, finalPlaceholder, diagnostics, 315var leftConversion = CreateConversion(node.Left, leftPlaceholder, best.LeftConversion, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, best.Signature.LeftType, diagnostics); 324BoundExpression left, 325BoundExpression right, 338bool shouldTryUserDefinedInstanceOperator(AssignmentExpressionSyntax node, bool checkOverflowAtRuntime, BoundExpression left, out string? checkedName, out string? ordinaryName) 378BoundExpression left, 379BoundExpression right, 423BoundExpression left, 424BoundExpression right, 476BoundExpression rightConverted = CreateConversion(right, overloadResolutionResult.ValidResult.Result.ConversionForArg(isExtension ? 1 : 0), method.Parameters[0].Type, diagnostics); 483BoundExpression? leftConversion = null; 578BoundExpression left, 579BoundExpression right, 658BoundExpression left, 659BoundExpression right, 690private BoundExpression BindEventAssignment(AssignmentExpressionSyntax node, BoundEventAccess left, BoundExpression right, BinaryOperatorKind opKind, BindingDiagnosticBag diagnostics) 697BoundExpression receiverOpt = left.ReceiverOpt; 713BoundExpression argument = CreateConversion(right, argumentConversion, delegateType, diagnostics); 776private static bool IsLegalDynamicOperand(BoundExpression operand) 799private BoundExpression BindDynamicBinaryOperator( 802BoundExpression left, 803BoundExpression right, 883private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 902BoundExpression result = BindExpression(current, diagnostics); 926BoundExpression left = CheckValue(result, BindValueKind.RValue, diagnostics); 927BoundExpression right = BindValue(syntaxNode.Right, diagnostics, BindValueKind.RValue); 928BoundExpression boundOp = BindSimpleBinaryOperator(syntaxNode, diagnostics, left, right, leaveUnconvertedIfInterpolatedString: true); 936private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics, 937BoundExpression left, BoundExpression right, bool leaveUnconvertedIfInterpolatedString) 1067BoundExpression resultLeft = left; 1068BoundExpression resultRight = right; 1134private bool BindSimpleBinaryOperatorParts(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, BinaryOperatorKind kind, 1156BoundExpression left, 1157BoundExpression right, 1240private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics) 1247var result = doRebind(diagnostics, unconvertedBinaryOperator); 1250BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current) 1262BoundExpression? left = null; 1265var right = current.Right switch 1284private void ReportUnaryOperatorError(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics, string operatorName, BoundExpression operand, LookupResultKind resultKind, ref OperatorResolutionForReporting operatorResolutionForReporting) 1304private void ReportAssignmentOperatorError(AssignmentExpressionSyntax node, BinaryOperatorKind kind, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, 1324private void ReportBinaryOperatorError(ExpressionSyntax node, BindingDiagnosticBag diagnostics, SyntaxToken operatorToken, BoundExpression left, BoundExpression right, 1387private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 1410BoundExpression left = BindRValueWithoutTargetType(child, diagnostics); 1415BoundExpression right = BindRValueWithoutTargetType(binary.Right, diagnostics); 1424private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 1427BoundExpression result = bindConditionalLogicalOperator(node, left, right, ref operatorResolutionForReporting, diagnostics); 1431BoundExpression bindConditionalLogicalOperator(BinaryExpressionSyntax node, BoundExpression left, BoundExpression right, ref OperatorResolutionForReporting operatorResolutionForReporting, BindingDiagnosticBag diagnostics) 1516var resultLeft = CreateConversion(left, best.LeftConversion, signature.LeftType, diagnostics); 1517var resultRight = CreateConversion(right, best.RightConversion, signature.RightType, diagnostics); 1538BoundExpression operandConversion = CreateConversion( 1588private bool IsValidDynamicCondition(BoundExpression left, bool isNegative, BindingDiagnosticBag diagnostics, out MethodSymbol userDefinedOperator) 1656UnaryOperatorAnalysisResult operatorOverloadResolution(SyntaxNode node, BoundExpression operand, UnaryOperatorKind kind, BindingDiagnosticBag diagnostics) 2031BoundExpression left, 2032BoundExpression right, 2049BoundExpression left, 2050BoundExpression right, 2090BoundExpression left, 2091BoundExpression right, 2150BoundExpression left, 2151BoundExpression right, 2231private bool IsTypelessExpressionAllowedInBinaryOperator(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 2255BoundExpression operand, 2297BoundExpression operand, 2326BoundExpression operand, 2403BoundExpression operand, 2631internal static TypeSymbol GetEnumType(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 2681BoundExpression left, 2682BoundExpression right, 2699BoundExpression newLeftOperand = CreateConversion(left, underlyingType, diagnostics); 2700BoundExpression newRightOperand = CreateConversion(right, underlyingType, diagnostics); 2756BoundExpression left, 2757BoundExpression right, 2910private static ConstantValue? TryFoldingNullableEquality(BinaryOperatorKind kind, BoundExpression left, BoundExpression right) 3263private BoundExpression BindIncrementOperator(ExpressionSyntax node, ExpressionSyntax operandSyntax, SyntaxToken operatorToken, BindingDiagnosticBag diagnostics) 3266BoundExpression result = bindIncrementOperator(node, operandSyntax, operatorToken, ref operatorResolutionForReporting, diagnostics); 3270BoundExpression bindIncrementOperator(ExpressionSyntax node, ExpressionSyntax operandSyntax, SyntaxToken operatorToken, ref OperatorResolutionForReporting operatorResolutionForReporting, BindingDiagnosticBag diagnostics) 3274BoundExpression operand = BindToNaturalType(BindValue(operandSyntax, diagnostics, BindValueKind.IncrementDecrement), diagnostics); 3403BoundExpression? resultConversion = GenerateConversionForAssignment(operandType, resultPlaceholder, diagnostics, ConversionForAssignmentFlags.IncrementAssignment); 3425var operandConversion = CreateConversion(node, operandPlaceholder, best.Conversion, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, best.Signature.OperandType, diagnostics); 3447BoundExpression operand, 3494BoundExpression operand, 3533BoundExpression operand, 3589BoundExpression? operandConversion = null; 3686BoundExpression operand, 3770BoundExpression operand, 4055private BoundExpression BindSuppressNullableWarningExpression(PostfixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4059var expr = BindExpression(node.Operand, diagnostics); 4079private BoundExpression BindPointerIndirectionExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4081BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics); 4097private static void BindPointerIndirectionExpressionInternal(CSharpSyntaxNode node, BoundExpression operand, BindingDiagnosticBag diagnostics, out TypeSymbol pointedAtType, out bool hasErrors) 4133private BoundExpression BindAddressOfExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4135BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, BindValueKind.AddressOf), diagnostics); 4185internal bool IsMoveableVariable(BoundExpression expr, out Symbol accessedLocalOrParameterOpt) 4198BoundExpression receiver; 4311BoundExpression underlyingExpr = ((BoundPointerElementAccess)expr).Expression; 4330private BoundExpression BindUnaryOperator(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4332BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics); 4337private void ReportSuppressionIfNeeded(BoundExpression expr, BindingDiagnosticBag diagnostics) 4346private BoundExpression BindUnaryOperatorCore(CSharpSyntaxNode node, string operatorText, BoundExpression operand, BindingDiagnosticBag diagnostics) 4416var resultOperand = CreateConversion(operand.Syntax, operand, best.Conversion, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, signature.OperandType, diagnostics); 4438BoundExpression operand, 4443BoundExpression newOperand = CreateConversion(operand, underlyingType, diagnostics); 4473BoundExpression operand, 4670private BoundLiteral BindIntegralMinValConstants(PrefixUnaryExpressionSyntax node, BoundExpression operand, BindingDiagnosticBag diagnostics) 4759private bool IsOperandErrors(CSharpSyntaxNode node, ref BoundExpression operand, BindingDiagnosticBag diagnostics) 4821private BoundExpression BindIsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 4823var operand = BindRValueWithoutTargetType(node.Left, diagnostics); 4952BoundExpression tryAsConstantPattern(BinaryExpressionSyntax node, BoundExpression operand, bool operandHasErrors, TypeSymbol inputType, BindingDiagnosticBag diagnostics) 4978var convertedExpression = BindExpressionForPattern(unionType, inputType, node.Right, ref hasErrors, diagnostics, out var constantValueOpt, out var wasExpression, patternExpressionConversion: out _, out BoundExpression originalExpression); 5365private BoundExpression BindAsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 5367var operand = BindRValueWithoutTargetType(node.Left, diagnostics); 5452BoundExpression operandConversion; 5647private BoundExpression GenerateNullCoalescingBadBinaryOpsError(BinaryExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics) 5657private BoundExpression BindNullCoalescingOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics) 5659var leftOperand = BindValue(node.Left, diagnostics, BindValueKind.RValue); 5661var rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue); 5727var leftConversion = CreateConversion(node, leftPlaceholder, 5749var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType0, diagnostics); 5765var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType, diagnostics); 5817var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, optRightType, diagnostics); 5831var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, optRightType, diagnostics); 5844private BoundExpression BindNullCoalescingAssignmentOperator(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 5848BoundExpression leftOperand = BindValue(node.Left, diagnostics, BindValueKind.NullCoalescingAssignment); 5850BoundExpression rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue); 5881var convertedRightOperand = CreateConversion(rightOperand, underlyingRightConversion, underlyingLeftType, diagnostics); 5895var convertedRightOperand = CreateConversion(rightOperand, rightConversion, leftType, diagnostics); 5903private BoundExpression GenerateNullCoalescingAssignmentBadBinaryOpsError(AssignmentExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics) 5945private BoundExpression BindConditionalOperator(ConditionalExpressionSyntax node, BindingDiagnosticBag diagnostics) 5972private BoundExpression BindValueConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics) 5974BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics); 5975BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue); 5976BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue); 6013private BoundExpression BindRefConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics) 6015BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics); 6016BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation); 6017BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation); 6050private void ValidateRefConditionalOperator(SyntaxNode node, BoundExpression trueExpr, BoundExpression falseExpr, BindingDiagnosticBag diagnostics) 6074private static ConstantValue FoldConditionalOperator(BoundExpression condition, BoundExpression trueExpr, BoundExpression falseExpr)
Binder\Binder_Patterns.cs (35)
61private BoundExpression BindIsPatternExpression(IsPatternExpressionSyntax node, BindingDiagnosticBag diagnostics) 65BoundExpression expression = BindRValueWithoutTargetType(node.Expression, diagnostics); 89private BoundExpression MakeIsPatternExpression( 91BoundExpression expression, 200private BoundExpression BindSwitchExpression(SwitchExpressionSyntax node, BindingDiagnosticBag diagnostics) 211internal virtual BoundExpression BindSwitchExpressionCore( 278BoundExpression? indexerAccess = null; 372BoundExpression? indexerAccess; 373BoundExpression? lengthAccess; 408out Symbol? variableSymbol, out BoundExpression? variableAccess); 423indexerAccess: out _, out var lengthAccess, receiverPlaceholder: out _, argumentPlaceholder: out _); 429out BoundExpression indexerAccess, [NotNull] out BoundExpression? lengthAccess, out BoundListPatternReceiverPlaceholder? receiverPlaceholder, out BoundListPatternIndexPlaceholder argumentPlaceholder) 449bool tryBindIndexIndexer(BoundListPatternReceiverPlaceholder receiverPlaceholder, out BoundExpression indexerAccess, 501var originalExpression = BindTypeOrRValue(innerExpression, diagnostics); 512BoundExpression convertedExpression = BindExpressionForPatternContinued(originalExpression, unionType, inputType, innerExpression, ref hasErrors, diagnostics, out constantValueOpt, out patternConversion); 614private BoundExpression BindExpressionForPattern( 623out BoundExpression originalExpression) 633private BoundExpression BindExpressionForPatternContinued( 634BoundExpression expression, 643BoundExpression convertedExpression = ConvertPatternExpression( 679internal BoundExpression ConvertPatternExpression( 683BoundExpression expression, 689BoundExpression convertedExpression; 782BoundExpression operand = conversion.Operand; 1037hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess); 1076out BoundExpression? variableAccess) 1112BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics); 1205BoundExpression deconstruct = MakeDeconstructInvocationExpression( 1247ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess); 1274BoundExpression deconstruct, 1584variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess); 1630BoundExpression deconstruct = MakeDeconstructInvocationExpression( 1835BoundExpression boundMember = BindInstanceMemberAccess( 1974BoundExpression value = BindExpressionForPattern(unionType, inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out Conversion patternConversion, originalExpression: out _);
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; 587BoundExpression collectionSelectorLambda; 626BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null; 672BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null; 677private static BoundExpression? ExtractCastInvocation(BoundCall invocation) 700var construction = MakePair(node, x1.Name, x1Expression, x2.Name, x2Expression, state, d); 736var yExpression = lambdaBodyBinder.BindRValueWithoutTargetType(let.Expression, d); 750var construction = MakePair(let, x.Name, xExpression, let.Identifier.ValueText, yExpression, state, d); 773private BoundBlock CreateLambdaBlockForQueryClause(ExpressionSyntax expression, BoundExpression result, BindingDiagnosticBag diagnostics) 786BoundExpression expression, 788BoundExpression? queryInvocation = null, 789BoundExpression? castInvocation = null, 790BoundExpression? unoptimizedForm = null) 802private BoundExpression MakePair(CSharpSyntaxNode node, string field1Name, BoundExpression field1Value, string field2Name, BoundExpression field2Value, QueryTranslationState state, BindingDiagnosticBag diagnostics) 822AnonymousTypeField createField(string fieldName, BoundExpression fieldValue) => 826private TypeSymbol TypeOrError(BoundExpression e) 842BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue); 852BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue); 879protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, BoundExpression arg, BindingDiagnosticBag diagnostics 892protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics 905protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, TypeSyntax typeArgSyntax, TypeWithAnnotations typeArg, BindingDiagnosticBag diagnostics 911return MakeQueryInvocation(node, receiver, methodName, new SeparatedSyntaxList<TypeSyntax>(new SyntaxNodeOrTokenList(typeArgSyntax, 0)), ImmutableArray.Create(typeArg), ImmutableArray<BoundExpression>.Empty, diagnostics 918protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, SeparatedSyntaxList<TypeSyntax> typeArgsSyntax, ImmutableArray<TypeWithAnnotations> typeArgs, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics 928var ultimateReceiver = receiver; 990var checkedUltimateReceiver = CheckValue(ultimateReceiver, BindValueKind.RValue, diagnostics); 1010static BoundExpression updateUltimateReceiver(BoundExpression receiver, BoundExpression originalUltimateReceiver, BoundExpression replacementUltimateReceiver) 1029protected BoundExpression MakeConstruction(CSharpSyntaxNode node, NamedTypeSymbol toCreate, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics) 1033var 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) 761internal MethodSymbol TryFindDisposePatternMethod(BoundExpression expr, SyntaxNode syntaxNode, bool hasAwait, BindingDiagnosticBag diagnostics, out bool isExpanded) 868internal BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, RefKind refKind, EqualsValueClauseSyntax initializer, 878protected BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, ExpressionSyntax initializer, BindValueKind valueKind, CSharpSyntaxNode errorSyntax) 898BoundExpression value = BindValue(initializer, diagnostics, valueKind); 899BoundExpression expression = value.Kind is BoundKind.UnboundLambda or BoundKind.MethodGroup ? 1019BoundExpression initializerOpt; 1113ImmutableArray<BoundExpression> arguments = BindDeclaratorArguments(declarator, localDiagnostics); 1141var invalidDimensions = ArrayBuilder<BoundExpression>.GetInstance(); 1148var size = args.binder.BindArrayDimension(expressionSyntax, args.diagnostics, ref _); 1179internal ImmutableArray<BoundExpression> BindDeclaratorArguments(VariableDeclaratorSyntax declarator, BindingDiagnosticBag diagnostics) 1188var arguments = default(ImmutableArray<BoundExpression>); 1227private bool IsValidFixedVariableInitializer(TypeSymbol declType, ref BoundExpression initializerOpt, BindingDiagnosticBag diagnostics) 1325private MethodSymbol GetFixedPatternMethodOpt(BoundExpression initializer, BindingDiagnosticBag additionalDiagnostics) 1358private BoundExpression GetFixedLocalCollectionInitializer( 1359BoundExpression initializer, 1376BoundExpression elementConversion; 1408private BoundExpression BindAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics) 1428var op1 = BindValue(node.Left, diagnostics, lhsKind); 1432var op2 = BindValue(rhsExpr, diagnostics, rhsKind); 1444private static BindValueKind GetRequiredRHSValueKindForRefAssignment(BoundExpression boundLeft) 1463private BoundExpression InferTypeForDiscardAssignment(BoundDiscardExpression op1, BoundExpression op2, BindingDiagnosticBag diagnostics) 1481BoundExpression op1, 1482BoundExpression op2, 1506var conversion = GenerateConversionForAssignment(lhsType, op2, 1550BoundExpression op1, 1551BoundExpression op2, 1634static object getName(BoundExpression expr) 1667internal static PropertySymbol GetPropertySymbol(BoundExpression expr, out BoundExpression receiver, out SyntaxNode propertySyntax) 1744internal static Symbol? GetIndexerOrImplicitIndexerSymbol(BoundExpression? e) 1805private static bool AccessingAutoPropertyFromConstructor(BoundExpression? receiver, PropertySymbol propertySymbol, Symbol fromMember, AccessorKind accessorKind) 1847private TypeSymbol GetAccessThroughType(BoundExpression receiver) 1866private BoundExpression BindPossibleArrayInitializer( 1879BoundExpression result; 1884ImmutableArray<BoundExpression>.Empty); 1963internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None) 1966internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, out Conversion conversion, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None) 2350BoundExpression operand, 2469void tryConversion(BoundExpression expr, ref bool reportedError, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 2554ImmutableArray<BoundExpression> tupleArguments, 2568var argument = tupleArguments[i]; 2586var stack = ArrayBuilder<(Binder, IfStatementSyntax IfStatementSyntax, BoundExpression Condition, BoundStatement Consequence)>.GetInstance(); 2591var condition = binder.BindBooleanExpression(node.Condition, diagnostics); 2625BoundExpression condition; 2650internal BoundExpression BindBooleanExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics) 2686var expr = BindValue(node, diagnostics, BindValueKind.RValue); 2767BoundExpression resultOperand = CreateConversion( 3065BoundExpression arg = null; 3200internal BoundExpression CreateReturnConversion( 3203BoundExpression argument, 3331BoundExpression boundFilter = null; 3421BoundExpression exceptionSource = null; 3441private BoundExpression BindCatchFilter(CatchFilterClauseSyntax filter, BindingDiagnosticBag diagnostics) 3445BoundExpression boundFilter = this.BindBooleanExpression(filter.FilterExpression, diagnostics); 3508private static bool IsValidStatementExpression(SyntaxNode syntax, BoundExpression expression) 3538internal BoundBlock CreateBlockFromExpression(CSharpSyntaxNode node, ImmutableArray<LocalSymbol> locals, RefKind refKind, BoundExpression expression, ExpressionSyntax expressionSyntax, BindingDiagnosticBag diagnostics) 3627private static bool IsValidExpressionBody(SyntaxNode expressionSyntax, BoundExpression expression) 3668BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind); 3684BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind); 3688public BoundBlock CreateBlockFromExpression(ExpressionSyntax body, BoundExpression expression, BindingDiagnosticBag diagnostics) 3798BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics); 3876BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics); 3887BoundExpression? initializerInvocation; 3908internal static BoundExpression? BindImplicitConstructorInitializer( 4066BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true }; 4072arguments: ImmutableArray<BoundExpression>.Empty, 4112BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true }; 4113BoundExpression argument = new BoundParameter(syntax, constructor.Parameters[0]); 4210internal PatternLookupResult PerformPatternMethodLookup(BoundExpression receiver, string methodName, 4220var boundAccess = BindInstanceMemberAccess( 4245var patternMethodCall = BindMethodGroupInvocation(
Binder\Binder_Symbols.cs (4)
1442BoundExpression receiver, 1487private BoundExpression CheckAmbiguousPrimaryConstructorParameterAsColorColorReceiver(BoundExpression receiver, SyntaxNode right, string plainName, 1537bool isPossiblyCapturingPrimaryConstructorParameterReference(BoundExpression receiver, out ParameterSymbol parameterSymbol)
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, 127out BoundExpression conversionForBool, out BoundValuePlaceholder conversionForBoolPlaceholder, out UnaryOperatorSignature boolOperator) 161BoundExpression comparisonResult = new BoundTupleOperandPlaceholder(node, type); 184BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 207BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics) 236(ImmutableArray<BoundExpression> leftParts, ImmutableArray<string> leftNames) = GetTupleArgumentsOrPlaceholders(left); 237(ImmutableArray<BoundExpression> rightParts, ImmutableArray<string> rightNames) = GetTupleArgumentsOrPlaceholders(right); 272private static void ReportNamesMismatchesIfAny(BoundExpression left, BoundExpression right, 331internal static BoundExpression GiveTupleTypeToDefaultLiteralIfNeeded(BoundExpression expr, TypeSymbol targetType) 342private static bool IsTupleBinaryOperation(BoundExpression left, BoundExpression right) 355private static int GetTupleCardinality(BoundExpression expr) 381private static (ImmutableArray<BoundExpression> Elements, ImmutableArray<string> Names) GetTupleArgumentsOrPlaceholders(BoundExpression expr) 390ImmutableArray<BoundExpression> placeholders = tupleType.TupleElementTypesWithAnnotations 391.SelectAsArray((t, s) => (BoundExpression)new BoundTupleOperandPlaceholder(s, t.Type), expr.Syntax); 402ImmutableArray<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\Binder.cs (4)
531internal virtual BoundExpression? ConditionalReceiverExpression 917internal BoundExpression WrapWithVariablesIfAny(CSharpSyntaxNode scopeDesignator, BoundExpression expression) 922: new BoundSequence(scopeDesignator, locals, ImmutableArray<BoundExpression>.Empty, expression, getType()) { WasCompilerGenerated = true };
Binder\Binder.QueryTranslationState.cs (1)
31public BoundExpression fromExpression;
Binder\Binder.QueryUnboundLambdaState.cs (2)
74protected override BoundExpression GetLambdaExpressionBody(BoundBlock body) 79protected override BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics)
Binder\Binder.ValueChecks.cs (88)
106public BoundExpression? Receiver; 108public ImmutableArray<BoundExpression> ArgsOpt; 113public static MethodInvocationInfo FromCall(BoundCall call, BoundExpression? substitutedReceiver = null) 126public static MethodInvocationInfo FromCallParts(MethodSymbol method, BoundExpression receiver, ImmutableArray<BoundExpression> args, ThreeState receiverIsSubjectToCloning) 155public static MethodInvocationInfo FromIndexerGetter(BoundIndexerAccess indexerAccess, BoundExpression? substitutedReceiver = null) 233public static MethodInvocationInfo FromUserDefinedOrUnionConversion(MethodSymbol operatorMethod, BoundExpression operand, bool hasAnyErrors) 246public static MethodInvocationInfo FromInlineArrayConversion(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 292public static MethodInvocationInfo FromInlineArrayAccess(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 336internal BoundExpression Argument { get; } 352internal MixableDestination(ParameterSymbol parameter, BoundExpression argument) 361internal MixableDestination(BoundExpression argument, EscapeLevel escapeLevel) 390internal BoundExpression Argument { get; } 394internal EscapeArgument(ParameterSymbol? parameter, BoundExpression argument, RefKind refKind, bool isArgList = false) 402public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out RefKind refKind) 426internal BoundExpression Argument { get; } 437internal EscapeValue(ParameterSymbol? parameter, BoundExpression argument, EscapeLevel escapeLevel, bool isRefEscape) 445public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out EscapeLevel escapeLevel, out bool isRefEscape) 639var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(accessorForDefaultArguments.ParameterCount); 689BoundExpression? extensionReceiver = indexer.IsExtensionBlockMember() ? indexerAccess.ReceiverOpt : null; 729private BoundExpression CheckValue(BoundExpression expr, BindValueKind valueKind, BindingDiagnosticBag diagnostics) 859var receiver = methodGroup.ReceiverOpt; 878receiver == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(AdjustBadExpressionChild(receiver)), 896internal static bool IsTypeOrValueExpression(BoundExpression expression) 921internal bool CheckValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1047var receiver = ((BoundPointerElementAccess)expr).Expression; 1205bool checkArrayAccessValueKind(SyntaxNode node, BindValueKind valueKind, ImmutableArray<BoundExpression> indices, BindingDiagnosticBag diagnostics) 1240private static bool CheckNotNamespaceOrType(BoundExpression expr, BindingDiagnosticBag diagnostics) 1552private bool CheckParameterRefEscape(SyntaxNode node, BoundExpression parameter, ParameterSymbol parameterSymbol, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1824BoundExpression receiver = boundEvent.ReceiverOpt; 1895private bool CheckIsValidReceiverForVariable(SyntaxNode node, BoundExpression receiver, BindValueKind kind, BindingDiagnosticBag diagnostics) 1919private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol) 1971private bool CheckPropertyValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics) 1978BoundExpression receiver; 2154static bool isAllowedDespiteReadonly(BoundExpression receiver) 2165bool isAllowedInitOnlySet(BoundExpression receiver) 2196private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics, 2215BoundExpression expression) 2541var receiver = methodInvocationInfo.Receiver; 2650var receiver = methodInvocationInfo.Receiver; 2683var argument = argsOpt[argIndex]; 2730static bool isMixableArgument(BoundExpression argument) 2743static EscapeArgument getReceiver(in MethodInfo methodInfo, BoundExpression receiver) 2770ImmutableArray<BoundExpression> argsOpt, 2777var argument = argsOpt[argIndex]; 3110private bool ShouldInferDeclarationExpressionValEscape(BoundExpression argument, [NotNullWhen(true)] out SourceLocalSymbol? localSymbol) 3285void inferDeclarationExpressionValEscape(ImmutableArray<BoundExpression> argsOpt, ArrayBuilder<EscapeValue> escapeValues) 3297foreach (var argument in argsOpt) 3652internal void ValidateEscape(BoundExpression expr, SafeContext escapeTo, bool isByRef, BindingDiagnosticBag diagnostics) 3675internal SafeContext GetRefEscape(BoundExpression expr) 3874ImmutableArray<BoundExpression> arguments; 3956internal bool CheckRefEscape(SyntaxNode node, BoundExpression expr, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 4175ImmutableArray<BoundExpression> arguments; 4300foreach (var element in expr.Arguments) 4323internal SafeContext GetValEscape(BoundExpression expr) 4510ImmutableArray<BoundExpression> arguments; 4593ImmutableArray<BoundExpression> arguments; 4842if (element is BoundExpression elementExpression) 4853private SafeContext GetTupleValEscape(ImmutableArray<BoundExpression> elements) 4856foreach (var element in elements) 4867foreach (var expr in colExpr.Initializers) 4886foreach (var expr in initExpr.Initializers) 4895private SafeContext GetValEscapeOfObjectMemberInitializer(BoundExpression expr) 5000private SafeContext GetValEscape(ImmutableArray<BoundExpression> expressions) 5003foreach (var expression in expressions) 5016internal bool CheckValEscape(SyntaxNode node, BoundExpression expr, SafeContext escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics) 5104BoundExpression underlyingReceiver = ((BoundCapturedReceiverPlaceholder)expr).Receiver; 5253ImmutableArray<BoundExpression> arguments; 5378ImmutableArray<BoundExpression> arguments; 5510var clauseValue = ((BoundQueryClause)expr).Value; 5514var variableValue = ((BoundRangeVariable)expr).Value; 5526var accessedExpression = ((BoundPointerElementAccess)expr).Expression; 5530var operandExpression = ((BoundPointerIndirectionOperator)expr).Operand; 5545var result = arm.Value; 5686private SignatureOnlyMethodSymbol GetInlineArrayAccessEquivalentSignatureMethod(BoundInlineArrayAccess elementAccess, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5748private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundConversion conversion, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5754private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundExpression inlineArray, TypeSymbol resultType, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5788private bool CheckTupleValEscape(ImmutableArray<BoundExpression> elements, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5790foreach (var element in elements) 5805foreach (var expr in colExpr.Initializers) 5830foreach (var expr in initExpr.Initializers) 5844private bool CheckInterpolatedStringHandlerConversionEscape(BoundExpression expression, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5871private SafeContext GetValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression) 5896foreach (var part in interpolatedString.Parts) 5912private bool CheckValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression, SafeContext escapeTo, BindingDiagnosticBag diagnostics) 5937foreach (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\BuckStopsHereBinder.cs (2)
130internal override BoundExpression? ConditionalReceiverExpression 180internal override BoundExpression BindSwitchExpressionCore(SwitchExpressionSyntax node, Binder originalBinder, BindingDiagnosticBag diagnostics)
Binder\DecisionDagBuilder_CheckOrReachability.cs (5)
64BoundExpression inputExpression, 138BoundExpression inputExpression, 158BoundExpression inputExpression, 197BoundExpression inputExpression, 233BoundExpression inputExpression,
Binder\DecisionDagBuilder.cs (10)
85BoundExpression switchGoverningExpression, 101BoundExpression switchExpressionInput, 117BoundExpression inputExpression, 131BoundExpression inputExpression, 146BoundExpression switchGoverningExpression, 171BoundExpression switchExpressionInput, 194BoundExpression? whenClause, 599BoundExpression? variableAccess = declaration.VariableAccess; 3172public readonly BoundExpression? WhenClause; 3179BoundExpression? WhenClause,
Binder\ForEachEnumeratorInfo.cs (3)
52public readonly BoundExpression? CurrentConversion; // current to element type 70BoundExpression? currentConversion, 123public BoundExpression? CurrentConversion;
Binder\ForEachLoopBinder.cs (27)
192BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics); 224BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics); 277BoundExpression iterationErrorExpression = null; 516BoundExpression elementConversion = CreateConversion(_syntax, elementPlaceholder, elementConversionClassification, isCast: false, conversionGroupOpt: null, InConversionGroupFlags.Unspecified, iterationVariableType.Type, createConversionDiagnostics); 567BoundExpression convertedCollectionExpression = ConvertForEachCollection(collectionExpr, collectionConversionClassification, builder.CollectionType, diagnostics); 631BoundExpression collectionExpr = this.GetBinder(collectionSyntax).BindValue(collectionSyntax, diagnostics, BindValueKind.RValue); 640protected BoundExpression ConvertForEachCollection( 641BoundExpression collectionExpr, 651BoundExpression convertedCollectionExpression = CreateConversion( 685ref BoundExpression collectionExpr, 721private BoundExpression UnwrapCollectionExpressionIfNullable(BoundExpression collectionExpr, BindingDiagnosticBag diagnostics) 786ref BoundExpression collectionExpr, 794BoundExpression originalCollectionExpr = collectionExpr; 840private EnumeratorResult GetEnumeratorInfoCore(SyntaxNode syntax, SyntaxNode collectionSyntax, ref BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, out ForEachEnumeratorInfo.Builder builder) 881BoundExpression span = new BoundValuePlaceholder(collectionExpr.Syntax, spanType).MakeCompilerGenerated(); 942EnumeratorResult getEnumeratorInfo(SyntaxNode syntax, SyntaxNode collectionSyntax, ref BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, out ForEachEnumeratorInfo.Builder builder) 986var unwrappedCollectionExpr = UnwrapCollectionExpressionIfNullable(collectionExpr, diagnostics); 1035EnumeratorResult createPatternBasedEnumeratorResult(ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics) 1075private EnumeratorResult SatisfiesIEnumerableInterfaces(SyntaxNode collectionSyntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, TypeSymbol unwrappedCollectionExprType) 1202private void GetDisposalInfoForEnumerator(SyntaxNode syntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression expr, bool isAsync, BindingDiagnosticBag diagnostics) 1225var argsBuilder = ArrayBuilder<BoundExpression>.GetInstance(patternDisposeMethod.ParameterCount); 1348private bool SatisfiesGetEnumeratorPattern(SyntaxNode syntax, SyntaxNode collectionSyntax, ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics) 1524private MethodArgumentInfo FindForEachPatternMethodViaExtension(SyntaxNode syntax, SyntaxNode collectionSyntax, BoundExpression collectionExpr, string methodName, BindingDiagnosticBag diagnostics) 1593BoundExpression extensionReceiver = result.IsExtensionBlockMember() ? collectionExpr : null; 1961private MethodArgumentInfo BindDefaultArguments(MethodSymbol method, BoundExpression extensionReceiverOpt, bool expanded, SyntaxNode syntax, BindingDiagnosticBag diagnostics) 1971var 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 (16)
763private void VisitArgumentsAndGetArgumentPlaceholders(BoundExpression? receiverOpt, ImmutableArray<BoundExpression> arguments, bool isExtensionBlockMember) 767var arg = arguments[i]; 894BoundExpression? receiver, 896ImmutableArray<BoundExpression> arguments, 942SafeContext getArgumentEscapeScope(int nArgumentsVisited, ImmutableArray<BoundExpression> arguments, int argIndex) 1163private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, SyntaxNode syntax, Conversion conversion, BoundExpression right) 1242internal readonly BoundExpression Expression; 1246internal DeconstructionVariable(BoundExpression expression, SafeContext valEscape, ArrayBuilder<DeconstructionVariable>? nestedVariables) 1258foreach (var arg in arguments) 1264DeconstructionVariable getDeconstructionAssignmentVariable(BoundExpression expr) 1272private static ImmutableArray<BoundExpression> GetDeconstructionRightParts(BoundExpression expr) 1298ImmutableArray<BoundExpression> arguments; 1303inlineArray: node.Expression is not BoundConversion { Conversion.IsIdentity: true, ExplicitCastInCode: false, Operand: BoundExpression operand } ? node.Expression : operand, 1443Debug.Assert(element is BoundCollectionElementInitializer or BoundExpression, $"Unexpected collection expression element {element}");
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; 205internal Conversion(ConversionKind kind, DeconstructMethodInfo deconstructMethodInfo, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo) 574internal ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> DeconstructConversionInfo 1316internal DeconstructMethodInfo(BoundExpression invocation, BoundDeconstructValuePlaceholder inputPlaceholder, 1323internal readonly BoundExpression Invocation;
Binder\Semantics\Conversions\Conversions.cs (3)
131protected override Conversion GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 226_ => ClassifyImplicitConversionFromExpression((BoundExpression)element, elementType, ref useSiteInfo), 247protected override Conversion AnalyzeImplicitUnionConversions(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> 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 GetImplicitUserDefinedOrUnionConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 886private Conversion GetExplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1044private Conversion ClassifyImplicitBuiltInConversionFromExpression(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1089var innerExpression = ((BoundExpressionWithNullability)sourceExpression).Expression; 1199private Conversion GetSwitchExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1228private Conversion GetConditionalExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1246private static Conversion ClassifyNullLiteralConversion(BoundExpression source, TypeSymbol destination) 1285private static Conversion ClassifyImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination) 1364internal static bool HasImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination) 1416private Conversion ClassifyExplicitOnlyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast) 1456private static bool HasImplicitEnumerationConversion(BoundExpression source, TypeSymbol destination) 1656private static bool HasAnonymousFunctionConversion(BoundExpression source, TypeSymbol destination, CSharpCompilation compilation) 1936public Conversion ClassifyImplicitExtensionMethodThisArgConversion(BoundExpression sourceExpressionOpt, TypeSymbol sourceType, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool isMethodGroupConversion) 1975(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) => 2295private delegate Conversion ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast); 2310(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) 2328(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) => 2360var argument = arguments[i]; 3055internal 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 (7)
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) 985BoundExpression sourceExpression, 1022BoundExpression sourceExpression,
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 (13)
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, 655BoundExpression 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, 67BoundExpression receiverOpt, 81private void PopulateHelper(BoundExpression receiverOpt, LookupResultKind resultKind, DiagnosticInfo error) 109public BoundExpression InstanceOpt
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (28)
97internal abstract TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr); 103internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr) 140private readonly ImmutableArray<BoundExpression> _arguments; 278ImmutableArray<BoundExpression> arguments,// Required; in scenarios like method group conversions where there are 331ImmutableArray<BoundExpression> arguments, 613BoundExpression argument = _arguments[arg]; 622private void MakeExplicitParameterTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations target, ExactOrBoundsKind kind, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 695MakeExplicitParameterTypeInferences(binder, (BoundExpression)element, targetElementType, kind, ref useSiteInfo); 752var sourceArgument = sourceArguments[i]; 872var argument = _arguments[arg]; 877private void MakeOutputTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 914if (element is BoundExpression expression) 945var sourceArgument = sourceArguments[i]; 1010private static bool DoesInputTypeContain(BoundExpression argument, TypeSymbol formalParameterType, TypeParameterSymbol typeParameter) 1046private bool HasUnfixedParamInInputType(BoundExpression pSource, TypeSymbol pDest) 1065private static bool DoesOutputTypeContain(BoundExpression argument, TypeSymbol formalParameterType, 1106private bool HasUnfixedParamInOutputType(BoundExpression argument, TypeSymbol formalParameterType) 1147var argument = _arguments[iArg]; 1369private void OutputTypeInference(Binder binder, BoundExpression expression, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1402private bool InferredReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1438private bool MethodGroupReturnTypeInference(Binder binder, BoundExpression source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1547private void ExplicitParameterTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 1602private void ExplicitReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3060private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3189BoundExpression receiver, 3244ImmutableArray<BoundExpression> arguments, 3259ImmutableArray<BoundExpression> arguments, 3306var argument = _arguments[0];
Binder\Semantics\OverloadResolution\OverloadResolution.cs (17)
140BoundExpression receiver, 166BoundExpression receiverOpt, 188BoundExpression receiver, 431BoundExpression receiver, 584BoundExpression receiverOpt) where TMember : Symbol 2100ArrayBuilder<BoundExpression> arguments, 2139ArrayBuilder<BoundExpression> arguments, 2617ArrayBuilder<BoundExpression> arguments, 2720private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol 2872private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, TypeSymbol t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 2887BoundExpression node, 2942private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, Conversion conv1, TypeSymbol t2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither) 3147elementBetterResult = BetterConversionFromExpression((BoundExpression)element, elementType1, conversionToE1, elementType2, conversionToE2, ref useSiteInfo, okToDowngradeToNeither: out _); 3267private bool ExpressionMatchExactly(BoundExpression node, TypeSymbol t, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3425if (!(node is BoundExpression)) 4553BoundExpression argument = arguments.Argument(argumentPosition); 4698BoundExpression argument,
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (9)
211BoundExpression receiver, 667BoundExpression receiverOpt, 764BoundExpression receiver, 793var instanceArgument = arguments.Arguments[0]; 1107foreach (var argument in arguments.Arguments) 1122BoundExpression receiver, 1199BoundExpression argument = arguments.Argument(arg); 1409static bool isStringLiteralToInterpolatedStringHandlerArgumentConversion(BoundExpression argument, ParameterSymbol parameter) 1430private bool HadAmbiguousWorseMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isQuery, BoundExpression receiver, string name, bool isExtension)
Binder\SwitchBinder_Patterns.cs (1)
39BoundExpression boundSwitchGoverningExpression = SwitchGoverningExpression;
Binder\SwitchBinder.cs (9)
24private BoundExpression _switchGoverningExpression; 41protected BoundExpression SwitchGoverningExpression 67var boundSwitchExpression = BindSwitchGoverningExpression(switchGoverningDiagnostics); 212var boundLabelExpression = sectionBinder.BindTypeOrRValue(caseLabel.Value, tempDiagnosticBag); 241protected BoundExpression ConvertCaseExpression(CSharpSyntaxNode node, BoundExpression caseExpression, out ConstantValue constantValueOpt, BindingDiagnosticBag diagnostics, bool isGotoCaseExpr = false) 381private BoundExpression BindSwitchGoverningExpression(BindingDiagnosticBag diagnostics) 401var switchGoverningExpression = binder.BindRValueWithoutTargetType(node, diagnostics); 497BoundExpression gotoCaseExpressionOpt = null;
Binder\SwitchExpressionArmBinder.cs (2)
44BoundExpression? whenClause = node.WhenClause != null 47BoundExpression 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); 63BoundExpression boundInputExpression, 186private ImmutableArray<BoundSwitchExpressionArm> BindSwitchExpressionArms(SwitchExpressionSyntax node, Binder originalBinder, BoundExpression inputExpression, BindingDiagnosticBag diagnostics) 201internal TypeSymbol GetInputType(BoundExpression? inputExpression = null) 208private BoundExpression BindSwitchGoverningExpression(BindingDiagnosticBag diagnostics) 210var switchGoverningExpression = BindRValueWithoutTargetType(SwitchExpressionSyntax.GoverningExpression, diagnostics);
Binder\UnionMatchingRewriter.cs (4)
128BoundExpression? lengthAccess = node.LengthAccess; 129BoundExpression? indexerAccess = node.IndexerAccess; 132BoundExpression? variableAccess = node.VariableAccess; 190BoundExpression? indexerAccess = node.IndexerAccess;
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\BoundCollectionExpression.cs (4)
14var collectionCreation = this.GetUnconvertedCollectionCreation(); 39/// final returned <see cref="BoundExpression"/> will either be: 49public BoundExpression? GetUnconvertedCollectionCreation() 51var collectionCreation = this.CollectionCreation;
BoundTree\BoundDagEvaluation.cs (1)
67static 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 (10)
39internal BoundExpression WithSuppression(bool suppress = true) 49var result = (BoundExpression)MemberwiseClone(); 54internal BoundExpression WithWasConverted() 72internal new BoundExpression WithHasErrors() 74return (BoundExpression)base.WithHasErrors(); 496public BoundConversion UpdateOperand(BoundExpression operand) 556ImmutableArray<BoundExpression> newArguments, 685internal void VisitAllElements<T>(Action<BoundExpression, T> action, T args) 687foreach (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) 154public static TypeSymbol? GetTypeOrFunctionType(this BoundExpression expr) 163public static FunctionTypeSymbol? GetFunctionType(this BoundExpression expr) 178public static void GetExpressionSymbols(this BoundExpression node, ArrayBuilder<Symbol> symbols, BoundNode parent, Binder binder) 250public static Conversion GetConversion(this BoundExpression boundNode) 263internal static bool IsExpressionOfComImportType([NotNullWhen(true)] this BoundExpression? expressionOpt) 278internal 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 (7)
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) 469var operand = possiblyUserDefined.Operand; 496var operand = possiblyUnion.Operand;
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) 251public 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) 358BoundExpression operand, 386BoundExpression operand, 415BoundExpression left, 416BoundExpression right, 442BoundExpression left, 443BoundExpression right, 455BoundExpression left, 456BoundExpression right, 484public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false) 491: this(syntax, aliasOpt, boundContainingTypeOpt, ImmutableArray<BoundExpression>.Empty, typeWithAnnotations, hasErrors) 505public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, ImmutableArray<BoundExpression> dimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false) 531public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, 540public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol type) 572public static BoundReturnStatement Synthesized(SyntaxNode syntax, RefKind refKind, BoundExpression expression, bool hasErrors = false) 636public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 649public static BoundDagTemp ForOriginalInput(BoundExpression expr) => new BoundDagTemp(expr.Syntax, expr.Type!, source: null); 656BoundExpression left, 657BoundExpression right, 659BoundExpression? leftConversion, 661BoundExpression? finalConversion, 670BoundExpression left, 671BoundExpression right, 673BoundExpression? leftConversion, 675BoundExpression? finalConversion, 686BoundExpression operand, 698BoundExpression operand, 712BoundExpression operand, 716BoundExpression? operandConversion, 718BoundExpression? resultConversion, 726public 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); 177BoundExpression left = (BoundExpression)this.Visit(node.Left); 178BoundExpression right = (BoundExpression)this.Visit(node.Right); 180BoundExpression? leftConversion = node.LeftConversion; 182BoundExpression? finalConversion = node.FinalConversion; 289BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 290BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 291BoundExpression lengthOrCountAccess = node.LengthOrCountAccess; 292BoundExpression 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)
217var types = ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)>.GetInstance(); 261ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns, 370if (!(node is BoundExpression)) 391var expression = node.ExpressionOpt; 623protected abstract BoundExpression? GetLambdaExpressionBody(BoundBlock body); 628protected abstract BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics); 849GetLambdaExpressionBody(returnInferenceLambda.Body) is BoundExpression expression && 1636protected override BoundExpression? GetLambdaExpressionBody(BoundBlock body) 1643statements[0] is BoundReturnStatement { RefKind: Microsoft.CodeAnalysis.RefKind.None, ExpressionOpt: BoundExpression expr }) 1651protected 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 (4)
37/// Note, that despite the name, this kind, when passed to <see cref="HasHome(BoundExpression, AddressKind)"/> or 38/// <see cref="HasHome(BoundExpression, AddressKind, Symbol, bool, HashSet{LocalSymbol})"/>, actually makes 61BoundExpression expression, 299var receiver = fieldAccess.ReceiverOpt;
CodeGen\EmitAddress.cs (10)
24private LocalDefinition EmitAddress(BoundExpression expression, AddressKind addressKind, bool used) 107BoundExpression operand = ((BoundPointerIndirectionOperator)expression).Operand; 364private LocalDefinition EmitAddressOfTempClone(BoundExpression expression, bool used) 394private static LocalSymbol DigForValueLocal(BoundSequence topSequence, BoundExpression value) 415var receiver = fieldAccess.ReceiverOpt; 427private void EmitArrayIndices(ImmutableArray<BoundExpression> indices) 431BoundExpression index = indices[i]; 522private bool HasHome(BoundExpression expression, AddressKind addressKind) 561private LocalDefinition EmitReceiverRef(BoundExpression receiver, AddressKind addressKind, bool used) 615BoundExpression receiver = fieldAccess.ReceiverOpt;
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; 342private void EmitDelegateCreation(BoundExpression node, BoundExpression receiver, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, bool used)
CodeGen\EmitExpression.cs (55)
36private void EmitExpression(BoundExpression expression, bool used) 77private void EmitExpressionCoreWithStackGuard(BoundExpression expression, bool used) 94private void EmitExpressionCore(BoundExpression expression, bool used) 368BoundExpression expression = passByCopy.Expression; 418var receiver = expression.Receiver; 553var whenNull = expression.WhenNullOpt; 720BoundExpression argument = expression.Arguments[i]; 726private void EmitArgument(BoundExpression argument, RefKind refKind) 826var receiver = mg != null ? mg.ReceiverOpt : expression.Argument; 965foreach (var se in sideEffects) 972private void EmitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 993internal static RefKind GetArgumentRefKind(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt, int i) 1167BoundExpression receiver; 1188static bool isDereferencedWhenEmittedAsNotUsedExpression(BoundExpression receiver) 1238var receiver = fieldAccess.ReceiverOpt; 1265private LocalDefinition EmitFieldLoadReceiver(BoundExpression receiver) 1293private bool EmitFieldLoadReceiverAddress(BoundExpression receiver) 1332private bool FieldLoadPrefersRef(BoundExpression receiver) 1385internal static bool FieldLoadMustUseRef(BoundExpression expr) 1588private bool CanUseCallOnRefTypeReceiver(BoundExpression receiver) 1656var seqValue = ((BoundSequence)(receiver)).Value; 1660var rhs = ((BoundAssignmentOperator)receiver).Right; 1678private bool IsThisReceiver(BoundExpression receiver) 1686var seqValue = ((BoundSequence)(receiver)).Value; 1720var receiver = call.ReceiverOpt; 1740var receiver = call.ReceiverOpt; 1924var receiver = call.ReceiverOpt; 2018var receiver = call.ReceiverOpt; 2045var receiver = call.ReceiverOpt; 2130var receiver = call.ReceiverOpt; 2192internal static bool IsPossibleReferenceTypeReceiverOfConstrainedCall(BoundExpression receiver) 2204internal static bool ReceiverIsKnownToReferToTempIfReferenceType(BoundExpression receiver) 2222internal static bool IsSafeToDereferenceReceiverRefAfterEvaluatingArguments(ImmutableArray<BoundExpression> arguments) 2226static bool isSafeToDereferenceReceiverRefAfterEvaluatingArgument(BoundExpression expression) 2228var current = expression; 2318internal static bool IsRef(BoundExpression receiver) 2359private static int GetCallStackBehavior(MethodSymbol method, ImmutableArray<BoundExpression> arguments) 2537foreach (var init in initializer.Initializers) 2558foreach (var arg in expression.Arguments) 2592private bool TryEmitOptimizedReadonlySpan(BoundObjectCreationExpression expression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace) 2711var left = assignmentOperator.Left; 2726var right = assignmentOperator.Right; 2774private bool SafeToGetWriteableReference(BoundExpression left) 2801private void InPlaceInit(BoundExpression target, bool used) 2816private bool TryInPlaceCtorCall(BoundExpression target, BoundObjectCreationExpression objCreation, bool used) 2862private bool PartialCtorResultCannotEscape(BoundExpression left) 2888private static bool TargetIsNotOnHeap(BoundExpression left) 2906var assignmentTarget = assignmentOperator.Left; 3131BoundExpression lhs = assignmentOperator.Left; 3156private void EmitRefAssignmentValue(RefKind refKind, BoundExpression right, bool used) 3212BoundExpression expression = assignment.Left; 3247var array = ((BoundArrayAccess)expression).Expression; 3538var operand = isOp.Operand; 3564var operand = asOp.Operand; 4060private 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 (120)
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; 1110var lhs = node.Left; 1135BoundExpression rewrittenReceiver = visitReceiver(node); 1161BoundExpression rewrittenReceiver = visitReceiver(node); 1165BoundExpression visitReceiver(BoundCall node) 1167var receiver = node.ReceiverOpt; 1185receiver = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 1197BoundCall visitArgumentsAndUpdateCall(BoundCall node, BoundExpression receiver) 1204private BoundExpression VisitCallOrConditionalAccessReceiver(BoundExpression receiver, BoundCall callOpt) 1219private void CheckCallReceiver(BoundExpression receiver, BoundCall call) 1225var unwrappedSequence = receiver; 1239private static ExprContext GetReceiverContext(BoundExpression receiver) 1266private ImmutableArray<BoundExpression> VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 1273ArrayBuilder<BoundExpression> rewrittenArguments = null; 1283private void VisitArgument(ImmutableArray<BoundExpression> arguments, ref ArrayBuilder<BoundExpression> rewrittenArguments, int i, RefKind argRefKind) 1287var arg = arguments[i]; 1288BoundExpression rewrittenArg = VisitExpression(arg, context); 1292rewrittenArguments = ArrayBuilder<BoundExpression>.GetInstance(); 1305ArrayBuilder<BoundExpression> rewrittenArguments = null; 1306ImmutableArray<BoundExpression> arguments = node.Arguments; 1323var rewrittenOperand = VisitExpression(node.Operand, ExprContext.Address); 1353var receiver = node.ReceiverOpt; 1435BoundExpression boundExpression = node.Expression; 1445boundExpression = (BoundExpression)this.Visit(boundExpression); 1465BoundExpression condition = this.VisitExpression(node.Condition, ExprContext.Value); 1472BoundExpression consequence = this.VisitExpression(node.Consequence, context); 1477BoundExpression alternative = this.VisitExpression(node.Alternative, context); 1486BoundExpression child = node.Left; 1515var left = (BoundExpression)this.Visit(child); 1530var right = (BoundExpression)this.Visit(binary.Right); 1564BoundExpression left = (BoundExpression)this.Visit(node.Left); 1569BoundExpression right = (BoundExpression)this.Visit(node.Right); 1585BoundExpression left = (BoundExpression)this.Visit(node.LeftOperand); 1592BoundExpression right = (BoundExpression)this.Visit(node.RightOperand); 1602BoundExpression receiver = VisitCallOrConditionalAccessReceiver(node.Receiver, callOpt: null); 1609BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 1613var whenNull = node.WhenNullOpt; 1617whenNull = (BoundExpression)this.Visit(whenNull); 1640var valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 1646var unwrappedSequence = node.ReferenceTypeReceiver; 1658var referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 1672BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 1700var exceptionSourceOpt = node.ExceptionSourceOpt; 1737BoundExpression boundFilter; 1740boundFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt); 1773ArrayBuilder<BoundExpression> rewrittenInitializers = null; 1781var initializer = initializers[i]; 1782var rewrittenInitializer = this.VisitExpression(initializer, ExprContext.Value); 1786rewrittenInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 1804BoundExpression visitedOperand = this.VisitExpression(node.Operand, ExprContext.Address); 1810BoundExpression visitedOperand = this.VisitExpression(node.Expression, ExprContext.Address); 1816BoundExpression expressionOpt = (BoundExpression)this.Visit(node.ExpressionOpt); 2051public static bool Check(BoundExpression expression, int recursionDepth) 2118var asExpression = node as BoundExpression; 2135BoundExpression child = node.Left; 2161var left = (BoundExpression)this.Visit(child); 2166var right = (BoundExpression)this.Visit(binary.Right); 2211ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 2248var right = (BoundExpression)Visit(node.Right); 2289BoundExpression? rewrittenReceiver = visitReceiver(node); 2310BoundExpression? rewrittenReceiver = visitReceiver(node); 2314BoundExpression? visitReceiver(BoundCall node) 2316BoundExpression? receiverOpt = node.ReceiverOpt; 2320receiverOpt = (BoundExpression?)this.Visit(receiverOpt); 2328receiverOpt = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty, 2340BoundExpression visitArgumentsAndUpdateCall(BoundCall node, BoundExpression? receiverOpt) 2342ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 2351var exceptionSource = node.ExceptionSourceOpt; 2354var filter = node.ExceptionFilterOpt; 2376exceptionSource = (BoundExpression)Visit(exceptionSource); 2387filter = (BoundExpression)this.Visit(filter); 2479internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Compilation\CSharpCompilation.cs (1)
2290var success = binder.GetAwaitableExpressionInfo(dumbInstance, out BoundExpression? result, out BoundCall? runtimeAwaitCall, syntax, diagnostics);
Compilation\CSharpSemanticModel.cs (25)
169internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols); 253private static BoundExpression GetSpeculativelyBoundExpressionHelper(Binder binder, ExpressionSyntax expression, SpeculativeBindingOption bindingOption) 260BoundExpression boundNode; 281protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols) 322var boundNode = GetSpeculativelyBoundExpressionHelper(binder, expression, bindingOption); 840BoundExpression expression = bnode.Expression; 1900BoundExpression boundExpr; 1915case BoundExpression boundExpr2: 2048var boundExpr = lowestBoundNode as BoundExpression; 2049var highestBoundExpr = highestBoundNode as BoundExpression; 2276static (TypeSymbol, NullabilityInfo) getTypeAndNullability(BoundExpression expr) => (expr.Type, expr.TopLevelNullability); 2289if (lowestBoundNode is BoundExpression boundExpr) 2310var boundExpr = lowestBoundNode as BoundExpression; 2865var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded); 2917var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded); 3353BoundExpression boundNode, 3964private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out OneOrMany<Symbol> symbols, out LookupResultKind resultKind) 3987BoundExpression boundNode, 4106private ImmutableArray<IPropertySymbol> GetIndexerGroupSemanticSymbols(BoundExpression boundNode, Binder binderOpt) 4630var receiver = node.ReceiverOpt; 4809BoundExpression receiver = call.Arguments[0]; 4818private 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); 483var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression; 507var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression; 1101var operation = call.IsDelegateCall ? call.ReceiverOpt : call; 1305BoundExpression boundExpr = this.GetLowerBoundNode(bindableNode) as BoundExpression; 1321var boundAdd = boundCollectionInitializer.Initializers[collectionInitializer.Expressions.IndexOf(node)]; 1813BoundExpression node = queryClause; 1831BoundExpression receiver = call.ReceiverOpt; 1877private static BoundExpression GetContainingArgument(ImmutableArray<BoundExpression> arguments, int position) 1879BoundExpression result = null; 1881foreach (var arg in arguments) 1883var expr = GetContainingExprOrQueryClause(arg, position); 1900private static BoundExpression GetContainingExprOrQueryClause(BoundExpression expr, int position) 1904var value = GetQueryClauseValue((BoundQueryClause)expr); 1917private 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); 129BoundExpression retExpression = F.Binary(BinaryOperatorKind.ObjectNotEqual, 198BoundExpression retExpression = F.Literal(initHash); 248BoundExpression retExpression = null; 253BoundExpression[] arguments = new BoundExpression[fieldCount]; 282BoundExpression 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 }), 155ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(targetSubmissionIndex), intType) { WasCompilerGenerated = true }), 182BoundExpression thisReference = null; 392BoundExpression delegateUpdate; 404arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundParameter)), 469arguments: ImmutableArray.Create<BoundExpression>(boundTmps[1], boundParameter)), 483BoundExpression compareExchange = BoundCall.Synthesized(syntax, 487arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundTmps[2], boundTmps[1])); 499BoundExpression 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)
2503var initializerInvocation = Binder.BindImplicitConstructorInitializer(method, diagnostics, compilation); 2519private static void ReportCtorInitializerCycles(MethodSymbol method, BoundExpression initializerInvocation, TypeCompilationState compilationState, BindingDiagnosticBag diagnostics)
FlowAnalysis\AbstractFlowPass.cs (59)
363if (node is BoundExpression or BoundPattern) 550protected void VisitLvalue(BoundExpression node) 626protected virtual void VisitCondition(BoundExpression node) 632protected void AdjustConditionalState(BoundExpression node) 660protected virtual void VisitRvalue(BoundExpression node, bool isKnownToBeAnLvalue = false) 676protected static bool IsConstantTrue(BoundExpression node) 681protected static bool IsConstantFalse(BoundExpression node) 686protected static bool IsConstantNull(BoundExpression node) 1175(BoundExpression? construction, bool useBoolReturns, bool firstPartIsConditional) = data switch 1196protected virtual void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor) 1420private void VisitReceiverBeforeCall(BoundExpression receiverOpt, MethodSymbol method) 1428private void VisitReceiverAfterCall(BoundExpression receiverOpt, MethodSymbol method) 1517protected virtual void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1524private void VisitArgumentsBeforeCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt) 1545private void VisitArgumentsAfterCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol? method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1579protected virtual void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 1585foreach (var child in node.ChildBoundNodes) 1587VisitRvalue(child as BoundExpression); 1603VisitRvalue(child as BoundExpression); 1612foreach (var child in node.Initializers) 1672protected void SplitIfBooleanConstant(BoundExpression node) 1746BoundExpression receiver = ((BoundMethodGroup)node.Operand).ReceiverOpt; 2092if (element is BoundExpression expression) 2122protected virtual void PropertySetter(BoundExpression node, BoundExpression receiver, MethodSymbol setter, BoundExpression value = null) 2130private bool RegularPropertyAccess(BoundExpression expr) 2239private void VisitFieldAccessInternal(BoundExpression receiverOpt, FieldSymbol fieldSymbol) 2365foreach (var i in node.Indices) 2417private void VisitBinaryLogicalOperatorChildren(BoundExpression node) 2420var stack = ArrayBuilder<BoundExpression>.GetInstance(); 2422BoundExpression binary; 2423BoundExpression child = node; 2459protected virtual void VisitBinaryLogicalOperatorChildren(ArrayBuilder<BoundExpression> stack) 2461BoundExpression binary; 2466BoundExpression child; 2486BoundExpression right; 2526protected virtual void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression binary, BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse) 2532protected void AfterRightChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse) 2661static bool isKnownNullOrNotNull(BoundExpression expr) 2760ReadOnlySpan<BoundExpression> parts; 2773foreach (var part in parts) 2857foreach (var expr in node.Bounds) 3005private bool TryVisitConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull) 3056private bool VisitPossibleConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull) 3115BoundExpression expr = node.AccessExpression; 3129Debug.Assert(expr is BoundExpression); 3189foreach (var se in sideEffects) 3285BoundExpression node, 3287BoundExpression condition, 3288BoundExpression consequence, 3289BoundExpression alternative) 3333private void VisitConditionalOperand(TLocalState state, BoundExpression operand, bool isByRef) 3458BoundExpression expr = node.ExpressionOpt; 3515protected void VisitAddressOfOperand(BoundExpression operand, bool shouldReadOperand) 3531var operand = node.Expression; 3615private BoundNode VisitObjectOrCollectionInitializerExpression(ImmutableArray<BoundExpression> initializers) 3617foreach (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 (22)
801protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef) 852internal static bool WriteConsideredUse(TypeSymbol type, BoundExpression value) 910private void NoteWrite(BoundExpression n, BoundExpression value, bool read, bool isRef) 1018protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member) 1087protected bool MayRequireTracking(BoundExpression receiverOpt, FieldSymbol fieldSymbol) 1321protected virtual void CheckAssigned(BoundExpression expr, FieldSymbol fieldSymbol, SyntaxNode node) 1331private bool IsAssigned(BoundExpression node, out int unassignedSlot) 1434private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression) 1469protected void Assign(BoundNode node, BoundExpression value, bool isRef = false, bool read = true) 1486protected virtual void AssignImpl(BoundNode node, BoundExpression value, bool isRef, bool written, bool read) 1603var expression = (BoundExpression)node; 1886foreach (var attributeArgument in boundAttribute.ConstructorArguments) 2358protected sealed override void VisitCondition(BoundExpression node) 2363if (DebugInfoInjector.TryGetConditionalBranchDiscriminatorCondition(node, out BoundExpression condition, out BoundLocal target)) 2510var initializer = node.Expression; 2528BoundExpression operand = node.Operand; 2556protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 2579protected void CheckAssigned(BoundExpression expr, SyntaxNode node) 2672var exceptionSource = catchBlock.ExceptionSourceOpt;
FlowAnalysis\LocalDataFlowPass.cs (5)
205protected abstract bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member); 212protected virtual int MakeSlot(BoundExpression node) 228if (TryGetReceiverAndMember(node, out BoundExpression? receiver, out Symbol? member)) 240protected int MakeMemberSlot(BoundExpression? receiverOpt, Symbol member)
FlowAnalysis\NullableWalker_Patterns.cs (13)
26BoundExpression expression, 380BoundExpression expression, 409var originalInputMap = PooledDictionary<int, BoundExpression>.GetInstance(); 625var variableAccess = binding.VariableAccess; 849if (originalInputMap.TryGetValue(inputSlot, out var expression)) 960TypeWithAnnotations getIndexerOutputType(TypeSymbol inputType, BoundExpression e, bool isSlice) 1109var expressions = ArrayBuilder<BoundExpression>.GetInstance(numSwitchArms); 1110var placeholderBuilder = ArrayBuilder<BoundExpression>.GetInstance(numSwitchArms); 1125(BoundExpression expression, Conversion conversion) = RemoveConversion(arm.Value, includeExplicitConversions: false); 1184ArrayBuilder<BoundExpression> expressions, 1193var nodeForSyntax = expressions[i]; 1229ArrayBuilder<BoundExpression> expressions) 1242private int GetSlotForSwitchInputValue(BoundExpression node)
FlowAnalysis\NullableWalker.cs (305)
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, int, 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 509ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt, 590private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression? expression, VisitResult result) 597_resultForPlaceholdersOpt ??= PooledDictionary<BoundValuePlaceholderBase, (BoundExpression? Replacement, VisitResult Result)>.GetInstance(); 1664ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> analyzedNullabilitiesMap; 1669private static (SnapshotManager?, ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>) AnalyzeWithSemanticInfo( 1679var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance); 1737var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance); 1777private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols) 1904ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt, 2116protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member) 2174protected override int MakeSlot(BoundExpression node) 2194int makeSlot(BoundExpression node) 2217var operand = conv.Operand; 2271int getPlaceholderSlot(BoundExpression expr) 2391protected override void VisitRvalue(BoundExpression? node, bool isKnownToBeAnLvalue = false) 2405private void VisitRvalueEpilogue(BoundExpression? node) 2411private TypeWithState VisitRvalueWithState(BoundExpression? node) 2417private TypeWithAnnotations VisitLvalueWithAnnotations(BoundExpression node) 2493BoundExpression? value, 2515var unwrappedValue = SkipReferenceConversions(value); 2682private static bool IsDefaultValue(BoundExpression expr) 2715BoundExpression? valueOpt, 3145var expr = node.ExpressionOpt; 3215private TypeWithState VisitRefExpression(BoundExpression expr, TypeWithAnnotations destinationType) 3650var receiver = withExpr.Receiver; 3774var initializer = node.InitializerOpt; 3816Debug.Assert(node is BoundExpression or BoundPattern); 3820if (node is BoundExpression expr) 3828private void VisitExpressionWithoutStackGuardEpilogue(BoundExpression node) 3845bool shouldMakeNotNullRvalue(BoundExpression node) => node.IsSuppressed || node.HasAnyErrors || !IsReachable(); 4023var collectionCreation = node.GetUnconvertedCollectionCreation(); 4145var addArgument = initializer.Arguments[argIndex]; 4189var iteratorBody = ((BoundExpressionStatement)spread.IteratorBody).Expression; 4205var elementExpr = (BoundExpression)element; 4251var collectionCreation = node.CollectionCreation; 4432ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitResult> argumentResults, ImmutableArray<VisitResult> argumentConversionResultsOpt, 4484var operand = arguments[0]; 4536ImmutableArray<BoundExpression> arguments, 4550private void SetUnionValueStateFromConstructorArgument(BoundExpression argument, TypeWithState argumentTypeWithState, int containingSlot, PropertySymbol valueProperty) 4591foreach (var initializer in objectInitializer.Initializers) 4606foreach (var initializer in collectionInitializer.Initializers) 4637var left = node.Left; 4658out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKindsOpt, 4833out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKindsOpt, out ImmutableArray<int> argsToParamsOpt, 5002private void SetNotNullResult(BoundExpression node) 5007private void SetNotNullResultForLambda(BoundExpression node, LocalState stateForLambda) 5054private int GetOrCreatePlaceholderSlot(BoundExpression node) 5097var argument = arguments[i]; 5141foreach (var expr in node.Bounds) 5161var expressions = ArrayBuilder<BoundExpression>.GetInstance(initialization.Initializers.Length); 5178foreach (var expr in expressions) 5186var expressionsNoConversions = ArrayBuilder<BoundExpression>.GetInstance(n); 5189var placeholderBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 5190foreach (var expression in expressions) 5193(BoundExpression expressionNoConversion, Conversion conversion) = RemoveConversion(expression, includeExplicitConversions: false); 5222var expressionNoConversion = expressionsNoConversions[i]; 5278internal static bool IsTargetTypedExpression(BoundExpression node) 5293ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns, 5317var placeholdersBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 5337BoundExpression placeholder = placeholders[i]; 5358private static void GetArrayElements(BoundArrayInitialization node, ArrayBuilder<BoundExpression> builder) 5360foreach (var child in node.Initializers) 5387foreach (var i in node.Indices) 5560static bool isKnownNullOrNotNull(BoundExpression expr, TypeWithState resultType) 5566LocalState getUnconditionalStateWhenNotNull(BoundExpression otherOperand, PossiblyConditionalState conditionalStateWhenNotNull) 5670BoundExpression leftOperand, 5673BoundExpression rightOperand, 5683BoundExpression binary, 5687BoundExpression left, 5688BoundExpression leftOperand, 5691BoundExpression right, 5692BoundExpression rightOperand, 5724BoundExpression expr, 5725BoundExpression operand, 5768BoundExpression leftOperand, 5769BoundExpression rightOperand, 5819TypeSymbol? getTypeIfContainingType(TypeSymbol baseType, TypeSymbol? derivedType, BoundExpression operand) 5837BoundExpression expr, BoundExpression operand, Conversion conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted, 5861private void VisitBinaryOperatorOperandConversionAndPostConditions(BoundExpression expr, BoundExpression operand, Conversion conversion, ParameterSymbol parameter, TypeWithState operandType, bool isLifted) 5875BoundExpression leftOperand, 5893BoundExpression? operandComparedToNull = null; 5916BoundExpression? operandComparedToNonNull = null; 5946private void SplitAndLearnFromNonNullTest(BoundExpression operandComparedToNonNull, bool whenTrue) 5978private void GetSlotsToMarkAsNotNullable(BoundExpression operand, ArrayBuilder<int> slotBuilder) 6072private void LearnFromNonNullTest(BoundExpression expression, ref LocalState state) 6100private void LearnFromNullTest(BoundExpression expression, ref LocalState state) 6107var expressionWithoutConversion = RemoveConversion(expression, includeExplicitConversions: true).expression; 6193private static BoundExpression SkipReferenceConversions(BoundExpression possiblyConversion) 6214BoundExpression leftOperand = node.LeftOperand; 6215BoundExpression rightOperand = node.RightOperand; 6253BoundExpression leftOperand = node.LeftOperand; 6254BoundExpression rightOperand = node.RightOperand; 6351private bool TryVisitConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull) 6387private bool VisitPossibleConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull) 6420var receiver = node.Receiver; 6459BoundExpression expr = node.AccessExpression; 6476Debug.Assert(expr is BoundExpression); 6486Debug.Assert(expr is BoundExpression); 6520void makeAndAdjustReceiverSlot(BoundExpression receiver) 6542BoundExpression node, 6544BoundExpression condition, 6545BoundExpression originalConsequence, 6546BoundExpression originalAlternative) 6577BoundExpression consequencePlaceholder = CreatePlaceholderIfNecessary(originalConsequence, consequenceLValue); 6578BoundExpression alternativePlaceholder = CreatePlaceholderIfNecessary(originalAlternative, alternativeLValue); 6596(var consequence, var consequenceConversion, consequenceRValue) = visitConditionalOperand(consequenceState, originalConsequence); 6601(var alternative, var alternativeConversion, alternativeRValue) = visitConditionalOperand(alternativeState, originalAlternative); 6633BoundExpression consequencePlaceholder = CreatePlaceholderIfNecessary(consequence, consequenceRValue.ToTypeWithAnnotations(compilation)); 6634BoundExpression alternativePlaceholder = CreatePlaceholderIfNecessary(alternative, alternativeRValue.ToTypeWithAnnotations(compilation)); 6675BoundExpression node, BoundExpression originalConsequence, BoundExpression originalAlternative, LocalState consequenceState, LocalState alternativeState, 6676TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence, Conversion consequenceConversion, bool consequenceEndReachable, 6677BoundExpression alternative, Conversion alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped) 6719BoundExpression node, 6720BoundExpression originalConsequence, 6721BoundExpression originalAlternative, 6726BoundExpression consequence, 6729BoundExpression alternative, 6743(BoundExpression, Conversion, TypeWithState) visitConditionalOperand(LocalState state, BoundExpression operand) 6749BoundExpression operandNoConversion; 6756(TypeWithAnnotations LValueType, TypeWithState RValueType) visitConditionalRefOperand(LocalState state, BoundExpression operand) 6764void reportMismatchIfNecessary(BoundExpression node, TypeWithAnnotations source, TypeWithAnnotations destination) 6774BoundExpression node, 6775BoundExpression operand, 6825private static BoundExpression CreatePlaceholderIfNecessary(BoundExpression expr, TypeWithAnnotations type) 6988BoundExpression? child = node.Arguments[i]; 7029private TypeWithState VisitAndCheckReceiver(BoundExpression? receiverOpt, MethodSymbol method) 7045BoundExpression? receiverOpt, 7048ImmutableArray<BoundExpression> arguments, 7083private static ImmutableArray<BoundExpression> AdjustArgumentsIfNeeded(ImmutableArray<BoundExpression> arguments, bool isExtensionBlockMethod, BoundExpression? receiver) 7214if (node.ReceiverOpt is BoundExpression receiver && 7321void learnFromEqualsMethodArguments(BoundExpression left, TypeWithState leftType, BoundExpression right, TypeWithState rightType) 7363public readonly ImmutableArray<BoundExpression> Arguments; 7367public CompareExchangeInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitResult> results, ImmutableArray<int> argsToParamsOpt) 7406var comparand = compareExchangeInfo.Arguments[comparandIndex]; 7422private void CheckCallReceiver(BoundExpression? receiverOpt, TypeWithState receiverType, MethodSymbol method) 7609protected override void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 7616BoundExpression node, 7618ImmutableArray<BoundExpression> arguments, 7631BoundExpression node, 7633ImmutableArray<BoundExpression> arguments, 7663ImmutableArray<BoundExpression> arguments, 7689(ImmutableArray<BoundExpression> argumentsNoConversions, ImmutableArray<Conversion> conversions) = RemoveArgumentConversions(arguments, refKindsOpt); 7703ImmutableArray<BoundExpression> arguments, 7704ImmutableArray<BoundExpression> argumentsNoConversions, 7773var argumentNoConversion = argumentsNoConversions[i]; 7774var argument = i < arguments.Length ? arguments[i] : argumentNoConversion; 7875var argument = arguments[i]; 7877var argumentNoConversion = argumentsNoConversions[i]; 7894ImmutableArray<BoundExpression> arguments, 7895ImmutableArray<BoundExpression> argumentsNoConversions, 7916static void expandParamsCollection(ref ImmutableArray<BoundExpression> arguments, ref ImmutableArray<RefKind> refKindsOpt, ImmutableArray<ParameterSymbol> parametersOpt, ref ImmutableArray<int> argsToParamsOpt, ref BitVector defaultArguments) 7926BoundExpression argument = arguments[a]; 7930ImmutableArray<BoundExpression> elements; 7938elements = ((BoundCollectionExpression)((BoundConversion)argument).Operand).UnconvertedCollectionExpression.Elements.CastArray<BoundExpression>(); 7959var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length + elements.Length - 1); 7991bool tryShortCircuitTargetTypedExpression(BoundExpression argument, BoundExpression argumentNoConversion) 8011private void ApplyMemberPostConditions(BoundExpression? receiverOpt, MethodSymbol? method) 8168ImmutableArray<BoundExpression> arguments, 8202private ImmutableArray<FlowAnalysisAnnotations> GetParametersAnnotations(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parametersOpt, ImmutableArray<int> argsToParamsOpt, bool expanded) 8230private VisitResult VisitArgumentEvaluate(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 8236private bool VisitArgumentEvaluateNeedsCloningState(BoundExpression argument) 8242private VisitResult VisitArgumentEvaluateEpilogue(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 8295BoundExpression argumentNoConversion, 8382private bool CheckDisallowedNullAssignment(TypeWithState state, FlowAnalysisAnnotations annotations, SyntaxNode node, BoundExpression? boundValueOpt = null) 8434BoundExpression argument, 8550void trackNullableStateForAssignment(TypeSymbol? receiverType, BoundExpression parameterValue, TypeWithAnnotations lValueType, int targetSlot, TypeWithState parameterWithState, bool isSuppressed, FlowAnalysisAnnotations parameterAnnotations, RefKind refKind, ParameterSymbol parameter) 8659private void LearnFromPostConditions(BoundExpression argument, FlowAnalysisAnnotations parameterAnnotations) 8705private (ImmutableArray<BoundExpression> arguments, ImmutableArray<Conversion> conversions) RemoveArgumentConversions( 8706ImmutableArray<BoundExpression> arguments, 8713var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(n); 8719var argument = arguments[i]; 8723var before = argument; 8788ImmutableArray<BoundExpression> arguments, 8902internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr) 8913private static NullableAnnotation GetNullableAnnotation(BoundExpression expr) 8948private ImmutableArray<BoundExpression> GetArgumentsForMethodTypeInference(ImmutableArray<VisitResult> argumentResults, ImmutableArray<BoundExpression> arguments) 8956var builder = ArrayBuilder<BoundExpression>.GetInstance(n); 8964BoundExpression getArgumentForMethodTypeInference(BoundExpression argument, VisitResult visitResult) 8988if (collection.Elements[i] is BoundExpression elementExpression) 9107private static (BoundExpression expression, Conversion conversion) RemoveConversion(BoundExpression expr, bool includeExplicitConversions) 9145private Conversion GenerateConversionForConditionalOperator(BoundExpression sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool reportMismatch, bool isChecked) 9156private Conversion GenerateConversion(Conversions conversions, BoundExpression? sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool fromExplicitCast, bool extensionMethodThisArgument, bool isChecked) 9185private bool UseExpressionForConversion([NotNullWhen(true)] BoundExpression? value) 9340(BoundExpression operand, Conversion conversion) = RemoveConversion(node, includeExplicitConversions: true); 9375private TypeWithState VisitOptionalImplicitConversion(BoundExpression expr, TypeWithAnnotations targetTypeOpt, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind) 9388BoundExpression expr, 9395(BoundExpression operand, Conversion conversion) = RemoveConversion(expr, includeExplicitConversions: false); 9402BoundExpression expr, 9405BoundExpression operand, 9438Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand, Conversion conversion, TypeWithState operandType) 9530ImmutableArray<BoundExpression> values, 9561void trackState(BoundExpression value, FieldSymbol field, TypeWithState valueType) 9575private void TrackNullableStateOfNullableValue(int containingSlot, TypeSymbol containingType, BoundExpression? value, TypeWithState valueType, int valueSlot) 9590BoundExpression convertedNode, 9871private static BoundConversion? GetConversionIfApplicable(BoundExpression? conversionOpt, BoundExpression convertedNode) 9902BoundExpression conversionOperand, 10522BoundExpression conversionOperand, 10674BoundExpression conversionOperand, 10836private void SnapshotWalkerThroughConversionGroup(BoundExpression conversionExpression, BoundExpression convertedNode) 10855private void TrackAnalyzedNullabilityThroughConversionGroup(TypeWithState resultType, BoundConversion? conversionOpt, BoundExpression convertedNode) 10917BoundExpression node, 10983case BoundExpression arg when arg.Type is { TypeKind: TypeKind.Delegate }: 11095Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped) 11109Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped) 11129Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg) 11139var receiverOpt = node.ReceiverOpt; 11153private bool TryGetMethodGroupReceiverNullability([NotNullWhen(true)] BoundExpression? receiverOpt, out TypeWithState type) 11168private void SetMethodGroupReceiverNullability(BoundExpression receiver, TypeWithState type) 11170_methodGroupReceiverMapOpt ??= PooledDictionary<BoundExpression, TypeWithState>.GetInstance(); 11176var receiverOpt = group.ReceiverOpt; 11189var arguments = ArrayBuilder<BoundExpression>.GetInstance(); 11295private void VisitThisOrBaseReference(BoundExpression node) 11316var left = node.Left; 11317var right = node.Right; 11409private void AdjustSetValue(BoundExpression left, ref TypeWithState rightState) 11424private FlowAnalysisAnnotations GetLValueAnnotations(BoundExpression expr) 11483private static bool UseLegacyWarnings(BoundExpression expr) 11531private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt = null) 11545private void VisitDeconstructMethodArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt) 11577ArrayBuilder<BoundExpression> placeholderArgs = ArrayBuilder<BoundExpression>.GetInstance(n + 1); 11618var nestedRight = CreatePlaceholderIfNecessary(invocation.Arguments[i + offset], parameter.TypeWithAnnotations); 11646private void VisitTupleDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo, BoundExpression right, TypeWithState? rightResultOpt) 11657var rightPart = rightParts[i]; 11732internal readonly BoundExpression Expression; 11736internal DeconstructionVariable(BoundExpression expression, TypeWithAnnotations type) 11743internal DeconstructionVariable(BoundExpression expression, ArrayBuilder<DeconstructionVariable> nestedVariables) 11755foreach (var argument in arguments) 11761DeconstructionVariable getDeconstructionAssignmentVariable(BoundExpression expr) 11779private ImmutableArray<BoundExpression> GetDeconstructionRightParts(BoundExpression expr, TypeWithState? rightResultOpt) 11809return fields.SelectAsArray((f, e) => (BoundExpression)new BoundFieldAccess(e.Syntax, e, f, constantValueOpt: null), expr); 12145var initializer = node.Expression; 12167private void ReportNullabilityMismatchInRefArgument(BoundExpression argument, TypeSymbol argumentType, ParameterSymbol parameter, TypeSymbol parameterType) 12223BoundNode node, PropertySymbol property, BoundExpression receiver) 12245BoundExpression receiver, 12248ImmutableArray<BoundExpression> arguments, 12312var receiverOpt = node.ReceiverOpt; 12397private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member) 12528BoundExpression collectionExpression, 12530BoundExpression expr, 12845foreach (var child in node.ChildBoundNodes) 12855private TypeWithState VisitBadExpressionChild(BoundExpression? child) 12866VisitRvalue(child as BoundExpression); 12969private MethodSymbol ReInferUnaryOperator(SyntaxNode syntax, MethodSymbol method, BoundExpression operand, TypeWithState operandType) 13042protected override void VisitBinaryLogicalOperatorChildren(ArrayBuilder<BoundExpression> stack) 13044BoundExpression binary; 13049BoundExpression? leftOperand = null; 13118void afterLeftChildOfBoundUserDefinedConditionalLogicalOperatorHasBeenVisited(BoundUserDefinedConditionalLogicalOperator binary, BoundExpression leftOperand, Conversion leftConversion) 13192protected override void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression node, BoundExpression right, bool isAnd, bool isBool, ref LocalState leftTrue, ref LocalState leftFalse) 13279var operand = node.Operand; 13423var receiver = node.Receiver; 13435var expr = node.Expression; 13439var receiverOpt = (expr as BoundMethodGroup)?.ReceiverOpt; 13455var receiverOpt = node.ReceiverOpt; 13540private void SetUnknownResultNullability(BoundExpression expression) 13547var receiver = node.Receiver; 13559private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, bool checkNullableValueType = false) 13564private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, TypeWithState resultType, bool checkNullableValueType) 13608private void CheckExtensionMethodThisNullability(BoundExpression expr, Conversion conversion, ParameterSymbol parameter, TypeWithState result) 13675protected override void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor) 13744private void VisitThrow(BoundExpression? expr) 13763BoundExpression expr = node.Expression; 13803var argument = node.Argument;
FlowAnalysis\NullableWalker.PlaceholderLocal.cs (1)
62internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) => ReadOnlyBindingDiagnostic<AssemblySymbol>.Empty;
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 (1069)
278protected BoundEqualsValue(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 290public BoundExpression Value { get; } 295public BoundFieldEqualsValue(SyntaxNode syntax, FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 311public BoundFieldEqualsValue Update(FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value) 325public BoundPropertyEqualsValue(SyntaxNode syntax, PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 341public BoundPropertyEqualsValue Update(PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value) 355public BoundParameterEqualsValue(SyntaxNode syntax, ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false) 371public BoundParameterEqualsValue Update(ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value) 486public BoundCapturedReceiverPlaceholder(SyntaxNode syntax, BoundExpression receiver, TypeSymbol? type, bool hasErrors = false) 495public BoundExpression Receiver { get; } 500public BoundCapturedReceiverPlaceholder Update(BoundExpression receiver, TypeSymbol? type) 727public BoundImplicitIndexerReceiverPlaceholder(SyntaxNode syntax, bool isEquivalentToThisReference, BoundExpression receiver, TypeSymbol type, bool hasErrors = false) 740public BoundExpression Receiver { get; } 745public BoundImplicitIndexerReceiverPlaceholder Update(bool isEquivalentToThisReference, BoundExpression receiver, TypeSymbol type) 961public BoundPassByCopy(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 970public BoundExpression Expression { get; } 975public BoundPassByCopy Update(BoundExpression expression, TypeSymbol? type) 989public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false) 1007public ImmutableArray<BoundExpression> ChildBoundNodes { get; } 1012public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type) 1082public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type, bool hasErrors = false) 1096public ImmutableArray<BoundExpression> BoundDimensionsOpt { get; } 1103public BoundTypeExpression Update(AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type) 1207public BoundUnaryOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false) 1225public BoundExpression Operand { get; } 1235public BoundUnaryOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type) 1249public 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) 1270public BoundExpression Operand { get; } 1274public BoundExpression? OperandConversion { get; } 1276public BoundExpression? ResultConversion { get; } 1283public 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) 1297public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, bool isManaged, TypeSymbol type, bool hasErrors = false) 1309public BoundExpression Operand { get; } 1315public BoundAddressOfOperator Update(BoundExpression operand, bool isManaged, TypeSymbol type) 1401public BoundPointerIndirectionOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 1412public BoundExpression Operand { get; } 1417public BoundPointerIndirectionOperator Update(BoundExpression operand, TypeSymbol type) 1431public BoundPointerElementAccess(SyntaxNode syntax, BoundExpression expression, BoundExpression index, bool @checked, TypeSymbol type, bool hasErrors = false) 1445public BoundExpression Expression { get; } 1446public BoundExpression Index { get; } 1452public BoundPointerElementAccess Update(BoundExpression expression, BoundExpression index, bool @checked, TypeSymbol type) 1466public BoundFunctionPointerInvocation(SyntaxNode syntax, BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 1481public BoundExpression InvokedExpression { get; } 1482public ImmutableArray<BoundExpression> Arguments { get; } 1489public BoundFunctionPointerInvocation Update(BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type) 1503public BoundRefTypeOperator(SyntaxNode syntax, BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors = false) 1515public BoundExpression Operand { get; } 1521public BoundRefTypeOperator Update(BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type) 1535public BoundMakeRefOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 1546public BoundExpression Operand { get; } 1551public BoundMakeRefOperator Update(BoundExpression operand, TypeSymbol type) 1565public BoundRefValueOperator(SyntaxNode syntax, NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type, bool hasErrors = false) 1578public BoundExpression Operand { get; } 1583public BoundRefValueOperator Update(NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type) 1597public BoundFromEndIndexExpression(SyntaxNode syntax, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false) 1609public BoundExpression Operand { get; } 1615public BoundFromEndIndexExpression Update(BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type) 1629public BoundRangeExpression(SyntaxNode syntax, BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false) 1641public BoundExpression? LeftOperandOpt { get; } 1642public BoundExpression? RightOperandOpt { get; } 1648public BoundRangeExpression Update(BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type) 1662protected BoundBinaryOperatorBase(BoundKind kind, SyntaxNode syntax, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1675public BoundExpression Left { get; } 1676public BoundExpression Right { get; } 1681public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false) 1705public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type) 1719public BoundTupleBinaryOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type, bool hasErrors = false) 1735public BoundExpression Left { get; } 1736public BoundExpression Right { get; } 1743public BoundTupleBinaryOperator Update(BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type) 1757public 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) 1788public BoundExpression? TrueFalseOperandConversion { get; } 1796public 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) 1810public 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) 1831public BoundExpression Left { get; } 1832public BoundExpression Right { get; } 1834public BoundExpression? LeftConversion { get; } 1836public BoundExpression? FinalConversion { get; } 1843public BoundCompoundAssignmentOperator Update(BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type) 1857public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type, bool hasErrors = false) 1870public BoundExpression Left { get; } 1871public BoundExpression Right { get; } 1877public BoundAssignmentOperator Update(BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type) 1926public BoundNullCoalescingOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type, bool hasErrors = false) 1943public BoundExpression LeftOperand { get; } 1944public BoundExpression RightOperand { get; } 1946public BoundExpression? LeftConversion { get; } 1953public BoundNullCoalescingOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type) 1967public BoundNullCoalescingAssignmentOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type, bool hasErrors = false) 1978public BoundExpression LeftOperand { get; } 1979public BoundExpression RightOperand { get; } 1984public BoundNullCoalescingAssignmentOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type) 1998public BoundUnconvertedConditionalOperator(SyntaxNode syntax, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError, bool hasErrors = false) 2014public BoundExpression Condition { get; } 2015public BoundExpression Consequence { get; } 2016public BoundExpression Alternative { get; } 2023public BoundUnconvertedConditionalOperator Update(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError) 2037public BoundConditionalOperator(SyntaxNode syntax, bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 2057public BoundExpression Condition { get; } 2058public BoundExpression Consequence { get; } 2059public BoundExpression Alternative { get; } 2067public BoundConditionalOperator Update(bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type) 2081public BoundArrayAccess(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type, bool hasErrors = false) 2094public BoundExpression Expression { get; } 2095public ImmutableArray<BoundExpression> Indices { get; } 2100public BoundArrayAccess Update(BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type) 2114public BoundRefAccess(SyntaxNode syntax, RefKind refKind, BoundExpression expression, TypeSymbol type, bool hasErrors = false) 2127public BoundExpression Expression { get; } 2132public BoundRefAccess Update(RefKind refKind, BoundExpression expression, TypeSymbol type) 2146public BoundArrayLength(SyntaxNode syntax, BoundExpression expression, TypeSymbol type, bool hasErrors = false) 2157public BoundExpression Expression { get; } 2162public BoundArrayLength Update(BoundExpression expression, TypeSymbol type) 2176public BoundAwaitableInfo(SyntaxNode syntax, BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, BoundCall? runtimeAsyncAwaitCall, BoundAwaitableValuePlaceholder? runtimeAsyncAwaitCallPlaceholder, bool hasErrors = false) 2194public BoundExpression? GetAwaiter { get; } 2203public BoundAwaitableInfo Update(BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, BoundCall? runtimeAsyncAwaitCall, BoundAwaitableValuePlaceholder? runtimeAsyncAwaitCallPlaceholder) 2217public BoundAwaitExpression(SyntaxNode syntax, BoundExpression expression, BoundAwaitableInfo awaitableInfo, BoundAwaitExpressionDebugInfo debugInfo, TypeSymbol type, bool hasErrors = false) 2231public BoundExpression Expression { get; } 2238public BoundAwaitExpression Update(BoundExpression expression, BoundAwaitableInfo awaitableInfo, BoundAwaitExpressionDebugInfo debugInfo, TypeSymbol type) 2895public BoundIsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type, bool hasErrors = false) 2909public BoundExpression Operand { get; } 2916public BoundIsOperator Update(BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type) 2930public BoundAsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type, bool hasErrors = false) 2945public BoundExpression Operand { get; } 2948public BoundExpression? OperandConversion { get; } 2953public BoundAsOperator Update(BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type) 2999public BoundConversion(SyntaxNode syntax, BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, InConversionGroupFlags inConversionGroupFlags, TypeSymbol type, bool hasErrors = false) 3021public BoundExpression Operand { get; } 3033public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, InConversionGroupFlags inConversionGroupFlags, TypeSymbol type) 3047public BoundReadOnlySpanFromArray(SyntaxNode syntax, BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type, bool hasErrors = false) 3060public BoundExpression Operand { get; } 3066public BoundReadOnlySpanFromArray Update(BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type) 3115public BoundArgListOperator(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type, bool hasErrors = false) 3126public ImmutableArray<BoundExpression> Arguments { get; } 3132public BoundArgListOperator Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type) 3146public BoundFixedLocalCollectionInitializer(SyntaxNode syntax, TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type, bool hasErrors = false) 3164public BoundExpression? ElementPointerConversion { get; } 3165public BoundExpression Expression { get; } 3171public BoundFixedLocalCollectionInitializer Update(TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type) 3452public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false) 3467public BoundExpression? InitializerOpt { get; } 3468public ImmutableArray<BoundExpression> ArgumentsOpt { get; } 3474public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType) 3621public BoundReturnStatement(SyntaxNode syntax, RefKind refKind, BoundExpression? expressionOpt, bool @checked, bool hasErrors = false) 3634public BoundExpression? ExpressionOpt { get; } 3640public BoundReturnStatement Update(RefKind refKind, BoundExpression? expressionOpt, bool @checked) 3654public BoundYieldReturnStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false) 3663public BoundExpression Expression { get; } 3668public BoundYieldReturnStatement Update(BoundExpression expression) 3699public BoundThrowStatement(SyntaxNode syntax, BoundExpression? expressionOpt, bool hasErrors = false) 3705public BoundExpression? ExpressionOpt { get; } 3710public BoundThrowStatement Update(BoundExpression? expressionOpt) 3724public BoundExpressionStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false) 3733public BoundExpression Expression { get; } 3738public BoundExpressionStatement Update(BoundExpression expression) 3812public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel, bool hasErrors = false) 3832public BoundExpression Expression { get; } 3843public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel) 3857public BoundSwitchDispatch(SyntaxNode syntax, BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt, bool hasErrors = false) 3871public BoundExpression Expression { get; } 3879public BoundSwitchDispatch Update(BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt) 3893public BoundIfStatement(SyntaxNode syntax, BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt, bool hasErrors = false) 3905public BoundExpression Condition { get; } 3912public BoundIfStatement Update(BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt) 3954protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 3970public BoundExpression Condition { get; } 3976public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 3992public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 4006public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 4022public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 4036public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false) 4057public BoundExpression? Condition { get; } 4064public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel) 4078public 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) 4102public BoundExpression? ElementConversion { get; } 4105public BoundExpression? IterationErrorExpressionOpt { get; } 4106public BoundExpression Expression { get; } 4113public 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) 4158public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false) 4175public BoundExpression? ExpressionOpt { get; } 4183public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt) 4231public BoundLockStatement(SyntaxNode syntax, BoundExpression argument, BoundStatement body, bool hasErrors = false) 4242public BoundExpression Argument { get; } 4248public BoundLockStatement Update(BoundExpression argument, BoundStatement body) 4299public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false) 4316public BoundExpression? ExceptionSourceOpt { get; } 4319public BoundExpression? ExceptionFilterOpt { get; } 4326public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll) 4639public BoundRangeVariable(SyntaxNode syntax, RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type, bool hasErrors = false) 4653public BoundExpression Value { get; } 4658public BoundRangeVariable Update(RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type) 4749public BoundGotoStatement(SyntaxNode syntax, LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt, bool hasErrors = false) 4761public BoundExpression? CaseExpressionOpt { get; } 4767public BoundGotoStatement Update(LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt) 4886public BoundConditionalGoto(SyntaxNode syntax, BoundExpression condition, bool jumpIfTrue, LabelSymbol label, bool hasErrors = false) 4898public BoundExpression Condition { get; } 4905public BoundConditionalGoto Update(BoundExpression condition, bool jumpIfTrue, LabelSymbol label) 4919protected BoundSwitchExpression(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false) 4934public BoundExpression Expression { get; } 4943public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false) 4963public BoundExpression? WhenClause { get; } 4964public BoundExpression Value { get; } 4970public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label) 4984public BoundUnconvertedSwitchExpression(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false) 4998public BoundUnconvertedSwitchExpression Update(BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type) 5012public BoundConvertedSwitchExpression(SyntaxNode syntax, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type, bool hasErrors = false) 5032public BoundConvertedSwitchExpression Update(TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type) 5155public BoundWhenDecisionDagNode(SyntaxNode syntax, ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse, bool hasErrors = false) 5169public BoundExpression? WhenExpression { get; } 5176public BoundWhenDecisionDagNode Update(ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse) 5577public BoundDagIndexerEvaluation(SyntaxNode syntax, TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false) 5603public BoundExpression IndexerAccess { get; } 5610public BoundDagIndexerEvaluation Update(TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input) 5624public BoundDagSliceEvaluation(SyntaxNode syntax, TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false) 5652public BoundExpression IndexerAccess { get; } 5659public BoundDagSliceEvaluation Update(TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input) 5760public BoundSwitchLabel(SyntaxNode syntax, LabelSymbol label, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, bool hasErrors = false) 5776public BoundExpression? WhenClause { get; } 5781public BoundSwitchLabel Update(LabelSymbol label, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause) 5795protected BoundMethodOrPropertyGroup(BoundKind kind, SyntaxNode syntax, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false) 5803public BoundExpression? ReceiverOpt { get; } 5809public BoundSequencePointExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 5818public BoundExpression Expression { get; } 5823public BoundSequencePointExpression Update(BoundExpression expression, TypeSymbol? type) 5837public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false) 5853public ImmutableArray<BoundExpression> SideEffects { get; } 5854public BoundExpression Value { get; } 5859public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type) 5873public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false) 5890public BoundExpression Value { get; } 5895public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type) 5909public BoundDynamicMemberAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type, bool hasErrors = false) 5925public BoundExpression Receiver { get; } 5934public BoundDynamicMemberAccess Update(BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type) 5948protected BoundDynamicInvocableBase(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol? type, bool hasErrors = false) 5959public BoundExpression Expression { get; } 5960public ImmutableArray<BoundExpression> Arguments { get; } 5965public BoundDynamicInvocation(SyntaxNode syntax, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false) 5987public BoundDynamicInvocation Update(ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type) 6001public BoundConditionalAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type, bool hasErrors = false) 6014public BoundExpression Receiver { get; } 6015public BoundExpression AccessExpression { get; } 6020public BoundConditionalAccess Update(BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type) 6034public BoundLoweredConditionalAccess(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type, bool hasErrors = false) 6051public BoundExpression Receiver { get; } 6053public BoundExpression WhenNotNull { get; } 6054public BoundExpression? WhenNullOpt { get; } 6061public BoundLoweredConditionalAccess Update(BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type) 6113public BoundComplexConditionalReceiver(SyntaxNode syntax, BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type, bool hasErrors = false) 6126public BoundExpression ValueTypeReceiver { get; } 6127public BoundExpression ReferenceTypeReceiver { get; } 6132public BoundComplexConditionalReceiver Update(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type) 6146public 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) 6173public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind) 6187public BoundPropertyGroup(SyntaxNode syntax, ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false) 6201public BoundPropertyGroup Update(ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind) 6215public 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) 6243public BoundExpression? ReceiverOpt { get; } 6246public ImmutableArray<BoundExpression> Arguments { get; } 6260public 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) 6274public BoundEventAssignmentOperator(SyntaxNode syntax, EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type, bool hasErrors = false) 6293public BoundExpression? ReceiverOpt { get; } 6294public BoundExpression Argument { get; } 6299public BoundEventAssignmentOperator Update(EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type) 6313public 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) 6333public ImmutableArray<BoundExpression> ConstructorArguments { get; } 6344public BoundAttribute Update(MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type) 6358public BoundUnconvertedObjectCreationExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder, bool hasErrors = false) 6373public ImmutableArray<BoundExpression> Arguments { get; } 6382public BoundUnconvertedObjectCreationExpression Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder) 6417public 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) 6441public override ImmutableArray<BoundExpression> Arguments { get; } 6454public 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) 6515public BoundUnconvertedWithElement(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool hasErrors = false) 6526public ImmutableArray<BoundExpression> Arguments { get; } 6533public BoundUnconvertedWithElement Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt) 6547public BoundCollectionExpression(SyntaxNode syntax, CollectionExpressionTypeKind collectionTypeKind, BoundObjectOrCollectionValuePlaceholder? placeholder, BoundExpression? collectionCreation, MethodSymbol? collectionBuilderMethod, BoundCollectionBuilderElementsPlaceholder? collectionBuilderElementsPlaceholder, bool wasTargetTyped, bool hasWithElement, BoundUnconvertedCollectionExpression unconvertedCollectionExpression, ImmutableArray<BoundNode> elements, TypeSymbol type, bool hasErrors = false) 6572public BoundExpression? CollectionCreation { get; } 6582public BoundCollectionExpression Update(CollectionExpressionTypeKind collectionTypeKind, BoundObjectOrCollectionValuePlaceholder? placeholder, BoundExpression? collectionCreation, MethodSymbol? collectionBuilderMethod, BoundCollectionBuilderElementsPlaceholder? collectionBuilderElementsPlaceholder, bool wasTargetTyped, bool hasWithElement, BoundUnconvertedCollectionExpression unconvertedCollectionExpression, ImmutableArray<BoundNode> elements, TypeSymbol type) 6624public BoundCollectionExpressionSpreadElement(SyntaxNode syntax, BoundExpression expression, BoundCollectionExpressionSpreadExpressionPlaceholder? expressionPlaceholder, BoundExpression? conversion, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundExpression? lengthOrCount, BoundValuePlaceholder? elementPlaceholder, BoundStatement? iteratorBody, bool hasErrors = false) 6639public BoundExpression Expression { get; } 6641public BoundExpression? Conversion { get; } 6643public BoundExpression? LengthOrCount { get; } 6650public BoundCollectionExpressionSpreadElement Update(BoundExpression expression, BoundCollectionExpressionSpreadExpressionPlaceholder? expressionPlaceholder, BoundExpression? conversion, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundExpression? lengthOrCount, BoundValuePlaceholder? elementPlaceholder, BoundStatement? iteratorBody) 6664protected BoundTupleExpression(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6675public ImmutableArray<BoundExpression> Arguments { get; } 6682public BoundTupleLiteral(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6695public BoundTupleLiteral Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type) 6709public BoundConvertedTupleLiteral(SyntaxNode syntax, BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false) 6725public BoundConvertedTupleLiteral Update(BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type) 6739public 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) 6758public override ImmutableArray<BoundExpression> Arguments { get; } 6768public BoundDynamicObjectCreationExpression Update(string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type) 6814protected BoundObjectInitializerExpressionBase(BoundKind kind, SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6828public ImmutableArray<BoundExpression> Initializers { get; } 6833public BoundObjectInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6847public BoundObjectInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type) 6861public 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) 6883public ImmutableArray<BoundExpression> Arguments { get; } 6896public 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) 6955public BoundCollectionInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false) 6969public BoundCollectionInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type) 6983public 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) 7003public ImmutableArray<BoundExpression> Arguments { get; } 7004public BoundExpression? ImplicitReceiverOpt { get; } 7014public BoundCollectionElementInitializer Update(MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type) 7028public BoundDynamicCollectionElementInitializer(SyntaxNode syntax, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false) 7046public BoundDynamicCollectionElementInitializer Update(ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type) 7095public BoundAnonymousObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type, bool hasErrors = false) 7111public ImmutableArray<BoundExpression> Arguments { get; } 7117public BoundAnonymousObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type) 7201public BoundDelegateCreationExpression(SyntaxNode syntax, BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 7215public BoundExpression Argument { get; } 7223public BoundDelegateCreationExpression Update(BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type) 7237public BoundArrayCreation(SyntaxNode syntax, ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false) 7249public ImmutableArray<BoundExpression> Bounds { get; } 7255public BoundArrayCreation Update(ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type) 7269public BoundArrayInitialization(SyntaxNode syntax, bool isInferred, ImmutableArray<BoundExpression> initializers, bool hasErrors = false) 7281public ImmutableArray<BoundExpression> Initializers { get; } 7286public BoundArrayInitialization Update(bool isInferred, ImmutableArray<BoundExpression> initializers) 7300protected BoundStackAllocArrayCreationBase(BoundKind kind, SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false) 7313public BoundExpression Count { get; } 7319public BoundStackAllocArrayCreation(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false) 7332public BoundStackAllocArrayCreation Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type) 7346public BoundConvertedStackAllocExpression(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false) 7361public BoundConvertedStackAllocExpression Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type) 7375public BoundFieldAccess(SyntaxNode syntax, BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type, bool hasErrors = false) 7391public BoundExpression? ReceiverOpt { get; } 7401public BoundFieldAccess Update(BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type) 7455public BoundPropertyAccess(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol propertySymbol, AccessorKind autoPropertyAccessorKind, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 7470public BoundExpression? ReceiverOpt { get; } 7479public BoundPropertyAccess Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol propertySymbol, AccessorKind autoPropertyAccessorKind, LookupResultKind resultKind, TypeSymbol type) 7493public BoundEventAccess(SyntaxNode syntax, BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 7507public BoundExpression? ReceiverOpt { get; } 7515public BoundEventAccess Update(BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type) 7529public 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) 7551public BoundExpression? ReceiverOpt { get; } 7554public ImmutableArray<BoundExpression> Arguments { get; } 7566public 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) 7580public BoundImplicitIndexerAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type, bool hasErrors = false) 7605public BoundExpression Receiver { get; } 7606public BoundExpression Argument { get; } 7607public BoundExpression LengthOrCountAccess { get; } 7609public BoundExpression IndexerOrSliceAccess { get; } 7615public BoundImplicitIndexerAccess Update(BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type) 7629public BoundInlineArrayAccess(SyntaxNode syntax, BoundExpression expression, BoundExpression argument, bool isValue, WellKnownMember getItemOrSliceHelper, TypeSymbol type, bool hasErrors = false) 7648public BoundExpression Expression { get; } 7649public BoundExpression Argument { get; } 7656public BoundInlineArrayAccess Update(BoundExpression expression, BoundExpression argument, bool isValue, WellKnownMember getItemOrSliceHelper, TypeSymbol type) 7670public BoundDynamicIndexerAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type, bool hasErrors = false) 7687public BoundExpression Receiver { get; } 7688public ImmutableArray<BoundExpression> Arguments { get; } 7696public BoundDynamicIndexerAccess Update(BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type) 7794public BoundQueryClause(SyntaxNode syntax, BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type, bool hasErrors = false) 7811public BoundExpression Value { get; } 7813public BoundExpression? Operation { get; } 7814public BoundExpression? Cast { get; } 7816public BoundExpression? UnoptimizedForm { get; } 7821public BoundQueryClause Update(BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type) 7861public BoundNameOfOperator(SyntaxNode syntax, BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type, bool hasErrors = false) 7878public BoundExpression Argument { get; } 7884public BoundNameOfOperator Update(BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type) 7898protected BoundInterpolatedStringBase(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7908public ImmutableArray<BoundExpression> Parts { get; } 7914public BoundUnconvertedInterpolatedString(SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7926public BoundUnconvertedInterpolatedString Update(ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type) 7940public BoundInterpolatedString(SyntaxNode syntax, InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false) 7954public BoundInterpolatedString Update(InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type) 8034public BoundStringInsert(SyntaxNode syntax, BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall, bool hasErrors = false) 8047public BoundExpression Value { get; } 8048public BoundExpression? Alignment { get; } 8055public BoundStringInsert Update(BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall) 8069public BoundIsPatternExpression(SyntaxNode syntax, BoundExpression expression, BoundPattern pattern, bool hasUnionMatching, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type, bool hasErrors = false) 8088public BoundExpression Expression { get; } 8099public BoundIsPatternExpression Update(BoundExpression expression, BoundPattern pattern, bool hasUnionMatching, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type) 8145public BoundConstantPattern(SyntaxNode syntax, BoundExpression value, ConstantValue constantValue, UnionMatchingMode unionMatchingMode, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8163public BoundExpression Value { get; } 8170public BoundConstantPattern Update(BoundExpression value, ConstantValue constantValue, UnionMatchingMode unionMatchingMode, TypeSymbol inputType, TypeSymbol narrowedType) 8266protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8278public BoundExpression? VariableAccess { get; } 8283public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, bool isUnionMatching, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8307public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, bool isUnionMatching, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8321public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, bool isUnionMatching, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8350public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, bool isUnionMatching, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8364public 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) 8386public BoundExpression? LengthAccess { get; } 8387public BoundExpression? IndexerAccess { get; } 8394public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType) 8408public BoundSlicePattern(SyntaxNode syntax, BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8426public BoundExpression? IndexerAccess { get; } 8433public BoundSlicePattern Update(BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType) 8706public BoundRelationalPattern(SyntaxNode syntax, BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false) 8726public BoundExpression Value { get; } 8733public BoundRelationalPattern Update(BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, bool isUnionMatching, TypeSymbol inputType, TypeSymbol narrowedType) 8782public BoundThrowExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false) 8791public BoundExpression Expression { get; } 8796public BoundThrowExpression Update(BoundExpression expression, TypeSymbol? type) 8810protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8822public BoundExpression? ReceiverOpt { get; } 8827public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8839public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt) 8853public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false) 8865public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt) 8980public BoundExpressionWithNullability(SyntaxNode syntax, BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type, bool hasErrors = false) 8990public BoundExpression Expression { get; } 8997public BoundExpressionWithNullability Update(BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type) 9011public BoundValueForNullableAnalysis(SyntaxNode syntax, BoundExpression? originalExpression, TypeSymbol? type, bool hasErrors = false) 9017public BoundExpression? OriginalExpression { get; } 9022public BoundValueForNullableAnalysis Update(BoundExpression? originalExpression, TypeSymbol? type) 9036public BoundWithExpression(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type, bool hasErrors = false) 9050public BoundExpression Receiver { get; } 9057public BoundWithExpression Update(BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type) 11106BoundExpression value = (BoundExpression)this.Visit(node.Value); 11113BoundExpression value = (BoundExpression)this.Visit(node.Value); 11120BoundExpression value = (BoundExpression)this.Visit(node.Value); 11135BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 11172BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 11208BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11215ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes); 11233ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt); 11254BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11263BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11265BoundExpression? operandConversion = node.OperandConversion; 11267BoundExpression? resultConversion = node.ResultConversion; 11274BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11293BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11299BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11300BoundExpression index = (BoundExpression)this.Visit(node.Index); 11306BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression); 11307ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11314BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11320BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11326BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11333BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11340BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt); 11341BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt); 11347BoundExpression left = (BoundExpression)this.Visit(node.Left); 11348BoundExpression right = (BoundExpression)this.Visit(node.Right); 11354BoundExpression left = (BoundExpression)this.Visit(node.Left); 11355BoundExpression right = (BoundExpression)this.Visit(node.Right); 11366BoundExpression? trueFalseOperandConversion = node.TrueFalseOperandConversion; 11367BoundExpression left = (BoundExpression)this.Visit(node.Left); 11368BoundExpression right = (BoundExpression)this.Visit(node.Right); 11376BoundExpression left = (BoundExpression)this.Visit(node.Left); 11377BoundExpression right = (BoundExpression)this.Visit(node.Right); 11379BoundExpression? leftConversion = node.LeftConversion; 11381BoundExpression? finalConversion = node.FinalConversion; 11387BoundExpression left = (BoundExpression)this.Visit(node.Left); 11388BoundExpression right = (BoundExpression)this.Visit(node.Right); 11401BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 11402BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 11404BoundExpression? leftConversion = node.LeftConversion; 11410BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 11411BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 11417BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11418BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 11419BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 11425BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11426BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 11427BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 11434BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11435ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices); 11441BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11447BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11456BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 11463BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11569BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11576BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11579BoundExpression? operandConversion = node.OperandConversion; 11591BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11598BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 11609ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 11617BoundExpression? elementPointerConversion = node.ElementPointerConversion; 11618BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11660BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt); 11661ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt); 11685BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11690BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11696BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11701BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11721BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11730BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11735BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11745BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11754BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11765BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition); 11776BoundExpression? elementConversion = node.ElementConversion; 11778BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt); 11779BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11794BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 11808BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 11823BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 11825BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt); 11875BoundExpression value = (BoundExpression)this.Visit(node.Value); 11893BoundExpression? caseExpressionOpt = (BoundExpression?)this.Visit(node.CaseExpressionOpt); 11917BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 11925BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 11926BoundExpression value = (BoundExpression)this.Visit(node.Value); 11932BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11941BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 11968BoundExpression? whenExpression = (BoundExpression?)this.Visit(node.WhenExpression); 12043BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 12053BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 12082BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 12087BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12094ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects); 12095BoundExpression value = (BoundExpression)this.Visit(node.Value); 12103BoundExpression value = (BoundExpression)this.Visit(node.Value); 12109BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12116BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12117ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12123BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12124BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression); 12131BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12132BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 12133BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt); 12144BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 12145BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 12154BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12161BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12169BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12170ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12177BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12178BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12185ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments); 12192ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12200ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12214ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12221BoundExpression? collectionCreation = (BoundExpression?)this.Visit(node.CollectionCreation); 12235BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12237BoundExpression? conversion = node.Conversion; 12238BoundExpression? lengthOrCount = node.LengthOrCount; 12245ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12252ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12259ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12273ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 12280ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12294ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 12301ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12302BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt); 12309BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12310ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12322ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12342BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12348ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds); 12355ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 12361BoundExpression count = (BoundExpression)this.Visit(node.Count); 12369BoundExpression count = (BoundExpression)this.Visit(node.Count); 12378BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12391BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12398BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12406BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12407ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12413BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12414BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12415BoundExpression lengthOrCountAccess = node.LengthOrCountAccess; 12417BoundExpression indexerOrSliceAccess = node.IndexerOrSliceAccess; 12424BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12425BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12432BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12433ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 12454BoundExpression value = (BoundExpression)this.Visit(node.Value); 12455BoundExpression? operation = node.Operation; 12456BoundExpression? cast = node.Cast; 12457BoundExpression? unoptimizedForm = node.UnoptimizedForm; 12468BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 12474ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 12480ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 12496BoundExpression value = (BoundExpression)this.Visit(node.Value); 12497BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment); 12506BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12514BoundExpression value = (BoundExpression)this.Visit(node.Value); 12539BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12551BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12560BoundExpression? lengthAccess = node.LengthAccess; 12561BoundExpression? indexerAccess = node.IndexerAccess; 12564BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 12572BoundExpression? indexerAccess = node.IndexerAccess; 12631BoundExpression value = (BoundExpression)this.Visit(node.Value); 12643BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12650BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12657BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 12683BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12689BoundExpression? originalExpression = (BoundExpression?)this.Visit(node.OriginalExpression); 12696BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12705private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _updatedNullabilities; 12709public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols) 12720BoundExpression value = (BoundExpression)this.Visit(node.Value); 12728BoundExpression value = (BoundExpression)this.Visit(node.Value); 12736BoundExpression value = (BoundExpression)this.Visit(node.Value); 12754BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12848BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 12937BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 12955ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes); 12973ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt); 13022BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13042BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13044BoundExpression? operandConversion = node.OperandConversion; 13046BoundExpression? resultConversion = node.ResultConversion; 13063BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13115BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13132BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13133BoundExpression index = (BoundExpression)this.Visit(node.Index); 13150BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression); 13151ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 13169BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13186BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13203BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13221BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13239BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt); 13240BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt); 13257BoundExpression left = (BoundExpression)this.Visit(node.Left); 13258BoundExpression right = (BoundExpression)this.Visit(node.Right); 13275BoundExpression left = (BoundExpression)this.Visit(node.Left); 13276BoundExpression right = (BoundExpression)this.Visit(node.Right); 13311BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 13312BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 13314BoundExpression? leftConversion = node.LeftConversion; 13331BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand); 13332BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand); 13349BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13350BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 13351BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 13369BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13370BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence); 13371BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative); 13388BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13389ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices); 13406BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13423BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13443BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 13451BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13709BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13727BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13730BoundExpression? operandConversion = node.OperandConversion; 13764BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13782BoundExpression operand = (BoundExpression)this.Visit(node.Operand); 13811ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 13831BoundExpression? elementPointerConversion = node.ElementPointerConversion; 13832BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13874BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt); 13875ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt); 13891BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13901BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13909BoundExpression condition = (BoundExpression)this.Visit(node.Condition); 13919BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition); 13929BoundExpression? elementConversion = node.ElementConversion; 13931BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt); 13932BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 13942BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt); 13960BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 13962BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt); 14076BoundExpression value = (BoundExpression)this.Visit(node.Value); 14124BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause); 14125BoundExpression value = (BoundExpression)this.Visit(node.Value); 14131BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14151BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14200BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 14211BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess); 14228BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14246ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects); 14247BoundExpression value = (BoundExpression)this.Visit(node.Value); 14266BoundExpression value = (BoundExpression)this.Visit(node.Value); 14283BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 14301BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14302ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14319BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 14320BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression); 14338BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 14339BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull); 14340BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt); 14369BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver); 14370BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver); 14390BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14408BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14427BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14428ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14446BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14447BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14465ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments); 14483ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14502ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14540BoundExpression? collectionCreation = (BoundExpression?)this.Visit(node.CollectionCreation); 14572ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14590ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14608ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14644ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14663ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14698ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14716ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14717BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt); 14735BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 14736ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14766ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 14819BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 14836ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds); 14854ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers); 14872BoundExpression count = (BoundExpression)this.Visit(node.Count); 14891BoundExpression count = (BoundExpression)this.Visit(node.Count); 14910BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14945BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14963BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14982BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 14983ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 15000BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15001BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 15019BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver); 15020ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments); 15074BoundExpression value = (BoundExpression)this.Visit(node.Value); 15075BoundExpression? operation = node.Operation; 15076BoundExpression? cast = node.Cast; 15077BoundExpression? unoptimizedForm = node.UnoptimizedForm; 15094BoundExpression argument = (BoundExpression)this.Visit(node.Argument); 15111ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 15128ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts); 15169BoundExpression value = (BoundExpression)this.Visit(node.Value); 15170BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment); 15188BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15209BoundExpression value = (BoundExpression)this.Visit(node.Value); 15237BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 15250BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 15260BoundExpression? lengthAccess = node.LengthAccess; 15261BoundExpression? indexerAccess = node.IndexerAccess; 15264BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess); 15273BoundExpression? indexerAccess = node.IndexerAccess; 15323BoundExpression value = (BoundExpression)this.Visit(node.Value); 15341BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15359BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 15377BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 15420BoundExpression expression = (BoundExpression)this.Visit(node.Expression); 15437BoundExpression? originalExpression = (BoundExpression?)this.Visit(node.OriginalExpression); 15455BoundExpression 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)); 623var storePending = _F.AssignmentExpression( 642var filterOpt = node.ExceptionFilterOpt; 679var sourceOpt = node.ExceptionSourceOpt; 683prologueBuilder.Add(_F.ExpressionStatement(AssignCatchSource((BoundExpression)this.Visit(sourceOpt), currentAwaitCatchFrame))); 692var rewrittenFilter = (BoundExpression)this.Visit(filterOpt); 712var sourceOpt = node.ExceptionSourceOpt; 715BoundExpression assignSource = AssignCatchSource((BoundExpression)this.Visit(sourceOpt), currentAwaitCatchFrame); 732private BoundExpression AssignCatchSource(BoundExpression rewrittenSource, AwaitCatchFrame currentAwaitCatchFrame) 734BoundExpression assignSource = null; 1072BoundExpression valueOpt,
Lowering\AsyncRewriter\AsyncIteratorMethodToStateMachineRewriter.cs (3)
161ImmutableArray<BoundExpression>.Empty)); 279var rewrittenExpression = (BoundExpression)Visit(node.Expression);
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (22)
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) 490BoundExpression awaiterTempRef = F.Local(awaiterTemp); 532BoundExpression awaiterFieldRef = F.Field(F.This(), awaiterField); 659BoundExpression result = 669ImmutableArray.Create<BoundExpression>(F.AssignmentExpression(F.Local(thisTemp), F.This())), 687F.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 (21)
89private readonly Dictionary<BoundAwaitableValuePlaceholder, BoundExpression> _placeholderMap; 125public BoundExpression? VisitExpression(BoundExpression? node) 128return (BoundExpression?)result; 157var expr = VisitExpression(node.Expression); 169private BoundExpression RewriteCustomAwaiterAwait(BoundAwaitExpression node) 178var expr = VisitExpression(node.Expression); 188var getAwaiter = VisitExpression(awaitableInfo.GetAwaiter); 228private BoundExpression RewriteDynamicAwaiterAwait(BoundAwaitExpression node, bool resultDiscarded) 243var expr = VisitExpression(node.Expression); 246var getAwaiter = MakeDynamicMemberInvocation(expr, WellKnownMemberNames.GetAwaiter); 250var isCompletedCall = _dynamicFactory.MakeDynamicConversion( 263var critTempAssignment = _factory.AssignmentExpression(_factory.Local(critTemp), _factory.As(tmp, criticalNotifyCompletionType)); 292var getResultCall = MakeDynamicMemberInvocation(tmp, WellKnownMemberNames.GetResult, resultDiscarded); 300private BoundExpression MakeDynamicMemberInvocation(BoundExpression receiver, string methodName, bool resultDiscarded = false) 306loweredArguments: ImmutableArray<BoundExpression>.Empty, 325BoundExpression visitedRight; 343var visitedLeftOrProxy = VisitExpression(leftLocal); 351var assignment = _factory.AssignmentExpression(leftLocal, visitedLeftOrProxy, isRef: true); 426var expr = VisitExpression(node.Expression);
Lowering\BoundTreeToDifferentEnclosingContextRewriter.cs (3)
131var getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter); 179(BoundExpression)Visit(node.Operand),
Lowering\ClosureConversion\ClosureConversion.cs (50)
122private BoundExpression _thisProxyInitDeferred; 592private BoundExpression FrameOfType(SyntaxNode syntax, NamedTypeSymbol frameType) 594BoundExpression result = FramePointer(syntax, frameType.OriginalDefinition); 607protected override BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass) 660result.Add(new BoundExpressionStatement(node.Syntax, (BoundExpression)(BoundNode)node)); 674private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F) 687var prologue = ArrayBuilder<BoundExpression>.GetInstance(); 708BoundExpression left = new BoundFieldAccess(syntax, new BoundLocal(syntax, framePointer, null, frameType), frameParent, null); 709BoundExpression right = FrameOfType(syntax, frameParent.Type as NamedTypeSymbol); 710BoundExpression assignment = new BoundAssignmentOperator(syntax, left, right, left.Type); 759private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue) 764BoundExpression value; 798var left = proxy.Replacement( 886out BoundExpression receiver, 888ref ImmutableArray<BoundExpression> arguments, 905var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(loweredSymbol.ParameterCount); 924var frame = FrameOfType(syntax, frameType); 1031out BoundExpression receiver, 1097out var receiver, 1139sideEffects: ImmutableArray.Create<BoundExpression>(rewritten), 1149private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1153foreach (var effect in node.SideEffects) 1155var replacement = (BoundExpression)this.Visit(effect); 1159var newValue = (BoundExpression)this.Visit(node.Value); 1170return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1175return RewriteBlock(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1179private BoundBlock RewriteBlock(BoundBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1232return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1239return RewriteCatch(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1243private BoundNode RewriteCatch(BoundCatchBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) 1251BoundExpression rewrittenExceptionSource = null; 1253var rewrittenFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt); 1256rewrittenExceptionSource = (BoundExpression)Visit(node.ExceptionSourceOpt); 1271foreach (var p in prologue) 1306return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1313return RewriteSequence(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance()); 1323return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) => 1353var arguments = default(ImmutableArray<BoundExpression>); 1359out var receiver, 1380ImmutableArray<BoundExpression> arguments = default; 1386out BoundExpression receiver, 1410var result = (BoundExpression)RewriteLambdaConversion((BoundLambda)conversion.Operand); 1663BoundExpression receiver; 1675BoundExpression result = new BoundDelegateCreationExpression( 1702BoundExpression cache; 1745return new BoundBadExpression(F.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (143)
21private readonly Dictionary<ParameterSymbol, BoundExpression> _parameterMap = new Dictionary<ParameterSymbol, BoundExpression>(); 22private Dictionary<BoundValuePlaceholder, BoundExpression> _placeholderReplacementMap; 118var result = r.VisitLambdaInternal(node); 132private BoundExpression TranslateLambdaBody(BoundBlock block) 142var result = Visit(((BoundReturnStatement)stmt).ExpressionOpt); 166private BoundExpression Visit(BoundExpression node) 175var result = VisitInternal(node); 183private BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node) 260private BoundExpression VisitInternal(BoundExpression node) 262BoundExpression result; 286private BoundExpression VisitExpressionWithStackGuard(BoundExpression node) 298private BoundExpression VisitArrayAccess(BoundArrayAccess node) 300var array = Visit(node.Expression); 303var arg = node.Indices[0]; 304var index = Visit(arg); 317private BoundExpression Indices(ImmutableArray<BoundExpression> expressions) 319var builder = ArrayBuilder<BoundExpression>.GetInstance(); 320foreach (var arg in expressions) 322var index = Visit(arg); 333private BoundExpression Expressions(ImmutableArray<BoundExpression> expressions) 335var builder = ArrayBuilder<BoundExpression>.GetInstance(); 336foreach (var arg in expressions) 344private BoundExpression VisitArrayCreation(BoundArrayCreation node) 347var boundType = _bound.Typeof(arrayType.ElementType, _bound.WellKnownType(WellKnownType.System_Type)); 358return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType); 367private BoundExpression VisitArrayLength(BoundArrayLength node) 372private BoundExpression VisitAsOperator(BoundAsOperator node) 376var operand = _bound.Null(_bound.SpecialType(SpecialType.System_Object)); 385private BoundExpression VisitBaseReference(BoundBaseReference node) 389return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType); 494private BoundExpression VisitBinaryOperator(BinaryOperatorKind opKind, MethodSymbol methodOpt, TypeSymbol type, BoundExpression left, BoundExpression right) 516var enumOperand = (opKind.OperandTypes() == BinaryOperatorKind.UnderlyingAndEnum) ? right : left; 523var loweredLeft = VisitAndPromoteEnumOperand(left, promotedType, isChecked); 524var loweredRight = VisitAndPromoteEnumOperand(right, promotedType, isChecked); 526var result = MakeBinary(methodOpt, type, isLifted, requiresLifted, opFactory, loweredLeft, loweredRight); 531var loweredLeft = Visit(left); 532var loweredRight = Visit(right); 538private static BoundExpression DemoteEnumOperand(BoundExpression operand) 555private BoundExpression VisitAndPromoteEnumOperand(BoundExpression operand, TypeSymbol promotedType, bool isChecked) 568var demotedOperand = DemoteEnumOperand(operand); 569var loweredOperand = Visit(demotedOperand); 574private BoundExpression MakeBinary(MethodSymbol methodOpt, TypeSymbol type, bool isLifted, bool requiresLifted, WellKnownMember opFactory, BoundExpression loweredLeft, BoundExpression loweredRight) 605private BoundExpression Demote(BoundExpression node, TypeSymbol type, bool isChecked) 625private BoundExpression ConvertIndex(BoundExpression expr, TypeSymbol oldType, TypeSymbol newType) 643private BoundExpression VisitCall(BoundCall node) 662private BoundExpression VisitConditionalOperator(BoundConditionalOperator node) 664var condition = Visit(node.Condition); 665var consequence = VisitExactType(node.Consequence); 666var alternative = VisitExactType(node.Alternative); 674private BoundExpression VisitExactType(BoundExpression e) 694private BoundExpression VisitConversion(BoundConversion node) 718var e1 = requireAdditionalCast 721var e2 = _bound.StaticCall(node.Checked && SyntaxFacts.IsCheckedOperator(method.Name) ? 731var operand = Visit(node.Operand); 744var e1 = Convert(Visit(node.Operand), node.Operand.Type, intermediate, node.Checked, false); 754private BoundExpression Convert(BoundExpression operand, TypeSymbol oldType, TypeSymbol newType, bool isChecked, bool isExplicit) 759private BoundExpression Convert(BoundExpression expr, TypeSymbol type, bool isChecked) 767private BoundExpression DelegateCreation(BoundExpression receiver, MethodSymbol method, TypeSymbol delegateType, bool requiresInstanceReceiver) 769var nullObject = _bound.Null(_objectType); 783BoundExpression unquoted; 805private BoundExpression VisitDelegateCreationExpression(BoundDelegateCreationExpression node) 828private BoundExpression VisitFieldAccess(BoundFieldAccess node) 830var receiver = node.FieldSymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt); 836private BoundExpression VisitIsOperator(BoundIsOperator node) 838var operand = node.Operand; 847private BoundExpression VisitLambda(BoundLambda node) 849var result = VisitLambdaInternal(node); 853private BoundExpression VisitLambdaInternal(BoundLambda node) 857var initializers = ArrayBuilder<BoundExpression>.GetInstance(); 858var parameters = ArrayBuilder<BoundExpression>.GetInstance(); 865var parameter = _bound.StaticCall( 873var result = _bound.Sequence(locals.ToImmutableAndFree(), initializers.ToImmutableAndFree(), 888private BoundExpression VisitNewT(BoundNewT node) 893private BoundExpression VisitNullCoalescingOperator(BoundNullCoalescingOperator node) 895var left = Visit(node.LeftOperand); 896var right = Visit(node.RightOperand); 907BoundExpression makeConversionLambda(BoundExpression leftConversion, BoundValuePlaceholder leftPlaceholder) 914var parameter = _bound.StaticCall(WellKnownMember.System_Linq_Expressions_Expression__Parameter, _bound.Typeof(fromType, _bound.WellKnownType(WellKnownType.System_Type)), _bound.Literal(parameterName)); 916_placeholderReplacementMap ??= new Dictionary<BoundValuePlaceholder, BoundExpression>(); 918var convertedValue = Visit(leftConversion); 920var result = _bound.Sequence( 922ImmutableArray.Create<BoundExpression>(_bound.AssignmentExpression(parameterReference, parameter)), 926_bound.ArrayOrEmpty(ParameterExpressionType, ImmutableArray.Create<BoundExpression>(parameterReference)))); 931private BoundExpression InitializerMemberSetter(Symbol symbol) 937BoundExpression fieldInfo = _bound.FieldInfo((FieldSymbol)symbol); 947BoundExpression fieldInfo = _bound.FieldInfo(((EventSymbol)symbol).AssociatedField); 958private BoundExpression InitializerMemberGetter(Symbol symbol) 964BoundExpression fieldInfo = _bound.FieldInfo((FieldSymbol)symbol); 974BoundExpression fieldInfo = _bound.FieldInfo(((EventSymbol)symbol).AssociatedField); 987private BoundExpression VisitInitializer(BoundExpression node, out InitializerKind kind) 994var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1003var value = VisitInitializer(a.Right, out elementKind); 1008var left = InitializerMemberGetter(sym); 1017var left = InitializerMemberSetter(sym); 1026var left = InitializerMemberGetter(sym); 1048var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1054BoundExpression elementInit = _bound.StaticCall(WellKnownMember.System_Linq_Expressions_Expression__ElementInit, 1071private BoundExpression VisitObjectCreationExpression(BoundObjectCreationExpression node) 1076private BoundExpression VisitObjectCreationContinued(BoundExpression creation, BoundExpression initializerExpressionOpt) 1078var result = creation; 1081var init = VisitInitializer(initializerExpressionOpt, out initializerKind); 1093private BoundExpression VisitObjectCreationExpressionInternal(BoundObjectCreationExpression node) 1108var ctor = _bound.ConstructorInfo(node.Constructor); 1110BoundExpression args = Expressions(node.Arguments); 1119var membersBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 1134private BoundExpression VisitParameter(BoundParameter node) 1139private static BoundExpression VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node) 1143return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1146private static BoundExpression VisitPointerElementAccess(BoundPointerElementAccess node) 1150return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1153private BoundExpression VisitPropertyAccess(BoundPropertyAccess node) 1155var receiver = node.PropertySymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt); 1178private static BoundExpression VisitSizeOfOperator(BoundSizeOfOperator node) 1182return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type); 1185private BoundExpression VisitUnaryOperator(BoundUnaryOperator node) 1187var arg = node.Operand; 1188var loweredArg = Visit(arg); 1243var result = _bound.StaticCall(opFactory, loweredArg); 1254private 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) 309ImmutableArray<BoundExpression> arguments, 368static bool hasDefaultArgument(ImmutableArray<BoundExpression> arguments, BitVector defaultArguments) 403node is BoundExpression expr && 820BoundExpression 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; 344private static bool IsExplicitCast(BoundExpression node) 459private void CheckForBitwiseOrSignExtend(BoundExpression node, BinaryOperatorKind operatorKind, BoundExpression leftOperand, BoundExpression rightOperand) 571private static ConstantValue GetConstantValueForBitwiseOrCheck(BoundExpression operand) 603private static ulong FindSurprisingSignExtensionBits(BoundExpression expr) 850private static TypeSymbol GetTypeForLiftedComparisonWarning(BoundExpression node) 886private void CheckForDeconstructionAssignmentToSelf(BoundTupleExpression leftTuple, BoundExpression right) 915var leftArgument = leftArguments[i]; 916var 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); 284BoundExpression 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_SequencePoints.cs (7)
172private static BoundExpression AddConditionSequencePoint(BoundExpression condition, SyntaxNode synthesizedVariableSyntax, SyntheticBoundNodeFactory factory) 187var valueExpression = (condition.ConstantValueOpt == null) ? 194ImmutableArray.Create<BoundExpression>(factory.AssignmentExpression(factory.Local(local), condition)), 199(TryGetConditionalBranchDiscriminatorCondition(sequence, out var roundtripCondition, out var roundtripTarget) && 212BoundExpression node, 213[NotNullWhen(returnValue: true)] out BoundExpression? condition,
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\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)
362public override BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original) 366var assignment = base.InstrumentUserDefinedLocalAssignment(original); 369BoundExpression? refAssignmentSourceIndex; 394if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex)) 415private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression) 441private ImmutableArray<BoundExpression> MakeStoreLoggerArguments( 445BoundExpression value, 446BoundExpression? refAssignmentSourceIndex, 447BoundExpression index) 462var addressOf = value is BoundLocal or BoundParameter ? 463(BoundExpression)new BoundAddressOfOperator(_factory.Syntax, value, isManaged: false, parameter.Type) : 473BoundExpression toString; 494private BoundExpression VariableRead(Symbol localOrParameterSymbol) 504ref BoundExpression? rewrittenSource, 506ref BoundExpression? rewrittenFilter, 532var targetIndex = _factory.LocalId(targetSymbol); 552public override BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten) 554ImmutableArray<BoundExpression> arguments = original.Arguments; 568public override BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten) 571public override BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten) 574private BoundExpression InstrumentCall(BoundExpression invocation, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds) 584var builder = ArrayBuilder<BoundExpression>.GetInstance(); 606if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex)) 630var 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_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 (30)
21private BoundExpression VisitAssignmentOperator(BoundAssignmentOperator node, bool used) 23var loweredRight = VisitExpression(node.Right); 25BoundExpression left = node.Left; 26BoundExpression loweredLeft; 60var loweredReceiver = VisitExpression(memberAccess.Receiver); 68var loweredReceiver = VisitExpression(indexerAccess.Receiver); 102private BoundExpression MakeAssignmentOperator(SyntaxNode syntax, BoundExpression rewrittenLeft, BoundExpression rewrittenRight, 150private BoundExpression MakeDynamicSetIndex( 152BoundExpression loweredReceiver, 153ImmutableArray<BoundExpression> loweredArguments, 156BoundExpression loweredRight, 177private BoundExpression MakeStaticAssignmentOperator( 179BoundExpression rewrittenLeft, 180BoundExpression rewrittenRight, 196BoundExpression? rewrittenReceiver = propertyAccess.ReceiverOpt; 203ImmutableArray<BoundExpression>.Empty, 217BoundExpression? rewrittenReceiver = indexerAccess.ReceiverOpt; 218ImmutableArray<BoundExpression> arguments = indexerAccess.Arguments; 291private bool IsExtensionPropertyWithByValPossiblyStructReceiverWhichHasHomeAndCanChangeValueBetweenReads(BoundExpression rewrittenReceiver, Symbol? symbol) 303private BoundExpression MakePropertyAssignment( 305BoundExpression? rewrittenReceiver, 307ImmutableArray<BoundExpression> arguments, 311BoundExpression rewrittenRight, 336ArrayBuilder<BoundExpression>? storesOpt = null; 351storesOpt = ArrayBuilder<BoundExpression>.GetInstance(); 414BoundExpression boundRhs = new BoundLocal(syntax, rhsTemp, null, exprType); 416BoundExpression rhsAssignment = new BoundAssignmentOperator( 422BoundExpression 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_BasePatternSwitchLocalRewriter.cs (2)
89protected (UnreachableDefaultLabelExceptionCreationStrategy, Conversion) DetermineUnreachableDefaultLabelExceptionCreationStrategy(BoundExpression savedInputExpression) 113Conversion? tryGetImplicitConversion(BoundExpression expression, TypeSymbol type)
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, 545private BoundExpression RewriteLiftedBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt) 562var result = operatorKind.IsComparison() ? 570BoundExpression? whenNullOpt = null; 598private BoundExpression UnconvertArrayLength(BoundArrayLength arrLength) 603private BoundExpression MakeDynamicLogicalBinaryOperator( 606BoundExpression loweredLeft, 607BoundExpression loweredRight, 653BoundExpression result; 674var op = _dynamicFactory.MakeDynamicBinaryOperator(operatorKind, loweredLeft, loweredRight, isCompoundAssignment, type).ToExpression(); 688BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, operatorKind, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd); 704BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, operatorKind, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd); 705var convertedLeft = MakeConversionNode(loweredLeft, type, @checked: false); 713return _factory.Sequence(ImmutableArray.Create(temp.LocalSymbol), ImmutableArray.Create<BoundExpression>(tempAssignment), result); 719private static ConstantValue? UnboxConstant(BoundExpression expression) 733private BoundExpression MakeTruthTestForDynamicLogicalOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, TypeSymbol boolean, MethodSymbol? leftTruthOperator, TypeSymbol? constrainedToTypeOpt, bool negative) 754var converted = MakeConversionNode(loweredLeft, boolean, @checked: false, markAsChecked: true); // The conversion was checked in binding 786private BoundExpression LowerUserDefinedBinaryOperator( 789BoundExpression loweredLeft, 790BoundExpression loweredRight, 814private BoundExpression? TrivialLiftedComparisonOperatorOptimizations( 817BoundExpression left, 818BoundExpression right, 840BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 841BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 862BoundExpression result = MakeLiteral(syntax, ConstantValue.Create(operatorKind == BinaryOperatorKind.NotEqual), boolType); 864BoundExpression? nonNull = leftAlwaysNull ? rightNonNull : leftNonNull; 872sideEffects: ImmutableArray.Create<BoundExpression>(nonNull), 887BoundExpression maybeNull = leftAlwaysNull ? right : left; 891BoundExpression callHasValue = _factory.MakeNullableHasValue(syntax, maybeNull); 892BoundExpression result = operatorKind == BinaryOperatorKind.Equal ? 899BoundExpression falseExpr = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual); 907private BoundExpression MakeOptimizedGetValueOrDefault(SyntaxNode syntax, BoundExpression expression) 925private BoundExpression MakeBooleanConstant(SyntaxNode syntax, bool value) 930private BoundExpression MakeOptimizedHasValue(SyntaxNode syntax, BoundExpression expression) 944private BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression) 954private BoundExpression LowerLiftedBuiltInComparisonOperator( 957BoundExpression loweredLeft, 958BoundExpression loweredRight) 974BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method: null, constrainedToTypeOpt: null); 1013BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft); 1014BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight); 1051BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1052BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1053BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1054BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1074BoundExpression leftExpression = MakeBinaryOperator( 1084BoundExpression rightExpression = MakeBinaryOperator( 1095BoundExpression binaryExpression = MakeBinaryOperator( 1118sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1144private BoundExpression LowerLiftedUserDefinedComparisonOperator( 1147BoundExpression loweredLeft, 1148BoundExpression loweredRight, 1154BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method, constrainedToTypeOpt); 1209BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft); 1210BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight); 1224BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1225BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1226BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1227BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1245BoundExpression condition = MakeBinaryOperator( 1255BoundExpression unliftedOp = MakeBinaryOperator( 1264BoundExpression consequence; 1293BoundExpression alternative = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual); 1295BoundExpression conditionalExpression = RewriteConditionalOperator( 1307sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1312private BoundExpression? TrivialLiftedBinaryArithmeticOptimizations( 1315BoundExpression left, 1316BoundExpression right, 1341BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 1342BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 1352private BoundExpression MakeLiftedBinaryOperatorConsequence( 1355BoundExpression left, 1356BoundExpression right, 1362BoundExpression unliftedOp = MakeBinaryOperator( 1378private static BoundExpression? OptimizeLiftedArithmeticOperatorOneNull( 1380BoundExpression left, 1381BoundExpression right, 1399BoundExpression notAlwaysNull = leftAlwaysNull ? right : left; 1400BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull); 1401BoundExpression sideEffect = neverNull ?? notAlwaysNull; 1416sideEffects: ImmutableArray.Create<BoundExpression>(sideEffect), 1421private BoundExpression LowerLiftedBinaryArithmeticOperator( 1424BoundExpression loweredLeft, 1425BoundExpression loweredRight, 1434BoundExpression? optimized = OptimizeLiftedBinaryArithmetic(syntax, kind, loweredLeft, loweredRight, type, method, constrainedToTypeOpt); 1458var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(); 1461BoundExpression? leftNeverNull = NullableAlwaysHasValue(loweredLeft); 1462BoundExpression? rightNeverNull = NullableAlwaysHasValue(loweredRight); 1464BoundExpression boundTempX = leftNeverNull ?? loweredLeft; 1467BoundExpression boundTempY = rightNeverNull ?? loweredRight; 1470BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX); 1471BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY); 1472BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX); 1473BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY); 1477BoundExpression condition = MakeBinaryOperator(syntax, BinaryOperatorKind.BoolAnd, callX_HasValue, callY_HasValue, boolType, method: null, constrainedToTypeOpt: null); 1480BoundExpression consequence = MakeLiftedBinaryOperatorConsequence(syntax, kind, callX_GetValueOrDefault, callY_GetValueOrDefault, type, method, constrainedToTypeOpt); 1483BoundExpression alternative = new BoundDefaultExpression(syntax, type); 1488BoundExpression conditionalExpression = RewriteConditionalOperator( 1505private BoundExpression CaptureExpressionInTempIfNeeded( 1506BoundExpression operand, 1507ArrayBuilder<BoundExpression> sideeffects, 1523private BoundExpression? OptimizeLiftedBinaryArithmetic( 1526BoundExpression left, 1527BoundExpression right, 1532BoundExpression? optimized = TrivialLiftedBinaryArithmeticOptimizations(syntax, kind, left, right, type, method, constrainedToTypeOpt); 1626BoundExpression? nonNullRight = NullableAlwaysHasValue(right); 1659private BoundExpression MakeNewNullableBoolean(SyntaxNode syntax, bool? value) 1674private BoundExpression? OptimizeLiftedBooleanOperatorOneNull( 1677BoundExpression left, 1678BoundExpression right) 1705BoundExpression alwaysNull = leftAlwaysNull ? left : right; 1706BoundExpression notAlwaysNull = leftAlwaysNull ? right : left; 1707BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull); 1709BoundExpression nullBool = new BoundDefaultExpression(syntax, alwaysNull.Type); 1713BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr); 1739BoundExpression condition = MakeOptimizedGetValueOrDefault(syntax, boundTemp); 1740BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? nullBool : boundTemp; 1741BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTemp : nullBool; 1742BoundExpression conditionalExpression = RewriteConditionalOperator( 1754sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1759private BoundExpression? OptimizeLiftedBooleanOperatorOneNonNull( 1762BoundExpression left, 1763BoundExpression right) 1781BoundExpression? leftNonNull = NullableAlwaysHasValue(left); 1782BoundExpression? rightNonNull = NullableAlwaysHasValue(right); 1798BoundExpression nonNullTemp = leftNonNull == null ? boundTempY : boundTempX; 1799BoundExpression maybeNullTemp = leftNonNull == null ? boundTempX : boundTempY; 1800BoundExpression condition = nonNullTemp; 1801BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr); 1802BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolOr ? newNullBool : maybeNullTemp; 1803BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolOr ? maybeNullTemp : newNullBool; 1804BoundExpression conditionalExpression = RewriteConditionalOperator( 1815sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1820private BoundExpression LowerLiftedBooleanOperator( 1823BoundExpression loweredLeft, 1824BoundExpression loweredRight) 1830BoundExpression? optimized = OptimizeLiftedBooleanOperatorOneNull(syntax, kind, loweredLeft, loweredRight); 1859BoundExpression callX_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempX, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefaultX); 1861BoundExpression callY_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempY, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefaultY); 1863BoundExpression callX_HasValue = _factory.MakeNullableHasValue(syntax, boundTempX); 1866BoundExpression innerOr = MakeBinaryOperator( 1876BoundExpression invert = MakeUnaryOperator(UnaryOperatorKind.BoolLogicalNegation, syntax, method: null, constrainedToTypeOpt: null, innerOr, boolType); 1879BoundExpression condition = MakeBinaryOperator( 1888BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempY : boundTempX; 1889BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempX : boundTempY; 1891BoundExpression conditionalExpression = RewriteConditionalOperator( 1903sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY), 1942private BoundExpression RewriteNullableNullEquality( 1945BoundExpression loweredLeft, 1946BoundExpression loweredRight, 1964BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight; 1973BoundExpression? nonNullValue = NullableAlwaysHasValue(nullable); 1984sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue), 1994BoundExpression whenNotNull = RewriteNullableNullEquality( 2001var whenNull = kind == BinaryOperatorKind.NullableNullEqual ? MakeBooleanConstant(syntax, true) : null; 2006BoundExpression call = MakeNullableHasValue(syntax, nullable); 2007BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ? 2014private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member) 2027private BoundExpression RewriteDelegateOperation(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member) 2048BoundExpression call = _inExpressionLambda 2050: (BoundExpression)BoundCall.Synthesized(syntax, receiverOpt: null, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method, loweredLeft, loweredRight); 2051BoundExpression result = method.ReturnType.SpecialType == SpecialType.System_Delegate ? 2057private BoundExpression RewriteDecimalBinaryOperation(SyntaxNode syntax, BoundExpression loweredLeft, BoundExpression loweredRight, BinaryOperatorKind operatorKind) 2088private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 2145private BoundExpression RewriteBuiltInShiftOperation( 2149BoundExpression loweredLeft, 2150BoundExpression loweredRight, 2207private BoundExpression RewriteBuiltInNativeShiftOperation( 2211BoundExpression loweredLeft, 2212BoundExpression loweredRight, 2268private BoundExpression RewritePointerNumericOperator( 2271BoundExpression loweredLeft, 2272BoundExpression loweredRight, 2321private BoundExpression MakeSizeOfMultiplication(BoundExpression numericOperand, PointerTypeSymbol pointerType, bool isChecked) 2323var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType); 2465private BoundExpression RewritePointerSubtraction( 2467BoundExpression loweredLeft, 2468BoundExpression loweredRight, 2476var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType);
Lowering\LocalRewriter\LocalRewriter_Call.cs (88)
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, 342BoundExpression rewrittenCall; 359BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 373BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 379BoundExpression visitArgumentsAndFinishRewrite(BoundCall node, BoundExpression? rewrittenReceiver) 384ImmutableArray<BoundExpression> arguments = node.Arguments; 388BoundExpression? firstRewrittenArgument = null; 424var rewrittenCall = MakeCall(node, node.Syntax, rewrittenReceiver, method, rewrittenArguments, argRefKindsOpt, node.ResultKind, temps.ToImmutableAndFree()); 457private BoundExpression MakeCall( 460BoundExpression? rewrittenReceiver, 462ImmutableArray<BoundExpression> rewrittenArguments, 467BoundExpression rewrittenBoundCall; 534sideEffects: ImmutableArray<BoundExpression>.Empty, 542private BoundExpression MakeCall(SyntaxNode syntax, BoundExpression? rewrittenReceiver, MethodSymbol method, ImmutableArray<BoundExpression> rewrittenArguments) 555private static bool IsSafeForReordering(BoundExpression expression, RefKind kind) 562var current = expression; 648internal static bool IsCapturedPrimaryConstructorParameter(BoundExpression expression) 670private ImmutableArray<BoundExpression> VisitArgumentsAndCaptureReceiverIfNeeded( 671[NotNullIfNotNull(nameof(rewrittenReceiver))] ref BoundExpression? rewrittenReceiver, 673ImmutableArray<BoundExpression> arguments, 677ArrayBuilder<BoundExpression>? storesOpt, 679BoundExpression? firstRewrittenArgument = null) 687BoundExpression? capturedReceiver = null; 754storesOpt = ArrayBuilder<BoundExpression>.GetInstance(); 801ImmutableArray<BoundExpression> rewrittenArguments; 810var visitedArgumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length); 819var argument = arguments[i]; 894ArrayBuilder<BoundExpression> visitedArgumentsBuilder, 896BoundExpression? capturedReceiver, 900var argument = arguments[argumentIndex]; 924BoundExpression replacement; 949var visitedArgument = visitedArgumentsBuilder[argIndex]; 952visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local); 975static bool usesReceiver(BoundExpression argument) 999private RefKind GetExtensionBlockMemberReceiverCaptureRefKind(BoundExpression rewrittenReceiver, Symbol methodOrIndexer) 1008RefKind getExtensionBlockMemberReceiverCaptureRefKind(BoundExpression rewrittenReceiver, Symbol methodOrIndexer) 1069private BoundLocal ReferToTempIfReferenceTypeReceiver(BoundExpression receiver, [NotNull] ref BoundAssignmentOperator? assignmentToTemp, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 1125_factory.Sequence(new BoundExpression[] { _factory.AssignmentExpression(cache, receiver) }, cache), 1168private ImmutableArray<BoundExpression> MakeArguments( 1169ImmutableArray<BoundExpression> rewrittenArguments, 1188BoundExpression? optimized; 1254BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter. 1301private bool TryOptimizeParamsArray(BoundExpression possibleParamsArray, [NotNullWhen(true)] out BoundExpression? optimized) 1403ImmutableArray<BoundExpression> rewrittenArguments, 1466private delegate BoundExpression ParamsArrayElementRewriter<TArg>(BoundExpression element, ref TArg arg); 1467private static BoundExpression RewriteParamsArray<TArg>(BoundExpression paramsArray, ParamsArrayElementRewriter<TArg> elementRewriter, ref TArg arg) 1473ArrayBuilder<BoundExpression>? elementsBuilder = null; 1477var element = elements[i]; 1478var replacement = elementRewriter(element, ref arg); 1484elementsBuilder = ArrayBuilder<BoundExpression>.GetInstance(elements.Length); 1517ImmutableArray<BoundExpression> rewrittenArguments, 1519/* out */ BoundExpression[] arguments, 1530BoundExpression argument = rewrittenArguments[a]; 1556static (BoundExpression element, ref (LocalRewriter rewriter, bool forceLambdaSpilling, ArrayBuilder<BoundAssignmentOperator> storesToTemps) arg) => 1573private BoundExpression StoreArgumentToTempIfNecessary(bool forceLambdaSpilling, ArrayBuilder<BoundAssignmentOperator> storesToTemps, BoundExpression argument, RefKind argRefKind, RefKind paramRefKind) 1592bool isLambdaConversion(BoundExpression expr) 1596private BoundExpression CreateEmptyArray(SyntaxNode syntax, ArrayTypeSymbol arrayType) 1598BoundExpression? arrayEmpty = CreateArrayEmptyCallIfAvailable(syntax, arrayType.ElementType); 1606ImmutableArray.Create<BoundExpression>( 1616private BoundExpression? CreateArrayEmptyCallIfAvailable(SyntaxNode syntax, TypeSymbol elementType) 1638ImmutableArray<BoundExpression>.Empty, 1651BoundExpression[] arguments, 1681BoundExpression[] arguments, 1706var argument = arguments[a]; 1713static (BoundExpression element, ref (ArrayBuilder<BoundAssignmentOperator> tempStores, int tempsRemainedInUse, int firstUnclaimedStore) arg) => 1728static BoundExpression mergeArgumentAndSideEffect(BoundExpression argument, ArrayBuilder<BoundAssignmentOperator> tempStores, ref int tempsRemainedInUse, ref int firstUnclaimedStore) 1750var value = tempStores[correspondingStore].Right; 1766var sideeffects = new BoundExpression[correspondingStore - firstUnclaimedStore]; 1799BoundExpression[] actualArguments, //already re-ordered to match parameters 1823var argument = actualArguments[argIndex]; 1842sideEffects: ImmutableArray.Create<BoundExpression>(boundAssignmentToTemp), 1861var loweredReceiver = VisitExpression(node.Receiver);
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (120)
29private BoundExpression RewriteCollectionExpressionConversion(Conversion conversion, BoundCollectionExpression node) 64var rewrittenReceiver = node.HasWithElement ? VisitExpression(node.CollectionCreation) : null; 120BoundExpression expr; 128expr = (BoundExpression)element; 142var iteratorBody = Binder.GetUnderlyingCollectionExpressionElement(node, ((BoundExpressionStatement)spreadElement.IteratorBody).Expression, throwOnErrors: true); 155var result = Binder.GetUnderlyingCollectionExpressionElement(node, (BoundExpression)element, throwOnErrors: true); 164private bool TryRewriteSingleElementSpreadToList(BoundCollectionExpression node, TypeWithAnnotations listElementType, [NotNullWhen(true)] out BoundExpression? result) 187var rewrittenSpreadExpression = VisitExpression(singleSpread.Expression); 221private static bool CanOptimizeSingleSpreadAsCollectionBuilderArgument(BoundCollectionExpression node, [NotNullWhen(true)] out BoundExpression? spreadExpression) 245private BoundExpression VisitArrayOrSpanCollectionExpression(BoundCollectionExpression node, TypeSymbol collectionType) 283BoundExpression createImmutableArray(BoundCollectionExpression node, NamedTypeSymbol immutableArrayType) 305elements.All(e => e is BoundExpression) && 309return _factory.Call(receiver: null, factoryMethodConstructed, elements.SelectAsArray(e => VisitExpression((BoundExpression)e))); 323var arrayValue = createArray(node, arrayType, targetsReadOnlyCollection: true); 332BoundExpression? tryCreateNonArrayBackedSpan(BoundCollectionExpression node, NamedTypeSymbol spanType, bool isReadOnlySpan) 353var rewrittenElements = elements.SelectAsArray(static (element, rewriter) => rewriter.VisitExpression((BoundExpression)element), this); 372BoundExpression? tryCreateOptimizedArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType, bool targetsReadOnlyCollection) 374BoundExpression? array = null; 388BoundExpression createSpan(BoundCollectionExpression node, NamedTypeSymbol spanType, bool isReadOnlySpan) 405var list = CreateAndPopulateList(node, elementType, node.Elements, 437BoundExpression wrapArrayInSpan(BoundExpression arrayValue, NamedTypeSymbol spanType, bool isReadOnlySpan) 458BoundExpression createArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType, bool targetsReadOnlyCollection) 460BoundExpression array; 468var list = CreateAndPopulateList(node, arrayType.ElementTypeWithAnnotations, node.Elements, 484private BoundExpression VisitCollectionInitializerCollectionExpression(BoundCollectionExpression node, TypeSymbol collectionType) 489var rewrittenReceiver = VisitExpression(node.CollectionCreation); 496var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(elements.Length + 1); 506var rewrittenElement = element is BoundCollectionExpressionSpreadElement spreadElement ? 513var rewrittenValue = rewriteCollectionInitializer(temp, ((BoundExpressionStatement)iteratorBody).Expression); 519rewriteCollectionInitializer(temp, (BoundExpression)element); 535BoundExpression? rewriteCollectionInitializer(BoundLocal rewrittenReceiver, BoundExpression expressionElement) 546private BoundExpression VisitListInterfaceCollectionExpression(BoundCollectionExpression node) 559BoundExpression arrayOrList; 588BoundExpression fieldValue = kind switch 591SynthesizedReadOnlyListKind.SingleElement => this.VisitExpression((BoundExpression)elements.Single()), 630BoundExpression createArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType) 644private BoundExpression VisitCollectionBuilderCollectionExpression(BoundCollectionExpression node) 664var span = CanOptimizeSingleSpreadAsCollectionBuilderArgument(node, out var spreadExpression) 671var result = VisitExpression(node.CollectionCreation); 691node.Elements.All(e => ((BoundExpression)e).ConstantValueOpt is { }); 701private BoundExpression CreateAndPopulateSpanFromInlineArray( 708Debug.Assert(elements.All(e => e is BoundExpression)); 725var element = VisitExpression((BoundExpression)elements[0]); 743var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 753var element = VisitExpression((BoundExpression)elements[i]); 821private BoundExpression? TryOptimizeSingleSpreadToArray_NoConversionApplied(BoundCollectionExpression node, bool targetsReadOnlyCollection, ArrayTypeSymbol arrayType) 841var rewrittenSpreadExpression = VisitExpression(spreadExpression); 865var rewrittenSpreadExpression = CallAsSpanMethod(VisitExpression(spreadExpression), asSpanMethod); 890private BoundExpression CreateAndPopulateArray(BoundCollectionExpression node, ArrayTypeSymbol arrayType) 917elements.SelectAsArray(static (element, rewriter) => rewriter.VisitExpression((BoundExpression)element), this)); 920ImmutableArray.Create<BoundExpression>( 932var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 967addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression arrayTemp, BoundExpression rewrittenValue, bool isLastElement) => 1009tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression arrayTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 1019if (!TryConvertToSpan(arrayTemp, writableOnly: true, out var targetSpan)) 1098private bool TryConvertToSpan(BoundExpression expression, bool writableOnly, [NotNullWhen(true)] out BoundExpression? span) 1113private BoundExpression CallAsSpanMethod(BoundExpression spreadExpression, MethodSymbol? asSpanMethod) 1137private (MethodSymbol spanSliceMethod, BoundExpression spreadElementAsSpan, MethodSymbol getLengthMethod, MethodSymbol copyToMethod)? PrepareCopyToOptimization( 1139BoundExpression rewrittenSpreadOperand) 1149if (!TryConvertToSpan(rewrittenSpreadOperand, writableOnly: false, out var spreadOperandAsSpan)) 1179ArrayBuilder<BoundExpression> sideEffects, 1182BoundExpression spanTemp, 1183BoundExpression rewrittenSpreadOperand, 1185BoundExpression spreadOperandAsSpan, 1220private BoundExpression CreateAndPopulateList( 1224BoundExpression? rewrittenReceiver) 1228if (rewrittenReceiver is null && TryRewriteSingleElementSpreadToList(node, elementType, out var result)) 1237var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(elements.Length + 1); 1270var knownLengthExpression = GetKnownLengthExpression(elements, numberIncludingLastSpread, localsBuilder); 1282rewrittenReceiver = _factory.New(constructor, ImmutableArray.Create<BoundExpression>(knownLengthTemp)); 1294rewrittenReceiver = _factory.New(constructor, ImmutableArray<BoundExpression>.Empty); 1343addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression spanTemp, BoundExpression rewrittenValue, bool isLastElement) => 1385tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression spanTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 1407addElement: (ArrayBuilder<BoundExpression> expressions, BoundExpression listTemp, BoundExpression rewrittenValue, bool isLastElement) => 1413tryOptimizeSpreadElement: (ArrayBuilder<BoundExpression> sideEffects, BoundExpression listTemp, BoundCollectionExpressionSpreadElement spreadElement, BoundExpression rewrittenSpreadOperand) => 1441private BoundExpression RewriteCollectionExpressionElementExpression(BoundNode element) 1443var expression = element is BoundCollectionExpressionSpreadElement spreadElement ? 1445(BoundExpression)element; 1453ArrayBuilder<BoundExpression> sideEffects) 1457var rewrittenExpression = RewriteCollectionExpressionElementExpression(elements[i]); 1467BoundExpression rewrittenReceiver, 1470ArrayBuilder<BoundExpression> sideEffects, 1471Action<ArrayBuilder<BoundExpression>, BoundExpression, BoundExpression, bool> addElement, 1472Func<ArrayBuilder<BoundExpression>, BoundExpression, BoundCollectionExpressionSpreadElement, BoundExpression, bool> tryOptimizeSpreadElement) 1477var rewrittenExpression = i < numberIncludingLastSpread ? 1486var rewrittenElement = MakeCollectionExpressionSpreadElement( 1491var rewrittenValue = VisitExpression(((BoundExpressionStatement)iteratorBody).Expression); 1492var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1511private BoundExpression GetKnownLengthExpression(ImmutableArray<BoundNode> elements, int numberIncludingLastSpread, ArrayBuilder<BoundLocal> rewrittenExpressions) 1516BoundExpression? sum = null; 1526var lengthAccess = VisitExpression(spreadElement.LengthOrCount); 1551BoundExpression add(BoundExpression? sum, BoundExpression value) 1559private BoundExpression MakeCollectionExpressionSpreadElement( 1561BoundExpression rewrittenExpression,
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (68)
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; 235BoundExpression assignment = MakeAssignmentOperator(syntax, transformedLHS, binaryResult, used: used, isChecked: isChecked, AssignmentKind.CompoundAssignment, receiverIsKnownToBeCaptured: true); 244private static bool IsExtensionBlockMemberAccessWithByValPossiblyStructReceiver(BoundExpression transformedLHS) 262private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 292BoundExpression rewrittenReceiver = VisitExpression(receiverOpt); 338BoundExpression? capturedReceiver; 389private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 397var rewrittenReceiver = VisitExpression(memberAccess.Receiver); 406private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 408var receiverOpt = indexerAccess.ReceiverOpt; 411BoundExpression transformedReceiver = VisitExpression(receiverOpt); 458ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 475BoundExpression transformedReceiver, 476ImmutableArray<BoundExpression> rewrittenArguments, 477ArrayBuilder<BoundExpression> stores, 509private ImmutableArray<BoundExpression> ExtractSideEffectsFromArguments( 510ImmutableArray<BoundExpression> rewrittenArguments, 515ArrayBuilder<BoundExpression> stores, 519BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter. 540if (TryOptimizeParamsArray(array, out BoundExpression? optimized)) 575private BoundExpression TransformImplicitIndexerAccess( 577ArrayBuilder<BoundExpression> stores, 592private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment) 595var access = VisitIndexPatternIndexerAccess( 631private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 653BoundExpression rewrittenReceiver = VisitExpression(receiver); 674private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps) 676BoundExpression loweredReceiver; 691var loweredArguments = new BoundExpression[arguments.Length]; 733private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment) 812BoundExpression? receiverOpt = fieldAccess.ReceiverOpt; 841var loweredArray = VisitExpression(arrayAccess.Expression); 865var result = VisitExpression(originalLHS); 895BoundExpression? receiverOpt = eventAccess.ReceiverOpt; 923BoundExpression rewrittenVariable = VisitExpression(originalLHS); 937private BoundExpression BoxReceiver(BoundExpression rewrittenReceiver, NamedTypeSymbol memberContainingType) 948private BoundExpression SpillArrayElementAccess( 949BoundExpression loweredExpression, 950ImmutableArray<BoundExpression> loweredIndices, 951ArrayBuilder<BoundExpression> stores, 960var boundTempIndices = new BoundExpression[loweredIndices.Length]; 995BoundExpression expression, 1043BoundExpression 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 (84)
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); 296private BoundExpression MakeConversionNodeCore( 299BoundExpression rewrittenOperand, 395BoundExpression? nullableValue = NullableAlwaysHasValue(rewrittenOperand); 468var operand = MakeConversionNode( 517var rewrittenNode = RewriteDecimalConversion(syntax, rewrittenOperand, rewrittenOperand.Type, underlyingTypeTo, @checked, isImplicit: false, constantValueOpt: constantValueOpt); 576var receiver = (!method.RequiresInstanceReceiver && !oldNodeOpt.IsExtensionMethod && !method.IsAbstract && !method.IsVirtual) ? _factory.Type(method.ContainingType) : mg.ReceiverOpt; 806private BoundExpression MakeConversionNode(BoundExpression rewrittenOperand, TypeSymbol rewrittenType, bool @checked, bool acceptFailingConversion = false, bool markAsChecked = false) 825BoundExpression rewrittenOperand, 855internal BoundExpression MakeConversionNode( 857BoundExpression rewrittenOperand, 925BoundExpression userDefined = RewriteUserDefinedConversion( 1015private BoundExpression RewriteTupleConversion( 1017BoundExpression rewrittenOperand, 1029var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 1038var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]); 1039var convertedFieldAccess = MakeConversionNode(syntax, fieldAccess, elementConversions[i], destElementTypes[i].Type, @checked, explicitCastInCode); 1043var result = MakeTupleCreationExpression(syntax, rewrittenType, fieldAccessorsBuilder.ToImmutableAndFree()); 1047internal static bool NullableNeverHasValue(BoundExpression expression) 1062internal static BoundExpression? NullableAlwaysHasValue(BoundExpression expression) 1103private BoundExpression RewriteNullableConversion( 1105BoundExpression rewrittenOperand, 1133BoundExpression rewrittenConversion = MakeConversionNode(syntax, rewrittenOperand, conversion.UnderlyingConversions[0], rewrittenType.GetNullableUnderlyingType(), @checked); 1145BoundExpression? value = NullableAlwaysHasValue(rewrittenOperand); 1159private BoundExpression RewriteLiftedConversionInExpressionTree( 1161BoundExpression rewrittenOperand, 1212private BoundExpression RewriteFullyLiftedBuiltInConversion( 1214BoundExpression operand, 1226BoundExpression? optimized = OptimizeLiftedBuiltInConversion(syntax, operand, conversion, @checked, type); 1245BoundExpression condition = MakeNullableHasValue(syntax, boundTemp); 1247BoundExpression consequence = new BoundObjectCreationExpression( 1256BoundExpression alternative = new BoundDefaultExpression(syntax, type); 1257BoundExpression conditionalExpression = RewriteConditionalOperator( 1269sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1274private BoundExpression? OptimizeLiftedUserDefinedConversion( 1276BoundExpression operand, 1290BoundExpression? nonNullValue = NullableAlwaysHasValue(operand); 1306private BoundExpression? OptimizeLiftedBuiltInConversion( 1308BoundExpression operand, 1327BoundExpression? nonNullValue = NullableAlwaysHasValue(operand); 1346private BoundExpression? DistributeLiftedConversionIntoLiftedOperand( 1348BoundExpression operand, 1408private BoundExpression RewriteUserDefinedConversion( 1410BoundExpression rewrittenOperand, 1442BoundExpression result = BoundCall.Synthesized( 1452private BoundExpression MakeLiftedUserDefinedConversionConsequence(BoundCall call, TypeSymbol resultType) 1464private BoundExpression RewriteLiftedUserDefinedConversion( 1466BoundExpression rewrittenOperand, 1490BoundExpression? optimized = OptimizeLiftedUserDefinedConversion(syntax, rewrittenOperand, conversion, rewrittenType); 1513BoundExpression condition = _factory.MakeNullableHasValue(syntax, boundTemp); 1529BoundExpression consequence = MakeLiftedUserDefinedConversionConsequence(userDefinedCall, rewrittenType); 1532BoundExpression alternative = new BoundDefaultExpression(syntax, rewrittenType); 1535BoundExpression conditionalExpression = RewriteConditionalOperator( 1549sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 1554private BoundExpression RewriteUnionConversion( 1556BoundExpression rewrittenOperand, 1593private BoundExpression RewriteIntPtrConversion( 1595BoundExpression rewrittenOperand, 1640var rewrittenCall = MakeCall( 1809private BoundExpression RewriteDecimalConversion(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit, ConstantValue? constantValueOpt) 1840private 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; 278private ImmutableArray<BoundExpression> GetRightParts(BoundExpression right, Conversion conversion, 288BoundExpression evaluationResult = EvaluateSideEffectingArgumentToTemp(right, 335private ImmutableArray<BoundExpression> AccessTupleFields(BoundExpression expression, ArrayBuilder<LocalSymbol> temps, 336ArrayBuilder<BoundExpression> effects) 346BoundExpression tuple; 362var builder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 365var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(tuple, expression.Syntax, fields[i]); 371private BoundExpression EvaluateConversionToTemp(BoundExpression expression, BoundValuePlaceholder placeholder, BoundExpression conversion, 372ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 382private ImmutableArray<BoundExpression> InvokeDeconstructMethod(DeconstructMethodInfo deconstruction, BoundExpression target, 383ArrayBuilder<BoundExpression> effects, ArrayBuilder<LocalSymbol> temps) 388var outLocals = ArrayBuilder<BoundExpression>.GetInstance(outputPlaceholders.Length); 419private BoundExpression EvaluateSideEffectingArgumentToTemp( 420BoundExpression arg, 421ArrayBuilder<BoundExpression> effects, 424var loweredArg = VisitExpression(arg); 444private ArrayBuilder<Binder.DeconstructionVariable> GetAssignmentTargetsAndSideEffects(BoundTupleExpression variables, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 448foreach (var variable in variables.Arguments) 464var temp = this.TransformCompoundAssignmentLHS(variable, 476internal ArrayBuilder<BoundExpression> init = null!; 477internal ArrayBuilder<BoundExpression> deconstructions = null!; 478internal ArrayBuilder<BoundExpression> conversions = null!; 479internal ArrayBuilder<BoundExpression> assignments = null!; 484result.init = ArrayBuilder<BoundExpression>.GetInstance(); 485result.deconstructions = ArrayBuilder<BoundExpression>.GetInstance(); 486result.conversions = ArrayBuilder<BoundExpression>.GetInstance(); 487result.assignments = ArrayBuilder<BoundExpression>.GetInstance(); 503internal BoundExpression? PopLast() 510var last = init.Last(); 516internal 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; 322BoundExpression 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; 364var tempAssignment = factory.AssignmentExpression( 376var pointerValue = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr); 379BoundExpression pinAndGetPtr = factory.Sequence( 381sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 403sideEffects: ImmutableArray.Create<BoundExpression>(nullableTempAssignment), 443BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 464var addr = factory.Convert( 469var convertedStringTemp = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr); 474BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, factory.Local(localSymbol), BinaryOperatorKind.NotEqual); 475BoundExpression helperCall; 484helperCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 487BoundExpression addition = factory.Binary(BinaryOperatorKind.PointerAndIntAddition, localType, factory.Local(localSymbol), helperCall); 512BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression); 525BoundExpression arrayTempInit = factory.AssignmentExpression(factory.Local(pinnedTemp), initializerExpr); 528BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, arrayTempInit, BinaryOperatorKind.NotEqual); 530BoundExpression lengthCall; 545lengthCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(factory.Local(pinnedTemp)), ErrorTypeSymbol.UnknownResultType); 551BoundExpression lengthCheck = factory.Binary(BinaryOperatorKind.IntNotEqual, factory.SpecialType(SpecialType.System_Boolean), lengthCall, factory.Literal(0)); 554BoundExpression condition = factory.Binary(BinaryOperatorKind.LogicalBoolAnd, factory.SpecialType(SpecialType.System_Boolean), notNullCheck, lengthCheck); 557BoundExpression firstElement = factory.ArrayAccessFirstElement(factory.Local(pinnedTemp)); 561BoundExpression firstElementAddress = new BoundAddressOfOperator(factory.Syntax, firstElement, type: new PointerTypeSymbol(arrayElementType)); 562BoundExpression convertedFirstElementAddress = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, firstElementAddress); 565BoundExpression consequenceAssignment = factory.AssignmentExpression(factory.Local(localSymbol), convertedFirstElementAddress); 568BoundExpression 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( 367BoundExpression receiver; 368BoundExpression disposeCall; 444BoundExpression disposableVarInitValue = new BoundAsOperator(forEachSyntax, 455BoundExpression disposeCall = BoundCall.Synthesized(syntax: forEachSyntax, receiverOpt: boundDisposableVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method: disposeMethod); 485private BoundStatement WrapWithAwait(SyntaxNode forEachSyntax, BoundExpression disposeCall, BoundAwaitableInfo disposeAwaitableInfoOpt) 489var awaitExpr = RewriteAwaitExpression(forEachSyntax, disposeCall, disposeAwaitableInfoOpt, awaitExpressionType, debugInfo, used: false); 505private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method, Conversion receiverConversion, TypeSymbol convertedReceiverType) 569BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 598BoundExpression collectionExpression, 601BoundExpression? elementConversion, 614BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 648BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 662BoundExpression arrayLength = getLength(this, forEachSyntax, boundArrayVar, arg); 665BoundExpression exitCondition = new BoundBinaryOperator( 706private delegate BoundStatement? GetForEachStatementAsForPreamble(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind); 707private delegate BoundExpression GetForEachStatementAsForItem<TArg>(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, BoundLocal boundArrayVar, BoundLocal boundPositionVar, TArg arg); 708private delegate BoundExpression GetForEachStatementAsForLength<TArg>(LocalRewriter rewriter, SyntaxNode syntax, BoundLocal boundArrayVar, TArg arg); 745return static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind) => 796BoundExpression arrayLength = rewriter._factory.Literal(length); 812BoundExpression iterationVarValue) 828BoundExpression loweredAssignment = VisitExpression(assignment); 875BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 895BoundExpression collectionExpression, 897BoundExpression? elementConversion, 909BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 937BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 943indices: ImmutableArray.Create<BoundExpression>(boundPositionVar), 955BoundExpression arrayLength = new BoundArrayLength( 961BoundExpression exitCondition = new BoundBinaryOperator( 1024BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _); 1044BoundExpression collectionExpression, 1046BoundExpression? elementConversion, 1069BoundExpression rewrittenExpression = VisitExpression(collectionExpression); 1095ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create( 1101BoundExpression currentDimensionUpperBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getUpperBoundMethod, dimensionArgument); 1117BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity( 1122indices: ImmutableArray.Create((BoundExpression[])boundPositionVar), 1149ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create( 1155BoundExpression currentDimensionLowerBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getLowerBoundMethod, dimensionArgument); 1165BoundExpression exitCondition = new BoundBinaryOperator( 1224private static BoundExpression GetUnconvertedCollectionExpression(BoundForEachStatement node, out Conversion collectionConversion) 1239private 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 (93)
17private BoundExpression MakeDynamicIndexerAccessReceiver(BoundDynamicIndexerAccess indexerAccess, BoundExpression loweredReceiver) 19BoundExpression result; 42var loweredReceiver = VisitExpression(node.Receiver); 50private BoundExpression MakeDynamicGetIndex( 52BoundExpression loweredReceiver, 53ImmutableArray<BoundExpression> loweredArguments, 77private BoundExpression VisitIndexerAccess(BoundIndexerAccess node, bool isLeftOfAssignment, bool receiverIsKnownToBeCaptured) 85BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt); 103private BoundExpression MakeIndexerAccess( 105BoundExpression rewrittenReceiver, 107ImmutableArray<BoundExpression> arguments, 113BoundExpression oldNode, 166ArrayBuilder<BoundExpression>? storesOpt = null; 178storesOpt = ArrayBuilder<BoundExpression>.GetInstance(); 184ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 218BoundExpression call = MakePropertyGetAccess(syntax, rewrittenReceiver, indexer, rewrittenArguments, argumentRefKindsOpt, getMethod); 247var rewrittenReceiver = VisitExpression(node.Expression); 259BoundExpression result; 272BoundExpression makeOffsetInput = DetermineMakePatternIndexOffsetExpressionStrategy(node.Argument, out PatternIndexOffsetLoweringStrategy strategy); 273BoundExpression integerArgument = makePatternIndexOffsetExpression(makeOffsetInput, length, strategy); 288BoundExpression? startMakeOffsetInput, endMakeOffsetInput, rewrittenRangeArg; 297BoundExpression startExpr = makePatternIndexOffsetExpression(startMakeOffsetInput, length, startStrategy); 312var sideEffectsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 314BoundExpression startExpr; 315BoundExpression rangeSizeExpr; 319BoundExpression endExpr = makePatternIndexOffsetExpression(endMakeOffsetInput, length, endStrategy); 328BoundExpression possiblyRefCapturedReceiver = rewrittenReceiver; 358ImmutableArray.Create((BoundExpression)receiverStore), 364static bool isInt32ConstantZero(BoundExpression expr) 369BoundExpression makePatternIndexOffsetExpression(BoundExpression? makeOffsetInput, int length, PatternIndexOffsetLoweringStrategy strategy) 371BoundExpression integerArgument; 403BoundExpression getElementRef(BoundInlineArrayAccess node, BoundExpression rewrittenReceiver, BoundExpression index, MethodSymbol getItemOrSliceHelper, int length) 498private BoundExpression VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment, out bool receiverIsKnownToBeCaptured) 515private BoundExpression VisitIndexPatternIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment, out bool receiverIsKnownToBeCaptured) 518var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(2); 520BoundExpression rewrittenIndexerAccess = VisitIndexPatternIndexerAccess( 533private BoundExpression VisitIndexPatternIndexerAccess( 538ArrayBuilder<BoundExpression> sideeffects, 551BoundExpression makeOffsetInput = DetermineMakePatternIndexOffsetExpressionStrategy(node.Argument, out PatternIndexOffsetLoweringStrategy strategy); 553var receiver = VisitExpression(node.Receiver); 565BoundExpression? capturedReceiver; 638BoundExpression integerArgument; 643BoundExpression lengthAccess = VisitExpression(node.LengthOrCountAccess); 672BoundExpression rewrittenIndexerAccess; 683ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded( 729rewrittenIndexerAccess = (BoundExpression)VisitArrayAccess((BoundArrayAccess)node.IndexerOrSliceAccess); 749private BoundExpression MakePatternIndexOffsetExpression( 750BoundExpression? loweredExpr, 751BoundExpression? lengthAccess, 809private BoundExpression DetermineMakePatternIndexOffsetExpressionStrategy( 810BoundExpression unloweredExpr, 859private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node) 863var sideEffectsBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 865var rewrittenIndexerAccess = VisitRangePatternIndexerAccess(node, localsBuilder, sideEffectsBuilder, cacheAllArgumentsOnly: false); 873private bool IsPossibleReferenceTypeReceiverOfConstrainedOrExtensionCall(Symbol symbol, BoundExpression receiver) 881private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, bool cacheAllArgumentsOnly) 898var receiver = VisitExpression(node.Receiver); 899var rangeArg = node.Argument; 902BoundExpression? startMakeOffsetInput, endMakeOffsetInput, rewrittenRangeArg; 912BoundExpression? capturedReceiver; 981BoundExpression startExpr; 982BoundExpression rangeSizeExpr; 990BoundExpression? lengthAccess = null; 1113BoundExpression endExpr = MakePatternIndexOffsetExpression(endMakeOffsetInput, lengthAccess, endStrategy); 1139var rewrittenIndexerAccess = VisitExpression(sliceCall); 1147void storeExpressionIfNotConstant([DisallowNull] ref BoundExpression? expression, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder) 1157static bool isSafeToDereferenceReceiverRefAfterEvaluatingArguments(BoundExpression? startMakeOffsetInput, BoundExpression? endMakeOffsetInput, BoundExpression? rewrittenRangeArg) 1159var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(2); 1179static bool isSafeToIndexAfterEvaluatingArguments(BoundExpression? startMakeOffsetInput, BoundExpression? endMakeOffsetInput, BoundExpression? rewrittenRangeArg) 1264private BoundExpression MakeRangeSize(ref BoundExpression startExpr, BoundExpression endExpr, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder) 1268BoundExpression rangeSizeExpr; 1296DeconstructRangeIntoLocals(BoundExpression rewrittenRangeArg, BoundExpression lengthAccess, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder) 1337private void RewriteRangeParts(BoundExpression rangeArg, out BoundRangeExpression? rangeExpr, out BoundExpression? startMakeOffsetInput, out PatternIndexOffsetLoweringStrategy startStrategy, out BoundExpression? endMakeOffsetInput, out PatternIndexOffsetLoweringStrategy endStrategy, out BoundExpression? rewrittenRangeArg) 1360if (rangeExpr.LeftOperandOpt is BoundExpression left) 1370if (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 (22)
26BoundExpression result; 117private BoundExpression LowerIsPatternAsLinearSequence( 124var result = rewriter.LowerIsPatternAsLinearTestSequence(node, decisionDag, whenTrueLabel, whenFalseLabel); 151internal BoundExpression LowerGeneralIsPattern(BoundIsPatternExpression node, BoundDecisionDag decisionDag) 155var inputExpression = _localRewriter.VisitExpression(node.Expression); 191private readonly ArrayBuilder<BoundExpression> _sideEffectBuilder; 198private readonly ArrayBuilder<BoundExpression> _conjunctBuilder; 203_conjunctBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 204_sideEffectBuilder = ArrayBuilder<BoundExpression>.GetInstance(); 214private void AddConjunct(BoundExpression test) 240var sideEffect = LowerEvaluation(eval); 246var testExpression = LowerTest(test); 260public BoundExpression LowerIsPatternAsLinearTestSequence( 266BoundExpression loweredInput = _localRewriter.VisitExpression(isPatternExpression.Expression); 279private BoundExpression ProduceLinearTestSequence( 299TryLowerTypeTestAndCast(testNode.Test, e.Evaluation, out BoundExpression? sideEffect, out BoundExpression? testExpression)) 329BoundExpression left = _localRewriter.VisitExpression(binding.VariableAccess); 330BoundExpression right = _tempAllocator.GetTemp(binding.TempContainingValue); 350BoundExpression? result = null; 351foreach (BoundExpression conjunct in _conjunctBuilder) 361result = _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; 60BoundExpression conditionalExpression = MakeNullCoalescingOperator(syntax, lhsRead, assignment, leftPlaceholder: leftPlaceholder, leftConversion: leftPlaceholder, BoundNullCoalescingOperatorResultKind.LeftType, node.LeftOperand.Type); 80BoundExpression rewriteNullCoalescingAssignmentForValueType() 89var leftOperand = node.LeftOperand; 134var tmpAssignment = MakeAssignmentOperator(node.Syntax, tmp, loweredRight, used: true, isChecked: false, AssignmentKind.SimpleAssignment, receiverIsKnownToBeCaptured: false); 141var transformedLhsAssignment = 155var alternative = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create(tmpAssignment, transformedLhsAssignment), tmp); 158var 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; 204ImmutableArray<BoundExpression> getAnonymousTypeValues(BoundWithExpression withExpr, BoundExpression oldValue, AnonymousTypeManager.AnonymousTypePublicSymbol anonymousType, 205ArrayBuilder<BoundExpression> sideEffects, ArrayBuilder<LocalSymbol> temps) 208var valueTemps = ArrayBuilder<BoundExpression?>.GetInstance(anonymousType.Properties.Length, fillWithValue: null); 210foreach (BoundExpression initializer in withExpr.InitializerExpression.Initializers) 217var rewrittenRight = VisitExpression(assignment.Right); 227var builder = ArrayBuilder<BoundExpression>.GetInstance(anonymousType.Properties.Length); 230if (valueTemps[property.MemberIndexOpt!.Value] is BoundExpression initializerValue) 260private BoundExpression MakeExpressionWithInitializer( 262BoundExpression rewrittenExpression, 263BoundExpression initializerExpression, 274ArrayBuilder<BoundExpression>? dynamicSiteInitializers = null; 276ArrayBuilder<BoundExpression>? loweredInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 281var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(1 + dynamicSiteCount + loweredInitializers.Count); 319var rewrittenNewT = MakeNewT(node.Syntax, (TypeParameterSymbol)node.Type); 328private BoundExpression MakeNewT(SyntaxNode syntax, TypeParameterSymbol typeParameter) 355ImmutableArray<BoundExpression>.Empty, 385BoundExpression newGuid; 394newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 404BoundExpression callGetTypeFromCLSID; 412callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType); 416BoundExpression rewrittenObjectCreation; 428rewrittenObjectCreation = 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); 539var rewrittenRight = VisitExpression(right); 569void addIndexes(ArrayBuilder<BoundExpression> result, BoundAssignmentOperator assignment) 572var lhs = assignment.Left; 575foreach (var argument in initializerMember.Arguments) 580foreach (var element in initializers.Initializers) 597foreach (var index in arrayAccess.Indices) 614foreach (var initializer in ((BoundObjectInitializerExpression)assignment.Right).Initializers) 621private ImmutableArray<BoundExpression> EvaluateSideEffectingArgumentsToTemps( 622ImmutableArray<BoundExpression> args, 624ArrayBuilder<BoundExpression> sideeffects, 627ArrayBuilder<BoundExpression>? newArgs = null; 631var arg = args[i]; 633BoundExpression replacement; 639(LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg = (rewriter: this, sideeffects, temps); 642static (BoundExpression element, ref (LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg) => 656newArgs = ArrayBuilder<BoundExpression>.GetInstance(args.Length); 671private BoundExpression EvaluateSideEffects(BoundExpression arg, RefKind refKind, ArrayBuilder<BoundExpression> sideeffects, ref ArrayBuilder<LocalSymbol>? temps) 691private BoundExpression MakeObjectInitializerMemberAccess( 692BoundExpression rewrittenReceiver,
Lowering\LocalRewriter\LocalRewriter_PatternSwitchStatement.cs (4)
82var loweredSwitchGoverningExpression = _localRewriter.VisitExpression(node.Expression); 87var instrumentedExpression = _localRewriter.Instrumenter.InstrumentSwitchStatementExpression(node, loweredSwitchGoverningExpression, _factory); 107loweredSwitchGoverningExpression, result, out BoundExpression savedInputExpression); 199void throwUnreachableDefaultLabelException(ArrayBuilder<BoundStatement> result, BoundExpression savedInputExpression)
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 (41)
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(); 234static void pushArguments(LocalRewriter self, BoundBinaryOperator binaryOperator, ArrayBuilder<BoundExpression> arguments, ref WellKnownConcatRelatedMethods concatMethods) 258static bool shouldRecurse(BoundExpression expr, [NotNullWhen(true)] out BoundBinaryOperator? binaryOperator) 287private (BoundExpression? singleConcatArgument, ImmutableArray<BoundExpression> nestedConcatArguments) SimplifyConcatArgument(BoundExpression argument, [NotNullIfNotNull(nameof(followingArgument))] ref BoundExpression? followingArgument, ref WellKnownConcatRelatedMethods wellKnownConcatOptimizationMethods) 299else if (wellKnownConcatOptimizationMethods.IsCharToString(call, out var charExpression)) 355private void VisitAndAddConcatArgumentInReverseOrder(BoundExpression argument, bool argumentAlreadyVisited, ArrayBuilder<BoundExpression> finalArguments, ref WellKnownConcatRelatedMethods wellKnownConcatOptimizationMethods) 363var followingArgument = finalArguments.Count > 0 ? finalArguments[^1] : null; 413public bool IsWellKnownConcatMethod(BoundCall call, out ImmutableArray<BoundExpression> arguments) 441public bool IsCharToString(BoundCall call, [NotNullWhen(true)] out BoundExpression? charExpression) 463private readonly bool IsConcatNonArray(BoundCall call, ref MethodSymbol? concatMethod, SpecialMember concatSpecialMember, out ImmutableArray<BoundExpression> arguments) 508private static BoundExpression RewriteStringConcatenationWithSpanBasedConcat( 514ArrayBuilder<BoundExpression> args) 520BoundExpression? arg = args[i]; 563var sequence = factory.Sequence( 576private BoundExpression RewriteStringConcatInExpressionLambda(BoundBinaryOperator original) 597BoundExpression currentResult = VisitExpression(stack.Peek().Left); 601var right = VisitExpression(current.Right); 621private BoundExpression ConvertConcatExprToString(BoundExpression expr) 734ImmutableArray.Create<BoundExpression>(store), 738BoundExpression makeConditionalAccess(BoundExpression receiver) 757static 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 (7)
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); 161private 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]; 99private BoundExpression PushDownImplicitTupleConversion( 100BoundExpression expr, 101ArrayBuilder<BoundExpression> initEffects, 113var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements); 114var savedTuple = DeferSideEffectingArgumentToTempForTupleEquality(LowerConversions(boundConversion.Operand), initEffects, temps); 120var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]); 141private BoundExpression ReplaceTerminalElementsWithTemps( 142BoundExpression expr, 144ArrayBuilder<BoundExpression> initEffects, 155var builder = ArrayBuilder<BoundExpression>.GetInstance(tuple.Arguments.Length); 158var argument = tuple.Arguments[i]; 159var newArgument = ReplaceTerminalElementsWithTemps(argument, multiple.Operators[i], initEffects, temps); 180/// That resulting expression must be passed through <see cref="LowerConversions(BoundExpression)"/> to 183private BoundExpression DeferSideEffectingArgumentToTempForTupleEquality( 184BoundExpression expr, 185ArrayBuilder<BoundExpression> effects, 205var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality(conv.Operand, effects, temps, conv.ExplicitCastInCode || enclosingConversionWasExplicit); 212var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality( 250private BoundExpression RewriteTupleOperator(TupleBinaryOperatorInfo @operator, 251BoundExpression left, BoundExpression right, TypeSymbol boolType, 271private BoundExpression RewriteTupleNestedOperators(TupleBinaryOperatorInfo.Multiple operators, BoundExpression left, BoundExpression right, 293var outerEffects = ArrayBuilder<BoundExpression>.GetInstance(); 294var innerEffects = ArrayBuilder<BoundExpression>.GetInstance(); 296BoundExpression leftHasValue, leftValue; 300BoundExpression rightHasValue, rightValue; 307BoundExpression logicalExpression = RewriteNonNullableNestedTupleOperators(operators, leftValue, rightValue, boolType, temps, operatorKind); 313BoundExpression innerSequence = _factory.Sequence(locals: ImmutableArray<LocalSymbol>.Empty, innerEffects.ToImmutableAndFree(), logicalExpression); 344BoundExpression outerSequence = 359private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects, 360ArrayBuilder<BoundExpression> outerEffects, bool saveHasValue, out BoundExpression hasValue, out BoundExpression value, out bool isNullable) 382if (NullableAlwaysHasValue(expr) is BoundExpression knownValue) 401BoundExpression makeNullableHasValue(BoundExpression expr) 423private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects) 434private BoundExpression MakeValueOrDefaultTemp( 435BoundExpression expr, 437ArrayBuilder<BoundExpression> effects) 449var operand = MakeValueOrDefaultTemp(o, temps, effects); 456var argumentBuilder = ArrayBuilder<BoundExpression>.GetInstance(tupleCardinality); 474BoundExpression valueOrDefaultCall = MakeOptimizedGetValueOrDefault(expr.Syntax, expr); 479BoundExpression MakeBoundConversion(BoundExpression expr, Conversion conversion, TypeWithAnnotations type, BoundConversion enclosing) 491private BoundExpression RewriteNonNullableNestedTupleOperators(TupleBinaryOperatorInfo.Multiple operators, 492BoundExpression left, BoundExpression right, TypeSymbol type, 497BoundExpression? currentResult = null; 500BoundExpression leftElement = GetTuplePart(left, i); 501BoundExpression rightElement = GetTuplePart(right, i); 502BoundExpression nextLogicalOperand = RewriteTupleOperator(nestedOperators[i], leftElement, rightElement, type, temps, operatorKind); 522private BoundExpression GetTuplePart(BoundExpression tuple, int i) 548private BoundExpression RewriteTupleSingleOperator(TupleBinaryOperatorInfo.Single single, 549BoundExpression left, BoundExpression right, TypeSymbol boolType, BinaryOperatorKind operatorKind) 562BoundExpression dynamicResult = _dynamicFactory.MakeDynamicBinaryOperator(single.Kind, left, right, isCompoundAssignment: false, _compilation.DynamicType).ToExpression(); 579BoundExpression binary = MakeBinaryOperator(_factory.Syntax, single.Kind, left, right, single.MethodSymbolOpt?.ReturnType ?? boolType, single.MethodSymbolOpt, single.ConstrainedToTypeOpt); 582BoundExpression result; 583BoundExpression convertedBinary = ApplyConversionIfNotIdentity(single.ConversionForBool, single.ConversionForBoolPlaceholder, binary); 613private 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) 573public BoundExpression VisitBuiltInOrStaticIncrementOperator(BoundIncrementOperator node) 580ArrayBuilder<BoundExpression> tempInitializers = ArrayBuilder<BoundExpression>.GetInstance(); 586BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.Operand, tempInitializers, tempSymbols, isDynamic); 595BoundExpression boundTemp = new BoundLocal( 603var newValue = makeBuiltInOrStaticIncrementOperator(node, rewrittenValueToIncrement: (isPrefix ? MakeRValue(transformedLHS) : boundTemp)); 633static bool isIndirectOrInstanceField(BoundExpression expression) 651BoundExpression rewriteWithNotRefOperand( 655ArrayBuilder<BoundExpression> tempInitializers, 657BoundExpression transformedLHS, 658BoundExpression boundTemp, 659BoundExpression newValue) 691BoundExpression rewriteWithRefOperand( 695ArrayBuilder<BoundExpression> tempInitializers, 697BoundExpression operand, 698BoundExpression boundTemp, 699BoundExpression newValue) 703var tempValue = isPrefix ? newValue : MakeRValue(operand); 705var tempAssignment = MakeAssignmentOperator(syntax, boundTemp, tempValue, used: false, isChecked: isChecked, AssignmentKind.SimpleAssignment, receiverIsKnownToBeCaptured: true); 707var operandValue = isPrefix ? boundTemp : newValue; 711ImmutableArray.Create<BoundExpression>(tempAssignment), 717BoundExpression operandAssignment = MakeAssignmentOperator(syntax, operand, tempAssignedAndOperandValue, used: false, isChecked: isChecked, AssignmentKind.IncrementDecrement, receiverIsKnownToBeCaptured: true); 730BoundExpression makeBuiltInOrStaticIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 737BoundExpression result; 756private BoundExpression ApplyConversionIfNotIdentity(BoundExpression? conversion, BoundValuePlaceholder? placeholder, BoundExpression replacement) 767static bool hasNonIdentityConversion([NotNullWhen(true)] BoundExpression? expression) 783private BoundExpression ApplyConversion(BoundExpression conversion, BoundValuePlaceholder placeholder, BoundExpression replacement) 791private BoundExpression MakeUserDefinedStaticIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 808BoundExpression rewrittenArgument = ApplyConversionIfNotIdentity(node.OperandConversion, node.OperandPlaceholder, rewrittenValueToIncrement); 836BoundExpression condition = _factory.MakeNullableHasValue(node.Syntax, boundTemp); 839BoundExpression call_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTemp, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefault); 842BoundExpression userDefinedCall = BoundCall.Synthesized( 850BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, userDefinedCall); 853BoundExpression alternative = new BoundDefaultExpression(syntax, type); 858BoundExpression conditionalExpression = RewriteConditionalOperator( 874sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment), 879private BoundExpression MakeBuiltInIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement) 881BoundExpression result; 908BoundExpression boundOne = MakeLiteral( 921BoundExpression binaryOperand = rewrittenValueToIncrement; 947BoundExpression binOp; 985private BoundExpression MakeDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand) 992private BoundExpression MakeLiftedDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand) 1002BoundExpression condition = _factory.MakeNullableHasValue(syntax, operand); 1004BoundExpression getValueCall = BoundCall.Synthesized(syntax, operand, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, getValueOrDefault); 1006BoundExpression methodCall = BoundCall.Synthesized(syntax, receiverOpt: null, initialBindingReceiverIsSubjectToCloning: ThreeState.Unknown, method, getValueCall); 1008BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, methodCall); 1010BoundExpression alternative = new BoundDefaultExpression(syntax, operand.Type); 1021private 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\LocalRewriter.cs (34)
54private Dictionary<BoundValuePlaceholderBase, BoundExpression>? _placeholderReplacementMapDoNotUseDirectly; 216BoundExpression? expr = node as BoundExpression; 226private BoundExpression? VisitExpression(BoundExpression? node) 249private BoundExpression? VisitExpressionImpl(BoundExpression node) 267var result = MakeLiteral(node.Syntax, constantValue, type); 278var visited = (BoundExpression)VisitExpressionOrPatternWithStackGuard(node); 302private static BoundExpression RefAccessMustMakeCopy(BoundExpression visited) 312private static bool IsUnusedDeconstruction(BoundExpression node) 511private BoundExpression PlaceholderReplacement(BoundValuePlaceholderBase placeholder) 514var value = _placeholderReplacementMapDoNotUseDirectly[placeholder]; 520private static void AssertPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value) 541private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value) 547_placeholderReplacementMapDoNotUseDirectly = new Dictionary<BoundValuePlaceholderBase, BoundExpression>(); 585private static BoundExpression BadExpression(BoundExpression node) 591private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child) 596private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child1, BoundExpression child2) 601private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, ImmutableArray<BoundExpression> children) 693var operand = this.VisitExpression(node.Operand); 937BoundExpression rhs = assignment.Right; 1018internal static bool CanBePassedByReference(BoundExpression expr) 1160private BoundExpression ConvertReceiverForExtensionMemberIfNeeded(Symbol member, BoundExpression receiver, bool markAsChecked) 1173private BoundExpression ConvertReceiverForExtensionIfNeeded(BoundExpression receiver, bool markAsChecked, ParameterSymbol extensionParameter)
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) 1010var whenExpressionMap = PooledDictionary<BoundExpression, (LabelSymbol LabelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> WhenNodes)>.GetInstance(); 1016var whenExpression = whenNode.WhenExpression; 1064var whenExpression = whenNode.WhenExpression; 1087void lowerWhenExpressionIfShared(BoundExpression whenExpression, LabelSymbol labelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> whenNodes) 1131void addConditionalGoto(BoundExpression whenExpression, SyntaxNode whenClauseSyntax, LabelSymbol whenTrueLabel, ArrayBuilder<BoundStatement> sectionBuilder) 1145bool isSharedWhenExpression(BoundExpression? whenExpression) 1189BoundExpression left = _localRewriter.VisitExpression(binding.VariableAccess); 1193BoundExpression right = _tempAllocator.GetTemp(binding.TempContainingValue); 1213BoundExpression sideEffect = LowerEvaluation(evaluationNode.Evaluation); 1234BoundExpression test = base.LowerTest(testNode.Test);
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (59)
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) 192BoundExpression returnValue = null; 202BoundExpression result = _factory.Call(receiver, method, refKindBuilder.ToImmutableAndFree(), argBuilder.ToImmutableAndFree()); 226BoundExpression output = _tempAllocator.GetTemp(outputTemp); 233BoundExpression evaluated; 265BoundExpression output = _tempAllocator.GetTemp(outputTemp); 275var indexerAccess = e.IndexerAccess; 281var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance(); 287var access = (BoundExpression)_localRewriter.Visit(indexerAccess); 290BoundExpression output = _tempAllocator.GetTemp(outputTemp); 301var indexerAccess = e.IndexerAccess; 307var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance(); 313var access = (BoundExpression)_localRewriter.Visit(indexerAccess); 316BoundExpression output = _tempAllocator.GetTemp(outputTemp); 323BoundExpression left = _tempAllocator.GetTemp(e.Target); 324BoundExpression right = _tempAllocator.GetTemp(e.Input); 335BoundExpression makeUnloweredIndexArgument(int index) 349BoundExpression makeUnloweredRangeArgument(BoundDagSliceEvaluation e) 365protected BoundExpression LowerTest(BoundDagTest test) 368BoundExpression input = _tempAllocator.GetTemp(test.Input); 396private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 416protected BoundExpression MakeValueTest(SyntaxNode syntax, BoundExpression input, ConstantValue value) 430protected BoundExpression MakeRelationalTest(SyntaxNode syntax, BoundExpression input, BinaryOperatorKind operatorKind, ConstantValue value) 439BoundExpression literal = _localRewriter.MakeLiteral(syntax, value, input.Type); 466private BoundExpression MakeSpanStringTest(BoundExpression input, ConstantValue value) 496[NotNullWhen(true)] out BoundExpression sideEffect, 497[NotNullWhen(true)] out BoundExpression testExpression) 508BoundExpression input = _tempAllocator.GetTemp(test.Input); 509BoundExpression output = _tempAllocator.GetTemp(evaluation.MakeResultTemp()); 523BoundExpression input = _tempAllocator.GetTemp(test.Input); 525BoundExpression output = _tempAllocator.GetTemp(evaluation.MakeResultTemp()); 541BoundExpression loweredInput, 543Action<BoundExpression> addCode, 544out BoundExpression savedInputExpression) 602BoundExpression inputTemp = _tempAllocator.GetTemp(inputDagTemp); 647Action<BoundExpression> addCode, 649out BoundExpression savedInputExpression) 655var newArguments = ArrayBuilder<BoundExpression>.GetInstance(loweredInput.Arguments.Length); 660var expr = loweredInput.Arguments[i]; 675void storeToTemp(BoundDagTemp temp, BoundExpression expr) 685var 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\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); 259BoundExpression originalLeft = node.Left; 268BoundExpression originalRight = node.Right; 287BoundExpression rewrittenLeft = (BoundExpression)this.Visit(leftLocal); 288BoundExpression rewrittenRight = (BoundExpression)this.Visit(originalRight); 314ImmutableArray.Create<BoundExpression>(tempAssignment), 331var receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt); 340BoundExpression originalArgument = node.Argument; 341BoundExpression rewrittenArgument = (BoundExpression)this.Visit(originalArgument); 357ImmutableArray<BoundExpression> arguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments); 377private static bool BaseReferenceInReceiverWasRewritten([NotNullWhen(true)] BoundExpression? originalReceiver, [NotNullWhen(true)] BoundExpression? rewrittenReceiver)
Lowering\SpillSequenceSpiller.cs (81)
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, 359out BoundExpression valueTypeReceiver, 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) 532out BoundExpression outValueTypeReceiver, 600BoundExpression originalReceiverIndex = originalReceiverArrayAccess.Indices[i]; 601BoundExpression valueTypeReceiverIndex = valueTypeReceiverArrayAccess.Indices[i]; 631private ImmutableArray<BoundExpression> VisitExpressionList( 633ImmutableArray<BoundExpression> args, 677var result = ArrayBuilder<BoundExpression>.GetInstance(newList.Length); 683var replacement = Spill(builder, newList[i], refKind, sideEffectsOnly); 714var expression = VisitExpression(ref builder, node.Expression); 721BoundExpression expression = VisitExpression(ref builder, node.ExpressionOpt); 728BoundExpression expr = VisitExpression(ref builder, node.Expression); 737var condition = VisitExpression(ref builder, node.Condition); 744var expression = VisitExpression(ref builder, node.ExpressionOpt); 751var expression = VisitExpression(ref builder, node.Expression); 758BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt); 768var exceptionFilterOpt = VisitExpression(ref builder, node.ExceptionFilterOpt); 804var expr = VisitExpression(ref builder, node.Expression); 817var value = VisitExpression(ref builder, node.Value); 824var expr = VisitExpression(ref builder, node.Operand); 831var expr = VisitExpression(ref builder, node.Expression); 845var expression = VisitExpression(ref builder, node.Expression); 875ImmutableArray<BoundExpression> bounds; 902BoundExpression count = VisitExpression(ref builder, node.Count); 910var expression = VisitExpression(ref builder, node.Expression); 917var operand = VisitExpression(ref builder, node.Operand); 926var right = VisitExpression(ref builder, node.Right); 928BoundExpression left = node.Left; 980BoundExpression fieldWithSpilledReceiver(BoundFieldAccess field, ref BoundSpillSequenceBuilder leftBuilder, bool isAssignmentTarget) 986BoundExpression receiver; 1031var expression = VisitExpression(ref builder, arrayAccess.Expression); 1053var right = VisitExpression(ref builder, node.Right); 1054BoundExpression left; 1091BoundExpression receiver = null; 1138var isClass = _F.IsNullReference(_F.Default(receiverType)); 1155private static RefKind ReceiverSpillRefKind(BoundExpression receiver) 1171BoundExpression invokedExpression; 1191var condition = VisitExpression(ref conditionBuilder, node.Condition); 1194var consequence = VisitExpression(ref consequenceBuilder, node.Consequence); 1197var alternative = VisitExpression(ref alternativeBuilder, node.Alternative); 1267var operand = VisitExpression(ref builder, node.Operand); 1276var expression = VisitExpression(ref builder, node.Expression); 1292var argument = VisitExpression(ref builder, node.Argument); 1299var receiver = VisitExpression(ref builder, node.ReceiverOpt); 1306var operand = VisitExpression(ref builder, node.Operand); 1313var operand = VisitExpression(ref builder, node.Operand); 1322var right = VisitExpression(ref builder, node.RightOperand); 1323BoundExpression left; 1352var receiver = VisitExpression(ref receiverBuilder, node.Receiver); 1355var whenNotNull = VisitExpression(ref whenNotNullBuilder, node.WhenNotNull); 1358var whenNullOpt = VisitExpression(ref whenNullBuilder, node.WhenNullOpt); 1369BoundExpression condition; 1394var isNotClass = _F.IsNotNullReference(_F.Default(receiver.Type)); 1438private readonly BoundExpression _receiver; 1446private ConditionalReceiverReplacer(BoundExpression receiver, int receiverId, int recursionDepth) 1453public static BoundStatement Replace(BoundNode node, BoundExpression receiver, int receiverID, int recursionDepth) 1507var index = VisitExpression(ref builder, node.Index); 1508BoundExpression expression; 1528var operand = VisitExpression(ref builder, node.Operand); 1535var value = VisitExpression(ref valueBuilder, node.Value); 1561BoundExpression operand = VisitExpression(ref builder, node.Expression); 1591BoundExpression operand = VisitExpression(ref builder, node.Operand); 1598BoundExpression operand = VisitExpression(ref builder, node.Operand); 1605BoundExpression 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, 87var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(); 91var replacement = HoistExpression(visitedRight, local, local.RefKind, sideEffects, hoistedSymbols, ref needsSacrificialEvaluation, createHoistedSymbol, createHoistedAccess, arg, isRuntimeAsync, isFieldAccessOfStruct: false); 109var last = sideEffects.Last(); 135private BoundExpression HoistExpression<TArg>( 136BoundExpression expr, 139ArrayBuilder<BoundExpression> sideEffects, 153BoundExpression expression = HoistExpression( 166var indices = ArrayBuilder<BoundExpression>.GetInstance(); 167foreach (var index in array.Indices) 205var receiver = HoistExpression(
Lowering\StateMachineRewriter\ResumableStateMachineStateAllocator.cs (1)
80public BoundStatement? GenerateThrowMissingStateDispatch(SyntheticBoundNodeFactory f, BoundExpression cachedState, HotReloadExceptionCode errorCode)
Lowering\StateMachineRewriter\StateMachineRewriter.cs (10)
322var leftExpression = proxy.Replacement( 336var leftExpression = proxy.Replacement( 383protected BoundExpression MakeCurrentThreadId() 406protected SynthesizedImplementationMethod GenerateIteratorGetEnumerator(MethodSymbol getEnumeratorMethod, ref BoundExpression managedThreadId, StateMachineState initialState) 476var leftExpression = proxy.Replacement( 481var rightExpression = copySrc[method.ThisParameter].Replacement(F.Syntax, static (stateMachineType, F) => F.This(), F); 495BoundExpression resultParameter = proxy.Replacement( 501BoundExpression parameterProxy = copySrc[parameter].Replacement(F.Syntax, static (stateMachineType, F) => F.This(), F); 523protected virtual BoundStatement InitializeParameterField(MethodSymbol getEnumeratorMethod, ParameterSymbol parameter, BoundExpression resultParameter, BoundExpression parameterProxy)
Lowering\SyntheticBoundNodeFactory.cs (184)
233public BoundExpression This(LocalSymbol thisTempOpt) 235return (thisTempOpt != null) ? Local(thisTempOpt) : (BoundExpression)This(); 246return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true); 254public BoundFieldAccess Field(BoundExpression? receiver, FieldSymbol f) 264public BoundExpression Property(WellKnownMember member) 269public BoundExpression Property(BoundExpression? receiverOpt, WellKnownMember member) 278public BoundExpression Property(BoundExpression? receiverOpt, PropertySymbol property) 293public BoundExpression Indexer(BoundExpression? receiverOpt, PropertySymbol property, BoundExpression arg0) 421public BoundExpressionStatement Assignment(BoundExpression left, BoundExpression right, bool isRef = false) 426public BoundExpressionStatement ExpressionStatement(BoundExpression expr) 434public BoundExpression AssignmentExpression(BoundExpression left, BoundExpression right, bool isRef = false) 442public BoundExpression AssignmentExpression(SyntaxNode syntax, BoundExpression left, BoundExpression right, bool isRef = false, bool hasErrors = false, bool wasCompilerGenerated = false) 561public BoundReturnStatement Return(BoundExpression? expression = null) 648public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right) 653public BoundAsOperator As(BoundExpression operand, TypeSymbol type) 658public BoundIsOperator Is(BoundExpression operand, TypeSymbol type) 667public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right) 674public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right) 681public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right) 686public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right) 691public BoundExpression IsNotNullReference(BoundExpression value) 712public BoundExpression IsNullReference(BoundExpression value) 733public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right) 738public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right) 743public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right) 748public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right) 753public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right) 758public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right) 786public BoundObjectCreationExpression New(NamedTypeSymbol type, params BoundExpression[] args) 792public BoundObjectCreationExpression New(MethodSymbol ctor, params BoundExpression[] args) 795public BoundObjectCreationExpression New(NamedTypeSymbol type, ImmutableArray<BoundExpression> args) 801public BoundObjectCreationExpression New(MethodSymbol ctor, ImmutableArray<BoundExpression> args) 804public BoundObjectCreationExpression New(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKinds) 819public BoundObjectCreationExpression New(WellKnownMember wm, ImmutableArray<BoundExpression> args) 825public BoundExpression MakeIsNotANumberTest(BoundExpression input) 840public BoundExpression StaticCall(TypeSymbol receiver, MethodSymbol method, params BoundExpression[] args) 850public BoundExpression StaticCall(MethodSymbol method, ImmutableArray<BoundExpression> args) 853public BoundExpression StaticCall(WellKnownMember method, params BoundExpression[] args) 861public BoundExpression StaticCall(WellKnownMember method, ImmutableArray<TypeSymbol> typeArgs, params BoundExpression[] args) 872public BoundExpression StaticCall(SpecialMember method, params BoundExpression[] args) 879public BoundCall Call(BoundExpression? receiver, MethodSymbol method) 881return Call(receiver, method, ImmutableArray<BoundExpression>.Empty); 884public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, bool useStrictArgumentRefKinds = false) 889public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, BoundExpression arg1, bool useStrictArgumentRefKinds = false) 894public BoundCall Call(BoundExpression? receiver, MethodSymbol method, params BoundExpression[] args) 896return Call(receiver, method, ImmutableArray.Create<BoundExpression>(args)); 899public BoundCall Call(BoundExpression? receiver, WellKnownMember method, BoundExpression arg0) 902public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<BoundExpression> args, bool useStrictArgumentRefKinds = false) 944public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<RefKind> refKinds, ImmutableArray<BoundExpression> args) 954public BoundExpression Conditional(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, TypeSymbol type, bool isRef = false) 959public BoundComplexConditionalReceiver ComplexConditionalReceiver(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver) 966public BoundExpression Coalesce(BoundExpression left, BoundExpression right) 974public BoundStatement If(BoundExpression condition, BoundStatement thenClause, BoundStatement? elseClauseOpt = null) 979public BoundStatement ConditionalGoto(BoundExpression condition, LabelSymbol label, bool jumpIfTrue) 984public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null) 1035public BoundThrowStatement Throw(BoundExpression e) 1045public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts) 1050public BoundExpression MakeSequence(params BoundExpression[] parts) 1055public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts) 1057var builder = ArrayBuilder<BoundExpression>.GetInstance(); 1060var part = parts[i]; 1066var lastExpression = parts[parts.Length - 1]; 1077public BoundSequence Sequence(BoundExpression[] sideEffects, BoundExpression result, TypeSymbol? type = null) 1084public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result) 1093public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result) 1123public BoundStatement Switch(BoundExpression ex, ImmutableArray<SyntheticSwitchSection> sections) 1218public BoundArrayLength ArrayLength(BoundExpression array) 1224public BoundArrayAccess ArrayAccessFirstElement(BoundExpression array) 1228ImmutableArray<BoundExpression> firstElementIndices = ArrayBuilder<BoundExpression>.GetInstance(rank, Literal(0)).ToImmutableAndFree(); 1232public BoundArrayAccess ArrayAccess(BoundExpression array, params BoundExpression[] indices) 1237public BoundArrayAccess ArrayAccess(BoundExpression array, ImmutableArray<BoundExpression> indices) 1272public BoundExpression ThrowExpression(BoundExpression thrown, TypeSymbol type) 1277public BoundExpression Null(TypeSymbol type) 1283public BoundExpression NullRef(TypeWithAnnotations type) 1289public static BoundExpression Null(TypeSymbol type, SyntaxNode syntax) 1292BoundExpression nullLiteral = new BoundLiteral(syntax, ConstantValue.Null, type) { WasCompilerGenerated = true }; 1303public BoundExpression Typeof(WellKnownType type, TypeSymbol systemType) 1308public BoundExpression Typeof(TypeSymbol type, TypeSymbol systemType) 1334public BoundExpression Typeof(TypeWithAnnotations type, TypeSymbol systemType) 1339public ImmutableArray<BoundExpression> TypeOfs(ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol systemType) 1344public BoundExpression TypeofDynamicOperationContextType() 1350public BoundExpression Sizeof(TypeSymbol type) 1355internal BoundExpression ConstructorInfo(MethodSymbol ctor) 1373public BoundExpression MethodDefIndex(MethodSymbol method) 1382public BoundExpression LocalId(LocalSymbol symbol) 1392public BoundExpression ParameterId(ParameterSymbol symbol) 1402public BoundExpression StateMachineInstanceId() 1414public BoundExpression ModuleVersionId() 1419public BoundExpression ModuleVersionIdString() 1424public BoundExpression InstrumentationPayloadRoot(int analysisKind, TypeSymbol payloadType) 1429public BoundExpression ThrowIfModuleCancellationRequested() 1432public BoundExpression ModuleCancellationToken() 1435public BoundExpression MaximumMethodDefIndex() 1446public BoundExpression SourceDocumentIndex(Cci.DebugSourceDocument document) 1455public BoundExpression MethodInfo(MethodSymbol method, TypeSymbol systemReflectionMethodInfo) 1480public BoundExpression FieldInfo(FieldSymbol field) 1524/// and then calls <see cref="Convert(TypeSymbol, BoundExpression, Conversion, bool, bool)"/>. 1528public Conversion ClassifyEmitConversion(BoundExpression arg, TypeSymbol destination) 1541public BoundExpression Convert(TypeSymbol type, BoundExpression arg, Conversion conversion, bool isChecked = false, bool explicitCastInCode = true) 1559public BoundExpression ArrayOrEmpty(TypeSymbol elementType, BoundExpression[] elements) 1571public BoundExpression ArrayOrEmpty(TypeSymbol elementType, ImmutableArray<BoundExpression> elements) 1586public BoundExpression Array(TypeSymbol elementType, ImmutableArray<BoundExpression> elements) 1590ImmutableArray.Create<BoundExpression>(Literal(elements.Length)), 1595public BoundExpression Array(TypeSymbol elementType, BoundExpression length) 1599ImmutableArray.Create<BoundExpression>(length), 1605internal BoundExpression Default(TypeSymbol type) 1610internal static BoundExpression Default(TypeSymbol type, SyntaxNode syntax) 1639BoundExpression source, 1650internal BoundExpression NullOrDefault(TypeSymbol typeSymbol) 1655internal static BoundExpression NullOrDefault(TypeSymbol typeSymbol, SyntaxNode syntax) 1660internal BoundExpression Not(BoundExpression expression) 1671BoundExpression argument, 1766internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder) 1781internal BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind) 1833internal BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression) 1843internal BoundExpression RewriteNullableNullEquality( 1846BoundExpression loweredLeft, 1847BoundExpression loweredRight, 1865BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight; 1874BoundExpression nonNullValue = LocalRewriter.NullableAlwaysHasValue(nullable); 1885sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue), 1895BoundExpression whenNotNull = RewriteNullableNullEquality( 1907BoundExpression call = MakeNullableHasValue(syntax, nullable); 1908BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ?
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,
Operations\CSharpOperationFactory.cs (45)
306ConstantValue? constantValue = (boundNode as BoundExpression)?.ConstantValueOpt; 321BoundExpression boundExpr => boundExpr.GetPublicTypeSymbol(), 330BoundExpression boundExpr => boundExpr.GetPublicTypeSymbol(), 468private static TypeParameterSymbol? GetConstrainedToType(Symbol targetMember, BoundExpression? receiverOpt) 535return CreateFromArray<BoundExpression, IOperation>(declaredTypeOpt.BoundDimensionsOpt); 541ImmutableArray<BoundExpression> dimensions; 550dimensions = ImmutableArray<BoundExpression>.Empty; 552return CreateFromArray<BoundExpression, IOperation>(dimensions); 765ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicObjectCreationExpression.Arguments); 794ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicInvocation.Arguments); 803internal IOperation CreateBoundDynamicIndexerAccessExpressionReceiver(BoundExpression indexer) 818internal ImmutableArray<IOperation> CreateBoundDynamicIndexerAccessArguments(BoundExpression indexer) 823return CreateFromArray<BoundExpression, IOperation>(boundDynamicAccess.Arguments); 827return CreateFromArray<BoundExpression, IOperation>(boundObjectInitializerMember.Arguments); 848ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundObjectInitializerExpression)); 857ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundCollectionInitializerExpression)); 965BoundExpression? receiver, 992ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundCollectionElementInitializer.Arguments); 1033BoundExpression boundOperand = boundConversion.Operand; 1158BoundExpression nestedOperand = nestedConversion.Operand; 1265ImmutableArray<IOperation> dimensionSizes = CreateFromArray<BoundExpression, IOperation>(boundArrayCreation.Bounds); 1276ImmutableArray<IOperation> elementValues = CreateFromArray<BoundExpression, IOperation>(boundArrayInitialization.Initializers); 1315var collectionCreation = expr.CollectionCreation; 1342return @this.CreateFromArray<BoundExpression, IOperation>(boundBad.ChildBoundNodes); 1356Create(Binder.GetUnderlyingCollectionExpressionElement(expr, (BoundExpression)element, throwOnErrors: false)); 1361var iteratorItem = element.IteratorBody is { } iteratorBody ? 1390ConstantValue? constantValue = ((BoundExpression)boundDefaultExpression).ConstantValueOpt; 1503var children = CreateFromArray<BoundExpression, IOperation>(boundBadExpression.ChildBoundNodes); 1712ImmutableArray<IOperation> indices = CreateFromArray<BoundExpression, IOperation>(boundArrayAccess.Indices); 2063boundForEachStatement.Expression is not BoundConversion { Conversion.IsIdentity: true, ExplicitCastInCode: false, Operand: BoundExpression operand } ? 2335ImmutableArray<IOperation> elements = CreateFromArray<BoundExpression, IOperation>(boundTupleExpression.Arguments); 2356internal ImmutableArray<IInterpolatedStringContentOperation> CreateBoundInterpolatedStringContentOperation(ImmutableArray<BoundExpression> parts, ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>? positionInfo) 2363foreach (var part in parts) 2389var part = parts[i]; 2392BoundExpression value; 2393BoundExpression? alignment; 2394BoundExpression? format; 2462static (BoundExpression Value, BoundExpression? Alignment, BoundExpression? Format) getCallInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, (bool IsLiteral, bool HasAlignment, bool HasFormat) currentPosition) 2464BoundExpression value = arguments[0]; 2474BoundExpression? alignment = alignmentIndex == -1 ? null : arguments[alignmentIndex]; 2476BoundExpression? format = formatIndex == -1 ? null : arguments[formatIndex]; 2520IOperation createContent(BoundExpression current)
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)
373internal abstract ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue);
Symbols\ReducedExtensionMethodSymbol.cs (1)
150var arguments = new BoundExpression[paramCount];
Symbols\Source\ParameterHelpers.cs (3)
916BoundExpression defaultExpression, 917BoundExpression convertedExpression, 1076private 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)
573internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) 661BoundExpression initializerOpt = this._initializerBinder.BindInferredVariableInitializer(BindingDiagnosticBag.Discarded, RefKind, _initializer, _initializer); 671private void MakeConstantTuple(LocalSymbol inProgress, BoundExpression boundInitValue) 705internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\Source\SourceMemberFieldSymbol.cs (1)
584var 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)
57BoundExpression expression;
Symbols\Synthesized\Records\SynthesizedRecordPrintMembers.cs (1)
206var 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)
295private static BoundCall CreateParameterlessCall(CSharpSyntaxNode syntax, BoundExpression receiver, ThreeState receiverIsSubjectToCloning, MethodSymbol method) 302ImmutableArray<BoundExpression>.Empty, 343private readonly BoundExpression _userEntryPointInvocation; 362var arguments = Parameters.SelectAsArray((p, s) => (BoundExpression)new BoundParameter(s, p, p.Type), _userMainReturnTypeSyntax); 531BoundExpression getAwaiterGetResultCall; 631ImmutableArray.Create<BoundExpression>(submissionArrayParameter),
Symbols\Synthesized\SynthesizedLocal.cs (1)
195internal sealed override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\Synthesized\SynthesizedParameterlessThrowMethod.cs (1)
47return f.Throw(f.New(exceptionConstructor, ImmutableArray<BoundExpression>.Empty));
Symbols\Synthesized\SynthesizedThrowSwitchExpressionExceptionMethod.cs (2)
47public static BoundThrowStatement GenerateThrow(SyntheticBoundNodeFactory f, BoundExpression unmatchedValue) 51return f.Throw(f.New(f.WellKnownMethod(WellKnownMember.System_Runtime_CompilerServices_SwitchExpressionException__ctorObject), ImmutableArray.Create<BoundExpression>(unmatchedValue)));
Symbols\Synthesized\TypeSubstitutedLocalSymbol.cs (1)
129internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Symbols\UpdatedContainingSymbolLocal.cs (1)
95internal override ReadOnlyBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue) =>