Binder\Binder.ValueChecks.cs (87)
35internal BoundExpression Argument { get; }
51internal MixableDestination(ParameterSymbol parameter, BoundExpression argument)
60internal MixableDestination(BoundExpression argument, EscapeLevel escapeLevel)
89internal BoundExpression Argument { get; }
93internal EscapeArgument(ParameterSymbol? parameter, BoundExpression argument, RefKind refKind, bool isArgList = false)
101public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out RefKind refKind)
125internal BoundExpression Argument { get; }
136internal EscapeValue(ParameterSymbol? parameter, BoundExpression argument, EscapeLevel escapeLevel, bool isRefEscape)
144public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out EscapeLevel escapeLevel, out bool isRefEscape)
324var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(accessorForDefaultArguments.ParameterCount);
383private BoundExpression CheckValue(BoundExpression expr, BindValueKind valueKind, BindingDiagnosticBag diagnostics)
466var receiver = methodGroup.ReceiverOpt;
484receiver == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(receiver),
502internal static bool IsTypeOrValueExpression(BoundExpression expression)
527internal bool CheckValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics)
653var receiver = ((BoundPointerElementAccess)expr).Expression;
768bool checkArrayAccessValueKind(SyntaxNode node, BindValueKind valueKind, ImmutableArray<BoundExpression> indices, BindingDiagnosticBag diagnostics)
803private static bool CheckNotNamespaceOrType(BoundExpression expr, BindingDiagnosticBag diagnostics)
1079private bool CheckParameterRefEscape(SyntaxNode node, BoundExpression parameter, ParameterSymbol parameterSymbol, uint escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
1333BoundExpression receiver = boundEvent.ReceiverOpt;
1395private bool CheckIsValidReceiverForVariable(SyntaxNode node, BoundExpression receiver, BindValueKind kind, BindingDiagnosticBag diagnostics)
1414private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol)
1466private bool CheckPropertyValueKind(SyntaxNode node, BoundExpression expr, BindValueKind valueKind, bool checkingReceiver, BindingDiagnosticBag diagnostics)
1473BoundExpression receiver;
1647static bool isAllowedDespiteReadonly(BoundExpression receiver)
1658bool isAllowedInitOnlySet(BoundExpression receiver)
1689private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics,
1708BoundExpression expression,
1714var arguments = ArrayBuilder<BoundExpression>.GetInstance();
1717foreach (var argument in arguments)
1739BoundExpression? receiver,
1741ImmutableArray<BoundExpression> argsOpt,
1832BoundExpression? receiver,
1834ImmutableArray<BoundExpression> argsOpt,
1906BoundExpression? receiver,
1908ImmutableArray<BoundExpression> argsOpt,
1992BoundExpression? receiver,
1994ImmutableArray<BoundExpression> argsOpt,
2059BoundExpression? receiver,
2061ImmutableArray<BoundExpression> argsOpt,
2106var argument = argsOpt[argIndex];
2153static bool isMixableArgument(BoundExpression argument)
2166static EscapeArgument getReceiver(MethodSymbol? method, BoundExpression receiver)
2186ImmutableArray<BoundExpression> argsOpt,
2193var argument = argsOpt[argIndex];
2213BoundExpression? receiver,
2215ImmutableArray<BoundExpression> argsOpt,
2289BoundExpression? receiver,
2291ImmutableArray<BoundExpression> argsOpt,
2387private bool ShouldInferDeclarationExpressionValEscape(BoundExpression argument, [NotNullWhen(true)] out SourceLocalSymbol? localSymbol)
2419BoundExpression? receiverOpt,
2421ImmutableArray<BoundExpression> argsOpt,
2521BoundExpression? receiverOpt,
2523ImmutableArray<BoundExpression> argsOpt,
2597foreach (var argument in argsOpt)
2620ImmutableArray<BoundExpression> argsOpt,
2889internal void ValidateEscape(BoundExpression expr, uint escapeTo, bool isByRef, BindingDiagnosticBag diagnostics)
2912internal uint GetRefEscape(BoundExpression expr, uint scopeOfTheContainingExpression)
3148internal bool CheckRefEscape(SyntaxNode node, BoundExpression expr, uint escapeFrom, uint escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
3447foreach (var element in expr.Arguments)
3470internal uint GetValEscape(BoundExpression expr, uint scopeOfTheContainingExpression)
3816private uint GetTupleValEscape(ImmutableArray<BoundExpression> elements, uint scopeOfTheContainingExpression)
3819foreach (var element in elements)
3830foreach (var expression in initExpr.Initializers)
3853private uint GetValEscape(ImmutableArray<BoundExpression> expressions, uint scopeOfTheContainingExpression)
3856foreach (var expression in expressions)
3869internal bool CheckValEscape(SyntaxNode node, BoundExpression expr, uint escapeFrom, uint escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
3950BoundExpression underlyingReceiver = ((BoundCapturedReceiverPlaceholder)expr).Receiver;
4236var clauseValue = ((BoundQueryClause)expr).Value;
4240var variableValue = ((BoundRangeVariable)expr).Value;
4260var accessedExpression = ((BoundPointerElementAccess)expr).Expression;
4264var operandExpression = ((BoundPointerIndirectionOperator)expr).Operand;
4278var result = arm.Value;
4421private bool CheckTupleValEscape(ImmutableArray<BoundExpression> elements, uint escapeFrom, uint escapeTo, BindingDiagnosticBag diagnostics)
4423foreach (var element in elements)
4436foreach (var expression in initExpr.Initializers)
4468private bool CheckValEscape(ImmutableArray<BoundExpression> expressions, uint escapeFrom, uint escapeTo, BindingDiagnosticBag diagnostics)
4470foreach (var expression in expressions)
4481private bool CheckInterpolatedStringHandlerConversionEscape(BoundExpression expression, uint escapeFrom, uint escapeTo, BindingDiagnosticBag diagnostics)
4492var arguments = ArrayBuilder<BoundExpression>.GetInstance();
4496foreach (var argument in arguments)
4509private void GetInterpolatedStringHandlerArgumentsForEscape(BoundExpression expression, ArrayBuilder<BoundExpression> arguments)
4531foreach (var part in interpolatedString.Parts)
4585BoundExpression expression,
4770var receiver = fieldAccess.ReceiverOpt;
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, indexed: false, receiver, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), lookupResult, BoundMethodGroupFlags.None, diagnostics);
Binder\Binder_Attributes.cs (11)
189ImmutableArray<BoundExpression> boundConstructorArguments;
254CheckRequiredMembersInObjectInitializer(attributeConstructor, ImmutableArray<BoundExpression>.CastUp(boundNamedArguments), node, diagnostics);
541BoundExpression namedArgumentValue = this.BindValue(namedArgument.Expression, diagnostics, BindValueKind.RValue);
548BoundExpression lvalue;
856public ImmutableArray<TypedConstant> VisitArguments(ImmutableArray<BoundExpression> arguments, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool parentHasErrors = false)
864foreach (var argument in arguments)
930private TypedConstant VisitExpression(BoundExpression node, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors)
940private TypedConstant VisitExpression(BoundExpression node, TypedConstantKind typedConstantKind, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors)
983var operand = node.Operand;
1038ImmutableArray<BoundExpression> bounds = node.Bounds;
1077private static TypedConstant CreateTypedConstant(BoundExpression node, TypedConstantKind typedConstantKind, BindingDiagnosticBag diagnostics, ref bool attrHasErrors, bool curArgumentHasErrors,
Binder\Binder_Await.cs (20)
19private BoundExpression BindAwait(AwaitExpressionSyntax node, BindingDiagnosticBag diagnostics)
23BoundExpression expression = BindRValueWithoutTargetType(node.Expression, diagnostics);
28private BoundAwaitExpression BindAwait(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics)
51internal BoundAwaitableInfo BindAwaitInfo(BoundAwaitableValuePlaceholder placeholder, SyntaxNode node, BindingDiagnosticBag diagnostics, ref bool hasErrors, BoundExpression? expressionOpt = null)
57out BoundExpression? getAwaiter,
71private bool CouldBeAwaited(BoundExpression expression)
243BoundExpression expression,
244out BoundExpression? getAwaiterGetResultCall,
252BoundExpression expression,
253BoundExpression getAwaiterArgument,
255out BoundExpression? getAwaiter,
258out BoundExpression? getAwaiterGetResultCall,
295private static bool ValidateAwaitedExpression(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics)
323private bool GetGetAwaiterMethod(BoundExpression expression, SyntaxNode node, BindingDiagnosticBag diagnostics, [NotNullWhen(true)] out BoundExpression? getAwaiterCall)
333getAwaiterCall = MakeInvocationExpression(node, expression, WellKnownMemberNames.GetAwaiter, ImmutableArray<BoundExpression>.Empty, diagnostics);
371var qualified = BindInstanceMemberAccess(node, node, receiver, name, 0, default(SeparatedSyntaxList<TypeSyntax>), default(ImmutableArray<TypeWithAnnotations>), invoked: false, indexed: false, diagnostics);
434private bool GetGetResultMethod(BoundExpression awaiterExpression, SyntaxNode node, TypeSymbol awaitedExpressionType, BindingDiagnosticBag diagnostics, out MethodSymbol? getResultMethod, [NotNullWhen(true)] out BoundExpression? getAwaiterGetResultCall)
437getAwaiterGetResultCall = MakeInvocationExpression(node, awaiterExpression, WellKnownMemberNames.GetResult, ImmutableArray<BoundExpression>.Empty, diagnostics);
Binder\Binder_Conversions.cs (51)
18internal BoundExpression CreateConversion(
19BoundExpression source,
30internal BoundExpression CreateConversion(
31BoundExpression source,
39internal BoundExpression CreateConversion(
41BoundExpression source,
51protected BoundExpression CreateConversion(
53BoundExpression source,
63var result = createConversion(syntax, source, conversion, isCast, conversionGroupOpt, wasCompilerGenerated, destination, diagnostics, hasErrors);
76var result2 = createConversion(syntax, placeholder2, conversion, isCast, conversionGroupOpt, wasCompilerGenerated, destination, BindingDiagnosticBag.Discarded, hasErrors);
92BoundExpression createConversion(
94BoundExpression source,
158var convertedSwitch = ConvertSwitchExpression((BoundUnconvertedSwitchExpression)source, destination, conversionIfTargetTyped: conversion, diagnostics);
173var convertedConditional = ConvertConditionalExpression((BoundUnconvertedConditionalOperator)source, destination, conversionIfTargetTyped: conversion, diagnostics);
341private static BoundExpression ConvertObjectCreationExpression(
346BoundExpression expr = bindObjectCreationExpression(node.Syntax, node.InitializerOpt, node.Binder, destination.StrippedType(), arguments, diagnostics);
374static BoundExpression bindObjectCreationExpression(
410private BoundExpression ConvertConditionalExpression(
420var condition = source.Condition;
423var trueExpr =
427var falseExpr =
451private BoundExpression ConvertSwitchExpression(BoundUnconvertedSwitchExpression source, TypeSymbol destination, Conversion? conversionIfTargetTyped, BindingDiagnosticBag diagnostics, bool hasErrors = false)
461var oldValue = oldCase.Value;
462var newValue =
477private BoundExpression CreateUserDefinedConversion(
479BoundExpression source,
539BoundExpression convertedOperand = CreateConversion(
567BoundExpression userDefinedConversion;
630BoundExpression finalConversion = CreateConversion(
645private BoundExpression CreateFunctionTypeConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
668BoundExpression expr;
693private BoundExpression CreateAnonymousFunctionConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
720private BoundExpression CreateMethodGroupConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
865private BoundExpression CreateStackAllocConversion(SyntaxNode syntax, BoundExpression source, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
893private BoundExpression CreateTupleLiteralConversion(SyntaxNode syntax, BoundTupleLiteral sourceTuple, Conversion conversion, bool isCast, ConversionGroup? conversionGroup, TypeSymbol destination, BindingDiagnosticBag diagnostics)
944var convertedArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length);
953var argument = arguments[i];
960BoundExpression result = new BoundConvertedTupleLiteral(
1018BoundExpression? receiverOpt = group.ReceiverOpt;
1046private bool MemberGroupFinalValidation(BoundExpression? receiverOpt, MethodSymbol methodSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod)
1121private bool MemberGroupFinalValidationAccessibilityChecks(BoundExpression? receiverOpt, Symbol memberSymbol, SyntaxNode node, BindingDiagnosticBag diagnostics, bool invokedAsExtensionMethod)
1228private static bool IsMemberAccessedThroughVariableOrValue(BoundExpression? receiverOpt)
1238internal static bool IsMemberAccessedThroughType([NotNullWhen(true)] BoundExpression? receiverOpt)
1256internal static bool WasImplicitReceiver([NotNullWhen(false)] BoundExpression? receiverOpt)
1274internal bool MethodIsCompatibleWithDelegateOrFunctionPointer(BoundExpression? receiverOpt, bool isExtensionMethod, MethodSymbol method, TypeSymbol delegateType, Location errorLocation, BindingDiagnosticBag diagnostics)
1436BoundExpression? receiverOpt,
1532BoundExpression source,
Binder\Binder_Deconstruct.cs (28)
29internal BoundExpression BindDeconstruction(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics, bool resultIsUsedOverride = false)
99BoundExpression boundRight = rightPlaceholder ?? BindValue(right, deconstructionDiagnostics, BindValueKind.RValue);
115BoundExpression boundRHS,
208private BoundExpression FixTupleLiteral(ArrayBuilder<DeconstructionVariable> checkedVariables, BoundExpression boundRHS, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics)
277BoundExpression deconstructInvocation = MakeDeconstructInvocationExpression(variables.Count,
295var nestedConversions = ArrayBuilder<(BoundValuePlaceholder?, BoundExpression?)>.GetInstance(count);
319var single = variable.Single;
367private BoundExpression SetInferredType(BoundExpression expression, TypeSymbol type, BindingDiagnosticBag diagnostics)
407BoundExpression errorLocal = ((DeconstructionVariablePendingInference)variable.Single).FailInference(this, diagnostics);
432internal readonly BoundExpression? Single;
436internal DeconstructionVariable(BoundExpression variable, SyntaxNode syntax)
480BoundExpression element = rhsLiteral.Arguments[i];
549var valuesBuilder = ArrayBuilder<BoundExpression>.GetInstance(count);
556BoundExpression value;
572ImmutableArray<BoundExpression> arguments = valuesBuilder.ToImmutableAndFree();
595private static string? ExtractDeconstructResultElementName(BoundExpression expression)
611private BoundExpression MakeDeconstructInvocationExpression(
613BoundExpression receiver,
638var variableOpt = variablesOpt?[i].Single;
652var memberAccess = BindInstanceMemberAccess(
670BoundExpression result = BindMethodGroupInvocation(
714private BoundBadExpression MissingDeconstruct(BoundExpression receiver, SyntaxNode rightSyntax, int numParameters, BindingDiagnosticBag diagnostics,
715out ImmutableArray<BoundDeconstructValuePlaceholder> outPlaceholders, BoundExpression childNode)
790var boundVariable = BindExpression(node, diagnostics, invoked: false, indexed: false);
791var checkedVariable = CheckValue(boundVariable, BindValueKind.Assignable, diagnostics);
864private BoundExpression BindDeconstructionVariable(
Binder\Binder_Expressions.cs (337)
24/// This portion of the binder converts an <see cref="ExpressionSyntax"/> into a <see cref="BoundExpression"/>.
113private BoundBadExpression BadExpression(SyntaxNode syntax, BoundExpression childNode)
121private BoundBadExpression BadExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> childNodes)
137protected BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind lookupResultKind, BoundExpression childNode)
150ImmutableArray<BoundExpression>.Empty,
158private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode)
171private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false)
191private BoundExpression ToBadExpression(BoundExpression expr, LookupResultKind resultKind = LookupResultKind.Empty)
233internal BoundExpression BindValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind)
235var result = this.BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false);
239internal BoundExpression BindRValueWithoutTargetType(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true)
248internal BoundExpression BindTypeOrRValue(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
250var valueOrType = BindExpression(node, diagnostics: diagnostics, invoked: false, indexed: false);
261internal BoundExpression BindToTypeForErrorRecovery(BoundExpression expression, TypeSymbol type = null)
265var result =
279internal BoundExpression BindToNaturalType(BoundExpression expression, BindingDiagnosticBag diagnostics, bool reportNoTargetType = true)
284BoundExpression result;
329var boundArgs = ArrayBuilder<BoundExpression>.GetInstance(sourceTuple.Arguments.Length);
330foreach (var arg in sourceTuple.Arguments)
397private BoundExpression BindToInferredDelegateType(BoundExpression expr, BindingDiagnosticBag diagnostics)
418internal BoundExpression BindValueAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BindValueKind valueKind)
420var result = this.BindExpressionAllowArgList(node, diagnostics: diagnostics);
439BoundExpression result = initializerBinder.BindVariableOrAutoPropInitializerValue(initializerOpt, field.RefKind,
445internal BoundExpression BindVariableOrAutoPropInitializerValue(
459BoundExpression initializer = BindPossibleArrayInitializer(value, varType, valueKind, diagnostics);
478out BoundExpression valueBeforeConversion)
505var initializer = initializerBinder.BindValue(equalsValueSyntax.Value, diagnostics, BindValueKind.RValue);
510public BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
515protected BoundExpression BindExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed)
517BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked, indexed);
533protected BoundExpression BindExpressionAllowArgList(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
535BoundExpression expr = BindExpressionInternal(node, diagnostics, invoked: false, indexed: false);
540private void VerifyUnchecked(ExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression expr)
553private BoundExpression BindExpressionInternal(ExpressionSyntax node, BindingDiagnosticBag diagnostics, bool invoked, bool indexed)
813private BoundExpression BindRefExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
818node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray<BoundExpression>.Empty,
822private BoundExpression BindRefType(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
829private BoundExpression BindScopedType(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
836private BoundExpression BindThrowExpression(ThrowExpressionSyntax node, BindingDiagnosticBag diagnostics)
847var thrownExpression = BindThrownExpression(node.Expression, diagnostics, ref hasErrors);
886private BoundExpression BindDeclarationExpressionAsError(DeclarationExpressionSyntax node, BindingDiagnosticBag diagnostics)
903private BoundExpression BindDeclarationVariablesForErrorRecovery(TypeWithAnnotations declTypeWithAnnotations, VariableDesignationSyntax node, CSharpSyntaxNode syntax, BindingDiagnosticBag diagnostics)
911var result = BindDeconstructionVariable(declTypeWithAnnotations, single, syntax, diagnostics);
922var builder = ArrayBuilder<BoundExpression>.GetInstance(count);
930ImmutableArray<BoundExpression> subExpressions = builder.ToImmutableAndFree();
959private BoundExpression BindTupleExpression(TupleExpressionSyntax node, BindingDiagnosticBag diagnostics)
971ImmutableArray<BoundExpression>.Empty;
978var boundArguments = ArrayBuilder<BoundExpression>.GetInstance(arguments.Count);
1000BoundExpression boundArgument = BindValue(argumentSyntax.Expression, diagnostics, BindValueKind.RValue);
1006ImmutableArray.Create<BoundExpression>(boundArgument), CreateErrorType("void"));
1176private BoundExpression BindRefValue(RefValueExpressionSyntax node, BindingDiagnosticBag diagnostics)
1181BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue);
1201private BoundExpression BindMakeRef(MakeRefExpressionSyntax node, BindingDiagnosticBag diagnostics)
1204BoundExpression argument = this.BindValue(node.Expression, diagnostics, BindValueKind.RefOrOut);
1225private BoundExpression BindRefType(RefTypeExpressionSyntax node, BindingDiagnosticBag diagnostics)
1229BoundExpression argument = BindValue(node.Expression, diagnostics, BindValueKind.RValue);
1247private BoundExpression BindArgList(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics)
1314private BoundExpression BindQualifiedName(QualifiedNameSyntax node, BindingDiagnosticBag diagnostics)
1319private BoundExpression BindParenthesizedExpression(ExpressionSyntax innerExpression, BindingDiagnosticBag diagnostics)
1321var result = BindExpression(innerExpression, diagnostics);
1331private BoundExpression BindTypeOf(TypeOfExpressionSyntax node, BindingDiagnosticBag diagnostics)
1386private BoundExpression BindSizeOf(SizeOfExpressionSyntax node, BindingDiagnosticBag diagnostics)
1442private BoundExpression BindDefaultExpression(DefaultExpressionSyntax node, BindingDiagnosticBag diagnostics)
1455private BoundExpression BindIdentifier(
1488BoundExpression expression;
1522var receiver = SynthesizeMethodGroupReceiver(node, members);
1684private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members)
1794private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError)
1978BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics);
1984BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics);
1990BoundExpression receiver = SynthesizeReceiver(node, symbol, diagnostics);
2053protected virtual BoundExpression BindRangeVariable(SimpleNameSyntax node, RangeVariableSymbol qv, BindingDiagnosticBag diagnostics)
2058private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics)
2123private BoundExpression TryBindInteractiveReceiver(SyntaxNode syntax, NamedTypeSymbol memberDeclaringType)
2165public BoundExpression BindNamespaceOrTypeOrExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
2191public BoundExpression BindLabel(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
2219public BoundExpression BindNamespaceOrType(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
2225public BoundExpression BindNamespaceAlias(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
2231private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol)
2324private BoundExpression BindCast(CastExpressionSyntax node, BindingDiagnosticBag diagnostics)
2326BoundExpression operand = this.BindValue(node.Expression, diagnostics, BindValueKind.RValue);
2342private BoundExpression BindFromEndIndexExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
2351BoundExpression boundOperand = BindValue(node.Operand, diagnostics, BindValueKind.RValue);
2379BoundExpression boundConversion = CreateConversion(boundOperand, conversion, intType, diagnostics);
2385private BoundExpression BindRangeExpression(RangeExpressionSyntax node, BindingDiagnosticBag diagnostics)
2431BoundExpression left = BindRangeExpressionOperand(node.LeftOperand, diagnostics);
2432BoundExpression right = BindRangeExpressionOperand(node.RightOperand, diagnostics);
2452private BoundExpression BindRangeExpressionOperand(ExpressionSyntax operand, BindingDiagnosticBag diagnostics)
2459BoundExpression boundOperand = BindValue(operand, diagnostics, BindValueKind.RValue);
2488private BoundExpression BindCastCore(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, bool wasCompilerGenerated, BindingDiagnosticBag diagnostics)
2510BoundExpression operand,
2630ImmutableArray<BoundExpression> tupleArguments,
2642var argument = tupleArguments[i];
2662private BoundExpression BindExplicitNullableCastFromNonNullable(ExpressionSyntax node, BoundExpression operand, TypeWithAnnotations targetTypeWithAnnotations, BindingDiagnosticBag diagnostics)
2680var underlyingExpr = BindCastCore(node, operand, underlyingTargetTypeWithAnnotations, wasCompilerGenerated: false, diagnostics: bag);
2695var result = BindCastCore(node, operand, targetTypeWithAnnotations, wasCompilerGenerated: operand.WasCompilerGenerated, diagnostics: bag2);
2837BoundExpression boundArgument = BindArgumentValue(diagnostics, argumentSyntax, allowArglist, refKind);
2851var arg = result.Argument(0);
2868private BoundExpression BindArgumentValue(BindingDiagnosticBag diagnostics, ArgumentSyntax argumentSyntax, bool allowArglist, RefKind refKind)
2888private BoundExpression BindOutDeclarationArgument(DeclarationExpressionSyntax declarationExpression, BindingDiagnosticBag diagnostics)
2925private BoundExpression BindOutVariableDeclarationArgument(
2988BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics);
3065BoundExpression boundArgumentExpression,
3133private BoundExpression BindArgumentExpression(BindingDiagnosticBag diagnostics, ExpressionSyntax argumentExpression, RefKind refKind, bool allowArglist)
3142BoundExpression argument;
3158ArrayBuilder<BoundExpression> arguments,
3160BoundExpression? receiver)
3171BoundExpression argument = arguments[arg];
3220void reportUnsafeIfNeeded(MemberResolutionResult<TMember> methodResult, BindingDiagnosticBag diagnostics, BoundExpression argument, TypeWithAnnotations parameterTypeWithAnnotations)
3252private BoundExpression BindArrayCreationExpression(ArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
3336ArrayBuilder<BoundExpression> sizes = ArrayBuilder<BoundExpression>.GetInstance();
3341var size = BindArrayDimension(arg, diagnostics, ref hasErrors);
3362var size = BindRValueWithoutTargetType(arg, diagnostics);
3371ImmutableArray<BoundExpression> arraySizes = sizes.ToImmutableAndFree();
3378private BoundExpression BindArrayDimension(ExpressionSyntax dimension, BindingDiagnosticBag diagnostics, ref bool hasErrors)
3383var size = BindValue(dimension, diagnostics, BindValueKind.RValue);
3403private BoundExpression BindImplicitArrayCreationExpression(ImplicitArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
3411ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: rank);
3432sizes: ImmutableArray<BoundExpression>.Empty, boundInitExprOpt: boundInitializerExpressions);
3435private BoundExpression BindImplicitStackAllocArrayCreationExpression(ImplicitStackAllocArrayCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
3438ImmutableArray<BoundExpression> boundInitializerExpressions = BindArrayInitializerExpressions(initializer, diagnostics, dimension: 1, rank: 1);
3470private ImmutableArray<BoundExpression> BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, BindingDiagnosticBag diagnostics, int dimension, int rank)
3472var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance();
3487private void BindArrayInitializerExpressions(InitializerExpressionSyntax initializer, ArrayBuilder<BoundExpression> exprBuilder, BindingDiagnosticBag diagnostics, int dimension, int rank)
3499var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue);
3516var boundExpression = BindValue(expression, diagnostics, BindValueKind.RValue);
3558ImmutableArray<BoundExpression> boundInitExpr,
3564ArrayBuilder<BoundExpression> initializers = ArrayBuilder<BoundExpression>.GetInstance();
3574BoundExpression boundExpression = boundInitExpr[boundInitExprIndex];
3577BoundExpression convertedExpression = GenerateConversionForAssignment(elemType, boundExpression, diagnostics);
3586BoundExpression init = null;
3639ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>))
3706ImmutableArray<BoundExpression> sizes,
3707ImmutableArray<BoundExpression> boundInitExprOpt = default(ImmutableArray<BoundExpression>),
3734var size = sizes[i];
3759BoundExpression[] sizeArray = new BoundExpression[rank];
3785private BoundExpression BindStackAllocArrayCreationExpression(
3798ImmutableArray<BoundExpression>.Empty,
3821var builder = ArrayBuilder<BoundExpression>.GetInstance();
3842BoundExpression count = null;
3946private BoundExpression BindStackAllocWithInitializer(
3952BoundExpression sizeOpt,
3955ImmutableArray<BoundExpression> boundInitExprOpt = default)
3998private static int? GetIntegerConstantForArraySize(BoundExpression expression)
4019private static bool IsNegativeConstantForArraySize(BoundExpression expression)
4065internal BoundExpression BindConstructorInitializer(
4077var result = (argumentListBinder ?? this).BindConstructorInitializerCore(initializerArgumentListOpt, constructor, diagnostics);
4089private BoundExpression BindConstructorInitializerCore(
4228BoundExpression receiver = ThisReference(nonNullSyntax, initializerType, wasCompilerGenerated: true);
4403private BoundExpression BindImplicitObjectCreationExpression(ImplicitObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
4420protected BoundExpression BindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
4422BoundExpression result = bindObjectCreationExpression(node, diagnostics);
4429BoundExpression bindObjectCreationExpression(ObjectCreationExpressionSyntax node, BindingDiagnosticBag diagnostics)
4481private BoundExpression BindDelegateCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
4485var result = BindDelegateCreationExpression(node, type, analyzedArguments, node.Initializer, wasTargetTyped: false, diagnostics);
4490private BoundExpression BindDelegateCreationExpression(SyntaxNode node, NamedTypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped, BindingDiagnosticBag diagnostics)
4524BoundExpression argument = analyzedArguments.Arguments.Count >= 1 ? BindToNaturalType(analyzedArguments.Arguments[0], diagnostics) : null;
4659private BoundExpression BindClassCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, string typeName, BindingDiagnosticBag diagnostics, TypeSymbol initializerType = null)
4693private BoundExpression MakeConstructorInvocation(
4695ArrayBuilder<BoundExpression> arguments,
4714var creation = BindClassCreationExpression(node, type.Name, node, type, analyzedArguments, diagnostics);
4724internal BoundExpression BindObjectCreationForErrorRecovery(BoundUnconvertedObjectCreationExpression node, BindingDiagnosticBag diagnostics)
4727var result = MakeBadExpressionForObjectCreation(node.Syntax, CreateErrorType(), arguments, node.InitializerOpt, typeSyntax: node.Syntax, diagnostics);
4732private BoundExpression MakeBadExpressionForObjectCreation(ObjectCreationExpressionSyntax node, TypeSymbol type, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics, bool wasCompilerGenerated = false)
4738private BoundExpression MakeBadExpressionForObjectCreation(SyntaxNode node, TypeSymbol type, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax? initializerOpt, SyntaxNode? typeSyntax, BindingDiagnosticBag diagnostics, bool wasCompilerGenerated = false)
4740var children = ArrayBuilder<BoundExpression>.GetInstance();
4788private BoundExpression BindInitializerExpressionOrValue(
4840var initializers = ArrayBuilder<BoundExpression>.GetInstance(initializerSyntax.Expressions.Count);
4846BoundExpression boundMemberInitializer = BindInitializerMemberAssignment(
4861private BoundExpression BindInitializerMemberAssignment(
4881BoundExpression boundLeft = objectInitializerMemberBinder.BindObjectInitializerMember(initializer, implicitReceiver, diagnostics);
4892BoundExpression boundRight = BindInitializerExpressionOrValue(
4904var boundExpression = BindValue(memberInitializer, diagnostics, BindValueKind.RValue);
4910private BoundExpression BindObjectInitializerMember(
4915BoundExpression boundMember;
5003ImmutableArray<BoundExpression> arguments = ImmutableArray<BoundExpression>.Empty;
5053foreach (var argument in arguments)
5140private BoundExpression BadObjectInitializerMemberAccess(
5141BoundExpression boundMember,
5181private static void ReportDuplicateObjectMemberInitializers(BoundExpression boundMemberInitializer, HashSet<string> memberNameMap, BindingDiagnosticBag diagnostics)
5212ImmutableArray<BoundExpression> initializers,
5242foreach (var initializer in initializers)
5327var initializerBuilder = ArrayBuilder<BoundExpression>.GetInstance();
5352BoundExpression boundElementInitializer = BindCollectionInitializerElement(elementInitializer, initializerType,
5390private BoundExpression BindCollectionInitializerElement(
5420var boundElementInitializer = BindInitializerExpressionOrValue(elementInitializer, initializerType, BindValueKind.RValue, implicitReceiver.Syntax, diagnostics);
5422BoundExpression result = BindCollectionInitializerElementAddMethod(
5435private BoundExpression BindComplexElementInitializerExpression(
5446var exprBuilder = ArrayBuilder<BoundExpression>.GetInstance();
5467private BoundExpression BindUnexpectedComplexElementInitializer(InitializerExpressionSyntax node, BindingDiagnosticBag diagnostics)
5474private BoundExpression BindCollectionInitializerElementAddMethod(
5476ImmutableArray<BoundExpression> boundElementInitializerExpressions,
5519var addMethodInvocation = collectionInitializerAddMethodBinder.MakeInvocationExpression(
5631protected BoundExpression BindClassCreationExpression(
5642BoundExpression result = null;
5780var childNodes = ArrayBuilder<BoundExpression>.GetInstance();
5803private BoundExpression BindInterfaceCreationExpression(ObjectCreationExpressionSyntax node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics)
5807var result = BindInterfaceCreationExpression(node, type, diagnostics, node.Type, analyzedArguments, node.Initializer, wasTargetTyped: false);
5812private BoundExpression BindInterfaceCreationExpression(SyntaxNode node, NamedTypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
5838private BoundExpression BindComImportCoClassCreationExpression(SyntaxNode node, NamedTypeSymbol interfaceType, NamedTypeSymbol coClassType, BindingDiagnosticBag diagnostics, SyntaxNode typeNode, AnalyzedArguments analyzedArguments, InitializerExpressionSyntax initializerOpt, bool wasTargetTyped)
5876var classCreation = BindClassCreationExpression(
5919private BoundExpression BindNoPiaObjectCreationExpression(
5961private BoundExpression BindTypeParameterCreationExpression(ObjectCreationExpressionSyntax node, TypeParameterSymbol typeParameter, BindingDiagnosticBag diagnostics)
5965var result = BindTypeParameterCreationExpression(node, typeParameter, analyzedArguments, node.Initializer, node.Type, wasTargetTyped: false, diagnostics);
5970private BoundExpression BindTypeParameterCreationExpression(
6291private BoundExpression BindCheckedExpression(CheckedExpressionSyntax node, BindingDiagnosticBag diagnostics)
6300private BoundExpression BindMemberAccess(
6309BoundExpression boundLeft;
6353private BoundExpression BindLeftOfPotentialColorColorMemberAccess(ExpressionSyntax left, BindingDiagnosticBag diagnostics)
6366private BoundExpression BindLeftIdentifierOfPotentialColorColorMemberAccess(IdentifierNameSyntax left, BindingDiagnosticBag diagnostics)
6381var boundValue = BindIdentifier(left, invoked: false, indexed: false, diagnostics: valueDiagnostics);
6411var boundType = BindNamespaceOrType(left, typeDiagnostics);
6461private BoundExpression BindDynamicMemberAccess(
6463BoundExpression boundLeft,
6520/// <see cref="MakeQueryInvocation(CSharpSyntaxNode, BoundExpression, string, TypeSyntax, TypeWithAnnotations, BindingDiagnosticBag, string)"/>.
6532private BoundExpression BindMemberAccessWithBoundLeft(
6534BoundExpression boundLeft,
6617BoundExpression result;
6682BoundExpression tryBindMemberAccessWithBoundNamespaceLeft(
6685BoundExpression boundLeft,
6754BoundExpression tryBindMemberAccessWithBoundTypeLeft(
6756BoundExpression boundLeft,
6806private void WarnOnAccessOfOffDefault(SyntaxNode node, BoundExpression boundLeft, BindingDiagnosticBag diagnostics)
6820private BoundExpression MakeMemberAccessValue(BoundExpression expr, BindingDiagnosticBag diagnostics)
6854private BoundExpression BindInstanceMemberAccess(
6857BoundExpression boundLeft,
6901BoundExpression colorColorValueReceiver = GetValueExpressionIfTypeOrValueReceiver(boundLeft);
6966BoundExpression boundLeft,
7041private BoundExpression BindMemberAccessBadResult(BoundMethodGroup node)
7051private BoundExpression BindMemberAccessBadResult(
7054BoundExpression boundLeft,
7093boundLeft == null ? ImmutableArray<BoundExpression>.Empty : ImmutableArray.Create(BindToTypeForErrorRecovery(boundLeft)),
7123private static void CombineExtensionMethodArguments(BoundExpression receiver, AnalyzedArguments originalArguments, AnalyzedArguments extensionMethodArguments)
7150private BoundExpression BindMemberOfType(
7156BoundExpression left,
7169BoundExpression result;
7234boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty,
7273BoundExpression left,
7378BoundExpression left,
7428protected BoundExpression BindFieldAccess(
7430BoundExpression receiver,
7533BoundExpression expr = new BoundFieldAccess(node, receiver, fieldSymbol, constantValueOpt, resultKind, fieldType, hasErrors: (hasErrors || hasError));
7588private BoundExpression BindPropertyAccess(
7590BoundExpression? receiver,
7609private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics)
7658private BoundExpression BindEventAccess(
7660BoundExpression receiver,
7681private static bool? IsInstanceReceiver(BoundExpression receiver)
7706BoundExpression receiver,
7867private BoundExpression BindElementAccess(ElementAccessExpressionSyntax node, BindingDiagnosticBag diagnostics)
7869BoundExpression receiver = BindExpression(node.Expression, diagnostics: diagnostics, invoked: false, indexed: true);
7873private BoundExpression BindElementAccess(ExpressionSyntax node, BoundExpression receiver, BracketedArgumentListSyntax argumentList, BindingDiagnosticBag diagnostics)
7898private BoundExpression BindElementOrIndexerAccess(ExpressionSyntax node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
7914BoundExpression result = BindElementAccessCore(node, expr, analyzedArguments, BindingDiagnosticBag.Discarded);
7921private BoundExpression BadIndexerExpression(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, DiagnosticInfo errorOpt, BindingDiagnosticBag diagnostics)
7932private BoundExpression BindElementAccessCore(
7934BoundExpression expr,
7967private BoundExpression BindArrayAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics)
8002BoundExpression[] convertedArguments = new BoundExpression[arguments.Arguments.Count];
8006BoundExpression argument = arguments.Arguments[i];
8008BoundExpression index = ConvertToArrayIndex(argument, diagnostics, allowIndexAndRange: rank == 1, out indexOrRangeWellknownType);
8042indexerOrSliceAccess: new BoundArrayAccess(node, receiverPlaceholder, ImmutableArray<BoundExpression>.CastUp(argumentPlaceholders), resultType) { WasCompilerGenerated = true },
8050private BoundExpression ConvertToArrayIndex(BoundExpression index, BindingDiagnosticBag diagnostics, bool allowIndexAndRange, out WellKnownType indexOrRangeWellknownType)
8066var result =
8117private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, WellKnownType wellKnownType, SyntaxNode node, BindingDiagnosticBag diagnostics)
8128var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics);
8138private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, SpecialType specialType, SyntaxNode node, BindingDiagnosticBag diagnostics)
8144var result = TryImplicitConversionToArrayIndex(expr, type, node, attemptDiagnostics);
8155private BoundExpression TryImplicitConversionToArrayIndex(BoundExpression expr, TypeSymbol targetType, SyntaxNode node, BindingDiagnosticBag diagnostics)
8173BoundExpression result = CreateConversion(expr.Syntax, expr, conversion, isCast: false, conversionGroupOpt: null, destination: targetType, diagnostics); // UNDONE: was cast?
8179private BoundExpression BindPointerElementAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
8201ArrayBuilder<BoundExpression> arguments = analyzedArguments.Arguments;
8218BoundExpression index = arguments[0];
8240private BoundExpression BindIndexerAccess(SyntaxNode node, BoundExpression expr, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
8254BoundExpression indexerAccessExpression;
8310private BoundExpression BindIndexedPropertyAccess(BoundPropertyGroup propertyGroup, bool mustHaveAllOptionalParameters, BindingDiagnosticBag diagnostics)
8313var receiver = propertyGroup.ReceiverOpt;
8327ImmutableArray<BoundExpression>.Empty,
8334var result = BindIndexedPropertyAccess(syntax, receiver, properties, arguments, diagnostics);
8340private BoundExpression BindIndexedPropertyAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<PropertySymbol> propertyGroup, AnalyzedArguments arguments, BindingDiagnosticBag diagnostics)
8347var result = BindIndexerOrIndexedPropertyAccess(syntax, receiver, properties, arguments, diagnostics);
8353private BoundExpression BindDynamicIndexer(
8355BoundExpression receiver,
8397private BoundExpression BindIndexerOrIndexedPropertyAccess(
8399BoundExpression receiver,
8410BoundExpression propertyAccess;
8461ImmutableArray<BoundExpression> arguments = BuildArgumentsForErrorRecovery(analyzedArguments, candidates);
8523BoundExpression receiver,
8540var argument = arguments.Arguments[0];
8557out var lengthOrCountAccess, out var indexerOrSliceAccess, out var argumentPlaceholders, diagnostics))
8610[NotNullWhen(true)] out BoundExpression? lengthOrCountAccess,
8611[NotNullWhen(true)] out BoundExpression? indexerOrSliceAccess,
8643[NotNullWhen(true)] out BoundExpression? indexerOrSliceAccess,
8749void makeCall(SyntaxNode syntax, BoundExpression receiver, MethodSymbol method,
8750out BoundExpression indexerOrSliceAccess, out ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders)
8775out BoundExpression lengthOrCountAccess,
9133var receiver = node.ReceiverOpt!;
9338BoundExpression receiver = BindConditionalAccessReceiver(node, diagnostics);
9341var access = conditionalAccessBinder.BindValue(node.WhenNotNull, diagnostics, BindValueKind.RValue);
9433private BoundConditionalAccess GenerateBadConditionalAccessNodeError(ConditionalAccessExpressionSyntax node, BoundExpression receiver, BoundExpression access, BindingDiagnosticBag diagnostics)
9442private BoundExpression BindMemberBindingExpression(MemberBindingExpressionSyntax node, bool invoked, bool indexed, BindingDiagnosticBag diagnostics)
9444BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics);
9446var memberAccess = BindMemberAccessWithBoundLeft(node, receiver, node.Name, node.OperatorToken, invoked, indexed, diagnostics);
9450private BoundExpression BindElementBindingExpression(ElementBindingExpressionSyntax node, BindingDiagnosticBag diagnostics)
9452BoundExpression receiver = GetReceiverForConditionalBinding(node, diagnostics);
9454var memberAccess = BindElementAccess(node, receiver, node.ArgumentList, diagnostics);
9473private BoundExpression GetReceiverForConditionalBinding(ExpressionSyntax binding, BindingDiagnosticBag diagnostics)
9478BoundExpression receiver = this.ConditionalReceiverExpression;
9498private BoundExpression BindConditionalAccessReceiver(ConditionalAccessExpressionSyntax node, BindingDiagnosticBag diagnostics)
9501var receiver = BindRValueWithoutTargetType(receiverSyntax, diagnostics);
Binder\Binder_InterpolatedString.cs (50)
19private BoundExpression BindInterpolatedString(InterpolatedStringExpressionSyntax node, BindingDiagnosticBag diagnostics)
40var builder = ArrayBuilder<BoundExpression>.GetInstance();
90var value = BindValue(interpolation.Expression, diagnostics, BindValueKind.RValue);
97BoundExpression? alignment = null;
263BoundInterpolatedString constructWithData(ImmutableArray<BoundExpression> parts, InterpolatedStringHandlerData? data)
297private static bool AllInterpolatedStringPartsAreStrings(ImmutableArray<BoundExpression> parts)
326var partsArrayBuilder = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance();
330static (BoundUnconvertedInterpolatedString unconvertedInterpolatedString, ArrayBuilder<ImmutableArray<BoundExpression>> partsArrayBuilder) =>
369private BoundBinaryOperator UpdateBinaryOperatorWithInterpolatedContents(BoundBinaryOperator originalOperator, ImmutableArray<ImmutableArray<BoundExpression>> appendCalls, InterpolatedStringHandlerData data, SyntaxNode rootSyntax, BindingDiagnosticBag diagnostics)
373Func<BoundUnconvertedInterpolatedString, int, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> interpolationFactory =
375Func<BoundBinaryOperator, BoundExpression, BoundExpression, (ImmutableArray<ImmutableArray<BoundExpression>>, TypeSymbol), BoundExpression> binaryOperatorFactory =
382static BoundInterpolatedString createInterpolation(BoundUnconvertedInterpolatedString expression, int i, (ImmutableArray<ImmutableArray<BoundExpression>> AppendCalls, TypeSymbol _) arg)
394static BoundBinaryOperator createBinaryOperator(BoundBinaryOperator original, BoundExpression left, BoundExpression right, (ImmutableArray<ImmutableArray<BoundExpression>> _, TypeSymbol @string) arg)
409private BoundExpression BindUnconvertedInterpolatedExpressionToHandlerType(
410BoundExpression unconvertedExpression,
464var partsArrayBuilder = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance();
467static (BoundUnconvertedInterpolatedString unconvertedInterpolatedString, ArrayBuilder<ImmutableArray<BoundExpression>> partsArrayBuilder) =>
486private (ImmutableArray<ImmutableArray<BoundExpression>> AppendCalls, InterpolatedStringHandlerData Data) BindUnconvertedInterpolatedPartsToHandlerType(
488ImmutableArray<ImmutableArray<BoundExpression>> partsArray,
532foreach (var currentPart in parts)
536var value = insert.Value;
567var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(constructorArgumentLength);
584BoundExpression constructorCall;
586var outConstructorCall = MakeConstructorInvocation(interpolatedStringHandlerType, argumentsBuilder, refKindsBuilder, syntax, outConstructorDiagnostics);
598BoundExpression nonOutConstructorCall = MakeConstructorInvocation(interpolatedStringHandlerType, argumentsBuilder, refKindsBuilder, syntax, nonOutConstructorDiagnostics);
671static void populateArguments(SyntaxNode syntax, ImmutableArray<BoundInterpolatedStringArgumentPlaceholder> additionalConstructorArguments, int baseStringLength, int numFormatHoles, NamedTypeSymbol intType, ArrayBuilder<BoundExpression> argumentsBuilder)
682private ImmutableArray<BoundExpression> BindInterpolatedStringParts(BoundUnconvertedInterpolatedString unconvertedInterpolatedString, BindingDiagnosticBag diagnostics)
684ArrayBuilder<BoundExpression>? partsBuilder = null;
688var part = unconvertedInterpolatedString.Parts[i];
691BoundExpression newValue;
706partsBuilder = ArrayBuilder<BoundExpression>.GetInstance(unconvertedInterpolatedString.Parts.Length);
727private (ImmutableArray<ImmutableArray<BoundExpression>> AppendFormatCalls, bool UsesBoolReturn, ImmutableArray<ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>>, int BaseStringLength, int NumFormatHoles) BindInterpolatedStringAppendCalls(
728ImmutableArray<ImmutableArray<BoundExpression>> partsArray,
734return (ImmutableArray<ImmutableArray<BoundExpression>>.Empty, false, ImmutableArray<ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>>.Empty, 0, 0);
739var builderAppendCallsArray = ArrayBuilder<ImmutableArray<BoundExpression>>.GetInstance(partsArray.Length);
740var builderAppendCalls = ArrayBuilder<BoundExpression>.GetInstance(firstPartsLength);
743var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(3);
750foreach (var part in parts)
807var call = MakeInvocationExpression(part.Syntax, implicitBuilderReceiver, methodName, arguments, diagnostics, names: parameterNamesAndLocations, searchExtensionMethodsIfNecessary: false);
847private BoundExpression BindInterpolatedStringHandlerInMemberCall(
848BoundExpression unconvertedString,
849ArrayBuilder<BoundExpression> arguments,
853BoundExpression? receiver,
1041var interpolatedString = BindUnconvertedInterpolatedExpressionToHandlerType(
Binder\Binder_Invocation.cs (66)
20/// This portion of the binder converts an <see cref="ExpressionSyntax"/> into a <see cref="BoundExpression"/>.
24private BoundExpression BindMethodGroup(ExpressionSyntax node, bool invoked, bool indexed, BindingDiagnosticBag diagnostics)
77internal BoundExpression MakeInvocationExpression(
79BoundExpression receiver,
81ImmutableArray<BoundExpression> args,
95var boundExpression = BindInstanceMemberAccess(node, node, receiver, methodName, typeArgs.NullToEmpty().Length, typeArgsSyntax, typeArgs, invoked: true, indexed: false, diagnostics, searchExtensionMethodsIfNecessary);
137BoundExpression result = BindInvocationExpression(
159private BoundExpression BindInvocationExpression(
163BoundExpression result;
180BoundExpression boundExpression = BindMethodGroup(node.Expression, invoked: true, indexed: false, diagnostics: diagnostics);
191private BoundExpression BindArgListOperator(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics, AnalyzedArguments analyzedArguments)
199BoundExpression argument = analyzedArguments.Arguments[i];
239ImmutableArray<BoundExpression> arguments = analyzedArguments.Arguments.ToImmutable();
247private BoundExpression BindInvocationExpression(
251BoundExpression boundExpression,
257BoundExpression result;
304private BoundExpression BindDynamicInvocation(
306BoundExpression expression,
318BoundExpression receiver = methodGroup.ReceiverOpt;
361BoundExpression finalReceiver = ReplaceTypeOrValueReceiver(typeOrValue, useType, diagnostics);
382ImmutableArray<BoundExpression> argArray = BuildArgumentsForDynamicInvocation(arguments, diagnostics);
425private ImmutableArray<BoundExpression> BuildArgumentsForDynamicInvocation(AnalyzedArguments arguments, BindingDiagnosticBag diagnostics)
427var builder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Arguments.Count);
445ImmutableArray<BoundExpression> arguments,
465foreach (var arg in arguments)
511private BoundExpression BindDelegateInvocation(
515BoundExpression boundExpression,
521BoundExpression result;
565private BoundExpression BindMethodGroupInvocation(
576BoundExpression result;
705private BoundExpression BindLocalFunctionInvocationWithDynamicArgument(
752var arg = args[i];
810BoundExpression receiverOpt,
869private void CheckRestrictedTypeReceiver(BoundExpression expression, CSharpCompilation compilation, BindingDiagnosticBag diagnostics)
973foreach (var argument in analyzedArguments.Arguments)
1023var receiver = ReplaceTypeOrValueReceiver(methodGroup.Receiver, !method.RequiresInstanceReceiver && !invokedAsExtensionMethod, diagnostics);
1042BoundExpression receiverArgument = analyzedArguments.Argument(0);
1164private BoundExpression GetDefaultParameterSpecialNoConversion(SyntaxNode syntax, ParameterSymbol parameter, BindingDiagnosticBag diagnostics)
1181BoundExpression? defaultValue = null;
1267ArrayBuilder<BoundExpression> argumentsBuilder,
1346BoundExpression bindDefaultArgument(SyntaxNode syntax, ParameterSymbol parameter, Symbol? containingMember, bool enableCallerInfo, BindingDiagnosticBag diagnostics, ArrayBuilder<BoundExpression> argumentsBuilder, int argumentsCount, ImmutableArray<int> argsToParamsOpt)
1373BoundExpression defaultValue;
1395var argument = argumentsBuilder[argumentIndex];
1471internal bool CheckImplicitThisCopyInReadOnlyMember(BoundExpression receiver, MethodSymbol method, BindingDiagnosticBag diagnostics)
1519private BoundExpression ReplaceTypeOrValueReceiver(BoundExpression receiver, bool useType, BindingDiagnosticBag diagnostics)
1544var value = q.Value;
1545var replaced = ReplaceTypeOrValueReceiver(value, useType, diagnostics);
1553private static BoundExpression GetValueExpressionIfTypeOrValueReceiver(BoundExpression receiver)
1577private static NamedTypeSymbol GetDelegateType(BoundExpression expr)
1593BoundExpression receiver,
1602ImmutableArray<BoundExpression> args;
1644private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<MethodSymbol> methods)
1664private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, ImmutableArray<PropertySymbol> properties)
1684private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments, IEnumerable<ImmutableArray<ParameterSymbol>> parameterListList)
1688ArrayBuilder<BoundExpression> newArguments = ArrayBuilder<BoundExpression>.GetInstance(argumentCount);
1692var argument = newArguments[i];
1825private ImmutableArray<BoundExpression> BuildArgumentsForErrorRecovery(AnalyzedArguments analyzedArguments)
1832BoundExpression expr,
1868private bool TryBindNameofOperator(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics, out BoundExpression result)
1884private BoundExpression BindNameofOperatorInternal(InvocationExpressionSyntax node, BindingDiagnosticBag diagnostics)
1888var boundArgument = BindExpression(argument, diagnostics);
2006private BoundFunctionPointerInvocation BindFunctionPointerInvocation(SyntaxNode node, BoundExpression boundExpression, AnalyzedArguments analyzedArguments, BindingDiagnosticBag diagnostics)
Binder\Binder_Operators.cs (124)
21private BoundExpression BindCompoundAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics)
25BoundExpression left = BindValue(node.Left, diagnostics, GetBinaryAssignmentKind(node.Kind()));
27BoundExpression right = BindValue(node.Right, diagnostics, BindValueKind.RValue);
193BoundExpression rightConverted = CreateConversion(right, best.RightConversion, bestSignature.RightType, diagnostics);
201BoundExpression finalConversion = GenerateConversionForAssignment(leftType, finalPlaceholder, diagnostics,
244var leftConversion = CreateConversion(node, leftPlaceholder, best.LeftConversion, isCast: false, conversionGroupOpt: null, best.Signature.LeftType, diagnostics);
258private BoundExpression BindEventAssignment(AssignmentExpressionSyntax node, BoundEventAccess left, BoundExpression right, BinaryOperatorKind opKind, BindingDiagnosticBag diagnostics)
265BoundExpression receiverOpt = left.ReceiverOpt;
281BoundExpression argument = CreateConversion(right, argumentConversion, delegateType, diagnostics);
343private static bool IsLegalDynamicOperand(BoundExpression operand)
366private BoundExpression BindDynamicBinaryOperator(
369BoundExpression left,
370BoundExpression right,
450private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
469BoundExpression result = BindExpression(current, diagnostics);
495BoundExpression left = CheckValue(result, bindValueKind, diagnostics);
496BoundExpression right = BindValue(syntaxNode.Right, diagnostics, BindValueKind.RValue);
497BoundExpression boundOp = BindSimpleBinaryOperator(syntaxNode, diagnostics, left, right, leaveUnconvertedIfInterpolatedString: true);
505private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics,
506BoundExpression left, BoundExpression right, bool leaveUnconvertedIfInterpolatedString)
631BoundExpression resultLeft = left;
632BoundExpression resultRight = right;
668private bool BindSimpleBinaryOperatorParts(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, BinaryOperatorKind kind,
725private BoundExpression RebindSimpleBinaryOperatorAsConverted(BoundBinaryOperator unconvertedBinaryOperator, BindingDiagnosticBag diagnostics)
732var result = doRebind(diagnostics, unconvertedBinaryOperator);
735BoundExpression doRebind(BindingDiagnosticBag diagnostics, BoundBinaryOperator? current)
747BoundExpression? left = null;
750var right = current.Right switch
767private static void ReportUnaryOperatorError(CSharpSyntaxNode node, BindingDiagnosticBag diagnostics, string operatorName, BoundExpression operand, LookupResultKind resultKind)
782private void ReportAssignmentOperatorError(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics, BoundExpression left, BoundExpression right, LookupResultKind resultKind)
800private void ReportBinaryOperatorError(ExpressionSyntax node, BindingDiagnosticBag diagnostics, SyntaxToken operatorToken, BoundExpression left, BoundExpression right, LookupResultKind resultKind)
858private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
881BoundExpression left = BindRValueWithoutTargetType(child, diagnostics);
886BoundExpression right = BindRValueWithoutTargetType(binary.Right, diagnostics);
895private BoundExpression BindConditionalLogicalOperator(BinaryExpressionSyntax node, BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics)
967var resultLeft = CreateConversion(left, best.LeftConversion, signature.LeftType, diagnostics);
968var resultRight = CreateConversion(right, best.RightConversion, signature.RightType, diagnostics);
1020private bool IsValidDynamicCondition(BoundExpression left, bool isNegative, BindingDiagnosticBag diagnostics, out MethodSymbol userDefinedOperator)
1278BoundExpression left,
1279BoundExpression right,
1355private bool IsTypelessExpressionAllowedInBinaryOperator(BinaryOperatorKind kind, BoundExpression left, BoundExpression right)
1379BoundExpression operand,
1629internal static TypeSymbol GetEnumType(BinaryOperatorKind kind, BoundExpression left, BoundExpression right)
1679BoundExpression left,
1680BoundExpression right,
1697BoundExpression newLeftOperand = CreateConversion(left, underlyingType, diagnostics);
1698BoundExpression newRightOperand = CreateConversion(right, underlyingType, diagnostics);
1754BoundExpression left,
1755BoundExpression right,
1908private static ConstantValue? TryFoldingNullableEquality(BinaryOperatorKind kind, BoundExpression left, BoundExpression right)
2229private BoundExpression BindIncrementOperator(CSharpSyntaxNode node, ExpressionSyntax operandSyntax, SyntaxToken operatorToken, BindingDiagnosticBag diagnostics)
2233BoundExpression operand = BindToNaturalType(BindValue(operandSyntax, diagnostics, BindValueKind.IncrementDecrement), diagnostics);
2306BoundExpression resultConversion = GenerateConversionForAssignment(operandType, resultPlaceholder, diagnostics, ConversionForAssignmentFlags.IncrementAssignment);
2327var operandConversion = CreateConversion(node, operandPlaceholder, best.Conversion, isCast: false, conversionGroupOpt: null, best.Signature.OperandType, diagnostics);
2408private BoundExpression BindSuppressNullableWarningExpression(PostfixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
2412var expr = BindExpression(node.Operand, diagnostics);
2432private BoundExpression BindPointerIndirectionExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
2434BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics);
2443private static void BindPointerIndirectionExpressionInternal(CSharpSyntaxNode node, BoundExpression operand, BindingDiagnosticBag diagnostics, out TypeSymbol pointedAtType, out bool hasErrors)
2479private BoundExpression BindAddressOfExpression(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
2481BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, BindValueKind.AddressOf), diagnostics);
2531internal bool IsMoveableVariable(BoundExpression expr, out Symbol accessedLocalOrParameterOpt)
2544BoundExpression receiver;
2645BoundExpression underlyingExpr = ((BoundPointerElementAccess)expr).Expression;
2664private BoundExpression BindUnaryOperator(PrefixUnaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
2666BoundExpression operand = BindToNaturalType(BindValue(node.Operand, diagnostics, GetUnaryAssignmentKind(node.Kind())), diagnostics);
2671private void ReportSuppressionIfNeeded(BoundExpression expr, BindingDiagnosticBag diagnostics)
2680private BoundExpression BindUnaryOperatorCore(CSharpSyntaxNode node, string operatorText, BoundExpression operand, BindingDiagnosticBag diagnostics)
2745var resultOperand = CreateConversion(operand.Syntax, operand, best.Conversion, isCast: false, conversionGroupOpt: null, signature.OperandType, diagnostics);
2767BoundExpression operand,
2772BoundExpression newOperand = CreateConversion(operand, underlyingType, diagnostics);
2802BoundExpression operand,
3023private BoundLiteral BindIntegralMinValConstants(PrefixUnaryExpressionSyntax node, BoundExpression operand, BindingDiagnosticBag diagnostics)
3112private bool IsOperandErrors(CSharpSyntaxNode node, ref BoundExpression operand, BindingDiagnosticBag diagnostics)
3174private BoundExpression BindIsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
3177var operand = BindRValueWithoutTargetType(node.Left, diagnostics);
3199var convertedExpression = BindExpressionForPattern(operand.Type, node.Right, ref hasErrors, isPatternDiagnostics, out var constantValueOpt, out var wasExpression, out _);
3616private BoundExpression BindAsOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
3618var operand = BindRValueWithoutTargetType(node.Left, diagnostics);
3703BoundExpression operandConversion;
3893private BoundExpression GenerateNullCoalescingBadBinaryOpsError(BinaryExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics)
3903private BoundExpression BindNullCoalescingOperator(BinaryExpressionSyntax node, BindingDiagnosticBag diagnostics)
3905var leftOperand = BindValue(node.Left, diagnostics, BindValueKind.RValue);
3907var rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue);
3973var leftConversion = CreateConversion(node, leftPlaceholder,
3995var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType0, diagnostics);
4011var convertedRightOperand = CreateConversion(rightOperand, rightConversion, optLeftType, diagnostics);
4063var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, optRightType, diagnostics);
4077var leftConversion = CreateConversion(node, leftPlaceholder, leftConversionClassification, isCast: false, conversionGroupOpt: null, optRightType, diagnostics);
4090private BoundExpression BindNullCoalescingAssignmentOperator(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics)
4094BoundExpression leftOperand = BindValue(node.Left, diagnostics, BindValueKind.CompoundAssignment);
4096BoundExpression rightOperand = BindValue(node.Right, diagnostics, BindValueKind.RValue);
4129var convertedRightOperand = CreateConversion(rightOperand, underlyingRightConversion, underlyingLeftType, diagnostics);
4143var convertedRightOperand = CreateConversion(rightOperand, rightConversion, leftType, diagnostics);
4151private BoundExpression GenerateNullCoalescingAssignmentBadBinaryOpsError(AssignmentExpressionSyntax node, BoundExpression leftOperand, BoundExpression rightOperand, BindingDiagnosticBag diagnostics)
4193private BoundExpression BindConditionalOperator(ConditionalExpressionSyntax node, BindingDiagnosticBag diagnostics)
4220private BoundExpression BindValueConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics)
4222BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics);
4223BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue);
4224BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue);
4266private BoundExpression BindRefConditionalOperator(ConditionalExpressionSyntax node, ExpressionSyntax whenTrue, ExpressionSyntax whenFalse, BindingDiagnosticBag diagnostics)
4268BoundExpression condition = BindBooleanExpression(node.Condition, diagnostics);
4269BoundExpression trueExpr = BindValue(whenTrue, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation);
4270BoundExpression falseExpr = BindValue(whenFalse, diagnostics, BindValueKind.RValue | BindValueKind.RefersToLocation);
4303private void ValidateRefConditionalOperator(SyntaxNode node, BoundExpression trueExpr, BoundExpression falseExpr, BindingDiagnosticBag diagnostics)
4329private static ConstantValue FoldConditionalOperator(BoundExpression condition, BoundExpression trueExpr, BoundExpression falseExpr)
Binder\Binder_Patterns.cs (36)
18private BoundExpression BindIsPatternExpression(IsPatternExpressionSyntax node, BindingDiagnosticBag diagnostics)
22BoundExpression expression = BindRValueWithoutTargetType(node.Expression, diagnostics);
45private BoundExpression MakeIsPatternExpression(
47BoundExpression expression,
143private BoundExpression BindSwitchExpression(SwitchExpressionSyntax node, BindingDiagnosticBag diagnostics)
154internal virtual BoundExpression BindSwitchExpressionCore(
215BoundExpression? indexerAccess = null;
298BoundExpression? indexerAccess;
299BoundExpression? lengthAccess;
334out Symbol? variableSymbol, out BoundExpression? variableAccess);
349indexerAccess: out _, out var lengthAccess, receiverPlaceholder: out _, argumentPlaceholder: out _);
355out BoundExpression indexerAccess, out BoundExpression lengthAccess, out BoundListPatternReceiverPlaceholder? receiverPlaceholder, out BoundListPatternIndexPlaceholder argumentPlaceholder)
370lengthAccess = new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType(), hasErrors: true) { WasCompilerGenerated = true };
424var convertedExpression = BindExpressionOrTypeForPattern(inputType, innerExpression, ref hasErrors, diagnostics, out var constantValueOpt, out bool wasExpression, out Conversion patternConversion);
497private BoundExpression BindExpressionOrTypeForPattern(
507BoundExpression expression = BindTypeOrRValue(patternExpression, diagnostics);
525private BoundExpression BindExpressionForPattern(
535var expression = BindExpression(patternExpression, diagnostics: diagnostics, invoked: false, indexed: false);
542private BoundExpression BindExpressionForPatternContinued(
543BoundExpression expression,
551BoundExpression convertedExpression = ConvertPatternExpression(
578internal BoundExpression ConvertPatternExpression(
581BoundExpression expression,
587BoundExpression convertedExpression;
680BoundExpression operand = conversion.Operand;
838hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
864out BoundExpression? variableAccess)
900BoundExpression receiver = SynthesizeReceiver(designation, expressionVariableField, diagnostics);
991BoundExpression deconstruct = MakeDeconstructInvocationExpression(
1025ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess);
1042BoundExpression deconstruct,
1352variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
1387BoundExpression deconstruct = MakeDeconstructInvocationExpression(
1540BoundExpression boundMember = BindInstanceMemberAccess(
1622BoundExpression value = BindExpressionForPattern(inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out Conversion patternConversion);
Binder\Binder_Query.cs (53)
24internal BoundExpression BindQuery(QueryExpressionSyntax node, BindingDiagnosticBag diagnostics)
29var boundFromExpression = BindLeftOfPotentialColorColorMemberAccess(fromClause.Expression, diagnostics);
53BoundExpression? cast = null;
69BoundExpression result = BindQueryInternal1(state, diagnostics);
165private BoundExpression BindQueryInternal1(QueryTranslationState state, BindingDiagnosticBag diagnostics)
184private BoundExpression BindQueryInternal2(QueryTranslationState state, BindingDiagnosticBag diagnostics)
201var result = state.fromExpression;
204BoundExpression? unoptimized = FinalTranslation(state, BindingDiagnosticBag.Discarded);
217private BoundExpression FinalTranslation(QueryTranslationState state, BindingDiagnosticBag diagnostics)
230var e = state.fromExpression;
253var e = state.fromExpression;
262BoundExpression lambdaRight = MakeQueryUnboundLambda(state.RangeVariableMap(), x, v, diagnostics.AccumulatesDependencies);
274BoundExpression? unoptimizedForm = null;
315var arguments = ArrayBuilder<BoundExpression>.GetInstance();
317var lastArgument = arguments[n - 1];
380var inExpression = BindRValueWithoutTargetType(join.InExpression, diagnostics);
390BoundExpression? castInvocation = null;
587BoundExpression collectionSelectorLambda;
626BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null;
671BoundExpression? castInvocation = (from.Type != null) ? ExtractCastInvocation(invocation) : null;
676private static BoundExpression? ExtractCastInvocation(BoundCall invocation)
694var construction = MakePair(node, x1.Name, x1Expression, x2.Name, x2Expression, state, d);
730var yExpression = lambdaBodyBinder.BindRValueWithoutTargetType(let.Expression, d);
744var construction = MakePair(let, x.Name, xExpression, let.Identifier.ValueText, yExpression, state, d);
767private BoundBlock CreateLambdaBlockForQueryClause(ExpressionSyntax expression, BoundExpression result, BindingDiagnosticBag diagnostics)
780BoundExpression expression,
782BoundExpression? queryInvocation = null,
783BoundExpression? castInvocation = null,
784BoundExpression? unoptimizedForm = null)
796private BoundExpression MakePair(CSharpSyntaxNode node, string field1Name, BoundExpression field1Value, string field2Name, BoundExpression field2Value, QueryTranslationState state, BindingDiagnosticBag diagnostics)
816AnonymousTypeField createField(string fieldName, BoundExpression fieldValue) =>
820private TypeSymbol TypeOrError(BoundExpression e)
836BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue);
846BoundExpression boundExpression = lambdaBodyBinder.BindValue(expression, diagnostics, BindValueKind.RValue);
873protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, BoundExpression arg, BindingDiagnosticBag diagnostics
886protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics
899protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, TypeSyntax typeArgSyntax, TypeWithAnnotations typeArg, BindingDiagnosticBag diagnostics
905return MakeQueryInvocation(node, receiver, methodName, new SeparatedSyntaxList<TypeSyntax>(new SyntaxNodeOrTokenList(typeArgSyntax, 0)), ImmutableArray.Create(typeArg), ImmutableArray<BoundExpression>.Empty, diagnostics
912protected BoundCall MakeQueryInvocation(CSharpSyntaxNode node, BoundExpression receiver, string methodName, SeparatedSyntaxList<TypeSyntax> typeArgsSyntax, ImmutableArray<TypeWithAnnotations> typeArgs, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics
922var ultimateReceiver = receiver;
1000var checkedUltimateReceiver = CheckValue(ultimateReceiver, BindValueKind.RValue, diagnostics);
1020static BoundExpression updateUltimateReceiver(BoundExpression receiver, BoundExpression originalUltimateReceiver, BoundExpression replacementUltimateReceiver)
1039protected BoundExpression MakeConstruction(CSharpSyntaxNode node, NamedTypeSymbol toCreate, ImmutableArray<BoundExpression> args, BindingDiagnosticBag diagnostics)
1043var 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.IsExtensionMethodInvocation ? 1 : 0);
Binder\Binder_Statements.cs (80)
239BoundExpression argument = (node.Expression == null)
390private BoundExpression BindThrownExpression(ExpressionSyntax exprSyntax, BindingDiagnosticBag diagnostics, ref bool hasErrors)
392var boundExpr = BindValue(exprSyntax, diagnostics, BindValueKind.RValue);
433BoundExpression boundExpr = null;
512var expression = BindLabel(node.Expression, diagnostics);
535var value = BindRValueWithoutTargetType(node.Expression, BindingDiagnosticBag.Discarded);
648var expression = BindRValueWithoutTargetType(syntax, diagnostics);
675private void CheckForUnobservedAwaitable(BoundExpression expression, BindingDiagnosticBag diagnostics)
751internal MethodSymbol TryFindDisposePatternMethod(BoundExpression expr, SyntaxNode syntaxNode, bool hasAwait, BindingDiagnosticBag diagnostics)
864internal BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, RefKind refKind, EqualsValueClauseSyntax initializer,
874protected BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, ExpressionSyntax initializer, BindValueKind valueKind, CSharpSyntaxNode errorSyntax)
894BoundExpression value = BindValue(initializer, diagnostics, valueKind);
895BoundExpression expression = value.Kind is BoundKind.UnboundLambda or BoundKind.MethodGroup ?
1015BoundExpression initializerOpt;
1109ImmutableArray<BoundExpression> arguments = BindDeclaratorArguments(declarator, localDiagnostics);
1137var invalidDimensions = ArrayBuilder<BoundExpression>.GetInstance();
1144var size = args.binder.BindArrayDimension(expressionSyntax, args.diagnostics, ref _);
1181internal ImmutableArray<BoundExpression> BindDeclaratorArguments(VariableDeclaratorSyntax declarator, BindingDiagnosticBag diagnostics)
1190var arguments = default(ImmutableArray<BoundExpression>);
1231private bool IsValidFixedVariableInitializer(TypeSymbol declType, ref BoundExpression initializerOpt, BindingDiagnosticBag diagnostics)
1329private MethodSymbol GetFixedPatternMethodOpt(BoundExpression initializer, BindingDiagnosticBag additionalDiagnostics)
1362private BoundExpression GetFixedLocalCollectionInitializer(
1363BoundExpression initializer,
1380BoundExpression elementConversion;
1411private BoundExpression BindAssignment(AssignmentExpressionSyntax node, BindingDiagnosticBag diagnostics)
1431var op1 = BindValue(node.Left, diagnostics, lhsKind);
1435var op2 = BindValue(rhsExpr, diagnostics, rhsKind);
1447private static BindValueKind GetRequiredRHSValueKindForRefAssignment(BoundExpression boundLeft)
1466private BoundExpression InferTypeForDiscardAssignment(BoundDiscardExpression op1, BoundExpression op2, BindingDiagnosticBag diagnostics)
1484BoundExpression op1,
1485BoundExpression op2,
1498var conversion = GenerateConversionForAssignment(op1.Type, op2, diagnostics, isRef ? ConversionForAssignmentFlags.RefAssignment : ConversionForAssignmentFlags.None);
1539BoundExpression op1,
1540BoundExpression op2,
1608static object getName(BoundExpression expr)
1631internal static PropertySymbol GetPropertySymbol(BoundExpression expr, out BoundExpression receiver, out SyntaxNode propertySyntax)
1708internal static Symbol? GetIndexerOrImplicitIndexerSymbol(BoundExpression? e)
1767private static bool AccessingAutoPropertyFromConstructor(BoundExpression receiver, PropertySymbol propertySymbol, Symbol fromMember)
1792private TypeSymbol GetAccessThroughType(BoundExpression receiver)
1811private BoundExpression BindPossibleArrayInitializer(
1824BoundExpression result;
1829ImmutableArray<BoundExpression>.Empty);
1907internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None)
1910internal BoundExpression GenerateConversionForAssignment(TypeSymbol targetType, BoundExpression expression, BindingDiagnosticBag diagnostics, out Conversion conversion, ConversionForAssignmentFlags flags = ConversionForAssignmentFlags.None)
2267BoundExpression operand,
2382void tryConversion(BoundExpression expr, ref bool reportedError, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2467ImmutableArray<BoundExpression> tupleArguments,
2481var argument = tupleArguments[i];
2494var condition = BindBooleanExpression(node.Condition, diagnostics);
2502internal BoundExpression BindBooleanExpression(ExpressionSyntax node, BindingDiagnosticBag diagnostics)
2538var expr = BindValue(node, diagnostics, BindValueKind.RValue);
2617BoundExpression resultOperand = CreateConversion(
2890BoundExpression arg = null;
3025internal BoundExpression CreateReturnConversion(
3028BoundExpression argument,
3140BoundExpression boundFilter = null;
3230BoundExpression exceptionSource = null;
3248private BoundExpression BindCatchFilter(CatchFilterClauseSyntax filter, BindingDiagnosticBag diagnostics)
3252BoundExpression boundFilter = this.BindBooleanExpression(filter.FilterExpression, diagnostics);
3315private static bool IsValidStatementExpression(SyntaxNode syntax, BoundExpression expression)
3345internal BoundBlock CreateBlockFromExpression(CSharpSyntaxNode node, ImmutableArray<LocalSymbol> locals, RefKind refKind, BoundExpression expression, ExpressionSyntax expressionSyntax, BindingDiagnosticBag diagnostics)
3434private static bool IsValidExpressionBody(SyntaxNode expressionSyntax, BoundExpression expression)
3475BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind);
3491BoundExpression expression = bodyBinder.BindValue(expressionSyntax, diagnostics, requiredValueKind);
3495public BoundBlock CreateBlockFromExpression(ExpressionSyntax body, BoundExpression expression, BindingDiagnosticBag diagnostics)
3605BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics);
3671BoundExpression initializerInvocation = GetBinder(initializer).BindConstructorInitializer(initializer.ArgumentList, (MethodSymbol)this.ContainingMember(), diagnostics);
3682BoundExpression? initializerInvocation;
3703internal static BoundExpression? BindImplicitConstructorInitializer(
3858BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true };
3863arguments: ImmutableArray<BoundExpression>.Empty,
3902BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true };
3903BoundExpression argument = new BoundParameter(syntax, constructor.Parameters[0]);
3999internal PatternLookupResult PerformPatternMethodLookup(BoundExpression receiver, string methodName,
4008var boundAccess = BindInstanceMemberAccess(
4033var patternMethodCall = BindMethodGroupInvocation(
Binder\Binder_TupleOperators.cs (32)
26BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics)
30BoundExpression convertedLeft = ApplyConvertedTypes(left, operators, isRight: false, diagnostics);
31BoundExpression convertedRight = ApplyConvertedTypes(right, operators, isRight: true, diagnostics);
38private BoundExpression ApplyConvertedTypes(BoundExpression expr, TupleBinaryOperatorInfo @operator, bool isRight, BindingDiagnosticBag diagnostics)
54ImmutableArray<BoundExpression> arguments = tuple.Arguments;
58var builder = ArrayBuilder<BoundExpression>.GetInstance(length);
83BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics)
98BoundExpression comparison = BindSimpleBinaryOperator(node, diagnostics, left, right, leaveUnconvertedIfInterpolatedString: false);
107out BoundExpression conversionIntoBoolOperator, out BoundValuePlaceholder conversionIntoBoolOperatorPlaceholder,
126out BoundExpression conversionForBool, out BoundValuePlaceholder conversionForBoolPlaceholder, out UnaryOperatorSignature boolOperator)
160BoundExpression comparisonResult = new BoundTupleOperandPlaceholder(node, type);
180BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics)
203BoundExpression left, BoundExpression right, BindingDiagnosticBag diagnostics)
229(ImmutableArray<BoundExpression> leftParts, ImmutableArray<string> leftNames) = GetTupleArgumentsOrPlaceholders(left);
230(ImmutableArray<BoundExpression> rightParts, ImmutableArray<string> rightNames) = GetTupleArgumentsOrPlaceholders(right);
265private static void ReportNamesMismatchesIfAny(BoundExpression left, BoundExpression right,
325internal static BoundExpression GiveTupleTypeToDefaultLiteralIfNeeded(BoundExpression expr, TypeSymbol targetType)
336private static bool IsTupleBinaryOperation(BoundExpression left, BoundExpression right)
349private static int GetTupleCardinality(BoundExpression expr)
375private static (ImmutableArray<BoundExpression> Elements, ImmutableArray<string> Names) GetTupleArgumentsOrPlaceholders(BoundExpression expr)
384ImmutableArray<BoundExpression> placeholders = tupleType.TupleElementTypesWithAnnotations
385.SelectAsArray((t, s) => (BoundExpression)new BoundTupleOperandPlaceholder(s, t.Type), expr.Syntax);
396ImmutableArray<BoundExpression> elements, ImmutableArray<string> names,
Binder\ForEachLoopBinder.cs (21)
176BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics);
209BoundExpression collectionExpr = originalBinder.GetBinder(_syntax.Expression).BindRValueWithoutTargetType(_syntax.Expression, diagnostics);
254BoundExpression iterationErrorExpression = null;
479BoundExpression elementConversion = CreateConversion(_syntax, elementPlaceholder, elementConversionClassification, isCast: false, conversionGroupOpt: null, iterationVariableType.Type, createConversionDiagnostics);
534BoundExpression convertedCollectionExpression = CreateConversion(collectionExpr.Syntax, collectionExpr, collectionConversionClassification, isCast: false, conversionGroupOpt: null, builder.CollectionType, diagnostics);
609BoundExpression collectionExpr = this.GetBinder(collectionSyntax).BindValue(collectionSyntax, diagnostics, BindValueKind.RValue);
616private bool GetEnumeratorInfoAndInferCollectionElementType(ref ForEachEnumeratorInfo.Builder builder, ref BoundExpression collectionExpr, BindingDiagnosticBag diagnostics, out TypeWithAnnotations inferredType)
645private BoundExpression UnwrapCollectionExpressionIfNullable(BoundExpression collectionExpr, BindingDiagnosticBag diagnostics)
701private bool GetEnumeratorInfo(ref ForEachEnumeratorInfo.Builder builder, ref BoundExpression collectionExpr, BindingDiagnosticBag diagnostics)
746private EnumeratorResult GetEnumeratorInfo(ref ForEachEnumeratorInfo.Builder builder, ref BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics)
787var unwrappedCollectionExpr = UnwrapCollectionExpressionIfNullable(collectionExpr, diagnostics);
844EnumeratorResult createPatternBasedEnumeratorResult(ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics)
869private EnumeratorResult SatisfiesIEnumerableInterfaces(ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, BindingDiagnosticBag diagnostics, TypeSymbol unwrappedCollectionExprType)
999private bool ReportConstantNullCollectionExpr(BoundExpression collectionExpr, BindingDiagnosticBag diagnostics)
1010private void GetDisposalInfoForEnumerator(ref ForEachEnumeratorInfo.Builder builder, BoundExpression expr, bool isAsync, BindingDiagnosticBag diagnostics)
1031var argsBuilder = ArrayBuilder<BoundExpression>.GetInstance(patternDisposeMethod.ParameterCount);
1118private bool SatisfiesGetEnumeratorPattern(ref ForEachEnumeratorInfo.Builder builder, BoundExpression collectionExpr, bool isAsync, bool viaExtensionMethod, BindingDiagnosticBag diagnostics)
1288private MethodArgumentInfo FindForEachPatternMethodViaExtension(BoundExpression collectionExpr, string methodName, BindingDiagnosticBag diagnostics)
1713private MethodArgumentInfo BindDefaultArguments(MethodSymbol method, BoundExpression extensionReceiverOpt, bool expanded, SyntaxNode syntax, BindingDiagnosticBag diagnostics, bool assertMissingParametersAreOptional = true)
1722var argsBuilder = ArrayBuilder<BoundExpression>.GetInstance(method.ParameterCount);
Binder\Semantics\Conversions\ConversionsBase.cs (24)
74protected abstract Conversion GetInterpolatedStringConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo);
89public Conversion ClassifyImplicitConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
274public Conversion ClassifyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast = false)
366private Conversion ClassifyConversionFromExpressionForCast(BoundExpression source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
532public Conversion ClassifyStandardConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
621private Conversion ClassifyStandardImplicitConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
755private Conversion GetImplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
840private Conversion GetExplicitUserDefinedConversion(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
992private Conversion ClassifyImplicitBuiltInConversionFromExpression(BoundExpression sourceExpression, TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1037var innerExpression = ((BoundExpressionWithNullability)sourceExpression).Expression;
1102private Conversion GetSwitchExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1131private Conversion GetConditionalExpressionConversion(BoundExpression source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1149private static Conversion ClassifyNullLiteralConversion(BoundExpression source, TypeSymbol destination)
1188private static Conversion ClassifyImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination)
1274internal static bool HasImplicitConstantExpressionConversion(BoundExpression source, TypeSymbol destination)
1326private Conversion ClassifyExplicitOnlyConversionFromExpression(BoundExpression sourceExpression, TypeSymbol destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast)
1366private static bool HasImplicitEnumerationConversion(BoundExpression source, TypeSymbol destination)
1565private static bool HasAnonymousFunctionConversion(BoundExpression source, TypeSymbol destination)
1779public Conversion ClassifyImplicitExtensionMethodThisArgConversion(BoundExpression sourceExpressionOpt, TypeSymbol sourceType, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1813(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) =>
2132private delegate Conversion ClassifyConversionFromExpressionDelegate(ConversionsBase conversions, BoundExpression sourceExpression, TypeWithAnnotations destination, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forCast);
2147(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast)
2165(ConversionsBase conversions, BoundExpression s, TypeWithAnnotations d, bool isChecked, ref CompoundUseSiteInfo<AssemblySymbol> u, bool forCast) =>
2197var argument = arguments[i];
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (31)
20public void BinaryOperatorOverloadResolution(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
32internal void BinaryOperatorOverloadResolution_EasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result)
51BoundExpression left,
52BoundExpression right,
211BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo,
323private void GetDelegateOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right,
453BoundExpression nonDelegate = leftDelegate ? right : left;
464private void GetEnumOperation(BinaryOperatorKind kind, TypeSymbol enumType, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> operators)
589private void GetEnumOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> results)
676BoundExpression left,
677BoundExpression right,
707private void GetAllBuiltInOperators(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
745static bool useOnlyReferenceEquality(Conversions conversions, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
754static bool isUtf8ByteRepresentation(BoundExpression value)
769BoundExpression left,
770BoundExpression right,
832BoundExpression left,
833BoundExpression right,
1036BoundExpression left,
1037BoundExpression right,
1101BoundExpression left,
1102BoundExpression right,
1154private BetterResult BetterOperator(BinaryOperatorSignature op1, BinaryOperatorSignature op2, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\Operators\UnaryOperatorOverloadResolution.cs (9)
23public void UnaryOperatorOverloadResolution(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, UnaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
65BoundExpression operand,
129BoundExpression operand,
181private BetterResult BetterOperator(UnaryOperatorSignature op1, UnaryOperatorSignature op2, BoundExpression operand, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
239private void GetAllBuiltInOperators(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
270private bool CandidateOperators(bool isChecked, ArrayBuilder<UnaryOperatorSignature> operators, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
290private void GetEnumOperations(UnaryOperatorKind kind, BoundExpression operand, ArrayBuilder<UnaryOperatorSignature> operators)
321private static UnaryOperatorSignature? GetPointerOperation(UnaryOperatorKind kind, BoundExpression operand)
345private bool GetUserDefinedOperators(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (24)
96internal abstract TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr);
102internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr)
137private readonly ImmutableArray<BoundExpression> _arguments;
271ImmutableArray<BoundExpression> arguments,// Required; in scenarios like method group conversions where there are
320ImmutableArray<BoundExpression> arguments,
584BoundExpression argument = _arguments[arg];
592private void MakeExplicitParameterTypeInferences(BoundExpression argument, TypeWithAnnotations target, ExactOrBoundsKind kind, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
660var sourceArgument = sourceArguments[i];
780var argument = _arguments[arg];
785private void MakeOutputTypeInferences(Binder binder, BoundExpression argument, TypeWithAnnotations formalType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
828var sourceArgument = sourceArguments[i];
891private static bool DoesInputTypeContain(BoundExpression argument, TypeSymbol formalParameterType, TypeParameterSymbol typeParameter)
927private bool HasUnfixedParamInInputType(BoundExpression pSource, TypeSymbol pDest)
946private static bool DoesOutputTypeContain(BoundExpression argument, TypeSymbol formalParameterType,
987private bool HasUnfixedParamInOutputType(BoundExpression argument, TypeSymbol formalParameterType)
1028var argument = _arguments[iArg];
1250private void OutputTypeInference(Binder binder, BoundExpression expression, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1283private bool InferredReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1319private bool MethodGroupReturnTypeInference(Binder binder, BoundExpression source, TypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1424private void ExplicitParameterTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1479private void ExplicitReturnTypeInference(BoundExpression source, TypeWithAnnotations target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2854private TypeWithAnnotations InferReturnType(BoundExpression source, NamedTypeSymbol target, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2998ImmutableArray<BoundExpression> arguments,
3042var argument = _arguments[0];
Binder\Semantics\OverloadResolution\OverloadResolution.cs (20)
120BoundExpression receiver,
143BoundExpression receiverOpt,
160BoundExpression receiver,
232BoundExpression receiver,
362BoundExpression receiverOpt) where TMember : Symbol
1672ArrayBuilder<BoundExpression> arguments,
1711ArrayBuilder<BoundExpression> arguments,
2138ArrayBuilder<BoundExpression> arguments,
2202private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
2354private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, TypeSymbol t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2369BoundExpression node,
2424private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, Conversion conv1, TypeSymbol t2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
2514private bool ExpressionMatchExactly(BoundExpression node, TypeSymbol t, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
2672if (!(node is BoundExpression))
2680protected override BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
2727BoundExpression node,
2739BoundExpression node,
3642BoundExpression argument = arguments.Argument(argumentPosition);
3753BoundExpression argument,
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\Constructors.cs (72)
15BoundExpression? receiver,
25BoundExpression? receiver,
37BoundExpression? receiver,
49BoundExpression? receiver,
58private static bool NeedsByValueFieldAccess(BoundExpression? receiver, FieldSymbol fieldSymbol)
86BoundExpression? receiverOpt,
88ImmutableArray<BoundExpression> arguments,
103public BoundCall Update(BoundExpression? receiverOpt,
105ImmutableArray<BoundExpression> arguments,
119BoundExpression receiverOpt,
121ImmutableArray<BoundExpression> arguments,
153public BoundCall Update(ImmutableArray<BoundExpression> arguments)
158public BoundCall Update(BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments)
163public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method)
165return Synthesized(syntax, receiverOpt, method, ImmutableArray<BoundExpression>.Empty);
168public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, BoundExpression arg0)
173public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, BoundExpression arg0, BoundExpression arg1)
178public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, MethodSymbol method, ImmutableArray<BoundExpression> arguments)
202public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, params BoundExpression[] arguments)
203: this(syntax, constructor, ImmutableArray.Create<BoundExpression>(arguments), default(ImmutableArray<string>), default(ImmutableArray<RefKind>), false, default(ImmutableArray<int>), default(BitVector), null, null, constructor.ContainingType)
206public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments)
216BoundExpression receiverOpt,
218ImmutableArray<BoundExpression> arguments,
239BoundExpression? receiverOpt,
241ImmutableArray<BoundExpression> arguments,
252public BoundIndexerAccess Update(BoundExpression? receiverOpt,
254ImmutableArray<BoundExpression> arguments,
271public static BoundConversion SynthesizedNonUserDefined(SyntaxNode syntax, BoundExpression operand, Conversion conversion, TypeSymbol type, ConstantValue? constantValueOpt = null)
294BoundExpression operand,
320BoundExpression operand,
344BoundExpression operand,
357public BoundConversion Update(BoundExpression operand,
373BoundExpression left,
374BoundExpression right,
400BoundExpression left,
401BoundExpression right,
413BoundExpression left,
414BoundExpression right,
432BoundExpression left,
433BoundExpression right,
465BoundExpression left,
466BoundExpression right,
486public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
493: this(syntax, aliasOpt, boundContainingTypeOpt, ImmutableArray<BoundExpression>.Empty, typeWithAnnotations, hasErrors)
507public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, ImmutableArray<BoundExpression> dimensionsOpt, TypeWithAnnotations typeWithAnnotations, bool hasErrors = false)
533public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right,
542public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol type)
574public static BoundReturnStatement Synthesized(SyntaxNode syntax, RefKind refKind, BoundExpression expression, bool hasErrors = false)
638public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false)
651public static BoundDagTemp ForOriginalInput(BoundExpression expr) => new BoundDagTemp(expr.Syntax, expr.Type!, source: null);
658BoundExpression left,
659BoundExpression right,
661BoundExpression? leftConversion,
663BoundExpression? finalConversion,
672BoundExpression left,
673BoundExpression right,
675BoundExpression? leftConversion,
677BoundExpression? finalConversion,
688BoundExpression operand,
700BoundExpression operand,
714BoundExpression operand,
718BoundExpression? operandConversion,
720BoundExpression? resultConversion,
728public BoundIncrementOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, BoundValuePlaceholder? resultPlaceholder, BoundExpression? resultConversion, LookupResultKind resultKind, TypeSymbol type)
BoundTree\UnboundLambda.cs (12)
205var types = ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)>.GetInstance();
246ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns,
355if (!(node is BoundExpression))
363protected override BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
376var expression = node.ExpressionOpt;
564protected abstract BoundExpression? GetLambdaExpressionBody(BoundBlock body);
569protected abstract BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics);
761GetLambdaExpressionBody(returnInferenceLambda.Body) is BoundExpression expression &&
1529protected override BoundExpression? GetLambdaExpressionBody(BoundBlock body)
1536statements[0] is BoundReturnStatement { RefKind: Microsoft.CodeAnalysis.RefKind.None, ExpressionOpt: BoundExpression expr })
1544protected override BoundBlock CreateBlockFromLambdaExpressionBody(Binder lambdaBodyBinder, BoundExpression expression, BindingDiagnosticBag diagnostics)
CodeGen\EmitArrayInitializer.cs (23)
67ImmutableArray<BoundExpression> inits,
81ImmutableArray<BoundExpression> inits,
86var init = inits[i];
100private static bool ShouldEmitInitExpression(bool includeConstants, BoundExpression init)
123public IndexDesc(int index, ImmutableArray<BoundExpression> initializers)
130public readonly ImmutableArray<BoundExpression> Initializers;
134ImmutableArray<BoundExpression> inits,
188var init = inits[i];
205var initExpr = inits[i];
215private static ConstantValue AsConstOrDefault(BoundExpression init)
245private ArrayInitializerStyle ShouldEmitBlockInitializer(TypeSymbol elementType, ImmutableArray<BoundExpression> inits)
294private void InitializerCountRecursive(ImmutableArray<BoundExpression> inits, ref int initCount, ref int constInits)
301foreach (var init in inits)
329private ImmutableArray<byte> GetRawData(ImmutableArray<BoundExpression> initializers)
341private void SerializeArrayRecursive(BlobBuilder bw, ImmutableArray<BoundExpression> inits)
347foreach (var init in inits)
354foreach (var init in inits)
365private static bool IsMultidimensionalInitializer(ImmutableArray<BoundExpression> inits)
395private bool TryEmitReadonlySpanAsBlobWrapper(NamedTypeSymbol spanType, BoundExpression wrappedExpression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace, BoundExpression? start = null, BoundExpression? length = null)
744foreach (var init in initializer.Initializers)
CodeGen\EmitExpression.cs (49)
35private void EmitExpression(BoundExpression expression, bool used)
76private void EmitExpressionCoreWithStackGuard(BoundExpression expression, bool used)
93private void EmitExpressionCore(BoundExpression expression, bool used)
392var receiver = expression.Receiver;
527var whenNull = expression.WhenNullOpt;
697BoundExpression argument = expression.Arguments[i];
703private void EmitArgument(BoundExpression argument, RefKind refKind)
786var receiver = mg != null ? mg.ReceiverOpt : expression.Argument;
925foreach (var se in sideEffects)
932private void EmitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt)
950internal static RefKind GetArgumentRefKind(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt, int i)
1129var receiver = fieldAccess.ReceiverOpt;
1157private LocalDefinition EmitFieldLoadReceiver(BoundExpression receiver)
1185private bool EmitFieldLoadReceiverAddress(BoundExpression receiver)
1224private bool FieldLoadPrefersRef(BoundExpression receiver)
1277internal static bool FieldLoadMustUseRef(BoundExpression expr)
1466private bool CanUseCallOnRefTypeReceiver(BoundExpression receiver)
1534var seqValue = ((BoundSequence)(receiver)).Value;
1538var rhs = ((BoundAssignmentOperator)receiver).Right;
1556private bool IsThisReceiver(BoundExpression receiver)
1564var seqValue = ((BoundSequence)(receiver)).Value;
1598var receiver = call.ReceiverOpt;
1618var receiver = call.ReceiverOpt;
1649var receiver = call.ReceiverOpt;
1803var receiver = call.ReceiverOpt;
1864internal static bool IsPossibleReferenceTypeReceiverOfConstrainedCall(BoundExpression receiver)
1876internal static bool ReceiverIsKnownToReferToTempIfReferenceType(BoundExpression receiver)
1894internal static bool IsSafeToDereferenceReceiverRefAfterEvaluatingArguments(ImmutableArray<BoundExpression> arguments)
1898static bool isSafeToDereferenceReceiverRefAfterEvaluatingArgument(BoundExpression expression)
1900var current = expression;
1989internal static bool IsRef(BoundExpression receiver)
2015private static int GetCallStackBehavior(MethodSymbol method, ImmutableArray<BoundExpression> arguments)
2196foreach (var init in initializer.Initializers)
2217foreach (var arg in expression.Arguments)
2245private bool TryEmitReadonlySpanAsBlobWrapper(BoundObjectCreationExpression expression, bool used, BoundExpression inPlaceTarget, out bool avoidInPlace)
2365var left = assignmentOperator.Left;
2380var right = assignmentOperator.Right;
2428private bool SafeToGetWriteableReference(BoundExpression left)
2455private void InPlaceInit(BoundExpression target, bool used)
2470private bool TryInPlaceCtorCall(BoundExpression target, BoundObjectCreationExpression objCreation, bool used)
2509private bool PartialCtorResultCannotEscape(BoundExpression left)
2535private static bool TargetIsNotOnHeap(BoundExpression left)
2553var assignmentTarget = assignmentOperator.Left;
2772BoundExpression lhs = assignmentOperator.Left;
2843BoundExpression expression = assignment.Left;
2878var array = ((BoundArrayAccess)expression).Expression;
3163var operand = isOp.Operand;
3185var operand = asOp.Operand;
3630private TypeSymbol StackMergeType(BoundExpression expr)
CodeGen\EmitStackAllocInitializer.cs (7)
72private ArrayInitializerStyle ShouldEmitBlockInitializerForStackAlloc(TypeSymbol elementType, ImmutableArray<BoundExpression> inits)
104private void StackAllocInitializerCount(ImmutableArray<BoundExpression> inits, ref int initCount, ref int constInits)
111foreach (var init in inits)
123private void EmitElementStackAllocInitializers(TypeSymbol elementType, ImmutableArray<BoundExpression> inits, bool includeConstants)
127foreach (BoundExpression init in inits)
141private void EmitPointerElementAccess(BoundExpression init, TypeSymbol elementType, int elementTypeSizeInBytes, int index)
168private 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;
839var expressionOpt = boundReturnStatement.ExpressionOpt;
1096var exceptionSourceOpt = catchBlock.ExceptionSourceOpt;
1109BoundExpression exceptionSource = exceptionSourceOpt;
1224BoundExpression expression,
1934BoundExpression caseExpressionOpt = node.CaseExpressionOpt;
1946BoundExpression condition = node.Condition;
1954BoundExpression expression = node.Expression;
CodeGen\Optimizer.cs (109)
398private readonly ArrayBuilder<(BoundExpression, ExprContext)> _evalStack;
419ArrayBuilder<ValueTuple<BoundExpression, ExprContext>> evalStack,
436var evalStack = ArrayBuilder<ValueTuple<BoundExpression, ExprContext>>.GetInstance();
448BoundExpression expr = node as BoundExpression;
462private BoundExpression VisitExpressionCore(BoundExpression node, ExprContext context)
469var result = node.ConstantValueOpt == null ?
470node = (BoundExpression)base.Visit(node) :
499private BoundExpression VisitExpression(BoundExpression node, ExprContext context)
501BoundExpression result;
519private BoundExpression VisitExpressionCoreWithStackGuard(BoundExpression node, ExprContext context)
525var result = VisitExpressionCore(node, context);
535protected override BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
540private 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;
1015internal static bool IsFixedBufferAssignmentToRefLocal(BoundExpression left, BoundExpression right, bool isRef)
1027var lhs = node.Left;
1098var lhs = node.Left;
1109var receiver = node.ReceiverOpt;
1127receiver = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty,
1141private BoundExpression VisitCallOrConditionalAccessReceiver(BoundExpression receiver, BoundCall callOpt)
1150var unwrappedSequence = receiver;
1188private ImmutableArray<BoundExpression> VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt)
1195ArrayBuilder<BoundExpression> rewrittenArguments = null;
1205private void VisitArgument(ImmutableArray<BoundExpression> arguments, ref ArrayBuilder<BoundExpression> rewrittenArguments, int i, RefKind argRefKind)
1209var arg = arguments[i];
1210BoundExpression rewrittenArg = VisitExpression(arg, context);
1214rewrittenArguments = ArrayBuilder<BoundExpression>.GetInstance();
1227ArrayBuilder<BoundExpression> rewrittenArguments = null;
1228ImmutableArray<BoundExpression> arguments = node.Arguments;
1245var rewrittenOperand = VisitExpression(node.Operand, ExprContext.Address);
1275var receiver = node.ReceiverOpt;
1357BoundExpression boundExpression = node.Expression;
1367boundExpression = (BoundExpression)this.Visit(boundExpression);
1387BoundExpression condition = this.VisitExpression(node.Condition, ExprContext.Value);
1394BoundExpression consequence = this.VisitExpression(node.Consequence, context);
1399BoundExpression alternative = this.VisitExpression(node.Alternative, context);
1408BoundExpression child = node.Left;
1437var left = (BoundExpression)this.Visit(child);
1452var right = (BoundExpression)this.Visit(binary.Right);
1485BoundExpression left = (BoundExpression)this.Visit(node.Left);
1490BoundExpression right = (BoundExpression)this.Visit(node.Right);
1505BoundExpression left = (BoundExpression)this.Visit(node.LeftOperand);
1512BoundExpression right = (BoundExpression)this.Visit(node.RightOperand);
1522BoundExpression receiver = VisitCallOrConditionalAccessReceiver(node.Receiver, callOpt: null);
1529BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull);
1533var whenNull = node.WhenNullOpt;
1537whenNull = (BoundExpression)this.Visit(whenNull);
1560var valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver);
1566var unwrappedSequence = node.ReferenceTypeReceiver;
1578var referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver);
1592BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
1620var exceptionSourceOpt = node.ExceptionSourceOpt;
1657BoundExpression boundFilter;
1660boundFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt);
1693ArrayBuilder<BoundExpression> rewrittenInitializers = null;
1701var initializer = initializers[i];
1702var rewrittenInitializer = this.VisitExpression(initializer, ExprContext.Value);
1706rewrittenInitializers = ArrayBuilder<BoundExpression>.GetInstance();
1724BoundExpression visitedOperand = this.VisitExpression(node.Operand, ExprContext.Address);
1730BoundExpression expressionOpt = (BoundExpression)this.Visit(node.ExpressionOpt);
1985var asExpression = node as BoundExpression;
2002BoundExpression child = node.Left;
2028var left = (BoundExpression)this.Visit(child);
2033var right = (BoundExpression)this.Visit(binary.Right);
2076ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
2113var right = (BoundExpression)Visit(node.Right);
2136BoundExpression? receiverOpt = node.ReceiverOpt;
2140receiverOpt = (BoundExpression?)this.Visit(receiverOpt);
2148receiverOpt = typeExpression.Update(aliasOpt: null, boundContainingTypeOpt: null, boundDimensionsOpt: ImmutableArray<BoundExpression>.Empty,
2157ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
2165var exceptionSource = node.ExceptionSourceOpt;
2168var filter = node.ExceptionFilterOpt;
2190exceptionSource = (BoundExpression)Visit(exceptionSource);
2201filter = (BoundExpression)this.Visit(filter);
2293internal override ImmutableBindingDiagnostic<AssemblySymbol> GetConstantValueDiagnostics(BoundExpression boundInitValue)
Compilation\CSharpSemanticModel.cs (27)
167internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols);
251private static BoundExpression GetSpeculativelyBoundExpressionHelper(Binder binder, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
258BoundExpression boundNode;
279protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
320var boundNode = GetSpeculativelyBoundExpressionHelper(binder, expression, bindingOption);
824BoundExpression expression = bnode.Expression;
1894BoundExpression boundExpr;
1909case BoundExpression boundExpr2:
1926if (highestBoundNode is BoundExpression highestBoundExpr)
2055var boundExpr = lowestBoundNode as BoundExpression;
2056var highestBoundExpr = highestBoundNode as BoundExpression;
2263static (TypeSymbol, NullabilityInfo) getTypeAndNullability(BoundExpression expr) => (expr.Type, expr.TopLevelNullability);
2276if (lowestBoundNode is BoundExpression boundExpr)
2297var boundExpr = lowestBoundNode as BoundExpression;
2847var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded);
2899var bnode = binder.BindExpression(expression, BindingDiagnosticBag.Discarded);
3335BoundExpression boundNode,
3419BoundExpression valueExpression = ((BoundTypeOrValueExpression)boundNode).Data.ValueExpression;
3927private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out ImmutableArray<Symbol> symbols, out LookupResultKind resultKind)
3950BoundExpression boundNode,
4069private ImmutableArray<IPropertySymbol> GetIndexerGroupSemanticSymbols(BoundExpression boundNode, Binder binderOpt)
4583var receiver = node.ReceiverOpt;
4767BoundExpression receiver = call.Arguments[0];
4776private ImmutableArray<Symbol> CreateReducedExtensionMethodIfPossible(BoundDelegateCreationExpression delegateCreation, BoundExpression receiverOpt)
Compilation\MemberSemanticModel.cs (22)
181internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
194var boundRoot = binder.BindExpression(expression, BindingDiagnosticBag.Discarded);
196return (BoundExpression)NullableWalker.AnalyzeAndRewriteSpeculation(position, boundRoot, binder, snapshotManager, newSnapshots: out _, remappedSymbols: ref ignored);
465var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression;
489var boundExpression = this.GetLowerBoundNode(bindableNode) as BoundExpression;
1046var operation = call.IsDelegateCall ? call.ReceiverOpt : call;
1250BoundExpression boundExpr = this.GetLowerBoundNode(bindableNode) as BoundExpression;
1266var boundAdd = boundCollectionInitializer.Initializers[collectionInitializer.Expressions.IndexOf(node)];
1758BoundExpression node = queryClause;
1776BoundExpression receiver = call.ReceiverOpt;
1822private static BoundExpression GetContainingArgument(ImmutableArray<BoundExpression> arguments, int position)
1824BoundExpression result = null;
1826foreach (var arg in arguments)
1828var expr = GetContainingExprOrQueryClause(arg, position);
1845private static BoundExpression GetContainingExprOrQueryClause(BoundExpression expr, int position)
1849var value = GetQueryClauseValue((BoundQueryClause)expr);
1862private static BoundExpression GetQueryClauseValue(BoundQueryClause queryClause)
Compiler\MethodBodySynthesizer.cs (12)
40BoundExpression receiver = new BoundThisReference(syntax, constructor.ContainingType) { WasCompilerGenerated = true };
47arguments: ImmutableArray<BoundExpression>.Empty,
105ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(slotIndex), intType) { WasCompilerGenerated = true }),
125ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(0), intType) { WasCompilerGenerated = true }),
153ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(targetSubmissionIndex), intType) { WasCompilerGenerated = true }),
179BoundExpression thisReference = null;
387BoundExpression delegateUpdate;
398arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundParameter)),
462arguments: ImmutableArray.Create<BoundExpression>(boundTmps[1], boundParameter)),
476BoundExpression compareExchange = BoundCall.Synthesized(syntax,
479arguments: ImmutableArray.Create<BoundExpression>(boundBackingField, boundTmps[2], boundTmps[1]));
491BoundExpression loopExitCondition = new BoundBinaryOperator(syntax,
FlowAnalysis\AbstractFlowPass.cs (58)
364var expression = node as BoundExpression;
374protected override BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
376return (BoundExpression)base.Visit(node);
551protected void VisitLvalue(BoundExpression node)
619protected void VisitCondition(BoundExpression node)
625private void AdjustConditionalState(BoundExpression node)
653protected virtual void VisitRvalue(BoundExpression node, bool isKnownToBeAnLvalue = false)
669protected static bool IsConstantTrue(BoundExpression node)
674protected static bool IsConstantFalse(BoundExpression node)
679protected static bool IsConstantNull(BoundExpression node)
1119(BoundExpression? construction, bool useBoolReturns, bool firstPartIsConditional) = data switch
1140protected virtual void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor)
1332private void VisitReceiverBeforeCall(BoundExpression receiverOpt, MethodSymbol method)
1340private void VisitReceiverAfterCall(BoundExpression receiverOpt, MethodSymbol method)
1429protected virtual void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
1436private void VisitArgumentsBeforeCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt)
1456private void VisitArgumentsAfterCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
1474protected virtual void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method)
1480foreach (var child in node.ChildBoundNodes)
1482VisitRvalue(child as BoundExpression);
1498VisitRvalue(child as BoundExpression);
1507foreach (var child in node.Initializers)
1569protected void SplitIfBooleanConstant(BoundExpression node)
1637BoundExpression receiver = ((BoundMethodGroup)node.Operand).ReceiverOpt;
1941protected virtual void PropertySetter(BoundExpression node, BoundExpression receiver, MethodSymbol setter, BoundExpression value = null)
1949private bool RegularPropertyAccess(BoundExpression expr)
2058private void VisitFieldAccessInternal(BoundExpression receiverOpt, FieldSymbol fieldSymbol)
2184foreach (var i in node.Indices)
2217private void VisitBinaryLogicalOperatorChildren(BoundExpression node)
2220var stack = ArrayBuilder<BoundExpression>.GetInstance();
2222BoundExpression binary;
2223BoundExpression child = node;
2264BoundExpression right;
2305protected virtual void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression binary, BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse)
2311protected void AfterRightChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression right, bool isAnd, bool isBool, ref TLocalState leftTrue, ref TLocalState leftFalse)
2436static bool isKnownNullOrNotNull(BoundExpression expr)
2535ReadOnlySpan<BoundExpression> parts;
2548foreach (var part in parts)
2632foreach (var expr in node.Bounds)
2780private bool TryVisitConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull)
2831private bool VisitPossibleConditionalAccess(BoundExpression node, [NotNullWhen(true)] out TLocalState? stateWhenNotNull)
2890BoundExpression expr = node.AccessExpression;
2904Debug.Assert(expr is BoundExpression);
2964foreach (var se in sideEffects)
3055BoundExpression node,
3057BoundExpression condition,
3058BoundExpression consequence,
3059BoundExpression alternative)
3103private void VisitConditionalOperand(TLocalState state, BoundExpression operand, bool isByRef)
3228BoundExpression expr = node.ExpressionOpt;
3285protected void VisitAddressOfOperand(BoundExpression operand, bool shouldReadOperand)
3376private BoundNode VisitObjectOrCollectionInitializerExpression(ImmutableArray<BoundExpression> initializers)
3378foreach (var initializer in initializers)
FlowAnalysis\DefiniteAssignment.cs (21)
313protected override void VisitRvalue(BoundExpression node, bool isKnownToBeAnLvalue = false)
821protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read)
870internal static bool WriteConsideredUse(TypeSymbol type, BoundExpression value)
924private void NoteWrite(BoundExpression n, BoundExpression value, bool read)
1021protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member)
1090protected bool MayRequireTracking(BoundExpression receiverOpt, FieldSymbol fieldSymbol)
1307protected virtual void CheckAssigned(BoundExpression expr, FieldSymbol fieldSymbol, SyntaxNode node)
1317private bool IsAssigned(BoundExpression node, out int unassignedSlot)
1414private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression)
1449protected void Assign(BoundNode node, BoundExpression value, bool isRef = false, bool read = true)
1462protected virtual void AssignImpl(BoundNode node, BoundExpression value, bool isRef, bool written, bool read)
1537var expression = (BoundExpression)node;
1795foreach (var attributeArgument in boundAttribute.ConstructorArguments)
2357var initializer = node.Expression;
2375BoundExpression operand = node.Operand;
2403protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method)
2426protected void CheckAssigned(BoundExpression expr, SyntaxNode node)
2513var exceptionSource = catchBlock.ExceptionSourceOpt;
FlowAnalysis\NullableWalker.cs (259)
193private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)>.Builder? _analyzedNullabilityMapOpt;
208private PooledDictionary<BoundExpression, TypeWithState>? _methodGroupReceiverMapOpt;
210private PooledDictionary<BoundValuePlaceholderBase, (BoundExpression? Replacement, VisitResult Result)>? _resultForPlaceholdersOpt;
219private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>? _targetTypedAnalysisCompletionOpt;
224/// The delegate is invoked by <see cref="VisitConversion(BoundConversion, BoundExpression, Conversion, TypeWithAnnotations, TypeWithState, bool, bool, bool, AssignmentKind, ParameterSymbol, bool, bool, bool, Optional<LocalState>,bool, Location, ArrayBuilder<VisitResult>)"/>.
226private PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>> TargetTypedAnalysisCompletion
227=> _targetTypedAnalysisCompletionOpt ??= PooledDictionary<BoundExpression, Func<TypeWithAnnotations, TypeWithState>>.GetInstance();
273private void SetResultType(BoundExpression? expression, TypeWithState type, bool updateAnalyzedNullability = true)
278private void SetAnalyzedNullability(BoundExpression? expression, TypeWithState type)
286private void UseRvalueOnly(BoundExpression? expression)
296private void SetLvalueResultType(BoundExpression? expression, TypeWithAnnotations type)
304private void UseLvalueOnly(BoundExpression? expression)
311private void SetResult(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool updateAnalyzedNullability = true, bool? isLvalue = null)
320private void SetAnalyzedNullability(BoundExpression? expression, TypeWithState resultType, TypeWithAnnotations lvalueType, bool? isLvalue = null)
325private bool ShouldMakeNotNullRvalue(BoundExpression node) => node.IsSuppressed || node.HasAnyErrors || !IsReachable();
330private void SetAnalyzedNullability(BoundExpression? expr, VisitResult result, bool? isLvalue = null)
393/// Used to allow <see cref="MakeSlot(BoundExpression)"/> to substitute the correct slot for a <see cref="BoundConditionalReceiver"/> when
427ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt,
502private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression? expression, VisitResult result)
509_resultForPlaceholdersOpt ??= PooledDictionary<BoundValuePlaceholderBase, (BoundExpression? Replacement, VisitResult Result)>.GetInstance();
1449ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> analyzedNullabilitiesMap;
1454private static (SnapshotManager?, ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>) AnalyzeWithSemanticInfo(
1464var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance);
1521var analyzedNullabilities = ImmutableDictionary.CreateBuilder<BoundExpression, (NullabilityInfo, TypeSymbol?)>(EqualityComparer<BoundExpression>.Default, NullabilityInfoTypeComparer.Instance);
1560private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1682ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)>.Builder? analyzedNullabilityMapOpt,
1891protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member)
1949protected override int MakeSlot(BoundExpression node)
1969int makeSlot(BoundExpression node)
1992var operand = conv.Operand;
2046int getPlaceholderSlot(BoundExpression expr)
2123protected override void VisitRvalue(BoundExpression? node, bool isKnownToBeAnLvalue = false)
2137private void VisitRvalueEpilogue(BoundExpression? node)
2143private TypeWithState VisitRvalueWithState(BoundExpression? node)
2149private TypeWithAnnotations VisitLvalueWithAnnotations(BoundExpression node)
2225BoundExpression? value,
2252var unwrappedValue = SkipReferenceConversions(value);
2419private static bool IsDefaultValue(BoundExpression expr)
2452BoundExpression? valueOpt,
2804var expr = node.ExpressionOpt;
2873private TypeWithState VisitRefExpression(BoundExpression expr, TypeWithAnnotations destinationType)
3188var receiver = withExpr.Receiver;
3287var initializer = node.InitializerOpt;
3327protected override BoundExpression? VisitExpressionWithoutStackGuard(BoundExpression node)
3552BoundExpression node, TypeSymbol type, MethodSymbol? constructor,
3553ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitArgumentResult> argumentResults,
3604var operand = arguments[0];
3622BoundExpression node,
3623ImmutableArray<BoundExpression> arguments,
3649foreach (var initializer in objectInitializer.Initializers)
3664foreach (var initializer in collectionInitializer.Initializers)
3695var left = node.Left;
4008private void SetNotNullResult(BoundExpression node)
4053private int GetOrCreatePlaceholderSlot(BoundExpression node)
4096var argument = arguments[i];
4140foreach (var expr in node.Bounds)
4160var expressions = ArrayBuilder<BoundExpression>.GetInstance(initialization.Initializers.Length);
4177foreach (var expr in expressions)
4185var expressionsNoConversions = ArrayBuilder<BoundExpression>.GetInstance(n);
4188var placeholderBuilder = ArrayBuilder<BoundExpression>.GetInstance(n);
4189foreach (var expression in expressions)
4192(BoundExpression expressionNoConversion, Conversion conversion) = RemoveConversion(expression, includeExplicitConversions: false);
4223var expressionNoConversion = expressionsNoConversions[i];
4281private static bool IsTargetTypedExpression(BoundExpression node)
4295ArrayBuilder<(BoundExpression expr, TypeWithAnnotations resultType, bool isChecked)> returns,
4318var placeholdersBuilder = ArrayBuilder<BoundExpression>.GetInstance(n);
4338BoundExpression placeholder = placeholders[i];
4359private static void GetArrayElements(BoundArrayInitialization node, ArrayBuilder<BoundExpression> builder)
4361foreach (var child in node.Initializers)
4388foreach (var i in node.Indices)
4538static bool isKnownNullOrNotNull(BoundExpression expr, TypeWithState resultType)
4544LocalState getUnconditionalStateWhenNotNull(BoundExpression otherOperand, PossiblyConditionalState conditionalStateWhenNotNull)
4632BoundExpression leftOperand,
4635BoundExpression rightOperand,
4665BoundExpression expr,
4666BoundExpression operand,
4702BoundExpression expr,
4703BoundExpression operand,
4743TypeSymbol? getTypeIfContainingType(TypeSymbol baseType, TypeSymbol? derivedType, BoundExpression operand)
4761BoundExpression leftOperand,
4779BoundExpression? operandComparedToNull = null;
4802BoundExpression? operandComparedToNonNull = null;
4832private void SplitAndLearnFromNonNullTest(BoundExpression operandComparedToNonNull, bool whenTrue)
4864private void GetSlotsToMarkAsNotNullable(BoundExpression operand, ArrayBuilder<int> slotBuilder)
4958private void LearnFromNonNullTest(BoundExpression expression, ref LocalState state)
4986private void LearnFromNullTest(BoundExpression expression, ref LocalState state)
4993var expressionWithoutConversion = RemoveConversion(expression, includeExplicitConversions: true).expression;
5079private static BoundExpression SkipReferenceConversions(BoundExpression possiblyConversion)
5100BoundExpression leftOperand = node.LeftOperand;
5101BoundExpression rightOperand = node.RightOperand;
5124BoundExpression leftOperand = node.LeftOperand;
5125BoundExpression rightOperand = node.RightOperand;
5220private bool TryVisitConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull)
5256private bool VisitPossibleConditionalAccess(BoundExpression node, out PossiblyConditionalState stateWhenNotNull)
5289var receiver = node.Receiver;
5327BoundExpression expr = node.AccessExpression;
5344Debug.Assert(expr is BoundExpression);
5354Debug.Assert(expr is BoundExpression);
5388void makeAndAdjustReceiverSlot(BoundExpression receiver)
5410BoundExpression node,
5412BoundExpression condition,
5413BoundExpression originalConsequence,
5414BoundExpression originalAlternative)
5451(var consequence, var consequenceConversion, consequenceRValue) = visitConditionalOperand(consequenceState, originalConsequence);
5456(var alternative, var alternativeConversion, alternativeRValue) = visitConditionalOperand(alternativeState, originalAlternative);
5480BoundExpression consequencePlaceholder = CreatePlaceholderIfNecessary(consequence, consequenceRValue.ToTypeWithAnnotations(compilation));
5481BoundExpression alternativePlaceholder = CreatePlaceholderIfNecessary(alternative, alternativeRValue.ToTypeWithAnnotations(compilation));
5518BoundExpression node, BoundExpression originalConsequence, BoundExpression originalAlternative, LocalState consequenceState, LocalState alternativeState,
5519TypeWithState consequenceRValue, TypeWithState alternativeRValue, BoundExpression consequence, Conversion consequenceConversion, bool consequenceEndReachable,
5520BoundExpression alternative, Conversion alternativeConversion, bool alternativeEndReachable, TypeWithAnnotations resultTypeWithAnnotations, bool wasTargetTyped)
5562BoundExpression node,
5563BoundExpression originalConsequence,
5564BoundExpression originalAlternative,
5569BoundExpression consequence,
5572BoundExpression alternative,
5586(BoundExpression, Conversion, TypeWithState) visitConditionalOperand(LocalState state, BoundExpression operand)
5592BoundExpression operandNoConversion;
5599(TypeWithAnnotations LValueType, TypeWithState RValueType) visitConditionalRefOperand(LocalState state, BoundExpression operand)
5609BoundExpression node,
5610BoundExpression operand,
5660private static BoundExpression CreatePlaceholderIfNecessary(BoundExpression expr, TypeWithAnnotations type)
5744if (node.ReceiverOpt is BoundExpression receiver &&
5851void learnFromEqualsMethodArguments(BoundExpression left, TypeWithState leftType, BoundExpression right, TypeWithState rightType)
5893public readonly ImmutableArray<BoundExpression> Arguments;
5897public CompareExchangeInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<VisitArgumentResult> results, ImmutableArray<int> argsToParamsOpt)
5936var comparand = compareExchangeInfo.Arguments[comparandIndex];
5954var receiverOpt = node.ReceiverOpt;
6103protected override void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method)
6110BoundExpression node,
6111ImmutableArray<BoundExpression> arguments,
6123BoundExpression node,
6124ImmutableArray<BoundExpression> arguments,
6139ImmutableArray<BoundExpression> arguments,
6159ImmutableArray<BoundExpression> arguments,
6170(ImmutableArray<BoundExpression> argumentsNoConversions, ImmutableArray<Conversion> conversions) = RemoveArgumentConversions(arguments, refKindsOpt);
6183ImmutableArray<BoundExpression> arguments,
6184ImmutableArray<BoundExpression> argumentsNoConversions,
6236var argumentNoConversion = argumentsNoConversions[i];
6237var argument = i < arguments.Length ? arguments[i] : argumentNoConversion;
6321var argument = arguments[i];
6323var argumentNoConversion = argumentsNoConversions[i];
6339ImmutableArray<BoundExpression> arguments,
6340ImmutableArray<BoundExpression> argumentsNoConversions,
6361private void ApplyMemberPostConditions(BoundExpression? receiverOpt, MethodSymbol? method)
6454ImmutableArray<BoundExpression> arguments,
6480private ImmutableArray<FlowAnalysisAnnotations> GetParametersAnnotations(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parametersOpt, ImmutableArray<int> argsToParamsOpt, bool expanded)
6494private VisitArgumentResult VisitArgumentEvaluate(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations)
6550BoundExpression argumentNoConversion,
6637private bool CheckDisallowedNullAssignment(TypeWithState state, FlowAnalysisAnnotations annotations, Location location, BoundExpression? boundValueOpt = null)
6688BoundExpression argument,
6804void trackNullableStateForAssignment(BoundExpression parameterValue, TypeWithAnnotations lValueType, int targetSlot, TypeWithState parameterWithState, bool isSuppressed, FlowAnalysisAnnotations parameterAnnotations)
6894private void LearnFromPostConditions(BoundExpression argument, FlowAnalysisAnnotations parameterAnnotations)
6940private (ImmutableArray<BoundExpression> arguments, ImmutableArray<Conversion> conversions) RemoveArgumentConversions(
6941ImmutableArray<BoundExpression> arguments,
6948var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(n);
6954var argument = arguments[i];
6958var before = argument;
7016ImmutableArray<BoundExpression> arguments,
7079internal override TypeWithAnnotations GetTypeWithAnnotations(BoundExpression expr)
7090private static NullableAnnotation GetNullableAnnotation(BoundExpression expr)
7124private ImmutableArray<BoundExpression> GetArgumentsForMethodTypeInference(ImmutableArray<VisitArgumentResult> argumentResults, ImmutableArray<BoundExpression> arguments)
7132var builder = ArrayBuilder<BoundExpression>.GetInstance(n);
7143BoundExpression getArgumentForMethodTypeInference(BoundExpression argument, TypeWithAnnotations argumentType, Optional<LocalState> lambdaState)
7209private static (BoundExpression expression, Conversion conversion) RemoveConversion(BoundExpression expr, bool includeExplicitConversions)
7247private Conversion GenerateConversionForConditionalOperator(BoundExpression sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool reportMismatch, bool isChecked)
7258private static Conversion GenerateConversion(Conversions conversions, BoundExpression? sourceExpression, TypeSymbol? sourceType, TypeSymbol destinationType, bool fromExplicitCast, bool extensionMethodThisArgument, bool isChecked)
7286private static bool UseExpressionForConversion([NotNullWhen(true)] BoundExpression? value)
7432(BoundExpression operand, Conversion conversion) = RemoveConversion(node, includeExplicitConversions: true);
7459private TypeWithState VisitOptionalImplicitConversion(BoundExpression expr, TypeWithAnnotations targetTypeOpt, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind)
7472BoundExpression expr,
7479(BoundExpression operand, Conversion conversion) = RemoveConversion(expr, includeExplicitConversions: false);
7486BoundExpression expr,
7489BoundExpression operand,
7522Func<TypeWithAnnotations, TypeWithState> visitConversionAsContinuation(BoundExpression expr, bool useLegacyWarnings, bool trackMembers, AssignmentKind assignmentKind, BoundExpression operand, Conversion conversion, TypeWithState operandType)
7608ImmutableArray<BoundExpression> values,
7639void trackState(BoundExpression value, FieldSymbol field, TypeWithState valueType)
7653private void TrackNullableStateOfNullableValue(int containingSlot, TypeSymbol containingType, BoundExpression? value, TypeWithState valueType, int valueSlot)
7668BoundExpression convertedNode,
7878private static BoundConversion? GetConversionIfApplicable(BoundExpression? conversionOpt, BoundExpression convertedNode)
7909BoundExpression conversionOperand,
8435BoundExpression conversionOperand,
8578private void SnapshotWalkerThroughConversionGroup(BoundExpression conversionExpression, BoundExpression convertedNode)
8597private void TrackAnalyzedNullabilityThroughConversionGroup(TypeWithState resultType, BoundConversion? conversionOpt, BoundExpression convertedNode)
8651BoundExpression node,
8717case BoundExpression arg when arg.Type is { TypeKind: TypeKind.Delegate }:
8829Action<NamedTypeSymbol>? visitDelegateArgument(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
8843Action<NamedTypeSymbol>? analyzeDelegateConversion(NamedTypeSymbol delegateType, BoundExpression arg, bool isTargetTyped)
8863Action<NamedTypeSymbol> analyzeDelegateConversionAsContinuation(BoundExpression arg)
8873var receiverOpt = node.ReceiverOpt;
8887private bool TryGetMethodGroupReceiverNullability([NotNullWhen(true)] BoundExpression? receiverOpt, out TypeWithState type)
8902private void SetMethodGroupReceiverNullability(BoundExpression receiver, TypeWithState type)
8904_methodGroupReceiverMapOpt ??= PooledDictionary<BoundExpression, TypeWithState>.GetInstance();
8910var receiverOpt = group.ReceiverOpt;
8920var arguments = ArrayBuilder<BoundExpression>.GetInstance();
9017private void VisitThisOrBaseReference(BoundExpression node)
9038var left = node.Left;
9051var right = node.Right;
9122private void AdjustSetValue(BoundExpression left, ref TypeWithState rightState)
9137private FlowAnalysisAnnotations GetLValueAnnotations(BoundExpression expr)
9198private static bool UseLegacyWarnings(BoundExpression expr)
9247private void VisitDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt = null)
9261private void VisitDeconstructMethodArguments(ArrayBuilder<DeconstructionVariable> variables, Conversion conversion, BoundExpression right, TypeWithState? rightResultOpt)
9296ArrayBuilder<BoundExpression> placeholderArgs = ArrayBuilder<BoundExpression>.GetInstance(n + 1);
9332var nestedRight = CreatePlaceholderIfNecessary(invocation.Arguments[i + offset], parameter.TypeWithAnnotations);
9359private void VisitTupleDeconstructionArguments(ArrayBuilder<DeconstructionVariable> variables, ImmutableArray<(BoundValuePlaceholder? placeholder, BoundExpression? conversion)> deconstructConversionInfo, BoundExpression right, TypeWithState? rightResultOpt)
9370var rightPart = rightParts[i];
9445internal readonly BoundExpression Expression;
9449internal DeconstructionVariable(BoundExpression expression, TypeWithAnnotations type)
9456internal DeconstructionVariable(BoundExpression expression, ArrayBuilder<DeconstructionVariable> nestedVariables)
9468foreach (var argument in arguments)
9474DeconstructionVariable getDeconstructionAssignmentVariable(BoundExpression expr)
9492private ImmutableArray<BoundExpression> GetDeconstructionRightParts(BoundExpression expr, TypeWithState? rightResultOpt)
9522return fields.SelectAsArray((f, e) => (BoundExpression)new BoundFieldAccess(e.Syntax, e, f, constantValueOpt: null), expr);
9630var left = node.Left;
9631var right = node.Right;
9707var initializer = node.Expression;
9729private void ReportArgumentWarnings(BoundExpression argument, TypeWithState argumentType, ParameterSymbol parameter)
9740private void ReportNullabilityMismatchInRefArgument(BoundExpression argument, TypeSymbol argumentType, ParameterSymbol parameter, TypeSymbol parameterType)
9818var receiverOpt = node.ReceiverOpt;
9874private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member)
10262foreach (var child in node.ChildBoundNodes)
10273VisitRvalue(child as BoundExpression);
10434protected override void AfterLeftChildOfBinaryLogicalOperatorHasBeenVisited(BoundExpression node, BoundExpression right, bool isAnd, bool isBool, ref LocalState leftTrue, ref LocalState leftFalse)
10441BoundExpression? left = null;
10493private TypeWithState InferResultNullabilityOfBinaryLogicalOperator(BoundExpression node, TypeWithState leftType, TypeWithState rightType)
10589var operand = node.Operand;
10733var receiver = node.Receiver;
10745var expr = node.Expression;
10749var receiverOpt = (expr as BoundMethodGroup)?.ReceiverOpt;
10765var receiverOpt = node.ReceiverOpt;
10850private void SetUnknownResultNullability(BoundExpression expression)
10857var receiver = node.Receiver;
10869private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, bool checkNullableValueType = false)
10874private bool CheckPossibleNullReceiver(BoundExpression? receiverOpt, TypeWithState resultType, bool checkNullableValueType)
10918private void CheckExtensionMethodThisNullability(BoundExpression expr, Conversion conversion, ParameterSymbol parameter, TypeWithState result)
10985protected override void VisitInterpolatedStringHandlerConstructor(BoundExpression? constructor)
11054private void VisitThrow(BoundExpression? expr)
11073BoundExpression expr = node.Expression;
FlowAnalysis\NullableWalker.DebugVerifier.cs (14)
20private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _analyzedNullabilityMap;
22private readonly HashSet<BoundExpression> _visitedExpressions = new HashSet<BoundExpression>();
25private DebugVerifier(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> analyzedNullabilityMap, SnapshotManager? snapshotManager)
36public static void Verify(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> analyzedNullabilityMap, SnapshotManager? snapshotManagerOpt, BoundNode node)
45foreach (var analyzedNode in verifier._analyzedNullabilityMap.Keys)
55foreach (var verifiedNode in verifier._visitedExpressions)
65private void VerifyExpression(BoundExpression expression, bool overrideSkippedExpression = false)
74protected override BoundExpression? VisitExpressionWithoutStackGuard(BoundExpression node)
77return (BoundExpression)base.Visit(node);
89if (node is BoundExpression expr)
106foreach (var child in node.ChildBoundNodes)
142foreach (var arg in node.EnumeratorInfoOpt.GetEnumeratorInfo.Arguments)
Generated\BoundNodes.xml.Generated.cs (1012)
279protected BoundEqualsValue(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
291public BoundExpression Value { get; }
296public BoundFieldEqualsValue(SyntaxNode syntax, FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
312public BoundFieldEqualsValue Update(FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value)
326public BoundPropertyEqualsValue(SyntaxNode syntax, PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
342public BoundPropertyEqualsValue Update(PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value)
356public BoundParameterEqualsValue(SyntaxNode syntax, ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
372public BoundParameterEqualsValue Update(ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value)
487public BoundCapturedReceiverPlaceholder(SyntaxNode syntax, BoundExpression receiver, uint localScopeDepth, TypeSymbol? type, bool hasErrors = false)
497public BoundExpression Receiver { get; }
503public BoundCapturedReceiverPlaceholder Update(BoundExpression receiver, uint localScopeDepth, TypeSymbol? type)
939public BoundPassByCopy(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false)
948public BoundExpression Expression { get; }
953public BoundPassByCopy Update(BoundExpression expression, TypeSymbol? type)
967public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false)
981public ImmutableArray<BoundExpression> ChildBoundNodes { get; }
986public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type)
1056public BoundTypeExpression(SyntaxNode syntax, AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type, bool hasErrors = false)
1070public ImmutableArray<BoundExpression> BoundDimensionsOpt { get; }
1077public BoundTypeExpression Update(AliasSymbol? aliasOpt, BoundTypeExpression? boundContainingTypeOpt, ImmutableArray<BoundExpression> boundDimensionsOpt, TypeWithAnnotations typeWithAnnotations, TypeSymbol type)
1170public BoundUnaryOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false)
1188public BoundExpression Operand { get; }
1198public BoundUnaryOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
1212public 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)
1233public BoundExpression Operand { get; }
1237public BoundExpression? OperandConversion { get; }
1239public BoundExpression? ResultConversion { get; }
1246public 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)
1260public BoundAddressOfOperator(SyntaxNode syntax, BoundExpression operand, bool isManaged, TypeSymbol type, bool hasErrors = false)
1272public BoundExpression Operand { get; }
1278public BoundAddressOfOperator Update(BoundExpression operand, bool isManaged, TypeSymbol type)
1364public BoundPointerIndirectionOperator(SyntaxNode syntax, BoundExpression operand, bool refersToLocation, TypeSymbol type, bool hasErrors = false)
1376public BoundExpression Operand { get; }
1382public BoundPointerIndirectionOperator Update(BoundExpression operand, bool refersToLocation, TypeSymbol type)
1396public BoundPointerElementAccess(SyntaxNode syntax, BoundExpression expression, BoundExpression index, bool @checked, bool refersToLocation, TypeSymbol type, bool hasErrors = false)
1411public BoundExpression Expression { get; }
1412public BoundExpression Index { get; }
1419public BoundPointerElementAccess Update(BoundExpression expression, BoundExpression index, bool @checked, bool refersToLocation, TypeSymbol type)
1433public BoundFunctionPointerInvocation(SyntaxNode syntax, BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false)
1448public BoundExpression InvokedExpression { get; }
1449public ImmutableArray<BoundExpression> Arguments { get; }
1456public BoundFunctionPointerInvocation Update(BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type)
1470public BoundRefTypeOperator(SyntaxNode syntax, BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type, bool hasErrors = false)
1482public BoundExpression Operand { get; }
1488public BoundRefTypeOperator Update(BoundExpression operand, MethodSymbol? getTypeFromHandle, TypeSymbol type)
1502public BoundMakeRefOperator(SyntaxNode syntax, BoundExpression operand, TypeSymbol type, bool hasErrors = false)
1513public BoundExpression Operand { get; }
1518public BoundMakeRefOperator Update(BoundExpression operand, TypeSymbol type)
1532public BoundRefValueOperator(SyntaxNode syntax, NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type, bool hasErrors = false)
1545public BoundExpression Operand { get; }
1550public BoundRefValueOperator Update(NullableAnnotation nullableAnnotation, BoundExpression operand, TypeSymbol type)
1564public BoundFromEndIndexExpression(SyntaxNode syntax, BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false)
1576public BoundExpression Operand { get; }
1582public BoundFromEndIndexExpression Update(BoundExpression operand, MethodSymbol? methodOpt, TypeSymbol type)
1596public BoundRangeExpression(SyntaxNode syntax, BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type, bool hasErrors = false)
1608public BoundExpression? LeftOperandOpt { get; }
1609public BoundExpression? RightOperandOpt { get; }
1615public BoundRangeExpression Update(BoundExpression? leftOperandOpt, BoundExpression? rightOperandOpt, MethodSymbol? methodOpt, TypeSymbol type)
1629protected BoundBinaryOperatorBase(BoundKind kind, SyntaxNode syntax, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1642public BoundExpression Left { get; }
1643public BoundExpression Right { get; }
1648public BoundBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1668public BoundBinaryOperator Update(BinaryOperatorKind operatorKind, BoundBinaryOperator.UncommonData? data, LookupResultKind resultKind, BoundExpression left, BoundExpression right, TypeSymbol type)
1682public BoundTupleBinaryOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type, bool hasErrors = false)
1698public BoundExpression Left { get; }
1699public BoundExpression Right { get; }
1706public BoundTupleBinaryOperator Update(BoundExpression left, BoundExpression right, BinaryOperatorKind operatorKind, TupleBinaryOperatorInfo.Multiple operators, TypeSymbol type)
1720public BoundUserDefinedConditionalLogicalOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type, bool hasErrors = false)
1751public BoundUserDefinedConditionalLogicalOperator Update(BinaryOperatorKind operatorKind, MethodSymbol logicalOperator, MethodSymbol trueOperator, MethodSymbol falseOperator, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, BoundExpression left, BoundExpression right, TypeSymbol type)
1765public 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)
1786public BoundExpression Left { get; }
1787public BoundExpression Right { get; }
1789public BoundExpression? LeftConversion { get; }
1791public BoundExpression? FinalConversion { get; }
1798public BoundCompoundAssignmentOperator Update(BinaryOperatorSignature @operator, BoundExpression left, BoundExpression right, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundValuePlaceholder? finalPlaceholder, BoundExpression? finalConversion, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
1812public BoundAssignmentOperator(SyntaxNode syntax, BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type, bool hasErrors = false)
1825public BoundExpression Left { get; }
1826public BoundExpression Right { get; }
1832public BoundAssignmentOperator Update(BoundExpression left, BoundExpression right, bool isRef, TypeSymbol type)
1881public BoundNullCoalescingOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type, bool hasErrors = false)
1898public BoundExpression LeftOperand { get; }
1899public BoundExpression RightOperand { get; }
1901public BoundExpression? LeftConversion { get; }
1908public BoundNullCoalescingOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, BoundNullCoalescingOperatorResultKind operatorResultKind, bool @checked, TypeSymbol type)
1922public BoundNullCoalescingAssignmentOperator(SyntaxNode syntax, BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type, bool hasErrors = false)
1933public BoundExpression LeftOperand { get; }
1934public BoundExpression RightOperand { get; }
1939public BoundNullCoalescingAssignmentOperator Update(BoundExpression leftOperand, BoundExpression rightOperand, TypeSymbol? type)
1953public BoundUnconvertedConditionalOperator(SyntaxNode syntax, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError, bool hasErrors = false)
1969public BoundExpression Condition { get; }
1970public BoundExpression Consequence { get; }
1971public BoundExpression Alternative { get; }
1978public BoundUnconvertedConditionalOperator Update(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError)
1992public BoundConditionalOperator(SyntaxNode syntax, bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
2012public BoundExpression Condition { get; }
2013public BoundExpression Consequence { get; }
2014public BoundExpression Alternative { get; }
2022public BoundConditionalOperator Update(bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type)
2036public BoundArrayAccess(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type, bool hasErrors = false)
2049public BoundExpression Expression { get; }
2050public ImmutableArray<BoundExpression> Indices { get; }
2055public BoundArrayAccess Update(BoundExpression expression, ImmutableArray<BoundExpression> indices, TypeSymbol type)
2069public BoundArrayLength(SyntaxNode syntax, BoundExpression expression, TypeSymbol type, bool hasErrors = false)
2080public BoundExpression Expression { get; }
2085public BoundArrayLength Update(BoundExpression expression, TypeSymbol type)
2099public BoundAwaitableInfo(SyntaxNode syntax, BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult, bool hasErrors = false)
2111public BoundExpression? GetAwaiter { get; }
2118public BoundAwaitableInfo Update(BoundAwaitableValuePlaceholder? awaitableInstancePlaceholder, bool isDynamic, BoundExpression? getAwaiter, PropertySymbol? isCompleted, MethodSymbol? getResult)
2132public BoundAwaitExpression(SyntaxNode syntax, BoundExpression expression, BoundAwaitableInfo awaitableInfo, TypeSymbol type, bool hasErrors = false)
2145public BoundExpression Expression { get; }
2151public BoundAwaitExpression Update(BoundExpression expression, BoundAwaitableInfo awaitableInfo, TypeSymbol type)
2736public BoundIsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type, bool hasErrors = false)
2750public BoundExpression Operand { get; }
2757public BoundIsOperator Update(BoundExpression operand, BoundTypeExpression targetType, ConversionKind conversionKind, TypeSymbol type)
2771public BoundAsOperator(SyntaxNode syntax, BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type, bool hasErrors = false)
2786public BoundExpression Operand { get; }
2789public BoundExpression? OperandConversion { get; }
2794public BoundAsOperator Update(BoundExpression operand, BoundTypeExpression targetType, BoundValuePlaceholder? operandPlaceholder, BoundExpression? operandConversion, TypeSymbol type)
2840public BoundConversion(SyntaxNode syntax, BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type, bool hasErrors = false)
2858public BoundExpression Operand { get; }
2870public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, ImmutableArray<MethodSymbol> originalUserDefinedConversionsOpt, TypeSymbol type)
2884public BoundReadOnlySpanFromArray(SyntaxNode syntax, BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type, bool hasErrors = false)
2897public BoundExpression Operand { get; }
2903public BoundReadOnlySpanFromArray Update(BoundExpression operand, MethodSymbol conversionMethod, TypeSymbol type)
2952public BoundArgListOperator(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type, bool hasErrors = false)
2963public ImmutableArray<BoundExpression> Arguments { get; }
2969public BoundArgListOperator Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type)
2983public BoundFixedLocalCollectionInitializer(SyntaxNode syntax, TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type, bool hasErrors = false)
3001public BoundExpression? ElementPointerConversion { get; }
3002public BoundExpression Expression { get; }
3008public BoundFixedLocalCollectionInitializer Update(TypeSymbol elementPointerType, BoundValuePlaceholder? elementPointerPlaceholder, BoundExpression? elementPointerConversion, BoundExpression expression, MethodSymbol? getPinnableOpt, TypeSymbol type)
3289public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
3304public BoundExpression? InitializerOpt { get; }
3305public ImmutableArray<BoundExpression> ArgumentsOpt { get; }
3311public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
3458public BoundReturnStatement(SyntaxNode syntax, RefKind refKind, BoundExpression? expressionOpt, bool @checked, bool hasErrors = false)
3467public BoundExpression? ExpressionOpt { get; }
3473public BoundReturnStatement Update(RefKind refKind, BoundExpression? expressionOpt, bool @checked)
3487public BoundYieldReturnStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false)
3496public BoundExpression Expression { get; }
3501public BoundYieldReturnStatement Update(BoundExpression expression)
3532public BoundThrowStatement(SyntaxNode syntax, BoundExpression? expressionOpt, bool hasErrors = false)
3538public BoundExpression? ExpressionOpt { get; }
3543public BoundThrowStatement Update(BoundExpression? expressionOpt)
3557public BoundExpressionStatement(SyntaxNode syntax, BoundExpression expression, bool hasErrors = false)
3566public BoundExpression Expression { get; }
3571public BoundExpressionStatement Update(BoundExpression expression)
3659public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<LocalFunctionSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, GeneratedLabelSymbol breakLabel, bool hasErrors = false)
3679public BoundExpression Expression { get; }
3690public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<LocalFunctionSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, GeneratedLabelSymbol breakLabel)
3704public BoundSwitchDispatch(SyntaxNode syntax, BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt, bool hasErrors = false)
3718public BoundExpression Expression { get; }
3726public BoundSwitchDispatch Update(BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt)
3740public BoundIfStatement(SyntaxNode syntax, BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt, bool hasErrors = false)
3752public BoundExpression Condition { get; }
3759public BoundIfStatement Update(BoundExpression condition, BoundStatement consequence, BoundStatement? alternativeOpt)
3801protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3817public BoundExpression Condition { get; }
3823public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3839public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel)
3853public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3869public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel)
3883public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3904public BoundExpression? Condition { get; }
3911public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel)
3925public BoundForEachStatement(SyntaxNode syntax, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundAwaitableInfo? awaitOpt, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3950public BoundExpression? ElementConversion { get; }
3953public BoundExpression? IterationErrorExpressionOpt { get; }
3954public BoundExpression Expression { get; }
3962public BoundForEachStatement Update(ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundAwaitableInfo? awaitOpt, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel)
4007public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false)
4024public BoundExpression? ExpressionOpt { get; }
4032public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt)
4080public BoundLockStatement(SyntaxNode syntax, BoundExpression argument, BoundStatement body, bool hasErrors = false)
4091public BoundExpression Argument { get; }
4097public BoundLockStatement Update(BoundExpression argument, BoundStatement body)
4148public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false)
4165public BoundExpression? ExceptionSourceOpt { get; }
4168public BoundExpression? ExceptionFilterOpt { get; }
4175public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll)
4488public BoundRangeVariable(SyntaxNode syntax, RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type, bool hasErrors = false)
4502public BoundExpression Value { get; }
4507public BoundRangeVariable Update(RangeVariableSymbol rangeVariableSymbol, BoundExpression value, TypeSymbol type)
4598public BoundGotoStatement(SyntaxNode syntax, LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt, bool hasErrors = false)
4610public BoundExpression? CaseExpressionOpt { get; }
4616public BoundGotoStatement Update(LabelSymbol label, BoundExpression? caseExpressionOpt, BoundLabel? labelExpressionOpt)
4735public BoundConditionalGoto(SyntaxNode syntax, BoundExpression condition, bool jumpIfTrue, LabelSymbol label, bool hasErrors = false)
4747public BoundExpression Condition { get; }
4754public BoundConditionalGoto Update(BoundExpression condition, bool jumpIfTrue, LabelSymbol label)
4768protected BoundSwitchExpression(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false)
4783public BoundExpression Expression { get; }
4792public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false)
4810public BoundExpression? WhenClause { get; }
4811public BoundExpression Value { get; }
4817public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label)
4831public BoundUnconvertedSwitchExpression(SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type, bool hasErrors = false)
4845public BoundUnconvertedSwitchExpression Update(BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol? type)
4859public BoundConvertedSwitchExpression(SyntaxNode syntax, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type, bool hasErrors = false)
4879public BoundConvertedSwitchExpression Update(TypeSymbol? naturalTypeOpt, bool wasTargetTyped, BoundExpression expression, ImmutableArray<BoundSwitchExpressionArm> switchArms, BoundDecisionDag reachabilityDecisionDag, LabelSymbol? defaultLabel, bool reportedNotExhaustive, TypeSymbol type)
5000public BoundWhenDecisionDagNode(SyntaxNode syntax, ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse, bool hasErrors = false)
5014public BoundExpression? WhenExpression { get; }
5021public BoundWhenDecisionDagNode Update(ImmutableArray<BoundPatternBinding> bindings, BoundExpression? whenExpression, BoundDecisionDagNode whenTrue, BoundDecisionDagNode? whenFalse)
5422public BoundDagIndexerEvaluation(SyntaxNode syntax, TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false)
5448public BoundExpression IndexerAccess { get; }
5455public BoundDagIndexerEvaluation Update(TypeSymbol indexerType, BoundDagTemp lengthTemp, int index, BoundExpression indexerAccess, BoundListPatternReceiverPlaceholder receiverPlaceholder, BoundListPatternIndexPlaceholder argumentPlaceholder, BoundDagTemp input)
5469public BoundDagSliceEvaluation(SyntaxNode syntax, TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input, bool hasErrors = false)
5497public BoundExpression IndexerAccess { get; }
5504public BoundDagSliceEvaluation Update(TypeSymbol sliceType, BoundDagTemp lengthTemp, int startIndex, int endIndex, BoundExpression indexerAccess, BoundSlicePatternReceiverPlaceholder receiverPlaceholder, BoundSlicePatternRangePlaceholder argumentPlaceholder, BoundDagTemp input)
5579public BoundSwitchLabel(SyntaxNode syntax, LabelSymbol label, BoundPattern pattern, BoundExpression? whenClause, bool hasErrors = false)
5593public BoundExpression? WhenClause { get; }
5598public BoundSwitchLabel Update(LabelSymbol label, BoundPattern pattern, BoundExpression? whenClause)
5612protected BoundMethodOrPropertyGroup(BoundKind kind, SyntaxNode syntax, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false)
5620public BoundExpression? ReceiverOpt { get; }
5626public BoundSequencePointExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false)
5635public BoundExpression Expression { get; }
5640public BoundSequencePointExpression Update(BoundExpression expression, TypeSymbol? type)
5654public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5670public ImmutableArray<BoundExpression> SideEffects { get; }
5671public BoundExpression Value { get; }
5676public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type)
5690public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5707public BoundExpression Value { get; }
5712public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type)
5726public BoundDynamicMemberAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type, bool hasErrors = false)
5742public BoundExpression Receiver { get; }
5751public BoundDynamicMemberAccess Update(BoundExpression receiver, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, bool invoked, bool indexed, TypeSymbol type)
5765protected BoundDynamicInvocableBase(BoundKind kind, SyntaxNode syntax, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol? type, bool hasErrors = false)
5776public BoundExpression Expression { get; }
5777public ImmutableArray<BoundExpression> Arguments { get; }
5782public BoundDynamicInvocation(SyntaxNode syntax, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false)
5804public BoundDynamicInvocation Update(ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type)
5818public BoundConditionalAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type, bool hasErrors = false)
5831public BoundExpression Receiver { get; }
5832public BoundExpression AccessExpression { get; }
5837public BoundConditionalAccess Update(BoundExpression receiver, BoundExpression accessExpression, TypeSymbol type)
5851public BoundLoweredConditionalAccess(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type, bool hasErrors = false)
5868public BoundExpression Receiver { get; }
5870public BoundExpression WhenNotNull { get; }
5871public BoundExpression? WhenNullOpt { get; }
5878public BoundLoweredConditionalAccess Update(BoundExpression receiver, MethodSymbol? hasValueMethodOpt, BoundExpression whenNotNull, BoundExpression? whenNullOpt, int id, bool forceCopyOfNullableValueType, TypeSymbol type)
5930public BoundComplexConditionalReceiver(SyntaxNode syntax, BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type, bool hasErrors = false)
5943public BoundExpression ValueTypeReceiver { get; }
5944public BoundExpression ReferenceTypeReceiver { get; }
5949public BoundComplexConditionalReceiver Update(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver, TypeSymbol type)
5963public 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)
5990public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6004public BoundPropertyGroup(SyntaxNode syntax, ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false)
6018public BoundPropertyGroup Update(ImmutableArray<PropertySymbol> properties, BoundExpression? receiverOpt, LookupResultKind resultKind)
6032public BoundCall(SyntaxNode syntax, BoundExpression? receiverOpt, 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)
6055public BoundExpression? ReceiverOpt { get; }
6057public ImmutableArray<BoundExpression> Arguments { get; }
6071public BoundCall Update(BoundExpression? receiverOpt, 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)
6085public BoundEventAssignmentOperator(SyntaxNode syntax, EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type, bool hasErrors = false)
6104public BoundExpression? ReceiverOpt { get; }
6105public BoundExpression Argument { get; }
6110public BoundEventAssignmentOperator Update(EventSymbol @event, bool isAddition, bool isDynamic, BoundExpression? receiverOpt, BoundExpression argument, TypeSymbol type)
6124public 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)
6144public ImmutableArray<BoundExpression> ConstructorArguments { get; }
6155public BoundAttribute Update(MethodSymbol? constructor, ImmutableArray<BoundExpression> constructorArguments, ImmutableArray<string?> constructorArgumentNamesOpt, ImmutableArray<int> constructorArgumentsToParamsOpt, bool constructorExpanded, BitVector constructorDefaultArguments, ImmutableArray<BoundAssignmentOperator> namedArguments, LookupResultKind resultKind, TypeSymbol type)
6169public BoundUnconvertedObjectCreationExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder, bool hasErrors = false)
6184public ImmutableArray<BoundExpression> Arguments { get; }
6193public BoundUnconvertedObjectCreationExpression Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder)
6228public 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)
6252public override ImmutableArray<BoundExpression> Arguments { get; }
6265public 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)
6279protected BoundTupleExpression(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false)
6290public ImmutableArray<BoundExpression> Arguments { get; }
6297public BoundTupleLiteral(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false)
6310public BoundTupleLiteral Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type)
6324public BoundConvertedTupleLiteral(SyntaxNode syntax, BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type, bool hasErrors = false)
6340public BoundConvertedTupleLiteral Update(BoundTupleLiteral? sourceTuple, bool wasTargetTyped, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<bool> inferredNamesOpt, TypeSymbol? type)
6354public 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)
6373public override ImmutableArray<BoundExpression> Arguments { get; }
6383public BoundDynamicObjectCreationExpression Update(string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type)
6429protected BoundObjectInitializerExpressionBase(BoundKind kind, SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false)
6443public ImmutableArray<BoundExpression> Initializers { get; }
6448public BoundObjectInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false)
6462public BoundObjectInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type)
6476public BoundObjectInitializerMember(SyntaxNode syntax, Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, TypeSymbol receiverType, TypeSymbol type, bool hasErrors = false)
6497public ImmutableArray<BoundExpression> Arguments { get; }
6509public BoundObjectInitializerMember Update(Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, TypeSymbol receiverType, TypeSymbol type)
6568public BoundCollectionInitializerExpression(SyntaxNode syntax, BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type, bool hasErrors = false)
6582public BoundCollectionInitializerExpression Update(BoundObjectOrCollectionValuePlaceholder placeholder, ImmutableArray<BoundExpression> initializers, TypeSymbol type)
6596public 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)
6616public ImmutableArray<BoundExpression> Arguments { get; }
6617public BoundExpression? ImplicitReceiverOpt { get; }
6627public BoundCollectionElementInitializer Update(MethodSymbol addMethod, ImmutableArray<BoundExpression> arguments, BoundExpression? implicitReceiverOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, bool invokedAsExtensionMethod, LookupResultKind resultKind, TypeSymbol type)
6641public BoundDynamicCollectionElementInitializer(SyntaxNode syntax, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false)
6659public BoundDynamicCollectionElementInitializer Update(ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type)
6708public BoundAnonymousObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type, bool hasErrors = false)
6724public ImmutableArray<BoundExpression> Arguments { get; }
6730public BoundAnonymousObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<BoundAnonymousPropertyDeclaration> declarations, TypeSymbol type)
6814public BoundDelegateCreationExpression(SyntaxNode syntax, BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
6828public BoundExpression Argument { get; }
6836public BoundDelegateCreationExpression Update(BoundExpression argument, MethodSymbol? methodOpt, bool isExtensionMethod, bool wasTargetTyped, TypeSymbol type)
6850public BoundArrayCreation(SyntaxNode syntax, ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false)
6862public ImmutableArray<BoundExpression> Bounds { get; }
6868public BoundArrayCreation Update(ImmutableArray<BoundExpression> bounds, BoundArrayInitialization? initializerOpt, TypeSymbol type)
6882public BoundArrayInitialization(SyntaxNode syntax, bool isInferred, ImmutableArray<BoundExpression> initializers, bool hasErrors = false)
6894public ImmutableArray<BoundExpression> Initializers { get; }
6899public BoundArrayInitialization Update(bool isInferred, ImmutableArray<BoundExpression> initializers)
6913protected BoundStackAllocArrayCreationBase(BoundKind kind, SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false)
6926public BoundExpression Count { get; }
6932public BoundStackAllocArrayCreation(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type, bool hasErrors = false)
6945public BoundStackAllocArrayCreation Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol? type)
6959public BoundConvertedStackAllocExpression(SyntaxNode syntax, TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type, bool hasErrors = false)
6974public BoundConvertedStackAllocExpression Update(TypeSymbol elementType, BoundExpression count, BoundArrayInitialization? initializerOpt, TypeSymbol type)
6988public BoundFieldAccess(SyntaxNode syntax, BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type, bool hasErrors = false)
7004public BoundExpression? ReceiverOpt { get; }
7014public BoundFieldAccess Update(BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type)
7068public BoundPropertyAccess(SyntaxNode syntax, BoundExpression? receiverOpt, PropertySymbol propertySymbol, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false)
7081public BoundExpression? ReceiverOpt { get; }
7088public BoundPropertyAccess Update(BoundExpression? receiverOpt, PropertySymbol propertySymbol, LookupResultKind resultKind, TypeSymbol type)
7102public BoundEventAccess(SyntaxNode syntax, BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false)
7116public BoundExpression? ReceiverOpt { get; }
7124public BoundEventAccess Update(BoundExpression? receiverOpt, EventSymbol eventSymbol, bool isUsableAsField, LookupResultKind resultKind, TypeSymbol type)
7138public BoundIndexerAccess(SyntaxNode syntax, BoundExpression? receiverOpt, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type, bool hasErrors = false)
7158public BoundExpression? ReceiverOpt { get; }
7160public ImmutableArray<BoundExpression> Arguments { get; }
7171public BoundIndexerAccess Update(BoundExpression? receiverOpt, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type)
7185public BoundImplicitIndexerAccess(SyntaxNode syntax, BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type, bool hasErrors = false)
7210public BoundExpression Receiver { get; }
7211public BoundExpression Argument { get; }
7212public BoundExpression LengthOrCountAccess { get; }
7214public BoundExpression IndexerOrSliceAccess { get; }
7220public BoundImplicitIndexerAccess Update(BoundExpression receiver, BoundExpression argument, BoundExpression lengthOrCountAccess, BoundImplicitIndexerReceiverPlaceholder receiverPlaceholder, BoundExpression indexerOrSliceAccess, ImmutableArray<BoundImplicitIndexerValuePlaceholder> argumentPlaceholders, TypeSymbol type)
7234public BoundDynamicIndexerAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type, bool hasErrors = false)
7251public BoundExpression Receiver { get; }
7252public ImmutableArray<BoundExpression> Arguments { get; }
7260public BoundDynamicIndexerAccess Update(BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type)
7358public BoundQueryClause(SyntaxNode syntax, BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type, bool hasErrors = false)
7375public BoundExpression Value { get; }
7377public BoundExpression? Operation { get; }
7378public BoundExpression? Cast { get; }
7380public BoundExpression? UnoptimizedForm { get; }
7385public BoundQueryClause Update(BoundExpression value, RangeVariableSymbol? definedSymbol, BoundExpression? operation, BoundExpression? cast, Binder binder, BoundExpression? unoptimizedForm, TypeSymbol type)
7425public BoundNameOfOperator(SyntaxNode syntax, BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type, bool hasErrors = false)
7438public BoundExpression Argument { get; }
7444public BoundNameOfOperator Update(BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type)
7458protected BoundInterpolatedStringBase(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7468public ImmutableArray<BoundExpression> Parts { get; }
7474public BoundUnconvertedInterpolatedString(SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7486public BoundUnconvertedInterpolatedString Update(ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type)
7500public BoundInterpolatedString(SyntaxNode syntax, InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7514public BoundInterpolatedString Update(InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type)
7594public BoundStringInsert(SyntaxNode syntax, BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall, bool hasErrors = false)
7607public BoundExpression Value { get; }
7608public BoundExpression? Alignment { get; }
7615public BoundStringInsert Update(BoundExpression value, BoundExpression? alignment, BoundLiteral? format, bool isInterpolatedStringHandlerAppendCall)
7629public BoundIsPatternExpression(SyntaxNode syntax, BoundExpression expression, BoundPattern pattern, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type, bool hasErrors = false)
7647public BoundExpression Expression { get; }
7657public BoundIsPatternExpression Update(BoundExpression expression, BoundPattern pattern, bool isNegated, BoundDecisionDag reachabilityDecisionDag, LabelSymbol whenTrueLabel, LabelSymbol whenFalseLabel, TypeSymbol? type)
7699public BoundConstantPattern(SyntaxNode syntax, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7712public BoundExpression Value { get; }
7718public BoundConstantPattern Update(BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType)
7768protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7780public BoundExpression? VariableAccess { get; }
7785public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7803public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
7817public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7840public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
7854public 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)
7876public BoundExpression? LengthAccess { get; }
7877public BoundExpression? IndexerAccess { get; }
7884public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
7898public BoundSlicePattern(SyntaxNode syntax, BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
7916public BoundExpression? IndexerAccess { get; }
7923public BoundSlicePattern Update(BoundPattern? pattern, BoundExpression? indexerAccess, BoundSlicePatternReceiverPlaceholder? receiverPlaceholder, BoundSlicePatternRangePlaceholder? argumentPlaceholder, TypeSymbol inputType, TypeSymbol narrowedType)
8174public BoundRelationalPattern(SyntaxNode syntax, BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8189public BoundExpression Value { get; }
8195public BoundRelationalPattern Update(BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType)
8244public BoundThrowExpression(SyntaxNode syntax, BoundExpression expression, TypeSymbol? type, bool hasErrors = false)
8253public BoundExpression Expression { get; }
8258public BoundThrowExpression Update(BoundExpression expression, TypeSymbol? type)
8272protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8284public BoundExpression? ReceiverOpt { get; }
8289public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8301public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8315public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8327public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8442public BoundExpressionWithNullability(SyntaxNode syntax, BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type, bool hasErrors = false)
8452public BoundExpression Expression { get; }
8459public BoundExpressionWithNullability Update(BoundExpression expression, NullableAnnotation nullableAnnotation, TypeSymbol? type)
8473public BoundWithExpression(SyntaxNode syntax, BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type, bool hasErrors = false)
8487public BoundExpression Receiver { get; }
8494public BoundWithExpression Update(BoundExpression receiver, MethodSymbol? cloneMethod, BoundObjectInitializerExpressionBase initializerExpression, TypeSymbol type)
10422BoundExpression value = (BoundExpression)this.Visit(node.Value);
10427BoundExpression value = (BoundExpression)this.Visit(node.Value);
10432BoundExpression value = (BoundExpression)this.Visit(node.Value);
10447BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
10513BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10519ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes);
10536ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt);
10552BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10559BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10561BoundExpression? operandConversion = node.OperandConversion;
10563BoundExpression? resultConversion = node.ResultConversion;
10570BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10588BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10594BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10595BoundExpression index = (BoundExpression)this.Visit(node.Index);
10601BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression);
10602ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
10608BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10614BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10620BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10626BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10632BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt);
10633BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt);
10639BoundExpression left = (BoundExpression)this.Visit(node.Left);
10640BoundExpression right = (BoundExpression)this.Visit(node.Right);
10646BoundExpression left = (BoundExpression)this.Visit(node.Left);
10647BoundExpression right = (BoundExpression)this.Visit(node.Right);
10653BoundExpression left = (BoundExpression)this.Visit(node.Left);
10654BoundExpression right = (BoundExpression)this.Visit(node.Right);
10661BoundExpression left = (BoundExpression)this.Visit(node.Left);
10662BoundExpression right = (BoundExpression)this.Visit(node.Right);
10664BoundExpression? leftConversion = node.LeftConversion;
10666BoundExpression? finalConversion = node.FinalConversion;
10672BoundExpression left = (BoundExpression)this.Visit(node.Left);
10673BoundExpression right = (BoundExpression)this.Visit(node.Right);
10686BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand);
10687BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand);
10689BoundExpression? leftConversion = node.LeftConversion;
10695BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand);
10696BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand);
10702BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
10703BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence);
10704BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative);
10710BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
10711BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence);
10712BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative);
10719BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10720ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices);
10726BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10733BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter);
10738BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10823BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10830BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10833BoundExpression? operandConversion = node.OperandConversion;
10845BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10851BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
10862ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
10869BoundExpression? elementPointerConversion = node.ElementPointerConversion;
10870BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10907BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt);
10908ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt);
10931BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt);
10936BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10942BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt);
10947BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10954BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10962BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
10967BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
10974BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
10980BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
10987BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition);
10995BoundExpression? elementConversion = node.ElementConversion;
10997BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt);
10998BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11013BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt);
11026BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
11039BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt);
11041BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt);
11088BoundExpression value = (BoundExpression)this.Visit(node.Value);
11100BoundExpression? caseExpressionOpt = (BoundExpression?)this.Visit(node.CaseExpressionOpt);
11121BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
11127BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause);
11128BoundExpression value = (BoundExpression)this.Visit(node.Value);
11133BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11141BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11168BoundExpression? whenExpression = (BoundExpression?)this.Visit(node.WhenExpression);
11235BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess);
11245BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess);
11267BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause);
11272BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11278ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects);
11279BoundExpression value = (BoundExpression)this.Visit(node.Value);
11286BoundExpression value = (BoundExpression)this.Visit(node.Value);
11292BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11298BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11299ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11305BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11306BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression);
11312BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11313BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull);
11314BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt);
11325BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver);
11326BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver);
11332BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11338BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11344BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11345ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11351BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11352BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
11358ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments);
11365ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11371ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11378ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11385ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11391ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11405ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
11411ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11425ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
11431ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11432BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt);
11438BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11439ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11450ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11468BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
11474ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds);
11481ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
11487BoundExpression count = (BoundExpression)this.Visit(node.Count);
11495BoundExpression count = (BoundExpression)this.Visit(node.Count);
11503BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11514BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11520BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11526BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11527ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11533BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11534BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
11535BoundExpression lengthOrCountAccess = node.LengthOrCountAccess;
11537BoundExpression indexerOrSliceAccess = node.IndexerOrSliceAccess;
11544BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11545ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
11563BoundExpression value = (BoundExpression)this.Visit(node.Value);
11564BoundExpression? operation = node.Operation;
11565BoundExpression? cast = node.Cast;
11566BoundExpression? unoptimizedForm = node.UnoptimizedForm;
11577BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
11583ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts);
11589ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts);
11605BoundExpression value = (BoundExpression)this.Visit(node.Value);
11606BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment);
11613BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11621BoundExpression value = (BoundExpression)this.Visit(node.Value);
11635BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
11645BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
11653BoundExpression? lengthAccess = node.LengthAccess;
11654BoundExpression? indexerAccess = node.IndexerAccess;
11657BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
11665BoundExpression? indexerAccess = node.IndexerAccess;
11720BoundExpression value = (BoundExpression)this.Visit(node.Value);
11732BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11738BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11744BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
11768BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
11774BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11783private readonly ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> _updatedNullabilities;
11787public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
11798BoundExpression value = (BoundExpression)this.Visit(node.Value);
11806BoundExpression value = (BoundExpression)this.Visit(node.Value);
11814BoundExpression value = (BoundExpression)this.Visit(node.Value);
11832BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
11998BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12016ImmutableArray<BoundExpression> childBoundNodes = this.VisitList(node.ChildBoundNodes);
12034ImmutableArray<BoundExpression> boundDimensionsOpt = this.VisitList(node.BoundDimensionsOpt);
12078BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12098BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12100BoundExpression? operandConversion = node.OperandConversion;
12102BoundExpression? resultConversion = node.ResultConversion;
12119BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12171BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12188BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12189BoundExpression index = (BoundExpression)this.Visit(node.Index);
12206BoundExpression invokedExpression = (BoundExpression)this.Visit(node.InvokedExpression);
12207ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
12225BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12242BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12259BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12277BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12295BoundExpression? leftOperandOpt = (BoundExpression?)this.Visit(node.LeftOperandOpt);
12296BoundExpression? rightOperandOpt = (BoundExpression?)this.Visit(node.RightOperandOpt);
12313BoundExpression left = (BoundExpression)this.Visit(node.Left);
12314BoundExpression right = (BoundExpression)this.Visit(node.Right);
12332BoundExpression left = (BoundExpression)this.Visit(node.Left);
12333BoundExpression right = (BoundExpression)this.Visit(node.Right);
12335BoundExpression? leftConversion = node.LeftConversion;
12337BoundExpression? finalConversion = node.FinalConversion;
12354BoundExpression left = (BoundExpression)this.Visit(node.Left);
12355BoundExpression right = (BoundExpression)this.Visit(node.Right);
12390BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand);
12391BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand);
12393BoundExpression? leftConversion = node.LeftConversion;
12410BoundExpression leftOperand = (BoundExpression)this.Visit(node.LeftOperand);
12411BoundExpression rightOperand = (BoundExpression)this.Visit(node.RightOperand);
12428BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
12429BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence);
12430BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative);
12448BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
12449BoundExpression consequence = (BoundExpression)this.Visit(node.Consequence);
12450BoundExpression alternative = (BoundExpression)this.Visit(node.Alternative);
12467BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12468ImmutableArray<BoundExpression> indices = this.VisitList(node.Indices);
12485BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12505BoundExpression? getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter);
12511BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12745BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12763BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12766BoundExpression? operandConversion = node.OperandConversion;
12801BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12819BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
12848ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
12868BoundExpression? elementPointerConversion = node.ElementPointerConversion;
12869BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12911BoundExpression? initializerOpt = (BoundExpression?)this.Visit(node.InitializerOpt);
12912ImmutableArray<BoundExpression> argumentsOpt = this.VisitList(node.ArgumentsOpt);
12928BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12938BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
12946BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
12956BoundExpression? condition = (BoundExpression?)this.Visit(node.Condition);
12966BoundExpression? elementConversion = node.ElementConversion;
12968BoundExpression? iterationErrorExpressionOpt = (BoundExpression?)this.Visit(node.IterationErrorExpressionOpt);
12969BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
12980BoundExpression? expressionOpt = (BoundExpression?)this.Visit(node.ExpressionOpt);
12998BoundExpression? exceptionSourceOpt = (BoundExpression?)this.Visit(node.ExceptionSourceOpt);
13000BoundExpression? exceptionFilterOpt = (BoundExpression?)this.Visit(node.ExceptionFilterOpt);
13114BoundExpression value = (BoundExpression)this.Visit(node.Value);
13162BoundExpression? whenClause = (BoundExpression?)this.Visit(node.WhenClause);
13163BoundExpression value = (BoundExpression)this.Visit(node.Value);
13169BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
13189BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
13238BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess);
13249BoundExpression indexerAccess = (BoundExpression)this.Visit(node.IndexerAccess);
13266BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
13284ImmutableArray<BoundExpression> sideEffects = this.VisitList(node.SideEffects);
13285BoundExpression value = (BoundExpression)this.Visit(node.Value);
13304BoundExpression value = (BoundExpression)this.Visit(node.Value);
13321BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
13339BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
13340ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13357BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
13358BoundExpression accessExpression = (BoundExpression)this.Visit(node.AccessExpression);
13376BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
13377BoundExpression whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull);
13378BoundExpression? whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt);
13407BoundExpression valueTypeReceiver = (BoundExpression)this.Visit(node.ValueTypeReceiver);
13408BoundExpression referenceTypeReceiver = (BoundExpression)this.Visit(node.ReferenceTypeReceiver);
13428BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13446BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13465BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13466ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13484BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13485BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
13503ImmutableArray<BoundExpression> constructorArguments = this.VisitList(node.ConstructorArguments);
13521ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13540ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13558ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13576ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13594ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13630ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
13649ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13684ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
13702ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13703BoundExpression? implicitReceiverOpt = (BoundExpression?)this.Visit(node.ImplicitReceiverOpt);
13721BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
13722ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13752ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13805BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
13822ImmutableArray<BoundExpression> bounds = this.VisitList(node.Bounds);
13840ImmutableArray<BoundExpression> initializers = this.VisitList(node.Initializers);
13858BoundExpression count = (BoundExpression)this.Visit(node.Count);
13877BoundExpression count = (BoundExpression)this.Visit(node.Count);
13896BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13931BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13949BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13968BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
13969ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
13987BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
13988ImmutableArray<BoundExpression> arguments = this.VisitList(node.Arguments);
14042BoundExpression value = (BoundExpression)this.Visit(node.Value);
14043BoundExpression? operation = node.Operation;
14044BoundExpression? cast = node.Cast;
14045BoundExpression? unoptimizedForm = node.UnoptimizedForm;
14062BoundExpression argument = (BoundExpression)this.Visit(node.Argument);
14079ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts);
14096ImmutableArray<BoundExpression> parts = this.VisitList(node.Parts);
14137BoundExpression value = (BoundExpression)this.Visit(node.Value);
14138BoundExpression? alignment = (BoundExpression?)this.Visit(node.Alignment);
14156BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
14177BoundExpression value = (BoundExpression)this.Visit(node.Value);
14194BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
14207BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
14217BoundExpression? lengthAccess = node.LengthAccess;
14218BoundExpression? indexerAccess = node.IndexerAccess;
14221BoundExpression? variableAccess = (BoundExpression?)this.Visit(node.VariableAccess);
14230BoundExpression? indexerAccess = node.IndexerAccess;
14289BoundExpression value = (BoundExpression)this.Visit(node.Value);
14307BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
14325BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
14343BoundExpression? receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
14386BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
14404BoundExpression receiver = (BoundExpression)this.Visit(node.Receiver);
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (20)
63private readonly Dictionary<BoundValuePlaceholderBase, BoundExpression> _placeholderMap;
96_placeholderMap = new Dictionary<BoundValuePlaceholderBase, BoundExpression>();
228? ImmutableArray.Create<BoundExpression>(F.Local(_exprRetValue))
229: ImmutableArray<BoundExpression>.Empty));
326BoundExpression expr = (BoundExpression)this.Visit(node.Expression);
342private BoundBlock VisitAwaitExpression(BoundAwaitExpression node, BoundExpression resultPlace)
344var expression = (BoundExpression)Visit(node.Expression);
352var getAwaiter = node.AwaitableInfo.IsDynamic ?
354(BoundExpression)Visit(node.AwaitableInfo.GetAwaiter);
356resultPlace = (BoundExpression)Visit(resultPlace);
384BoundExpression getResultCall = MakeCallMaybeDynamic(
406private BoundExpression MakeCallMaybeDynamic(
407BoundExpression receiver,
428loweredArguments: ImmutableArray<BoundExpression>.Empty,
435private BoundExpression GenerateGetIsCompleted(LocalSymbol awaiterTemp, MethodSymbol getIsCompletedMethod)
616BoundExpression result =
626ImmutableArray.Create<BoundExpression>(F.AssignmentExpression(F.Local(thisTemp), F.This())),
644F.Assignment(F.Local(_exprRetValue), (BoundExpression)Visit(node.ExpressionOpt)),
Lowering\ClosureConversion\ClosureConversion.cs (50)
120private BoundExpression _thisProxyInitDeferred;
569private BoundExpression FrameOfType(SyntaxNode syntax, NamedTypeSymbol frameType)
571BoundExpression result = FramePointer(syntax, frameType.OriginalDefinition);
584protected override BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass)
634result.Add(new BoundExpressionStatement(node.Syntax, (BoundExpression)(BoundNode)node));
648private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F)
661var prologue = ArrayBuilder<BoundExpression>.GetInstance();
682BoundExpression left = new BoundFieldAccess(syntax, new BoundLocal(syntax, framePointer, null, frameType), frameParent, null);
683BoundExpression right = FrameOfType(syntax, frameParent.Type as NamedTypeSymbol);
684BoundExpression assignment = new BoundAssignmentOperator(syntax, left, right, left.Type);
733private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue)
738BoundExpression value;
772var left = proxy.Replacement(syntax, frameType1 => new BoundLocal(syntax, framePointer, null, framePointer.Type));
856out BoundExpression receiver,
858ref ImmutableArray<BoundExpression> arguments,
875var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(loweredSymbol.ParameterCount);
894var frame = FrameOfType(syntax, frameType);
1001out BoundExpression receiver,
1067out var receiver,
1108sideEffects: ImmutableArray.Create<BoundExpression>(rewritten),
1118private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1122foreach (var effect in node.SideEffects)
1124var replacement = (BoundExpression)this.Visit(effect);
1128var newValue = (BoundExpression)this.Visit(node.Value);
1139return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1144return RewriteBlock(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1148private BoundBlock RewriteBlock(BoundBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1203return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1210return RewriteCatch(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1214private BoundNode RewriteCatch(BoundCatchBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1222BoundExpression rewrittenExceptionSource = null;
1224var rewrittenFilter = (BoundExpression)this.Visit(node.ExceptionFilterOpt);
1227rewrittenExceptionSource = (BoundExpression)Visit(node.ExceptionSourceOpt);
1242foreach (var p in prologue)
1277return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1284return RewriteSequence(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1294return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1324var arguments = default(ImmutableArray<BoundExpression>);
1330out var receiver,
1351ImmutableArray<BoundExpression> arguments = default;
1357out BoundExpression receiver,
1381var result = (BoundExpression)RewriteLambdaConversion((BoundLambda)conversion.Operand);
1621BoundExpression receiver;
1633BoundExpression result = new BoundDelegateCreationExpression(
1660BoundExpression cache;
1703return new BoundBadExpression(F.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (140)
21private readonly Dictionary<ParameterSymbol, BoundExpression> _parameterMap = new Dictionary<ParameterSymbol, BoundExpression>();
119var result = r.VisitLambdaInternal(node);
133private BoundExpression TranslateLambdaBody(BoundBlock block)
143var result = Visit(((BoundReturnStatement)stmt).ExpressionOpt);
167private BoundExpression Visit(BoundExpression node)
176var result = VisitInternal(node);
181private BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
255private BoundExpression VisitInternal(BoundExpression node)
257BoundExpression result;
281private BoundExpression VisitExpressionWithStackGuard(BoundExpression node)
293private BoundExpression VisitArrayAccess(BoundArrayAccess node)
295var array = Visit(node.Expression);
298var arg = node.Indices[0];
299var index = Visit(arg);
312private BoundExpression Indices(ImmutableArray<BoundExpression> expressions)
314var builder = ArrayBuilder<BoundExpression>.GetInstance();
315foreach (var arg in expressions)
317var index = Visit(arg);
328private BoundExpression Expressions(ImmutableArray<BoundExpression> expressions)
330var builder = ArrayBuilder<BoundExpression>.GetInstance();
331foreach (var arg in expressions)
339private BoundExpression VisitArrayCreation(BoundArrayCreation node)
342var boundType = _bound.Typeof(arrayType.ElementType);
353return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
362private BoundExpression VisitArrayLength(BoundArrayLength node)
367private BoundExpression VisitAsOperator(BoundAsOperator node)
371var operand = _bound.Null(_bound.SpecialType(SpecialType.System_Object));
380private BoundExpression VisitBaseReference(BoundBaseReference node)
384return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
421private BoundExpression VisitBinaryOperator(BinaryOperatorKind opKind, MethodSymbol methodOpt, TypeSymbol type, BoundExpression left, BoundExpression right)
443var enumOperand = (opKind.OperandTypes() == BinaryOperatorKind.UnderlyingAndEnum) ? right : left;
450var loweredLeft = VisitAndPromoteEnumOperand(left, promotedType, isChecked);
451var loweredRight = VisitAndPromoteEnumOperand(right, promotedType, isChecked);
453var result = MakeBinary(methodOpt, type, isLifted, requiresLifted, opName, loweredLeft, loweredRight);
458var loweredLeft = Visit(left);
459var loweredRight = Visit(right);
465private static BoundExpression DemoteEnumOperand(BoundExpression operand)
482private BoundExpression VisitAndPromoteEnumOperand(BoundExpression operand, TypeSymbol promotedType, bool isChecked)
495var demotedOperand = DemoteEnumOperand(operand);
496var loweredOperand = Visit(demotedOperand);
501private BoundExpression MakeBinary(MethodSymbol methodOpt, TypeSymbol type, bool isLifted, bool requiresLifted, string opName, BoundExpression loweredLeft, BoundExpression loweredRight)
528private BoundExpression Demote(BoundExpression node, TypeSymbol type, bool isChecked)
548private BoundExpression ConvertIndex(BoundExpression expr, TypeSymbol oldType, TypeSymbol newType)
566private BoundExpression VisitCall(BoundCall node)
585private BoundExpression VisitConditionalOperator(BoundConditionalOperator node)
587var condition = Visit(node.Condition);
588var consequence = VisitExactType(node.Consequence);
589var alternative = VisitExactType(node.Alternative);
597private BoundExpression VisitExactType(BoundExpression e)
616private BoundExpression VisitConversion(BoundConversion node)
638var e1 = requireAdditionalCast
641var e2 = ExprFactory(node.Checked && SyntaxFacts.IsCheckedOperator(method.Name) ? "ConvertChecked" : "Convert", e1, _bound.Typeof(resultType), _bound.MethodInfo(method));
647var operand = Visit(node.Operand);
660var e1 = Convert(Visit(node.Operand), node.Operand.Type, intermediate, node.Checked, false);
670private BoundExpression Convert(BoundExpression operand, TypeSymbol oldType, TypeSymbol newType, bool isChecked, bool isExplicit)
675private BoundExpression Convert(BoundExpression expr, TypeSymbol type, bool isChecked)
680private BoundExpression DelegateCreation(BoundExpression receiver, MethodSymbol method, TypeSymbol delegateType, bool requiresInstanceReceiver)
682var nullObject = _bound.Null(_objectType);
686BoundExpression unquoted;
706private BoundExpression VisitDelegateCreationExpression(BoundDelegateCreationExpression node)
729private BoundExpression VisitFieldAccess(BoundFieldAccess node)
731var receiver = node.FieldSymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt);
737private BoundExpression VisitIsOperator(BoundIsOperator node)
739var operand = node.Operand;
748private BoundExpression VisitLambda(BoundLambda node)
750var result = VisitLambdaInternal(node);
754private BoundExpression VisitLambdaInternal(BoundLambda node)
758var initializers = ArrayBuilder<BoundExpression>.GetInstance();
759var parameters = ArrayBuilder<BoundExpression>.GetInstance();
766var parameter = ExprFactory(
774var result = _bound.Sequence(locals.ToImmutableAndFree(), initializers.ToImmutableAndFree(),
789private BoundExpression VisitNewT(BoundNewT node)
794private BoundExpression VisitNullCoalescingOperator(BoundNullCoalescingOperator node)
796var left = Visit(node.LeftOperand);
797var right = Visit(node.RightOperand);
810private BoundExpression MakeConversionLambda(Conversion conversion, TypeSymbol fromType, TypeSymbol toType)
816var parameter = ExprFactory("Parameter", _bound.Typeof(fromType), _bound.Literal(parameterName));
818var convertedValue = Visit(_bound.Convert(toType, _bound.Parameter(lambdaParameter), conversion));
820var result = _bound.Sequence(
822ImmutableArray.Create<BoundExpression>(_bound.AssignmentExpression(parameterReference, parameter)),
826_bound.ArrayOrEmpty(ParameterExpressionType, ImmutableArray.Create<BoundExpression>(parameterReference))));
830private BoundExpression InitializerMemberSetter(Symbol symbol)
845private BoundExpression InitializerMemberGetter(Symbol symbol)
862private BoundExpression VisitInitializer(BoundExpression node, out InitializerKind kind)
869var builder = ArrayBuilder<BoundExpression>.GetInstance();
878var value = VisitInitializer(a.Right, out elementKind);
883var left = InitializerMemberGetter(sym);
889var left = InitializerMemberSetter(sym);
895var left = InitializerMemberGetter(sym);
914var builder = ArrayBuilder<BoundExpression>.GetInstance();
920BoundExpression elementInit = ExprFactory("ElementInit", _bound.MethodInfo(i.AddMethod), Expressions(i.Arguments));
935private BoundExpression VisitObjectCreationExpression(BoundObjectCreationExpression node)
940private BoundExpression VisitObjectCreationContinued(BoundExpression creation, BoundExpression initializerExpressionOpt)
942var result = creation;
945var init = VisitInitializer(initializerExpressionOpt, out initializerKind);
957private BoundExpression VisitObjectCreationExpressionInternal(BoundObjectCreationExpression node)
972var ctor = _bound.ConstructorInfo(node.Constructor);
973var args = _bound.Convert(_IEnumerableType.Construct(ExpressionType), Expressions(node.Arguments));
977var membersBuilder = ArrayBuilder<BoundExpression>.GetInstance();
991private BoundExpression VisitParameter(BoundParameter node)
996private static BoundExpression VisitPointerIndirectionOperator(BoundPointerIndirectionOperator node)
1000return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1003private static BoundExpression VisitPointerElementAccess(BoundPointerElementAccess node)
1007return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1010private BoundExpression VisitPropertyAccess(BoundPropertyAccess node)
1012var receiver = node.PropertySymbol.IsStatic ? _bound.Null(ExpressionType) : Visit(node.ReceiverOpt);
1035private static BoundExpression VisitSizeOfOperator(BoundSizeOfOperator node)
1039return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1042private BoundExpression VisitUnaryOperator(BoundUnaryOperator node)
1044var arg = node.Operand;
1045var loweredArg = Visit(arg);
1077var result = ExprFactory(opname, loweredArg);
1088private BoundExpression ExprFactory(string name, params BoundExpression[] arguments)
1093private BoundExpression ExprFactory(string name, ImmutableArray<TypeSymbol> typeArgs, params BoundExpression[] arguments)
1098private BoundExpression Constant(BoundExpression node)
Lowering\Instrumentation\CompoundInstrumenter.cs (23)
92public override BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
127public override BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
137public override BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
152public override BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original)
157public override BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten)
162public override BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten)
167public override BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten)
187public override BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody)
197public override BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
209ref BoundExpression? rewrittenSource,
211ref BoundExpression? rewrittenFilter,
226public override BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
231public override BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\DebugInfoInjector.cs (16)
182public override BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
189public override BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
306public override BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
325public override BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
384public override BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody)
403ref BoundExpression? rewrittenSource,
405ref BoundExpression? rewrittenFilter,
433public override BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
440public override BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\Instrumenter.cs (23)
111public virtual BoundExpression InstrumentDoStatementCondition(BoundDoStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
119public virtual BoundExpression InstrumentWhileStatementCondition(BoundWhileStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
183public virtual BoundExpression InstrumentForStatementCondition(BoundForStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
197public virtual BoundExpression InstrumentIfStatementCondition(BoundIfStatement original, BoundExpression rewrittenCondition, SyntheticBoundNodeFactory factory)
219public virtual BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original)
226public virtual BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten)
231public virtual BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten)
236public virtual BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten)
264public virtual BoundStatement InstrumentSwitchWhenClauseConditionalGotoBody(BoundExpression original, BoundStatement ifConditionGotoBody)
280ref BoundExpression? rewrittenSource,
282ref BoundExpression? rewrittenFilter,
290public virtual BoundExpression InstrumentSwitchStatementExpression(BoundStatement original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
302public virtual BoundExpression InstrumentSwitchExpressionArmExpression(BoundExpression original, BoundExpression rewrittenExpression, SyntheticBoundNodeFactory factory)
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (28)
358public override BoundExpression InstrumentUserDefinedLocalAssignment(BoundAssignmentOperator original)
362var assignment = base.InstrumentUserDefinedLocalAssignment(original);
365BoundExpression? refAssignmentSourceIndex;
390if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex))
411private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression)
437private ImmutableArray<BoundExpression> MakeStoreLoggerArguments(
441BoundExpression value,
442BoundExpression? refAssignmentSourceIndex,
443BoundExpression index)
457var addressOf = value is BoundLocal or BoundParameter ?
458(BoundExpression)new BoundAddressOfOperator(_factory.Syntax, value, isManaged: false, parameter.Type) :
468BoundExpression toString;
487private BoundExpression VariableRead(Symbol localOrParameterSymbol)
497ref BoundExpression? rewrittenSource,
499ref BoundExpression? rewrittenFilter,
525var targetIndex = _factory.LocalId(targetSymbol);
545public override BoundExpression InstrumentCall(BoundCall original, BoundExpression rewritten)
548public override BoundExpression InstrumentObjectCreationExpression(BoundObjectCreationExpression original, BoundExpression rewritten)
551public override BoundExpression InstrumentFunctionPointerInvocation(BoundFunctionPointerInvocation original, BoundExpression rewritten)
554private BoundExpression InstrumentCall(BoundExpression invocation, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds)
564var builder = ArrayBuilder<BoundExpression>.GetInstance();
585if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex))
609var lastExpression = builder.Last();
Lowering\LocalRewriter\LocalRewriter.cs (28)
46private Dictionary<BoundValuePlaceholderBase, BoundExpression>? _placeholderReplacementMapDoNotUseDirectly;
190BoundExpression? expr = node as BoundExpression;
200private BoundExpression? VisitExpression(BoundExpression? node)
223private BoundExpression? VisitExpressionImpl(BoundExpression node)
235var visited = VisitExpressionWithStackGuard(node);
259private static BoundExpression RefAccessMustMakeCopy(BoundExpression visited)
269private static bool IsUnusedDeconstruction(BoundExpression node)
431private BoundExpression PlaceholderReplacement(BoundValuePlaceholderBase placeholder)
434var value = _placeholderReplacementMapDoNotUseDirectly[placeholder];
440private static void AssertPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value)
461private void AddPlaceholderReplacement(BoundValuePlaceholderBase placeholder, BoundExpression value)
467_placeholderReplacementMapDoNotUseDirectly = new Dictionary<BoundValuePlaceholderBase, BoundExpression>();
505private static BoundExpression BadExpression(BoundExpression node)
511private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child)
516private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, BoundExpression child1, BoundExpression child2)
521private static BoundExpression BadExpression(SyntaxNode syntax, TypeSymbol resultType, ImmutableArray<BoundExpression> children)
598var operand = this.VisitExpression(node.Operand);
807BoundExpression rhs = assignment.Right;
888internal static bool CanBePassedByReference(BoundExpression expr)
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (23)
131public bool MightAssignSomething(BoundExpression expr)
144if (node is BoundExpression { ConstantValueOpt: { } })
168private static bool MethodMayMutateReceiver(BoundExpression receiver, MethodSymbol method)
340BoundExpression loweredSwitchGoverningExpression,
342out BoundExpression savedInputExpression)
361BoundExpression inputTemp = _tempAllocator.GetTemp(BoundDagTemp.ForOriginalInput(loweredSwitchGoverningExpression));
448TryLowerTypeTestAndCast(testNode.Test, evaluationNode.Evaluation, out BoundExpression sideEffect, out BoundExpression test)
472private void GenerateTest(BoundExpression test, BoundDecisionDagNode whenTrue, BoundDecisionDagNode whenFalse, BoundDecisionDagNode nextNode)
659private void LowerValueDispatchNode(ValueDispatchNode n, BoundExpression input)
677private void LowerRelationalDispatchNode(ValueDispatchNode.RelationalDispatch rel, BoundExpression input)
679var test = MakeRelationalTest(rel.Syntax, input, rel.Operator, rel.Value);
743private void LowerSwitchDispatchNode(ValueDispatchNode.SwitchDispatch node, BoundExpression input)
1002var whenExpressionMap = PooledDictionary<BoundExpression, (LabelSymbol LabelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> WhenNodes)>.GetInstance();
1008var whenExpression = whenNode.WhenExpression;
1056var whenExpression = whenNode.WhenExpression;
1079void lowerWhenExpressionIfShared(BoundExpression whenExpression, LabelSymbol labelToWhenExpression, ArrayBuilder<BoundWhenDecisionDagNode> whenNodes)
1123void addConditionalGoto(BoundExpression whenExpression, SyntaxNode whenClauseSyntax, LabelSymbol whenTrueLabel, ArrayBuilder<BoundStatement> sectionBuilder)
1137bool isSharedWhenExpression(BoundExpression? whenExpression)
1181BoundExpression left = _localRewriter.VisitExpression(binding.VariableAccess);
1185BoundExpression right = _tempAllocator.GetTemp(binding.TempContainingValue);
1205BoundExpression sideEffect = LowerEvaluation(evaluationNode.Evaluation);
1226BoundExpression test = base.LowerTest(testNode.Test);
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (55)
56private readonly PooledDictionary<BoundDagTemp, BoundExpression> _map = PooledDictionary<BoundDagTemp, BoundExpression>.GetInstance();
94public BoundExpression GetTemp(BoundDagTemp dagTemp)
96if (!_map.TryGetValue(dagTemp, out BoundExpression result))
115public bool TrySetTemp(BoundDagTemp dagTemp, BoundExpression translation)
135protected BoundExpression LowerEvaluation(BoundDagEvaluation evaluation)
137BoundExpression input = _tempAllocator.GetTemp(evaluation.Input);
144BoundExpression output = _tempAllocator.GetTemp(outputTemp);
145BoundExpression access = _localRewriter.MakeFieldAccess(f.Syntax, input, field, null, LookupResultKind.Viable, field.Type);
154BoundExpression output = _tempAllocator.GetTemp(outputTemp);
162var argBuilder = ArrayBuilder<BoundExpression>.GetInstance();
163BoundExpression receiver;
164void addArg(RefKind refKind, BoundExpression expression)
209BoundExpression output = _tempAllocator.GetTemp(outputTemp);
215BoundExpression evaluated;
246BoundExpression output = _tempAllocator.GetTemp(outputTemp);
256var indexerAccess = e.IndexerAccess;
262var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance();
268var access = (BoundExpression)_localRewriter.Visit(indexerAccess);
271BoundExpression output = _tempAllocator.GetTemp(outputTemp);
282var indexerAccess = e.IndexerAccess;
288var placeholderValues = PooledDictionary<BoundEarlyValuePlaceholderBase, BoundExpression>.GetInstance();
294var access = (BoundExpression)_localRewriter.Visit(indexerAccess);
297BoundExpression output = _tempAllocator.GetTemp(outputTemp);
306BoundExpression makeUnloweredIndexArgument(int index)
320BoundExpression makeUnloweredRangeArgument(BoundDagSliceEvaluation e)
336protected BoundExpression LowerTest(BoundDagTest test)
339BoundExpression input = _tempAllocator.GetTemp(test.Input);
367private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind)
387protected BoundExpression MakeValueTest(SyntaxNode syntax, BoundExpression input, ConstantValue value)
401protected BoundExpression MakeRelationalTest(SyntaxNode syntax, BoundExpression input, BinaryOperatorKind operatorKind, ConstantValue value)
410BoundExpression literal = _localRewriter.MakeLiteral(syntax, value, input.Type);
431private BoundExpression MakeSpanStringTest(BoundExpression input, ConstantValue value)
461[NotNullWhen(true)] out BoundExpression sideEffect,
462[NotNullWhen(true)] out BoundExpression testExpression)
473BoundExpression input = _tempAllocator.GetTemp(test.Input);
474BoundExpression output = _tempAllocator.GetTemp(new BoundDagTemp(evaluation.Syntax, typeEvaluation1.Type, evaluation));
488BoundExpression input = _tempAllocator.GetTemp(test.Input);
490BoundExpression output = _tempAllocator.GetTemp(new BoundDagTemp(evaluation.Syntax, baseType, evaluation));
506BoundExpression loweredInput,
508Action<BoundExpression> addCode,
509out BoundExpression savedInputExpression)
567BoundExpression inputTemp = _tempAllocator.GetTemp(inputDagTemp);
612Action<BoundExpression> addCode,
614out BoundExpression savedInputExpression)
620var newArguments = ArrayBuilder<BoundExpression>.GetInstance(loweredInput.Arguments.Length);
625var expr = loweredInput.Arguments[i];
640void storeToTemp(BoundDagTemp temp, BoundExpression expr)
650var tempToHoldInput = _tempAllocator.GetTemp(temp);
Lowering\LocalRewriter\LocalRewriter_AssignmentOperator.cs (28)
21private BoundExpression VisitAssignmentOperator(BoundAssignmentOperator node, bool used)
23var loweredRight = VisitExpression(node.Right);
25BoundExpression left = node.Left;
26BoundExpression loweredLeft;
58var loweredReceiver = VisitExpression(memberAccess.Receiver);
66var loweredReceiver = VisitExpression(indexerAccess.Receiver);
91private BoundExpression MakeAssignmentOperator(SyntaxNode syntax, BoundExpression rewrittenLeft, BoundExpression rewrittenRight, TypeSymbol type,
139private BoundExpression MakeDynamicSetIndex(
141BoundExpression loweredReceiver,
142ImmutableArray<BoundExpression> loweredArguments,
145BoundExpression loweredRight,
166private BoundExpression MakeStaticAssignmentOperator(
168BoundExpression rewrittenLeft,
169BoundExpression rewrittenRight,
184BoundExpression? rewrittenReceiver = propertyAccess.ReceiverOpt;
191ImmutableArray<BoundExpression>.Empty,
204BoundExpression? rewrittenReceiver = indexerAccess.ReceiverOpt;
205ImmutableArray<BoundExpression> arguments = indexerAccess.Arguments;
275private BoundExpression MakePropertyAssignment(
277BoundExpression? rewrittenReceiver,
279ImmutableArray<BoundExpression> arguments,
283BoundExpression rewrittenRight,
336BoundExpression boundRhs = new BoundLocal(syntax, rhsTemp, null, exprType);
338BoundExpression rhsAssignment = new BoundAssignmentOperator(
344BoundExpression setterCall = BoundCall.Synthesized(
374ImmutableArray<BoundExpression>.Empty,
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (211)
74BoundExpression loweredLeft = VisitExpression(node.Left);
75BoundExpression loweredRight = VisitExpression(node.Right);
90var andOperatorCall = LowerUserDefinedBinaryOperator(syntax, operatorKind & ~BinaryOperatorKind.Logical, boundTemp, loweredRight, type, node.LogicalOperator, node.ConstrainedToTypeOpt);
93BoundExpression conditionalExpression = RewriteConditionalOperator(
106sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
111public BoundExpression VisitBinaryOperator(BoundBinaryOperator node, BoundUnaryOperator? applyParentUnaryOperator)
116ImmutableArray<BoundExpression> parts = CollectBinaryOperatorInterpolatedStringParts(node);
145BoundExpression loweredLeft = VisitExpression(stack.Peek().Left);
149BoundExpression loweredRight = VisitExpression(original.Right);
158private static ImmutableArray<BoundExpression> CollectBinaryOperatorInterpolatedStringParts(BoundBinaryOperator node)
162var partsBuilder = ArrayBuilder<BoundExpression>.GetInstance();
164static (BoundInterpolatedString interpolatedString, ArrayBuilder<BoundExpression> partsBuilder) =>
172private BoundExpression MakeBinaryOperator(
175BoundExpression loweredLeft,
176BoundExpression loweredRight,
187private BoundExpression MakeBinaryOperator(
191BoundExpression loweredLeft,
192BoundExpression loweredRight,
535private BoundExpression RewriteLiftedBinaryOperator(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt)
552var result = operatorKind.IsComparison() ?
560BoundExpression? whenNullOpt = null;
588private BoundExpression UnconvertArrayLength(BoundArrayLength arrLength)
593private BoundExpression MakeDynamicLogicalBinaryOperator(
596BoundExpression loweredLeft,
597BoundExpression loweredRight,
643BoundExpression result;
664var op = _dynamicFactory.MakeDynamicBinaryOperator(operatorKind, loweredLeft, loweredRight, isCompoundAssignment, type).ToExpression();
678BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd);
694BoundExpression leftTest = MakeTruthTestForDynamicLogicalOperator(syntax, loweredLeft, boolean, leftTruthOperator, constrainedToTypeOpt, negative: isAnd);
695var convertedLeft = MakeConversionNode(loweredLeft, type, @checked: false);
703return _factory.Sequence(ImmutableArray.Create(temp.LocalSymbol), ImmutableArray.Create<BoundExpression>(tempAssignment), result);
709private static ConstantValue? UnboxConstant(BoundExpression expression)
723private BoundExpression MakeTruthTestForDynamicLogicalOperator(SyntaxNode syntax, BoundExpression loweredLeft, TypeSymbol boolean, MethodSymbol? leftTruthOperator, TypeSymbol? constrainedToTypeOpt, bool negative)
742var converted = MakeConversionNode(loweredLeft, boolean, @checked: false, markAsChecked: true); // The conversion was checked in binding
760private BoundExpression LowerUserDefinedBinaryOperator(
763BoundExpression loweredLeft,
764BoundExpression loweredRight,
782private BoundExpression? TrivialLiftedComparisonOperatorOptimizations(
785BoundExpression left,
786BoundExpression right,
808BoundExpression? leftNonNull = NullableAlwaysHasValue(left);
809BoundExpression? rightNonNull = NullableAlwaysHasValue(right);
830BoundExpression result = MakeLiteral(syntax, ConstantValue.Create(operatorKind == BinaryOperatorKind.NotEqual), boolType);
832BoundExpression? nonNull = leftAlwaysNull ? rightNonNull : leftNonNull;
840sideEffects: ImmutableArray.Create<BoundExpression>(nonNull),
855BoundExpression maybeNull = leftAlwaysNull ? right : left;
859BoundExpression callHasValue = _factory.MakeNullableHasValue(syntax, maybeNull);
860BoundExpression result = operatorKind == BinaryOperatorKind.Equal ?
867BoundExpression falseExpr = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual);
875private BoundExpression MakeOptimizedGetValueOrDefault(SyntaxNode syntax, BoundExpression expression)
889private BoundExpression MakeBooleanConstant(SyntaxNode syntax, bool value)
894private BoundExpression MakeOptimizedHasValue(SyntaxNode syntax, BoundExpression expression)
908private BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression)
914private BoundExpression LowerLiftedBuiltInComparisonOperator(
917BoundExpression loweredLeft,
918BoundExpression loweredRight)
934BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method: null, constrainedToTypeOpt: null);
973BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft);
974BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight);
979BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX);
980BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY);
981BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX);
982BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY);
1004BoundExpression leftExpression = MakeBinaryOperator(
1014BoundExpression rightExpression = MakeBinaryOperator(
1025BoundExpression binaryExpression = MakeBinaryOperator(
1048sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY),
1053private BoundExpression LowerLiftedUserDefinedComparisonOperator(
1056BoundExpression loweredLeft,
1057BoundExpression loweredRight,
1063BoundExpression? optimized = TrivialLiftedComparisonOperatorOptimizations(syntax, kind, loweredLeft, loweredRight, method, constrainedToTypeOpt);
1118BoundExpression? xNonNull = NullableAlwaysHasValue(loweredLeft);
1119BoundExpression? yNonNull = NullableAlwaysHasValue(loweredRight);
1133BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX);
1134BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY);
1135BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX);
1136BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY);
1154BoundExpression condition = MakeBinaryOperator(
1164BoundExpression unliftedOp = MakeBinaryOperator(
1173BoundExpression consequence;
1193BoundExpression alternative = MakeBooleanConstant(syntax, operatorKind == BinaryOperatorKind.NotEqual);
1195BoundExpression conditionalExpression = RewriteConditionalOperator(
1207sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY),
1212private BoundExpression? TrivialLiftedBinaryArithmeticOptimizations(
1215BoundExpression left,
1216BoundExpression right,
1241BoundExpression? leftNonNull = NullableAlwaysHasValue(left);
1242BoundExpression? rightNonNull = NullableAlwaysHasValue(right);
1252private BoundExpression MakeLiftedBinaryOperatorConsequence(
1255BoundExpression left,
1256BoundExpression right,
1262BoundExpression unliftedOp = MakeBinaryOperator(
1278private static BoundExpression? OptimizeLiftedArithmeticOperatorOneNull(
1280BoundExpression left,
1281BoundExpression right,
1299BoundExpression notAlwaysNull = leftAlwaysNull ? right : left;
1300BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull);
1301BoundExpression sideEffect = neverNull ?? notAlwaysNull;
1316sideEffects: ImmutableArray.Create<BoundExpression>(sideEffect),
1321private BoundExpression LowerLiftedBinaryArithmeticOperator(
1324BoundExpression loweredLeft,
1325BoundExpression loweredRight,
1334BoundExpression? optimized = OptimizeLiftedBinaryArithmetic(syntax, kind, loweredLeft, loweredRight, type, method, constrainedToTypeOpt);
1358var sideeffects = ArrayBuilder<BoundExpression>.GetInstance();
1361BoundExpression? leftNeverNull = NullableAlwaysHasValue(loweredLeft);
1362BoundExpression? rightNeverNull = NullableAlwaysHasValue(loweredRight);
1364BoundExpression boundTempX = leftNeverNull ?? loweredLeft;
1367BoundExpression boundTempY = rightNeverNull ?? loweredRight;
1370BoundExpression callX_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempX);
1371BoundExpression callY_GetValueOrDefault = MakeOptimizedGetValueOrDefault(syntax, boundTempY);
1372BoundExpression callX_HasValue = MakeOptimizedHasValue(syntax, boundTempX);
1373BoundExpression callY_HasValue = MakeOptimizedHasValue(syntax, boundTempY);
1377BoundExpression condition = MakeBinaryOperator(syntax, BinaryOperatorKind.BoolAnd, callX_HasValue, callY_HasValue, boolType, method: null, constrainedToTypeOpt: null);
1380BoundExpression consequence = MakeLiftedBinaryOperatorConsequence(syntax, kind, callX_GetValueOrDefault, callY_GetValueOrDefault, type, method, constrainedToTypeOpt);
1383BoundExpression alternative = new BoundDefaultExpression(syntax, type);
1388BoundExpression conditionalExpression = RewriteConditionalOperator(
1405private BoundExpression CaptureExpressionInTempIfNeeded(
1406BoundExpression operand,
1407ArrayBuilder<BoundExpression> sideeffects,
1423private BoundExpression? OptimizeLiftedBinaryArithmetic(
1426BoundExpression left,
1427BoundExpression right,
1432BoundExpression? optimized = TrivialLiftedBinaryArithmeticOptimizations(syntax, kind, left, right, type, method, constrainedToTypeOpt);
1526BoundExpression? nonNullRight = NullableAlwaysHasValue(right);
1559private BoundExpression MakeNewNullableBoolean(SyntaxNode syntax, bool? value)
1575private BoundExpression? OptimizeLiftedBooleanOperatorOneNull(
1578BoundExpression left,
1579BoundExpression right)
1606BoundExpression alwaysNull = leftAlwaysNull ? left : right;
1607BoundExpression notAlwaysNull = leftAlwaysNull ? right : left;
1608BoundExpression? neverNull = NullableAlwaysHasValue(notAlwaysNull);
1610BoundExpression nullBool = new BoundDefaultExpression(syntax, alwaysNull.Type);
1614BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr);
1640BoundExpression condition = MakeOptimizedGetValueOrDefault(syntax, boundTemp);
1641BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? nullBool : boundTemp;
1642BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTemp : nullBool;
1643BoundExpression conditionalExpression = RewriteConditionalOperator(
1655sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
1660private BoundExpression? OptimizeLiftedBooleanOperatorOneNonNull(
1663BoundExpression left,
1664BoundExpression right)
1682BoundExpression? leftNonNull = NullableAlwaysHasValue(left);
1683BoundExpression? rightNonNull = NullableAlwaysHasValue(right);
1699BoundExpression nonNullTemp = leftNonNull == null ? boundTempY : boundTempX;
1700BoundExpression maybeNullTemp = leftNonNull == null ? boundTempX : boundTempY;
1701BoundExpression condition = nonNullTemp;
1702BoundExpression newNullBool = MakeNewNullableBoolean(syntax, kind == BinaryOperatorKind.LiftedBoolOr);
1703BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolOr ? newNullBool : maybeNullTemp;
1704BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolOr ? maybeNullTemp : newNullBool;
1705BoundExpression conditionalExpression = RewriteConditionalOperator(
1716sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY),
1721private BoundExpression LowerLiftedBooleanOperator(
1724BoundExpression loweredLeft,
1725BoundExpression loweredRight)
1731BoundExpression? optimized = OptimizeLiftedBooleanOperatorOneNull(syntax, kind, loweredLeft, loweredRight);
1760BoundExpression callX_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempX, getValueOrDefaultX);
1762BoundExpression callY_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTempY, getValueOrDefaultY);
1764BoundExpression callX_HasValue = _factory.MakeNullableHasValue(syntax, boundTempX);
1767BoundExpression innerOr = MakeBinaryOperator(
1777BoundExpression invert = MakeUnaryOperator(UnaryOperatorKind.BoolLogicalNegation, syntax, method: null, constrainedToTypeOpt: null, innerOr, boolType);
1780BoundExpression condition = MakeBinaryOperator(
1789BoundExpression consequence = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempY : boundTempX;
1790BoundExpression alternative = kind == BinaryOperatorKind.LiftedBoolAnd ? boundTempX : boundTempY;
1792BoundExpression conditionalExpression = RewriteConditionalOperator(
1804sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignmentX, tempAssignmentY),
1843private BoundExpression RewriteNullableNullEquality(
1846BoundExpression loweredLeft,
1847BoundExpression loweredRight,
1865BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight;
1874BoundExpression? nonNullValue = NullableAlwaysHasValue(nullable);
1885sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue),
1895BoundExpression whenNotNull = RewriteNullableNullEquality(
1902var whenNull = kind == BinaryOperatorKind.NullableNullEqual ? MakeBooleanConstant(syntax, true) : null;
1907BoundExpression call = MakeNullableHasValue(syntax, nullable);
1908BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ?
1915private BoundExpression RewriteStringEquality(BoundBinaryOperator? oldNode, SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member)
1928private BoundExpression RewriteDelegateOperation(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type, SpecialMember member)
1949BoundExpression call = _inExpressionLambda
1951: (BoundExpression)BoundCall.Synthesized(syntax, receiverOpt: null, method, loweredLeft, loweredRight);
1952BoundExpression result = method.ReturnType.SpecialType == SpecialType.System_Delegate ?
1958private BoundExpression RewriteDecimalBinaryOperation(SyntaxNode syntax, BoundExpression loweredLeft, BoundExpression loweredRight, BinaryOperatorKind operatorKind)
1989private BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind)
2046private BoundExpression RewriteBuiltInShiftOperation(
2050BoundExpression loweredLeft,
2051BoundExpression loweredRight,
2108private BoundExpression RewriteBuiltInNativeShiftOperation(
2112BoundExpression loweredLeft,
2113BoundExpression loweredRight,
2169private BoundExpression RewritePointerNumericOperator(
2172BoundExpression loweredLeft,
2173BoundExpression loweredRight,
2222private BoundExpression MakeSizeOfMultiplication(BoundExpression numericOperand, PointerTypeSymbol pointerType, bool isChecked)
2224var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType);
2366private BoundExpression RewritePointerSubtraction(
2368BoundExpression loweredLeft,
2369BoundExpression loweredRight,
2377var sizeOfExpression = _factory.Sizeof(pointerType.PointedAtType);
Lowering\LocalRewriter\LocalRewriter_Call.cs (74)
24public BoundExpression VisitDynamicInvocation(BoundDynamicInvocation node, bool resultDiscarded)
31BoundExpression 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)
141BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt);
155var rewrittenCall = MakeArgumentsAndCall(
177private BoundExpression MakeArgumentsAndCall(
179BoundExpression? rewrittenReceiver,
181ImmutableArray<BoundExpression> arguments,
204private BoundExpression MakeCall(
207BoundExpression? rewrittenReceiver,
209ImmutableArray<BoundExpression> rewrittenArguments,
216BoundExpression rewrittenBoundCall;
279sideEffects: ImmutableArray<BoundExpression>.Empty,
287private BoundExpression MakeCall(SyntaxNode syntax, BoundExpression? rewrittenReceiver, MethodSymbol method, ImmutableArray<BoundExpression> rewrittenArguments, TypeSymbol type)
302private static bool IsSafeForReordering(BoundExpression expression, RefKind kind)
309var current = expression;
388internal static bool IsCapturedPrimaryConstructorParameter(BoundExpression expression)
420private ImmutableArray<BoundExpression> VisitArgumentsAndCaptureReceiverIfNeeded(
421[NotNullIfNotNull(nameof(rewrittenReceiver))] ref BoundExpression? rewrittenReceiver,
423ImmutableArray<BoundExpression> arguments,
427ArrayBuilder<BoundExpression>? storesOpt,
481ImmutableArray<BoundExpression> rewrittenArguments;
490var visitedArgumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(arguments.Length);
499var argument = arguments[i];
566extraRefInitialization is object ? ImmutableArray.Create<BoundExpression>(extraRefInitialization, assignmentToTemp) : ImmutableArray.Create<BoundExpression>(assignmentToTemp),
585ArrayBuilder<BoundExpression> visitedArgumentsBuilder,
591var argument = arguments[argumentIndex];
639var visitedArgument = visitedArgumentsBuilder[argIndex];
642visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local);
664static bool usesReceiver(BoundExpression argument)
722_factory.Sequence(new BoundExpression[] { _factory.AssignmentExpression(cache, intermediateRef) }, cache),
740_factory.Sequence(new BoundExpression[] { _factory.AssignmentExpression(cache, assignmentToTemp.Right) }, cache),
755private ImmutableArray<BoundExpression> MakeArguments(
757ImmutableArray<BoundExpression> rewrittenArguments,
834BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter.
950ImmutableArray<BoundExpression> arguments,
1005ImmutableArray<BoundExpression> rewrittenArguments,
1059ImmutableArray<BoundExpression> rewrittenArguments,
1061/* out */ BoundExpression[] arguments,
1070BoundExpression argument = rewrittenArguments[a];
1136bool isLambdaConversion(BoundExpression expr)
1148ImmutableArray<BoundExpression> arguments,
1160BoundExpression argument = arguments[a];
1178ArrayBuilder<BoundExpression> paramArray = ArrayBuilder<BoundExpression>.GetInstance(paramArrayArgumentCount);
1201BoundExpression argument = CreateParamArrayArgument(syntax, lastParam.Type, ImmutableArray<BoundExpression>.Empty, compilation, localRewriter: null);
1220ImmutableArray<BoundExpression> arguments,
1244private BoundExpression BuildParamsArray(
1247ImmutableArray<BoundExpression> rewrittenArguments,
1249BoundExpression tempStoreArgument)
1251ArrayBuilder<BoundExpression> paramArray = ArrayBuilder<BoundExpression>.GetInstance();
1265BoundExpression argument = rewrittenArguments[a];
1297ImmutableArray<BoundExpression>.Empty,
1313private static BoundExpression CreateParamArrayArgument(SyntaxNode syntax,
1315ImmutableArray<BoundExpression> arrayArgs,
1321BoundExpression arraySize = MakeLiteral(syntax, ConstantValue.Create(arrayArgs.Length), int32Type, localRewriter);
1334private static BoundExpression MakeLiteral(SyntaxNode syntax, ConstantValue constantValue, TypeSymbol type, LocalRewriter? localRewriter)
1347BoundExpression[] arguments,
1377BoundExpression[] arguments,
1402var argument = arguments[a];
1424var value = tempStores[correspondingStore].Right;
1440var sideeffects = new BoundExpression[correspondingStore - firstUnclaimedStore];
1474BoundExpression[] actualArguments, //already re-ordered to match parameters
1498var argument = actualArguments[argIndex];
1517sideEffects: ImmutableArray.Create<BoundExpression>(boundAssignmentToTemp),
1536var loweredReceiver = VisitExpression(node.Receiver);
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (58)
22private BoundExpression VisitCompoundAssignmentOperator(BoundCompoundAssignmentOperator node, bool used)
25BoundExpression loweredRight = VisitExpression(node.Right);
28var stores = ArrayBuilder<BoundExpression>.GetInstance();
37BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.Left, isRegularCompoundAssignment: true, stores, temps, isDynamic);
38var lhsRead = MakeRValue(transformedLHS);
39BoundExpression rewrittenAssignment;
59var sequence = ArrayBuilder<BoundExpression>.GetInstance();
95var condition = _factory.Conditional(isEvent, invokeEventAccessor.ToExpression(), rewrittenAssignment, rewrittenAssignment.Type);
105BoundExpression result = (temps.Count == 0 && stores.Count == 0) ?
118BoundExpression rewriteAssignment(BoundExpression leftRead)
131BoundExpression opLHS = leftRead;
142BoundExpression operand = MakeBinaryOperator(syntax, node.Operator.Kind, opLHS, loweredRight, node.Operator.ReturnType, node.Operator.Method, node.Operator.ConstrainedToTypeOpt, isCompoundAssignment: true);
145BoundExpression opFinal = operand;
160private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
190BoundExpression rewrittenReceiver = VisitExpression(receiverOpt);
226private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
234var rewrittenReceiver = VisitExpression(memberAccess.Receiver);
243private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
245var receiverOpt = indexerAccess.ReceiverOpt;
248BoundExpression transformedReceiver = VisitExpression(receiverOpt);
295ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded(
316BoundExpression transformedReceiver,
317ImmutableArray<BoundExpression> rewrittenArguments,
318ArrayBuilder<BoundExpression> stores,
329BoundExpression[] actualArguments = new BoundExpression[parameters.Length]; // The actual arguments that will be passed; one actual argument per formal parameter.
350BoundExpression array = BuildParamsArray(syntax, argsToParamsOpt, rewrittenArguments, parameters, actualArguments[actualArguments.Length - 1]);
398private BoundExpression TransformImplicitIndexerAccess(
401ArrayBuilder<BoundExpression> stores,
416private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
419var access = GetUnderlyingIndexerOrSliceAccess(
451private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
473BoundExpression rewrittenReceiver = VisitExpression(receiver);
494private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
496BoundExpression loweredReceiver;
511var loweredArguments = new BoundExpression[arguments.Length];
553private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
632BoundExpression? receiverOpt = fieldAccess.ReceiverOpt;
661var loweredArray = VisitExpression(arrayAccess.Expression);
681var result = VisitExpression(originalLHS);
711BoundExpression? receiverOpt = eventAccess.ReceiverOpt;
739BoundExpression rewrittenVariable = VisitExpression(originalLHS);
753private BoundExpression BoxReceiver(BoundExpression rewrittenReceiver, NamedTypeSymbol memberContainingType)
764private BoundExpression SpillArrayElementAccess(
765BoundExpression loweredExpression,
766ImmutableArray<BoundExpression> loweredIndices,
767ArrayBuilder<BoundExpression> stores,
776var boundTempIndices = new BoundExpression[loweredIndices.Length];
810BoundExpression expression,
854BoundExpression expression)
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (81)
48var objectCreation = VisitExpression(node.Operand);
68var rewrittenOperand = VisitExpression(node.Operand);
72var result = MakeConversionNode(node, node.Syntax, rewrittenOperand, node.Conversion, node.Checked, node.ExplicitCastInCode, node.ConstantValueOpt, rewrittenType);
85private BoundExpression MakeUtf8Span(BoundExpression node, IReadOnlyList<byte>? bytes)
96BoundExpression result;
98BoundExpression utf8Bytes = bytes is null ?
99BadExpression(node.Syntax, byteArray, ImmutableArray<BoundExpression>.Empty) :
104result = BadExpression(node.Syntax, node.Type, ImmutableArray<BoundExpression>.Empty);
140var builder = ArrayBuilder<BoundExpression>.GetInstance(bytes.Count + 1);
153ImmutableArray.Create<BoundExpression>(_factory.Literal(builder.Count)),
159private BoundExpression VisitUtf8Addition(BoundBinaryOperator node)
165var stack = ArrayBuilder<BoundExpression>.GetInstance();
171var current = stack.Pop();
201BoundExpression result = MakeUtf8Span(node, haveRepresentationError ? null : bytesBuilder);
207private static bool IsFloatingPointExpressionOfUnknownPrecision(BoundExpression rewrittenNode)
255private BoundExpression MakeConversionNode(
258BoundExpression rewrittenOperand,
265var result = MakeConversionNodeCore(oldNodeOpt, syntax, rewrittenOperand, conversion, @checked, explicitCastInCode, constantValueOpt, rewrittenType);
290private BoundExpression MakeConversionNodeCore(
293BoundExpression rewrittenOperand,
381BoundExpression? nullableValue = NullableAlwaysHasValue(rewrittenOperand);
454var operand = MakeConversionNode(
503var rewrittenNode = RewriteDecimalConversion(syntax, rewrittenOperand, rewrittenOperand.Type, underlyingTypeTo, @checked, isImplicit: false, constantValueOpt: constantValueOpt);
561var receiver = (!method.RequiresInstanceReceiver && !oldNodeOpt.IsExtensionMethod && !method.IsAbstract && !method.IsVirtual) ? _factory.Type(method.ContainingType) : mg.ReceiverOpt;
645private BoundExpression MakeConversionNode(BoundExpression rewrittenOperand, TypeSymbol rewrittenType, bool @checked, bool acceptFailingConversion = false, bool markAsChecked = false)
664BoundExpression rewrittenOperand,
694private BoundExpression MakeConversionNode(
696BoundExpression rewrittenOperand,
764BoundExpression userDefined = RewriteUserDefinedConversion(
804private BoundExpression RewriteTupleConversion(
806BoundExpression rewrittenOperand,
818var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements);
827var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]);
828var convertedFieldAccess = MakeConversionNode(syntax, fieldAccess, elementConversions[i], destElementTypes[i].Type, @checked, explicitCastInCode);
832var result = MakeTupleCreationExpression(syntax, rewrittenType, fieldAccessorsBuilder.ToImmutableAndFree());
836internal static bool NullableNeverHasValue(BoundExpression expression)
851internal static BoundExpression? NullableAlwaysHasValue(BoundExpression expression)
891private BoundExpression RewriteNullableConversion(
893BoundExpression rewrittenOperand,
921BoundExpression rewrittenConversion = MakeConversionNode(syntax, rewrittenOperand, conversion.UnderlyingConversions[0], rewrittenType.GetNullableUnderlyingType(), @checked);
933BoundExpression? value = NullableAlwaysHasValue(rewrittenOperand);
947private BoundExpression RewriteLiftedConversionInExpressionTree(
949BoundExpression rewrittenOperand,
999private BoundExpression RewriteFullyLiftedBuiltInConversion(
1001BoundExpression operand,
1013BoundExpression? optimized = OptimizeLiftedBuiltInConversion(syntax, operand, conversion, @checked, type);
1032BoundExpression condition = MakeNullableHasValue(syntax, boundTemp);
1034BoundExpression consequence = new BoundObjectCreationExpression(
1043BoundExpression alternative = new BoundDefaultExpression(syntax, type);
1044BoundExpression conditionalExpression = RewriteConditionalOperator(
1056sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
1061private BoundExpression? OptimizeLiftedUserDefinedConversion(
1063BoundExpression operand,
1077BoundExpression? nonNullValue = NullableAlwaysHasValue(operand);
1088private BoundExpression? OptimizeLiftedBuiltInConversion(
1090BoundExpression operand,
1109BoundExpression? nonNullValue = NullableAlwaysHasValue(operand);
1128private BoundExpression? DistributeLiftedConversionIntoLiftedOperand(
1130BoundExpression operand,
1190private BoundExpression RewriteUserDefinedConversion(
1192BoundExpression rewrittenOperand,
1222BoundExpression result = BoundCall.Synthesized(syntax, receiverOpt: constrainedToTypeOpt is null ? null : new BoundTypeExpression(syntax, aliasOpt: null, constrainedToTypeOpt), conversion.Method, rewrittenOperand);
1227private BoundExpression MakeLiftedUserDefinedConversionConsequence(BoundCall call, TypeSymbol resultType)
1239private BoundExpression RewriteLiftedUserDefinedConversion(
1241BoundExpression rewrittenOperand,
1263BoundExpression? optimized = OptimizeLiftedUserDefinedConversion(syntax, rewrittenOperand, conversion, rewrittenType);
1286BoundExpression condition = _factory.MakeNullableHasValue(syntax, boundTemp);
1297BoundExpression consequence = MakeLiftedUserDefinedConversionConsequence(userDefinedCall, rewrittenType);
1300BoundExpression alternative = new BoundDefaultExpression(syntax, rewrittenType);
1303BoundExpression conditionalExpression = RewriteConditionalOperator(
1317sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
1322private BoundExpression RewriteIntPtrConversion(
1324BoundExpression rewrittenOperand,
1372var rewrittenCall = MakeCall(
1542private BoundExpression RewriteDecimalConversion(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit, ConstantValue? constantValueOpt)
1573private BoundExpression RewriteDecimalConversionCore(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool isImplicit, ConstantValue? constantValueOpt)
Lowering\LocalRewriter\LocalRewriter_DeconstructionAssignmentOperator.cs (51)
37private BoundExpression? RewriteDeconstruction(BoundTupleExpression left, Conversion conversion, BoundExpression right, bool isUsed)
40var lhsEffects = ArrayBuilder<BoundExpression>.GetInstance();
43BoundExpression? result = RewriteDeconstruction(lhsTargets, conversion, left.Type, right, isUsed);
55private BoundExpression? RewriteDeconstruction(
59BoundExpression right,
79BoundExpression? returnValue = ApplyDeconstructionConversion(lhsTargets, right, conversion, temps, effects, isUsed, inInit: true);
88var last = effects.PopLast();
210private BoundExpression? ApplyDeconstructionConversion(
212BoundExpression right,
220ImmutableArray<BoundExpression> rightParts = GetRightParts(right, conversion, temps, effects, ref inInit);
222ImmutableArray<(BoundValuePlaceholder?, BoundExpression?)> deconstructConversionInfo = conversion.DeconstructConversionInfo;
226var builder = isUsed ? ArrayBuilder<BoundExpression>.GetInstance(leftTargets.Count) : null;
229BoundExpression? resultPart;
241var rightPart = rightParts[i];
246BoundExpression? leftTarget = leftTargets[i].Single;
277private ImmutableArray<BoundExpression> GetRightParts(BoundExpression right, Conversion conversion,
287BoundExpression evaluationResult = EvaluateSideEffectingArgumentToTemp(right,
334private ImmutableArray<BoundExpression> AccessTupleFields(BoundExpression expression, ArrayBuilder<LocalSymbol> temps,
335ArrayBuilder<BoundExpression> effects)
345BoundExpression tuple;
361var builder = ArrayBuilder<BoundExpression>.GetInstance(numElements);
364var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(tuple, expression.Syntax, fields[i]);
370private BoundExpression EvaluateConversionToTemp(BoundExpression expression, BoundValuePlaceholder placeholder, BoundExpression conversion,
371ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
381private ImmutableArray<BoundExpression> InvokeDeconstructMethod(DeconstructMethodInfo deconstruction, BoundExpression target,
382ArrayBuilder<BoundExpression> effects, ArrayBuilder<LocalSymbol> temps)
387var outLocals = ArrayBuilder<BoundExpression>.GetInstance(outputPlaceholders.Length);
418private BoundExpression EvaluateSideEffectingArgumentToTemp(
419BoundExpression arg,
420ArrayBuilder<BoundExpression> effects,
423var loweredArg = VisitExpression(arg);
443private ArrayBuilder<Binder.DeconstructionVariable> GetAssignmentTargetsAndSideEffects(BoundTupleExpression variables, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
447foreach (var variable in variables.Arguments)
463var temp = this.TransformCompoundAssignmentLHS(variable, isRegularCompoundAssignment: false,
475internal ArrayBuilder<BoundExpression> init = null!;
476internal ArrayBuilder<BoundExpression> deconstructions = null!;
477internal ArrayBuilder<BoundExpression> conversions = null!;
478internal ArrayBuilder<BoundExpression> assignments = null!;
483result.init = ArrayBuilder<BoundExpression>.GetInstance();
484result.deconstructions = ArrayBuilder<BoundExpression>.GetInstance();
485result.conversions = ArrayBuilder<BoundExpression>.GetInstance();
486result.assignments = ArrayBuilder<BoundExpression>.GetInstance();
502internal BoundExpression? PopLast()
509var last = init.Last();
515internal ImmutableArray<BoundExpression> ToImmutableAndFree()
Lowering\LocalRewriter\LocalRewriter_Event.cs (29)
21BoundExpression? rewrittenReceiverOpt = VisitExpression(node.ReceiverOpt);
22BoundExpression rewrittenArgument = VisitExpression(node.Argument);
44var rewrittenArguments = ImmutableArray.Create<BoundExpression>(rewrittenArgument);
76private BoundExpression RewriteWindowsRuntimeEventAssignmentOperator(SyntaxNode syntax, EventSymbol eventSymbol, EventAssignmentKind kind, BoundExpression? rewrittenReceiverOpt, BoundExpression rewrittenArgument)
93BoundExpression delegateCreationArgument = boundTemp ?? rewrittenReceiverOpt ?? _factory.Type(eventType);
103BoundExpression? clearCall = null;
113rewrittenArguments: ImmutableArray.Create<BoundExpression>(removeDelegate),
118clearCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(removeDelegate), ErrorTypeSymbol.UnknownResultType);
122ImmutableArray<BoundExpression> marshalArguments;
127marshalArguments = ImmutableArray.Create<BoundExpression>(removeDelegate, rewrittenArgument);
142marshalArguments = ImmutableArray.Create<BoundExpression>(addDelegate, removeDelegate, rewrittenArgument);
145BoundExpression marshalCall;
174ArrayBuilder<BoundExpression> sideEffects = ArrayBuilder<BoundExpression>.GetInstance(2); //max size
182private BoundExpression VisitWindowsRuntimeEventFieldAssignmentOperator(SyntaxNode syntax, BoundEventAccess left, BoundExpression rewrittenRight)
190BoundExpression? rewrittenReceiverOpt = VisitExpression(left.ReceiverOpt);
206BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt);
210private BoundExpression MakeEventAccess(
212BoundExpression? rewrittenReceiver,
239BoundExpression getOrCreateCall;
255getOrCreateCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(fieldAccess), ErrorTypeSymbol.UnknownResultType);
280private BoundExpression RewriteNoPiaEventAssignmentOperator(BoundEventAssignmentOperator node, BoundExpression rewrittenReceiver, BoundExpression rewrittenArgument)
286BoundExpression? result = null;
300BoundExpression eventInfo = _factory.New(ctor, _factory.Typeof(node.Event.ContainingType), _factory.Literal(node.Event.MetadataName));
Lowering\LocalRewriter\LocalRewriter_FixedStatement.cs (28)
199BoundExpression? initializer = localDecl.InitializerOpt;
240BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression);
281var pointerValue = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr);
307BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression);
329BoundExpression callReceiver;
353var tempAssignment = factory.AssignmentExpression(
365var pointerValue = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr);
368BoundExpression pinAndGetPtr = factory.Sequence(
370sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
409BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression);
430var addr = factory.Convert(
435var convertedStringTemp = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, addr);
440BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, factory.Local(localSymbol), BinaryOperatorKind.NotEqual);
441BoundExpression helperCall;
450helperCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
453BoundExpression addition = factory.Binary(BinaryOperatorKind.PointerAndIntAddition, localType, factory.Local(localSymbol), helperCall);
478BoundExpression initializerExpr = VisitExpression(fixedInitializer.Expression);
491BoundExpression arrayTempInit = factory.AssignmentExpression(factory.Local(pinnedTemp), initializerExpr);
494BoundExpression notNullCheck = _factory.MakeNullCheck(factory.Syntax, arrayTempInit, BinaryOperatorKind.NotEqual);
496BoundExpression lengthCall;
511lengthCall = new BoundBadExpression(fixedInitializer.Syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(factory.Local(pinnedTemp)), ErrorTypeSymbol.UnknownResultType);
517BoundExpression lengthCheck = factory.Binary(BinaryOperatorKind.IntNotEqual, factory.SpecialType(SpecialType.System_Boolean), lengthCall, factory.Literal(0));
520BoundExpression condition = factory.Binary(BinaryOperatorKind.LogicalBoolAnd, factory.SpecialType(SpecialType.System_Boolean), notNullCheck, lengthCheck);
523BoundExpression firstElement = factory.ArrayAccessFirstElement(factory.Local(pinnedTemp));
527BoundExpression firstElementAddress = new BoundAddressOfOperator(factory.Syntax, firstElement, type: new PointerTypeSymbol(arrayElementType));
528BoundExpression convertedFirstElementAddress = ApplyConversionIfNotIdentity(fixedInitializer.ElementPointerConversion, fixedInitializer.ElementPointerPlaceholder, firstElementAddress);
531BoundExpression consequenceAssignment = factory.AssignmentExpression(factory.Local(localSymbol), convertedFirstElementAddress);
534BoundExpression alternativeAssignment = factory.AssignmentExpression(factory.Local(localSymbol), factory.Null(localType));
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (43)
37BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _);
113BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out Conversion collectionConversion);
114BoundExpression rewrittenExpression = VisitExpression(collectionExpression);
128var receiver = ConvertReceiverForInvocation(forEachSyntax, rewrittenExpression, getEnumeratorInfo.Method, collectionConversion, enumeratorInfo.CollectionType);
134var builder = ArrayBuilder<BoundExpression>.GetInstance(getEnumeratorInfo.Arguments.Length);
143BoundExpression enumeratorVarInitValue = SynthesizeCall(getEnumeratorInfo, forEachSyntax, receiver,
155BoundExpression iterationVarAssignValue = ApplyConversionIfNotIdentity(
180BoundExpression rewrittenCondition = SynthesizeCall(
293BoundExpression receiver;
294BoundExpression disposeCall;
370BoundExpression disposableVarInitValue = new BoundAsOperator(forEachSyntax,
381BoundExpression disposeCall = BoundCall.Synthesized(syntax: forEachSyntax, receiverOpt: boundDisposableVar, method: disposeMethod);
429private BoundStatement WrapWithAwait(CommonForEachStatementSyntax forEachSyntax, BoundExpression disposeCall, BoundAwaitableInfo disposeAwaitableInfoOpt)
432var awaitExpr = RewriteAwaitExpression(forEachSyntax, disposeCall, disposeAwaitableInfoOpt, awaitExpressionType, used: false);
448private BoundExpression ConvertReceiverForInvocation(CSharpSyntaxNode syntax, BoundExpression receiver, MethodSymbol method, Conversion receiverConversion, TypeSymbol convertedReceiverType)
491private BoundExpression SynthesizeCall(MethodArgumentInfo methodArgumentInfo, CSharpSyntaxNode syntax, BoundExpression? receiver, bool allowExtensionAndOptionalParameters, bool assertParametersAreOptional = true)
501return BoundCall.Synthesized(syntax, receiver, methodArgumentInfo.Method, arguments: ImmutableArray<BoundExpression>.Empty);
525BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _);
532BoundExpression rewrittenExpression = VisitExpression(collectionExpression);
558BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity(
577BoundExpression arrayLength = BoundCall.Synthesized(
583BoundExpression exitCondition = new BoundBinaryOperator(
634BoundExpression iterationVarValue)
653BoundExpression loweredAssignment = VisitExpression(assignment);
702BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _);
711BoundExpression rewrittenExpression = VisitExpression(collectionExpression);
737BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity(
743indices: ImmutableArray.Create<BoundExpression>(boundPositionVar),
756BoundExpression arrayLength = new BoundArrayLength(
762BoundExpression exitCondition = new BoundBinaryOperator(
827BoundExpression collectionExpression = GetUnconvertedCollectionExpression(node, out _);
842BoundExpression rewrittenExpression = VisitExpression(collectionExpression);
870ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create(
876BoundExpression currentDimensionUpperBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, getUpperBoundMethod, dimensionArgument);
892BoundExpression iterationVarInitValue = ApplyConversionIfNotIdentity(
897indices: ImmutableArray.Create((BoundExpression[])boundPositionVar),
925ImmutableArray<BoundExpression> dimensionArgument = ImmutableArray.Create(
931BoundExpression currentDimensionLowerBound = BoundCall.Synthesized(forEachSyntax, boundArrayVar, getLowerBoundMethod, dimensionArgument);
941BoundExpression exitCondition = new BoundBinaryOperator(
1000private static BoundExpression GetUnconvertedCollectionExpression(BoundForEachStatement node, out Conversion collectionConversion)
1015private BoundStatement MakeLocalDeclaration(CSharpSyntaxNode syntax, LocalSymbol local, BoundExpression rewrittenInitialValue)
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 (49)
20private BoundExpression MakeDynamicIndexerAccessReceiver(BoundDynamicIndexerAccess indexerAccess, BoundExpression loweredReceiver)
22BoundExpression result;
45var loweredReceiver = VisitExpression(node.Receiver);
53private BoundExpression MakeDynamicGetIndex(
55BoundExpression loweredReceiver,
56ImmutableArray<BoundExpression> loweredArguments,
79private BoundExpression VisitIndexerAccess(BoundIndexerAccess node, bool isLeftOfAssignment)
85BoundExpression? rewrittenReceiver = VisitExpression(node.ReceiverOpt);
103private BoundExpression MakeIndexerAccess(
105BoundExpression rewrittenReceiver,
107ImmutableArray<BoundExpression> arguments,
132ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded(
151BoundExpression call = MakePropertyGetAccess(syntax, rewrittenReceiver, indexer, rewrittenArguments, getMethod);
163ImmutableArray<BoundExpression>.Empty,
205private BoundExpression VisitImplicitIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment)
226private BoundExpression VisitIndexPatternIndexerAccess(BoundImplicitIndexerAccess node, bool isLeftOfAssignment)
229var sideeffects = ArrayBuilder<BoundExpression>.GetInstance(2);
231BoundExpression rewrittenIndexerAccess = GetUnderlyingIndexerOrSliceAccess(
242private BoundExpression GetUnderlyingIndexerOrSliceAccess(
246ArrayBuilder<BoundExpression> sideeffects,
258BoundExpression makeOffsetInput = DetermineMakePatternIndexOffsetExpressionStrategy(node.Argument, out PatternIndexOffsetLoweringStrategy strategy);
260var receiver = VisitExpression(node.Receiver);
297BoundExpression integerArgument;
302BoundExpression lengthAccess = VisitExpression(node.LengthOrCountAccess);
332BoundExpression rewrittenIndexerAccess;
338ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded(
365rewrittenIndexerAccess = (BoundExpression)VisitArrayAccess(((BoundArrayAccess)node.IndexerOrSliceAccess));
385private BoundExpression MakePatternIndexOffsetExpression(
386BoundExpression? loweredExpr,
387BoundExpression? lengthAccess,
448private BoundExpression DetermineMakePatternIndexOffsetExpressionStrategy(
449BoundExpression unloweredExpr,
498private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node)
518var receiver = VisitExpression(node.Receiver);
519var rangeArg = node.Argument;
521BoundExpression? startMakeOffsetInput = null;
523BoundExpression? endMakeOffsetInput = null;
526BoundExpression? rewrittenRangeArg = null;
542if (rangeExpr.LeftOperandOpt is BoundExpression left)
552if (rangeExpr.RightOperandOpt is BoundExpression right)
568var sideEffectsBuilder = ArrayBuilder<BoundExpression>.GetInstance();
588var argumentsBuilder = ArrayBuilder<BoundExpression>.GetInstance(2);
624BoundExpression startExpr;
625BoundExpression rangeSizeExpr;
718BoundExpression? lengthAccess = null;
744BoundExpression endExpr = MakePatternIndexOffsetExpression(endMakeOffsetInput, lengthAccess, endStrategy);
766var lengthAccess = VisitExpression(node.LengthOrCountAccess);
802var rewrittenIndexerAccess = VisitExpression(sliceCall);
Lowering\LocalRewriter\LocalRewriter_NullCoalescingAssignmentOperator.cs (13)
19var stores = ArrayBuilder<BoundExpression>.GetInstance();
23BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.LeftOperand, isRegularCompoundAssignment: false, stores, temps, node.LeftOperand.HasDynamicType());
25var lhsRead = MakeRValue(transformedLHS);
26BoundExpression loweredRight = VisitExpression(node.RightOperand);
32BoundExpression rewriteNullCoalscingAssignmentStandard()
41BoundExpression assignment = MakeAssignmentOperator(syntax, transformedLHS, loweredRight, node.LeftOperand.Type, used: true, isChecked: false, isCompoundAssignment: false);
45BoundExpression conditionalExpression = MakeNullCoalescingOperator(syntax, lhsRead, assignment, leftPlaceholder: leftPlaceholder, leftConversion: leftPlaceholder, BoundNullCoalescingOperatorResultKind.LeftType, node.LeftOperand.Type);
60BoundExpression rewriteNullCoalescingAssignmentForValueType()
70var leftOperand = node.LeftOperand;
110var tmpAssignment = MakeAssignmentOperator(node.Syntax, tmp, loweredRight, node.Type, used: true, isChecked: false, isCompoundAssignment: false);
115var transformedLhsAssignment =
129var alternative = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create(tmpAssignment, transformedLhsAssignment), tmp);
132var ternary = _factory.Conditional(lhsReadHasValue, tmp, alternative, tmp.Type);
Lowering\LocalRewriter\LocalRewriter_NullCoalescingOperator.cs (18)
17BoundExpression rewrittenLeft = VisitExpression(node.LeftOperand);
18BoundExpression rewrittenRight = VisitExpression(node.RightOperand);
24private BoundExpression MakeNullCoalescingOperator(
26BoundExpression rewrittenLeft,
27BoundExpression rewrittenRight,
29BoundExpression? leftConversion,
107var notNullAccess = NullableAlwaysHasValue(conditionalAccess.WhenNotNull);
110BoundExpression? whenNullOpt = rewrittenRight;
154BoundExpression nullCheck = _factory.MakeNullCheck(syntax, boundTemp, BinaryOperatorKind.NotEqual);
157BoundExpression convertedLeft = GetConvertedLeftForNullCoalescingOperator(boundTemp, leftPlaceholder, leftConversion, rewrittenResultType);
161BoundExpression conditionalExpression = RewriteConditionalOperator(
176sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
181private bool IsStringConcat(BoundExpression expression)
210private static BoundExpression RemoveIdentityConversions(BoundExpression expression)
226private BoundExpression GetConvertedLeftForNullCoalescingOperator(BoundExpression rewrittenLeft, BoundValuePlaceholder? leftPlaceholder, BoundExpression? leftConversion, TypeSymbol rewrittenResultType)
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (34)
21var constructorInvocation = _dynamicFactory.MakeDynamicConstructorInvocation(node.Syntax, node.Type, loweredArguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt).ToExpression();
39BoundExpression? receiverDiscard = null;
43ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded(
66BoundExpression rewrittenObjectCreation;
100ImmutableArray<BoundExpression>.Empty,
127BoundExpression receiver = withExpr.Receiver;
153BoundExpression rewrittenReceiver = VisitExpression(receiver);
158var sideEffects = ArrayBuilder<BoundExpression>.GetInstance();
164BoundExpression value = _factory.New(anonymousType, getAnonymousTypeValues(withExpr, oldValue, anonymousType, sideEffects, temps));
169BoundExpression expression;
192ImmutableArray<BoundExpression> getAnonymousTypeValues(BoundWithExpression withExpr, BoundExpression oldValue, AnonymousTypeManager.AnonymousTypePublicSymbol anonymousType,
193ArrayBuilder<BoundExpression> sideEffects, ArrayBuilder<LocalSymbol> temps)
196var valueTemps = ArrayBuilder<BoundExpression?>.GetInstance(anonymousType.Properties.Length, fillWithValue: null);
198foreach (BoundExpression initializer in withExpr.InitializerExpression.Initializers)
205var rewrittenRight = VisitExpression(assignment.Right);
215var builder = ArrayBuilder<BoundExpression>.GetInstance(anonymousType.Properties.Length);
218if (valueTemps[property.MemberIndexOpt!.Value] is BoundExpression initializerValue)
248private BoundExpression MakeExpressionWithInitializer(
250BoundExpression rewrittenExpression,
251BoundExpression initializerExpression,
262ArrayBuilder<BoundExpression>? dynamicSiteInitializers = null;
264ArrayBuilder<BoundExpression>? loweredInitializers = ArrayBuilder<BoundExpression>.GetInstance();
269var sideEffects = ArrayBuilder<BoundExpression>.GetInstance(1 + dynamicSiteCount + loweredInitializers.Count);
307var rewrittenNewT = MakeNewT(node.Syntax, (TypeParameterSymbol)node.Type);
316private BoundExpression MakeNewT(SyntaxNode syntax, TypeParameterSymbol typeParameter)
340ImmutableArray<BoundExpression>.Empty,
370BoundExpression newGuid;
379newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
389BoundExpression callGetTypeFromCLSID;
397callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
401BoundExpression rewrittenObjectCreation;
409rewrittenObjectCreation = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, node.Type);
Lowering\LocalRewriter\LocalRewriter_ObjectOrCollectionInitializerExpression.cs (49)
19private static BoundObjectInitializerExpressionBase UpdateInitializers(BoundObjectInitializerExpressionBase initializerExpression, ImmutableArray<BoundExpression> newInitializers)
33ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers,
35ArrayBuilder<BoundExpression> result,
36BoundExpression rewrittenReceiver,
37BoundExpression initializerExpression)
67private ImmutableArray<BoundExpression> MakeObjectOrCollectionInitializersForExpressionTree(BoundExpression initializerExpression)
77var result = ArrayBuilder<BoundExpression>.GetInstance();
89private void AddCollectionInitializers(ArrayBuilder<BoundExpression> result, BoundExpression? rewrittenReceiver, ImmutableArray<BoundExpression> initializers)
93foreach (var initializer in initializers)
98BoundExpression? rewrittenInitializer;
119private BoundExpression MakeDynamicCollectionInitializer(BoundExpression rewrittenReceiver, BoundDynamicCollectionElementInitializer initializer)
141private BoundExpression? MakeCollectionInitializer(BoundExpression? rewrittenReceiver, BoundCollectionElementInitializer initializer)
177ImmutableArray<BoundExpression> rewrittenArguments = VisitArgumentsAndCaptureReceiverIfNeeded(
208private BoundExpression VisitObjectInitializerMember(BoundObjectInitializerMember node, ref BoundExpression rewrittenReceiver, ArrayBuilder<BoundExpression> sideEffects, ref ArrayBuilder<LocalSymbol>? temps)
212return (BoundExpression)base.VisitObjectInitializerMember(node)!;
215var originalReceiver = rewrittenReceiver;
246ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers,
248ArrayBuilder<BoundExpression> result,
249BoundExpression rewrittenReceiver,
250ImmutableArray<BoundExpression> initializers)
254foreach (var initializer in initializers)
266ref ArrayBuilder<BoundExpression>? dynamicSiteInitializers,
268ArrayBuilder<BoundExpression> result,
269BoundExpression rewrittenReceiver,
277BoundExpression? rewrittenLeft = null;
288BoundExpression rewrittenAccess;
321dynamicSiteInitializers = ArrayBuilder<BoundExpression>.GetInstance();
326var rewrittenRight = VisitExpression(assignment.Right);
356var rewrittenRight = VisitExpression(assignment.Right);
368dynamicSiteInitializers = ArrayBuilder<BoundExpression>.GetInstance();
376var rewrittenRight = VisitExpression(assignment.Right);
405var rewrittenRight = VisitExpression(assignment.Right);
417var rewrittenIndex = VisitExpression(pointerAccess.Index);
438var rewrittenRight = VisitExpression(assignment.Right);
453private ImmutableArray<BoundExpression> EvaluateSideEffectingArgumentsToTemps(
454ImmutableArray<BoundExpression> args,
456ArrayBuilder<BoundExpression> sideeffects,
459ArrayBuilder<BoundExpression>? newArgs = null;
463var arg = args[i];
469newArgs = ArrayBuilder<BoundExpression>.GetInstance(args.Length);
495private BoundExpression MakeObjectInitializerMemberAccess(
496BoundExpression rewrittenReceiver,
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, 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 (52)
36private BoundExpression RewriteStringConcatenation(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type)
56var folded = TryFoldTwoConcatOperands(loweredLeft, loweredRight);
63ArrayBuilder<BoundExpression> leftFlattened = ArrayBuilder<BoundExpression>.GetInstance();
64ArrayBuilder<BoundExpression> rightFlattened = ArrayBuilder<BoundExpression>.GetInstance();
82BoundExpression result;
97var left = leftFlattened[0];
98var right = leftFlattened[1];
104var first = leftFlattened[0];
105var second = leftFlattened[1];
106var third = leftFlattened[2];
113var first = leftFlattened[0];
114var second = leftFlattened[1];
115var third = leftFlattened[2];
116var fourth = leftFlattened[3];
136private void FlattenConcatArg(BoundExpression lowered, ArrayBuilder<BoundExpression> flattened)
154private bool TryExtractStringConcatArgs(BoundExpression lowered, out ImmutableArray<BoundExpression> arguments)
216private BoundExpression? TryFoldTwoConcatOperands(BoundExpression loweredLeft, BoundExpression loweredRight)
251private static bool IsNullOrEmptyStringConstant(BoundExpression operand)
286private BoundExpression RewriteStringConcatenationOneExpr(BoundExpression loweredOperand)
300private BoundExpression RewriteStringConcatenationTwoExprs(SyntaxNode syntax, BoundExpression loweredLeft, BoundExpression loweredRight)
311private BoundExpression RewriteStringConcatenationThreeExprs(SyntaxNode syntax, BoundExpression loweredFirst, BoundExpression loweredSecond, BoundExpression loweredThird)
323private BoundExpression RewriteStringConcatenationFourExprs(SyntaxNode syntax, BoundExpression loweredFirst, BoundExpression loweredSecond, BoundExpression loweredThird, BoundExpression loweredFourth)
336private BoundExpression RewriteStringConcatenationManyExprs(SyntaxNode syntax, ImmutableArray<BoundExpression> loweredArgs)
344var array = _factory.ArrayOrEmpty(_factory.SpecialType(SpecialType.System_String), loweredArgs);
353private BoundExpression RewriteStringConcatInExpressionLambda(SyntaxNode syntax, BinaryOperatorKind operatorKind, BoundExpression loweredLeft, BoundExpression loweredRight, TypeSymbol type)
369private BoundExpression ConvertConcatExprToString(SyntaxNode syntax, BoundExpression expr)
475ImmutableArray.Create<BoundExpression>(store),
479BoundExpression makeConditionalAccess(BoundExpression receiver)
497static bool isFieldOfMarshalByRef(BoundExpression expr, CSharpCompilation compilation)
Lowering\LocalRewriter\LocalRewriter_StringInterpolation.cs (35)
16private BoundExpression RewriteInterpolatedStringConversion(BoundConversion conversion)
19BoundExpression format;
20ArrayBuilder<BoundExpression> expressions;
29var result = _factory.StaticCall(stringFactory, "Create", expressions.ToImmutableAndFree(),
44private BoundExpression MakeImplicitConversionForInterpolatedString(BoundExpression rewrittenOperand, TypeSymbol rewrittenType)
75private InterpolationHandlerResult RewriteToInterpolatedStringHandlerPattern(InterpolatedStringHandlerData data, ImmutableArray<BoundExpression> parts, SyntaxNode syntax)
109var handlerConstructionAssignment = _factory.AssignmentExpression(builderTemp, (BoundExpression)VisitObjectCreationExpression(construction));
113var resultExpressions = ArrayBuilder<BoundExpression>.GetInstance(parts.Length + 1);
115foreach (var part in parts)
120resultExpressions.Add((BoundExpression)VisitCall(call));
144BoundExpression? currentExpression = appendShouldProceedLocal;
148foreach (var appendCall in resultExpressions)
150var actualCall = appendCall;
189foreach (var part in node.Parts)
208private void MakeInterpolatedStringFormat(BoundInterpolatedString node, out BoundExpression format, out ArrayBuilder<BoundExpression> expressions)
214expressions = ArrayBuilder<BoundExpression>.GetInstance(n + 1);
218var part = node.Parts[i];
234var value = fillin.Value;
281BoundExpression? result;
304var part = node.Parts[i];
346MakeInterpolatedStringFormat(node, out BoundExpression format, out ArrayBuilder<BoundExpression> expressions);
368private BoundExpression LowerPartsToString(InterpolatedStringHandlerData data, ImmutableArray<BoundExpression> parts, SyntaxNode syntax, TypeSymbol type)
375BoundExpression toStringAndClearCall = toStringAndClear is not null
377: new BoundBadExpression(syntax, LookupResultKind.Empty, symbols: ImmutableArray<Symbol?>.Empty, childBoundNodes: ImmutableArray<BoundExpression>.Empty, type);
383private static void AssertNoImplicitInterpolatedStringHandlerConversions(ImmutableArray<BoundExpression> arguments, bool allowConversionsWithNoContext = false)
387foreach (var arg in arguments)
407private readonly ImmutableArray<BoundExpression> _expressions;
422public InterpolationHandlerResult(ImmutableArray<BoundExpression> expressions, BoundLocal handlerTemp, LocalSymbol? outTemp, LocalRewriter rewriter)
431public BoundExpression WithFinalResult(BoundExpression result)
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (75)
31var initEffects = ArrayBuilder<BoundExpression>.GetInstance();
34BoundExpression newLeft = ReplaceTerminalElementsWithTemps(node.Left, node.Operators, initEffects, temps);
35BoundExpression newRight = ReplaceTerminalElementsWithTemps(node.Right, node.Operators, initEffects, temps);
37var returnValue = RewriteTupleNestedOperators(node.Operators, newLeft, newRight, boolType, temps, node.OperatorKind);
38BoundExpression result = _factory.Sequence(temps.ToImmutableAndFree(), initEffects.ToImmutableAndFree(), returnValue);
42private bool IsLikeTupleExpression(BoundExpression expr, [NotNullWhen(true)] out BoundTupleExpression? tuple)
64var builder = ArrayBuilder<BoundExpression>.GetInstance(tuple.Arguments.Length);
67var element = tuple.Arguments[i];
98private BoundExpression PushDownImplicitTupleConversion(
99BoundExpression expr,
100ArrayBuilder<BoundExpression> initEffects,
112var fieldAccessorsBuilder = ArrayBuilder<BoundExpression>.GetInstance(numElements);
113var savedTuple = DeferSideEffectingArgumentToTempForTupleEquality(LowerConversions(boundConversion.Operand), initEffects, temps);
119var fieldAccess = MakeTupleFieldAccessAndReportUseSiteDiagnostics(savedTuple, syntax, srcElementFields[i]);
138private BoundExpression ReplaceTerminalElementsWithTemps(
139BoundExpression expr,
141ArrayBuilder<BoundExpression> initEffects,
152var builder = ArrayBuilder<BoundExpression>.GetInstance(tuple.Arguments.Length);
155var argument = tuple.Arguments[i];
156var newArgument = ReplaceTerminalElementsWithTemps(argument, multiple.Operators[i], initEffects, temps);
177/// That resulting expression must be passed through <see cref="LowerConversions(BoundExpression)"/> to
180private BoundExpression DeferSideEffectingArgumentToTempForTupleEquality(
181BoundExpression expr,
182ArrayBuilder<BoundExpression> effects,
202var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality(conv.Operand, effects, temps, conv.ExplicitCastInCode || enclosingConversionWasExplicit);
209var deferredOperand = DeferSideEffectingArgumentToTempForTupleEquality(
245private BoundExpression RewriteTupleOperator(TupleBinaryOperatorInfo @operator,
246BoundExpression left, BoundExpression right, TypeSymbol boolType,
266private BoundExpression RewriteTupleNestedOperators(TupleBinaryOperatorInfo.Multiple operators, BoundExpression left, BoundExpression right,
288var outerEffects = ArrayBuilder<BoundExpression>.GetInstance();
289var innerEffects = ArrayBuilder<BoundExpression>.GetInstance();
291BoundExpression leftHasValue, leftValue;
295BoundExpression rightHasValue, rightValue;
302BoundExpression logicalExpression = RewriteNonNullableNestedTupleOperators(operators, leftValue, rightValue, boolType, temps, operatorKind);
308BoundExpression innerSequence = _factory.Sequence(locals: ImmutableArray<LocalSymbol>.Empty, innerEffects.ToImmutableAndFree(), logicalExpression);
338BoundExpression outerSequence =
353private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects,
354ArrayBuilder<BoundExpression> outerEffects, bool saveHasValue, out BoundExpression hasValue, out BoundExpression value, out bool isNullable)
376if (NullableAlwaysHasValue(expr) is BoundExpression knownValue)
395BoundExpression makeNullableHasValue(BoundExpression expr)
416private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
427private BoundExpression MakeValueOrDefaultTemp(
428BoundExpression expr,
430ArrayBuilder<BoundExpression> effects)
442var operand = MakeValueOrDefaultTemp(o, temps, effects);
449var argumentBuilder = ArrayBuilder<BoundExpression>.GetInstance(tupleCardinality);
467BoundExpression valueOrDefaultCall = MakeOptimizedGetValueOrDefault(expr.Syntax, expr);
472BoundExpression MakeBoundConversion(BoundExpression expr, Conversion conversion, TypeWithAnnotations type, BoundConversion enclosing)
484private BoundExpression RewriteNonNullableNestedTupleOperators(TupleBinaryOperatorInfo.Multiple operators,
485BoundExpression left, BoundExpression right, TypeSymbol type,
490BoundExpression? currentResult = null;
493BoundExpression leftElement = GetTuplePart(left, i);
494BoundExpression rightElement = GetTuplePart(right, i);
495BoundExpression nextLogicalOperand = RewriteTupleOperator(nestedOperators[i], leftElement, rightElement, type, temps, operatorKind);
515private BoundExpression GetTuplePart(BoundExpression tuple, int i)
541private BoundExpression RewriteTupleSingleOperator(TupleBinaryOperatorInfo.Single single,
542BoundExpression left, BoundExpression right, TypeSymbol boolType, BinaryOperatorKind operatorKind)
555BoundExpression dynamicResult = _dynamicFactory.MakeDynamicBinaryOperator(single.Kind, left, right, isCompoundAssignment: false, _compilation.DynamicType).ToExpression();
572BoundExpression binary = MakeBinaryOperator(_factory.Syntax, single.Kind, left, right, single.MethodSymbolOpt?.ReturnType ?? boolType, single.MethodSymbolOpt, single.ConstrainedToTypeOpt);
575BoundExpression result;
576BoundExpression convertedBinary = ApplyConversionIfNotIdentity(single.ConversionForBool, single.ConversionForBoolPlaceholder, binary);
606private BoundExpression LowerConversions(BoundExpression expr)
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (81)
58BoundExpression loweredOperand = VisitExpression(node.Operand);
62private BoundExpression MakeUnaryOperator(
67BoundExpression loweredOperand,
73private BoundExpression MakeUnaryOperator(
79BoundExpression loweredOperand,
134var newOperand = MakeConversionNode(loweredOperand, upconvertType, false);
173private BoundExpression LowerLiftedUnaryOperator(
178BoundExpression loweredOperand,
184BoundExpression? optimized = OptimizeLiftedUnaryOperator(kind, syntax, method, constrainedToTypeOpt, loweredOperand, type);
202BoundExpression condition = _factory.MakeNullableHasValue(syntax, boundTemp);
205BoundExpression call_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTemp, getValueOrDefault);
208BoundExpression consequence = GetLiftedUnaryOperatorConsequence(kind, syntax, method, constrainedToTypeOpt, type, call_GetValueOrDefault);
211BoundExpression alternative = new BoundDefaultExpression(syntax, type);
216BoundExpression conditionalExpression = RewriteConditionalOperator(
232sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
237private BoundExpression? OptimizeLiftedUnaryOperator(
242BoundExpression loweredOperand,
254BoundExpression? neverNull = NullableAlwaysHasValue(loweredOperand);
270var result = LowerLiftedUnaryOperator(operatorKind, syntax, method, constrainedToTypeOpt, conditionalLeft!.WhenNotNull, type);
348private BoundExpression GetLiftedUnaryOperatorConsequence(UnaryOperatorKind kind, SyntaxNode syntax, MethodSymbol? method, TypeSymbol? constrainedToTypeOpt, TypeSymbol type, BoundExpression nonNullOperand)
353BoundExpression unliftedOp = MakeUnaryOperator(
363BoundExpression consequence = new BoundObjectCreationExpression(
427ArrayBuilder<BoundExpression> tempInitializers = ArrayBuilder<BoundExpression>.GetInstance();
433BoundExpression transformedLHS = TransformCompoundAssignmentLHS(node.Operand, isRegularCompoundAssignment: true, tempInitializers, tempSymbols, isDynamic);
442BoundExpression boundTemp = new BoundLocal(
450var newValue = MakeIncrementOperator(node, rewrittenValueToIncrement: (isPrefix ? MakeRValue(transformedLHS) : boundTemp));
480private static bool IsIndirectOrInstanceField(BoundExpression expression)
502ArrayBuilder<BoundExpression> tempInitializers,
504BoundExpression transformedLHS,
506BoundExpression boundTemp,
507BoundExpression newValue)
511ImmutableArray<BoundExpression> assignments = ImmutableArray.Create<BoundExpression>(
529ArrayBuilder<BoundExpression> tempInitializers,
531BoundExpression operand,
533BoundExpression boundTemp,
534BoundExpression newValue)
536var tempValue = isPrefix ? newValue : MakeRValue(operand);
538var tempAssignment = MakeAssignmentOperator(syntax, boundTemp, tempValue, operandType, used: false, isChecked: isChecked, isCompoundAssignment: false);
540var operandValue = isPrefix ? boundTemp : newValue;
544ImmutableArray.Create<BoundExpression>(tempAssignment),
550BoundExpression operandAssignment = MakeAssignmentOperator(syntax, operand, tempAssignedAndOperandValue, operandType, used: false, isChecked: isChecked, isCompoundAssignment: false);
563private BoundExpression MakeIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement)
570BoundExpression result;
588private BoundExpression ApplyConversionIfNotIdentity(BoundExpression? conversion, BoundValuePlaceholder? placeholder, BoundExpression replacement)
599static bool hasNonIdentityConversion([NotNullWhen(true)] BoundExpression? expression)
615private BoundExpression ApplyConversion(BoundExpression conversion, BoundValuePlaceholder placeholder, BoundExpression replacement)
623private BoundExpression MakeUserDefinedIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement)
640BoundExpression rewrittenArgument = ApplyConversionIfNotIdentity(node.OperandConversion, node.OperandPlaceholder, rewrittenValueToIncrement);
663BoundExpression condition = _factory.MakeNullableHasValue(node.Syntax, boundTemp);
666BoundExpression call_GetValueOrDefault = BoundCall.Synthesized(syntax, boundTemp, getValueOrDefault);
669BoundExpression userDefinedCall = BoundCall.Synthesized(syntax, receiverOpt: node.ConstrainedToTypeOpt is null ? null : new BoundTypeExpression(syntax, aliasOpt: null, node.ConstrainedToTypeOpt), node.MethodOpt, call_GetValueOrDefault);
672BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, userDefinedCall);
675BoundExpression alternative = new BoundDefaultExpression(syntax, type);
680BoundExpression conditionalExpression = RewriteConditionalOperator(
696sideEffects: ImmutableArray.Create<BoundExpression>(tempAssignment),
701private BoundExpression MakeBuiltInIncrementOperator(BoundIncrementOperator node, BoundExpression rewrittenValueToIncrement)
703BoundExpression result;
730BoundExpression boundOne = MakeLiteral(
743BoundExpression binaryOperand = rewrittenValueToIncrement;
769BoundExpression binOp;
807private BoundExpression MakeDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand)
814private BoundExpression MakeLiftedDecimalIncDecOperator(SyntaxNode syntax, BinaryOperatorKind oper, BoundExpression operand)
824BoundExpression condition = _factory.MakeNullableHasValue(syntax, operand);
826BoundExpression getValueCall = BoundCall.Synthesized(syntax, operand, getValueOrDefault);
828BoundExpression methodCall = BoundCall.Synthesized(syntax, receiverOpt: null, method, getValueCall);
830BoundExpression consequence = new BoundObjectCreationExpression(syntax, ctor, methodCall);
832BoundExpression alternative = new BoundDefaultExpression(syntax, operand.Type);
843private BoundExpression MakeRValue(BoundExpression transformedExpression)
Lowering\LocalRewriter\LoweredDynamicOperationFactory.cs (67)
73BoundExpression loweredOperand,
99var binderConstruction = MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__Convert, new[]
116BoundExpression loweredOperand,
132var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__UnaryOperation, new[]
152BoundExpression loweredLeft,
153BoundExpression loweredRight,
172var loweredArguments = ImmutableArray.Create<BoundExpression>(loweredLeft, loweredRight);
175var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__BinaryOperation, new[]
195BoundExpression loweredReceiver,
197ImmutableArray<BoundExpression> loweredArguments,
238var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeMember, new[]
263BoundExpression loweredReceiver,
264BoundExpression loweredHandler)
270var loweredArguments = ImmutableArray<BoundExpression>.Empty;
274var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeMember, new[]
296BoundExpression loweredReceiver,
297ImmutableArray<BoundExpression> loweredArguments,
317var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__Invoke, new[]
335ImmutableArray<BoundExpression> loweredArguments,
341var loweredReceiver = _factory.Typeof(type);
344var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__InvokeConstructor, new[]
360BoundExpression loweredReceiver,
372var loweredArguments = ImmutableArray<BoundExpression>.Empty;
376var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__GetMember, new[]
395BoundExpression loweredReceiver,
397BoundExpression loweredRight,
414var loweredArguments = ImmutableArray<BoundExpression>.Empty;
417var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__SetMember, new[]
436BoundExpression loweredReceiver,
437ImmutableArray<BoundExpression> loweredArguments,
446var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__GetIndex, new[]
462BoundExpression loweredReceiver,
463ImmutableArray<BoundExpression> loweredArguments,
466BoundExpression loweredRight,
485var binderConstruction = ((object)argumentInfoFactory != null) ? MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__SetIndex, new[]
500internal LoweredDynamicOperation MakeDynamicIsEventTest(string name, BoundExpression loweredReceiver)
504var binderConstruction = MakeBinderConstruction(WellKnownMember.Microsoft_CSharp_RuntimeBinder_Binder__IsEvent, new[]
516return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, ImmutableArray<BoundExpression>.Empty, default(ImmutableArray<RefKind>), null, resultType);
524private BoundExpression? MakeBinderConstruction(WellKnownMember factoryMethod, BoundExpression[] args)
542internal static RefKind GetReceiverRefKind(BoundExpression loweredReceiver)
573internal BoundExpression MakeCallSiteArgumentInfos(
575ImmutableArray<BoundExpression> loweredArguments,
578BoundExpression? loweredReceiver = null,
581BoundExpression? loweredRight = null)
588var infos = new BoundExpression[(loweredReceiver != null ? 1 : 0) + loweredArguments.Length + (loweredRight != null ? 1 : 0)];
614BoundExpression? binderConstruction,
615BoundExpression? loweredReceiver,
617ImmutableArray<BoundExpression> loweredArguments,
619BoundExpression? loweredRight,
664var nullCallSite = _factory.Null(callSiteField.Type);
666var siteInitialization = _factory.Conditional(
685private ImmutableArray<LocalSymbol> MakeTempsForDiscardArguments(ref ImmutableArray<BoundExpression> loweredArguments)
734BoundExpression? loweredReceiver,
736ImmutableArray<BoundExpression> loweredArguments,
738BoundExpression? loweredRight,
809private BoundExpression GetArgumentInfo(
811BoundExpression boundArgument,
884private static ImmutableArray<BoundExpression> GetCallSiteArguments(BoundExpression callSiteFieldAccess, BoundExpression? receiver, ImmutableArray<BoundExpression> arguments, BoundExpression? right)
886var result = new BoundExpression[1 + (receiver != null ? 1 : 0) + arguments.Length + (right != null ? 1 : 0)];
907private TypeSymbol[] MakeCallSiteDelegateSignature(TypeSymbol callSiteType, BoundExpression? receiver, ImmutableArray<BoundExpression> arguments, BoundExpression? right, TypeSymbol resultType)
Lowering\MethodToClassRewriter.cs (53)
41protected abstract BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass);
54private readonly Dictionary<BoundValuePlaceholderBase, BoundExpression> _placeholderMap;
65this._placeholderMap = new Dictionary<BoundValuePlaceholderBase, BoundExpression>();
137(BoundExpression?)this.Visit(node.ExceptionSourceOpt),
140(BoundExpression?)this.Visit(node.ExceptionFilterOpt),
167var newSideEffects = VisitList<BoundExpression>(node.SideEffects);
168var newValue = (BoundExpression)this.Visit(node.Value);
178var condition = (BoundExpression?)this.Visit(node.Condition);
187BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
195BoundExpression condition = (BoundExpression)this.Visit(node.Condition);
204var expression = (BoundExpression?)this.Visit(node.ExpressionOpt);
225var rewrittenReceiver = (BoundExpression?)Visit(node.ReceiverOpt);
232var rewrittenReceiver = (BoundExpression?)this.Visit(node.ReceiverOpt);
233var rewrittenArguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments);
271(BoundExpression)Visit(node.Left),
272(BoundExpression)Visit(node.Right),
279(BoundExpression)Visit(node.Operand),
296(BoundExpression)Visit(node.Operand),
314(BoundExpression)Visit(node.Left),
315(BoundExpression)Visit(node.Right),
457var getAwaiter = (BoundExpression?)this.Visit(node.GetAwaiter);
473BoundExpression originalLeft = node.Left;
482BoundExpression originalRight = node.Right;
501BoundExpression rewrittenLeft = (BoundExpression)this.Visit(leftLocal);
502BoundExpression rewrittenRight = (BoundExpression)this.Visit(originalRight);
528ImmutableArray.Create<BoundExpression>(tempAssignment),
545var receiverOpt = (BoundExpression?)this.Visit(node.ReceiverOpt);
577BoundExpression originalArgument = node.Argument;
578BoundExpression rewrittenArgument = (BoundExpression)this.Visit(originalArgument);
599var receiver = (BoundExpression)this.Visit(node.Receiver);
600var whenNotNull = (BoundExpression)this.Visit(node.WhenNotNull);
601var whenNullOpt = (BoundExpression?)this.Visit(node.WhenNullOpt);
693ImmutableArray<BoundExpression> arguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments);
715BoundExpression operand = (BoundExpression)this.Visit(node.Operand);
721private static bool BaseReferenceInReceiverWasRewritten([NotNullWhen(true)] BoundExpression? originalReceiver, [NotNullWhen(true)] BoundExpression? rewrittenReceiver)
Lowering\SpillSequenceSpiller.cs (74)
40public readonly BoundExpression Value;
45public BoundSpillSequenceBuilder(SyntaxNode syntax, BoundExpression value = null)
83internal BoundSpillSequenceBuilder Update(BoundExpression value)
159internal void AddExpressions(ImmutableArray<BoundExpression> expressions)
161foreach (var expression in expressions)
245private BoundExpression VisitExpression(ref BoundSpillSequenceBuilder builder, BoundExpression expression)
247var e = (BoundExpression)this.Visit(expression);
266private static BoundExpression UpdateExpression(BoundSpillSequenceBuilder builder, BoundExpression expression)
303private BoundExpression Spill(
305BoundExpression expression,
371var left = Spill(builder, assignment.Left, RefKind.Ref);
372var right = Spill(builder, assignment.Right, RefKind.Ref);
420var receiver = Spill(builder, field.ReceiverOpt, fieldSymbol.ContainingType.IsValueType ? refKind : RefKind.None);
512private ImmutableArray<BoundExpression> VisitExpressionList(
514ImmutableArray<BoundExpression> args,
558var result = ArrayBuilder<BoundExpression>.GetInstance(newList.Length);
564var replacement = Spill(builder, newList[i], refKind, sideEffectsOnly);
595var expression = VisitExpression(ref builder, node.Expression);
602BoundExpression expression = VisitExpression(ref builder, node.ExpressionOpt);
609BoundExpression expr = VisitExpression(ref builder, node.Expression);
618var condition = VisitExpression(ref builder, node.Condition);
625var expression = VisitExpression(ref builder, node.ExpressionOpt);
632var expression = VisitExpression(ref builder, node.Expression);
638BoundExpression exceptionSourceOpt = (BoundExpression)this.Visit(node.ExceptionSourceOpt);
644var exceptionFilterOpt = VisitExpression(ref builder, node.ExceptionFilterOpt);
674var expr = VisitExpression(ref builder, node.Expression);
687var value = VisitExpression(ref builder, node.Value);
694var expr = VisitExpression(ref builder, node.Operand);
708var expression = VisitExpression(ref builder, node.Expression);
738ImmutableArray<BoundExpression> bounds;
765BoundExpression count = VisitExpression(ref builder, node.Count);
773var expression = VisitExpression(ref builder, node.Expression);
780var operand = VisitExpression(ref builder, node.Operand);
789var right = VisitExpression(ref builder, node.Right);
791BoundExpression left = node.Left;
820var expression = VisitExpression(ref leftBuilder, arrayAccess.Expression);
846BoundExpression fieldWithSpilledReceiver(BoundFieldAccess field, ref BoundSpillSequenceBuilder leftBuilder, bool isAssignmentTarget)
852BoundExpression receiver;
867var expression = VisitExpression(ref leftBuilder, arrayAccess.Expression);
912var right = VisitExpression(ref builder, node.Right);
913BoundExpression left;
950BoundExpression receiver = null;
1000private static RefKind ReceiverSpillRefKind(BoundExpression receiver)
1016BoundExpression invokedExpression;
1036var condition = VisitExpression(ref conditionBuilder, node.Condition);
1039var consequence = VisitExpression(ref consequenceBuilder, node.Consequence);
1042var alternative = VisitExpression(ref alternativeBuilder, node.Alternative);
1085var operand = VisitExpression(ref builder, node.Operand);
1094var expression = VisitExpression(ref builder, node.Expression);
1110var argument = VisitExpression(ref builder, node.Argument);
1117var receiver = VisitExpression(ref builder, node.ReceiverOpt);
1124var operand = VisitExpression(ref builder, node.Operand);
1131var operand = VisitExpression(ref builder, node.Operand);
1140var right = VisitExpression(ref builder, node.RightOperand);
1141BoundExpression left;
1170var receiver = VisitExpression(ref receiverBuilder, node.Receiver);
1173var whenNotNull = VisitExpression(ref whenNotNullBuilder, node.WhenNotNull);
1176var whenNullOpt = VisitExpression(ref whenNullBuilder, node.WhenNullOpt);
1187BoundExpression condition;
1262private readonly BoundExpression _receiver;
1270private ConditionalReceiverReplacer(BoundExpression receiver, int receiverId, int recursionDepth)
1277public static BoundStatement Replace(BoundNode node, BoundExpression receiver, int receiverID, int recursionDepth)
1331var index = VisitExpression(ref builder, node.Index);
1332BoundExpression expression;
1352var operand = VisitExpression(ref builder, node.Operand);
1359var value = VisitExpression(ref valueBuilder, node.Value);
1385BoundExpression operand = VisitExpression(ref builder, node.Expression);
1415BoundExpression operand = VisitExpression(ref builder, node.Operand);
1422BoundExpression operand = VisitExpression(ref builder, node.Operand);
1429BoundExpression expression = VisitExpression(ref builder, node.Expression);
Lowering\StateMachineRewriter\CapturedSymbol.cs (12)
26public abstract BoundExpression Replacement(SyntaxNode node, Func<NamedTypeSymbol, BoundExpression> makeFrame);
39public override BoundExpression Replacement(SyntaxNode node, Func<NamedTypeSymbol, BoundExpression> makeFrame)
41var frame = makeFrame(this.HoistedField.ContainingType);
57public override BoundExpression Replacement(SyntaxNode node, Func<NamedTypeSymbol, BoundExpression> makeFrame)
59var frame = makeFrame(this.HoistedField.ContainingType);
67private readonly BoundExpression _replacement;
70public CapturedToExpressionSymbolReplacement(BoundExpression replacement, ImmutableArray<StateMachineFieldSymbol> hoistedFields, bool isReusable)
77public override BoundExpression Replacement(SyntaxNode node, Func<NamedTypeSymbol, BoundExpression> makeFrame)
Lowering\StateMachineRewriter\MethodToStateMachineRewriter.cs (20)
144BoundExpression thisProxyReplacement = thisProxy.Replacement(F.Syntax, frameType => F.This());
199protected override BoundExpression FramePointer(SyntaxNode syntax, NamedTypeSymbol frameClass)
338var variableCleanup = ArrayBuilder<BoundExpression>.GetInstance();
424private void AddVariableCleanup(ArrayBuilder<BoundExpression> cleanup, FieldSymbol field)
490private BoundExpression HoistRefInitialization(SynthesizedLocal local, BoundAssignmentOperator node)
496var right = (BoundExpression)Visit(node.Right);
498var sideEffects = ArrayBuilder<BoundExpression>.GetInstance();
518var replacement = HoistExpression(right, awaitSyntaxOpt, syntaxOffset, local.RefKind, sideEffects, hoistedFields, ref needsSacrificialEvaluation);
536var last = sideEffects.Last();
541private BoundExpression HoistExpression(
542BoundExpression expr,
546ArrayBuilder<BoundExpression> sideEffects,
555BoundExpression expression = HoistExpression(array.Expression, awaitSyntaxOpt, syntaxOffset, RefKind.None, sideEffects, hoistedFields, ref needsSacrificialEvaluation);
556var indices = ArrayBuilder<BoundExpression>.GetInstance();
557foreach (var index in array.Indices)
583var receiver = HoistExpression(field.ReceiverOpt, awaitSyntaxOpt, syntaxOffset,
787BoundExpression expression = (BoundExpression)this.Visit(node.Expression);
910var fetchThis = proxy.Replacement(F.Syntax, frameType => F.This());
Lowering\SyntheticBoundNodeFactory.cs (190)
97internal BoundExpression MakeInvocationExpression(
100BoundExpression receiver,
102ImmutableArray<BoundExpression> args,
267public BoundExpression This(LocalSymbol thisTempOpt)
269return (thisTempOpt != null) ? Local(thisTempOpt) : (BoundExpression)This();
280return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true);
288public BoundFieldAccess Field(BoundExpression? receiver, FieldSymbol f)
298public BoundExpression Property(WellKnownMember member)
303public BoundExpression Property(BoundExpression? receiverOpt, WellKnownMember member)
312public BoundExpression Property(BoundExpression? receiverOpt, PropertySymbol property)
327public 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)
447public BoundExpression AssignmentExpression(SyntaxNode syntax, BoundExpression left, BoundExpression right, TypeSymbol type, bool isRef = false, bool hasErrors = false, bool wasCompilerGenerated = false)
511public BoundReturnStatement Return(BoundExpression? expression = null)
597public BoundBinaryOperator Binary(BinaryOperatorKind kind, TypeSymbol type, BoundExpression left, BoundExpression right)
602public BoundAsOperator As(BoundExpression operand, TypeSymbol type)
607public BoundIsOperator Is(BoundExpression operand, TypeSymbol type)
616public BoundBinaryOperator LogicalAnd(BoundExpression left, BoundExpression right)
623public BoundBinaryOperator LogicalOr(BoundExpression left, BoundExpression right)
630public BoundBinaryOperator IntEqual(BoundExpression left, BoundExpression right)
635public BoundBinaryOperator ObjectEqual(BoundExpression left, BoundExpression right)
640public BoundBinaryOperator ObjectNotEqual(BoundExpression left, BoundExpression right)
645public BoundBinaryOperator IntNotEqual(BoundExpression left, BoundExpression right)
650public BoundBinaryOperator IntLessThan(BoundExpression left, BoundExpression right)
655public BoundBinaryOperator IntGreaterThanOrEqual(BoundExpression left, BoundExpression right)
660public BoundBinaryOperator IntSubtract(BoundExpression left, BoundExpression right)
665public BoundBinaryOperator IntMultiply(BoundExpression left, BoundExpression right)
693public BoundObjectCreationExpression New(NamedTypeSymbol type, params BoundExpression[] args)
699public BoundObjectCreationExpression New(MethodSymbol ctor, params BoundExpression[] args)
702public BoundObjectCreationExpression New(NamedTypeSymbol type, ImmutableArray<BoundExpression> args)
708public BoundObjectCreationExpression New(MethodSymbol ctor, ImmutableArray<BoundExpression> args)
711public BoundObjectCreationExpression New(WellKnownMember wm, ImmutableArray<BoundExpression> args)
717public BoundExpression MakeIsNotANumberTest(BoundExpression input)
732public BoundExpression InstanceCall(BoundExpression receiver, string name, BoundExpression arg)
737public BoundExpression InstanceCall(BoundExpression receiver, string name)
739return MakeInvocationExpression(BinderFlags.None, this.Syntax, receiver, name, ImmutableArray<BoundExpression>.Empty, this.Diagnostics);
742public BoundExpression StaticCall(TypeSymbol receiver, string name, params BoundExpression[] args)
747public BoundExpression StaticCall(TypeSymbol receiver, string name, ImmutableArray<BoundExpression> args, bool allowUnexpandedForm)
752public BoundExpression StaticCall(BinderFlags flags, TypeSymbol receiver, string name, ImmutableArray<TypeSymbol> typeArgs, params BoundExpression[] args)
757public BoundExpression StaticCall(TypeSymbol receiver, MethodSymbol method, params BoundExpression[] args)
767public BoundExpression StaticCall(MethodSymbol method, ImmutableArray<BoundExpression> args)
770public BoundExpression StaticCall(WellKnownMember method, params BoundExpression[] args)
778public BoundExpression StaticCall(SpecialMember method, params BoundExpression[] args)
786public BoundCall Call(BoundExpression? receiver, MethodSymbol method)
788return Call(receiver, method, ImmutableArray<BoundExpression>.Empty);
791public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0)
796public BoundCall Call(BoundExpression? receiver, MethodSymbol method, BoundExpression arg0, BoundExpression arg1)
801public BoundCall Call(BoundExpression? receiver, MethodSymbol method, params BoundExpression[] args)
803return Call(receiver, method, ImmutableArray.Create<BoundExpression>(args));
806public BoundCall Call(BoundExpression? receiver, WellKnownMember method, BoundExpression arg0)
809public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<BoundExpression> args)
821public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<RefKind> refKinds, ImmutableArray<BoundExpression> args)
831public BoundExpression Conditional(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, TypeSymbol type, bool isRef = false)
836public BoundComplexConditionalReceiver ComplexConditionalReceiver(BoundExpression valueTypeReceiver, BoundExpression referenceTypeReceiver)
843public BoundExpression Coalesce(BoundExpression left, BoundExpression right)
851public BoundStatement If(BoundExpression condition, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
856public BoundStatement ConditionalGoto(BoundExpression condition, LabelSymbol label, bool jumpIfTrue)
861public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
912public BoundThrowStatement Throw(BoundExpression e)
922public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts)
927public BoundExpression MakeSequence(params BoundExpression[] parts)
932public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts)
934var builder = ArrayBuilder<BoundExpression>.GetInstance();
937var part = parts[i];
943var lastExpression = parts[parts.Length - 1];
954public BoundSequence Sequence(BoundExpression[] sideEffects, BoundExpression result, TypeSymbol? type = null)
961public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result)
970public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result)
1000public BoundStatement Switch(BoundExpression ex, ImmutableArray<SyntheticSwitchSection> sections)
1095public BoundArrayLength ArrayLength(BoundExpression array)
1101public BoundArrayAccess ArrayAccessFirstElement(BoundExpression array)
1105ImmutableArray<BoundExpression> firstElementIndices = ArrayBuilder<BoundExpression>.GetInstance(rank, Literal(0)).ToImmutableAndFree();
1109public BoundArrayAccess ArrayAccess(BoundExpression array, params BoundExpression[] indices)
1114public BoundArrayAccess ArrayAccess(BoundExpression array, ImmutableArray<BoundExpression> indices)
1149public BoundExpression ThrowExpression(BoundExpression thrown, TypeSymbol type)
1154public BoundExpression Null(TypeSymbol type)
1160public BoundExpression NullRef(TypeWithAnnotations type)
1166public static BoundExpression Null(TypeSymbol type, SyntaxNode syntax)
1169BoundExpression nullLiteral = new BoundLiteral(syntax, ConstantValue.Null, type) { WasCompilerGenerated = true };
1180public BoundExpression Typeof(WellKnownType type)
1185public BoundExpression Typeof(TypeSymbol type)
1195public BoundExpression Typeof(TypeWithAnnotations type)
1200public ImmutableArray<BoundExpression> TypeOfs(ImmutableArray<TypeWithAnnotations> typeArguments)
1205public BoundExpression TypeofDynamicOperationContextType()
1211public BoundExpression Sizeof(TypeSymbol type)
1216internal BoundExpression ConstructorInfo(MethodSymbol ctor)
1226public BoundExpression MethodDefIndex(MethodSymbol method)
1235public BoundExpression LocalId(LocalSymbol symbol)
1245public BoundExpression ParameterId(ParameterSymbol symbol)
1255public BoundExpression StateMachineInstanceId()
1267public BoundExpression ModuleVersionId()
1272public BoundExpression ModuleVersionIdString()
1277public BoundExpression InstrumentationPayloadRoot(int analysisKind, TypeSymbol payloadType)
1282public BoundExpression MaximumMethodDefIndex()
1293public BoundExpression SourceDocumentIndex(Cci.DebugSourceDocument document)
1302public BoundExpression MethodInfo(MethodSymbol method)
1321public BoundExpression FieldInfo(FieldSymbol field)
1347public BoundExpression Convert(TypeSymbol type, BoundExpression arg)
1368public BoundExpression Convert(TypeSymbol type, BoundExpression arg, Conversion conversion, bool isChecked = false)
1395public BoundExpression ArrayOrEmpty(TypeSymbol elementType, BoundExpression[] elements)
1407public BoundExpression ArrayOrEmpty(TypeSymbol elementType, ImmutableArray<BoundExpression> elements)
1422public BoundExpression Array(TypeSymbol elementType, ImmutableArray<BoundExpression> elements)
1426ImmutableArray.Create<BoundExpression>(Literal(elements.Length)),
1431public BoundExpression Array(TypeSymbol elementType, BoundExpression length)
1435ImmutableArray.Create<BoundExpression>(length),
1441internal BoundExpression Default(TypeSymbol type)
1446internal static BoundExpression Default(TypeSymbol type, SyntaxNode syntax)
1475BoundExpression source,
1486internal BoundExpression NullOrDefault(TypeSymbol typeSymbol)
1491internal static BoundExpression NullOrDefault(TypeSymbol typeSymbol, SyntaxNode syntax)
1496internal BoundExpression Not(BoundExpression expression)
1507BoundExpression argument,
1602internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder)
1617internal BoundExpression MakeNullCheck(SyntaxNode syntax, BoundExpression rewrittenExpr, BinaryOperatorKind operatorKind)
1669internal BoundExpression MakeNullableHasValue(SyntaxNode syntax, BoundExpression expression)
1675internal BoundExpression RewriteNullableNullEquality(
1678BoundExpression loweredLeft,
1679BoundExpression loweredRight,
1697BoundExpression nullable = loweredRight.IsLiteralNull() ? loweredLeft : loweredRight;
1706BoundExpression nonNullValue = LocalRewriter.NullableAlwaysHasValue(nullable);
1717sideEffects: ImmutableArray.Create<BoundExpression>(nonNullValue),
1727BoundExpression whenNotNull = RewriteNullableNullEquality(
1739BoundExpression call = MakeNullableHasValue(syntax, nullable);
1740BoundExpression result = kind == BinaryOperatorKind.NullableNullNotEqual ?
Operations\CSharpOperationFactory.cs (39)
304ConstantValue? constantValue = (boundNode as BoundExpression)?.ConstantValueOpt;
319BoundExpression boundExpr => boundExpr.GetPublicTypeSymbol(),
458private static TypeParameterSymbol? GetConstrainedToType(Symbol targetMember, BoundExpression? receiverOpt)
525return CreateFromArray<BoundExpression, IOperation>(declaredTypeOpt.BoundDimensionsOpt);
531ImmutableArray<BoundExpression> dimensions;
540dimensions = ImmutableArray<BoundExpression>.Empty;
542return CreateFromArray<BoundExpression, IOperation>(dimensions);
747ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicObjectCreationExpression.Arguments);
776ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicInvocation.Arguments);
785internal IOperation CreateBoundDynamicIndexerAccessExpressionReceiver(BoundExpression indexer)
800internal ImmutableArray<IOperation> CreateBoundDynamicIndexerAccessArguments(BoundExpression indexer)
805return CreateFromArray<BoundExpression, IOperation>(boundDynamicAccess.Arguments);
808return CreateFromArray<BoundExpression, IOperation>(boundObjectInitializerMember.Arguments);
829ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundObjectInitializerExpression));
838ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundCollectionInitializerExpression));
944BoundExpression? receiver,
971ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundCollectionElementInitializer.Arguments);
1013BoundExpression boundOperand = boundConversion.Operand;
1093BoundExpression nestedOperand = nestedConversion.Operand;
1200ImmutableArray<IOperation> dimensionSizes = CreateFromArray<BoundExpression, IOperation>(boundArrayCreation.Bounds);
1211ImmutableArray<IOperation> elementValues = CreateFromArray<BoundExpression, IOperation>(boundArrayInitialization.Initializers);
1229ConstantValue? constantValue = ((BoundExpression)boundDefaultExpression).ConstantValueOpt;
1342var children = CreateFromArray<BoundExpression, IOperation>(boundBadExpression.ChildBoundNodes);
1560ImmutableArray<IOperation> indices = CreateFromArray<BoundExpression, IOperation>(boundArrayAccess.Indices);
2139ImmutableArray<IOperation> elements = CreateFromArray<BoundExpression, IOperation>(boundTupleExpression.Arguments);
2154internal ImmutableArray<IInterpolatedStringContentOperation> CreateBoundInterpolatedStringContentOperation(ImmutableArray<BoundExpression> parts, ImmutableArray<(bool IsLiteral, bool HasAlignment, bool HasFormat)>? positionInfo)
2161foreach (var part in parts)
2187var part = parts[i];
2190BoundExpression value;
2191BoundExpression? alignment;
2192BoundExpression? format;
2260static (BoundExpression Value, BoundExpression? Alignment, BoundExpression? Format) getCallInfo(ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, (bool IsLiteral, bool HasAlignment, bool HasFormat) currentPosition)
2262BoundExpression value = arguments[0];
2272BoundExpression? alignment = alignmentIndex == -1 ? null : arguments[alignmentIndex];
2274BoundExpression? format = formatIndex == -1 ? null : arguments[formatIndex];
2318IOperation createContent(BoundExpression current)