Generated\BoundNodes.xml.Generated.cs (10)
4581public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4585var result = new BoundLocal(this.Syntax, localSymbol, declarationKind, constantValueOpt, isNullableUnknown, type, this.HasErrors);
9315return VisitLocal((BoundLocal)node, arg);
9678public virtual R VisitLocal(BoundLocal node, A arg) => this.DefaultVisit(node, arg);
9919public virtual BoundNode? VisitLocal(BoundLocal node) => this.DefaultVisit(node);
10513public override BoundNode? VisitLocal(BoundLocal node) => null;
11861public override BoundNode? VisitLocal(BoundLocal node)
14040public override BoundNode? VisitLocal(BoundLocal node)
14043BoundLocal updatedNode;
16515public override TreeDumperNode VisitLocal(BoundLocal node, object? arg) => new TreeDumperNode("local", null, new TreeDumperNode[]
Lowering\AsyncRewriter\RuntimeAsyncRewriter.cs (9)
77var hoistedThis = rewriter._factory.StoreToTemp(rewriter._factory.This(), out BoundAssignmentOperator store, kind: SynthesizedLocalKind.AwaitByRefSpill);
91private readonly RefInitializationHoister<LocalSymbol, BoundLocal> _refInitializationHoister;
109_refInitializationHoister = new RefInitializationHoister<LocalSymbol, BoundLocal>(_factory, _factory.CurrentFunction, TypeMap.Empty);
197var tmp = _factory.StoreToTemp(getAwaiter, out BoundAssignmentOperator store, kind: SynthesizedLocalKind.Awaiter);
248var tmp = _factory.StoreToTemp(getAwaiter, out BoundAssignmentOperator store, kind: SynthesizedLocalKind.Awaiter);
320if (node.Left is not BoundLocal leftLocal)
346if (visitedLeftOrProxy is not BoundLocal visitLeftLocal)
364static BoundLocal createHoistedAccess(LocalSymbol local, RuntimeAsyncRewriter @this)
380public override BoundNode VisitLocal(BoundLocal node)
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (13)
84var boundTemp = _factory.StoreToTemp(loweredLeft, out tempAssignment);
659BoundLocal? temp;
663var local = _factory.StoreToTemp(loweredLeft, out assignment);
1048BoundLocal boundTempX = _factory.StoreToTemp(xNonNull ?? loweredLeft, out BoundAssignmentOperator tempAssignmentX);
1049BoundLocal boundTempY = _factory.StoreToTemp(yNonNull ?? loweredRight, out BoundAssignmentOperator tempAssignmentY);
1220BoundLocal boundTempX = _factory.StoreToTemp(xNonNull ?? loweredLeft, out tempAssignmentX);
1222BoundLocal boundTempY = _factory.StoreToTemp(yNonNull ?? loweredRight, out tempAssignmentY);
1514var tempAccess = _factory.StoreToTemp(operand, out tempAssignment, kind: kind);
1738BoundLocal boundTemp = _factory.StoreToTemp(notAlwaysNull, out tempAssignment);
1795BoundLocal boundTempX = _factory.StoreToTemp(leftNonNull ?? left, out tempAssignmentX);
1797BoundLocal boundTempY = _factory.StoreToTemp(rightNonNull ?? right, out tempAssignmentY);
1849BoundLocal boundTempX = _factory.StoreToTemp(loweredLeft, out tempAssignmentX);
1851BoundLocal boundTempY = _factory.StoreToTemp(loweredRight, out tempAssignmentY);
Lowering\LocalRewriter\LocalRewriter_Call.cs (24)
311var receiverTemp = _factory.StoreToTemp(receiverOpt, out var assignmentToTemp);
584((BoundLocal)current).LocalSymbol.SynthesizedKind != SynthesizedLocalKind.UserDefined);
773BoundLocal receiverTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp, refKind is RefKind.RefReadOnlyParameter ? RefKind.In : refKind);
779if (capturedReceiver is not BoundLocal { LocalSymbol.IsRef: false } &&
786Debug.Assert(capturedReceiver is BoundLocal);
792tempsOpt.Insert(insertTempHere, ((BoundLocal)capturedReceiver).LocalSymbol);
938BoundSequence { Value: BoundLocal l } => l,
939BoundLocal l => l, // Can happen for discard arguments
950BoundLocal local = _factory.StoreToTemp(visitedArgument, out var store, refKind: paramRefKind is RefKind.In or RefKind.RefReadOnlyParameter ? RefKind.In : argRefKind);
1069private BoundLocal ReferToTempIfReferenceTypeReceiver(BoundExpression receiver, [NotNull] ref BoundAssignmentOperator? assignmentToTemp, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
1071Debug.Assert(receiver is BoundArrayAccess { Type.IsReferenceType: false } or BoundLocal);
1073(array is BoundLocal && indices.All(e => e is BoundLocal or BoundLiteral)));
1074Debug.Assert(assignmentToTemp is not null == receiver is BoundLocal);
1077(assignmentToTemp.Left is BoundLocal { LocalSymbol: { } var1 } &&
1078receiver is BoundLocal { LocalSymbol: { } var2 } &&
1091BoundLocal result;
1095BoundLocal cache = _factory.Local(_factory.SynthesizedLocal(receiverType));
1099if (receiver is BoundLocal receiverTemp)
1135else if (receiver is BoundLocal receiverTemp)
1582var temp = _factory.StoreToTemp(
1668temporariesBuilder.Add(((BoundLocal)s.Left).LocalSymbol);
1826var localRefKind = ((BoundLocal)argument).LocalSymbol.RefKind;
1837BoundLocal boundTemp = _factory.StoreToTemp(argument, out boundAssignmentToTemp);
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (21)
495BoundLocal temp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp);
535BoundExpression? rewriteCollectionInitializer(BoundLocal rewrittenReceiver, BoundExpression expressionElement)
726var temp = _factory.StoreToTemp(element, out var assignment);
742BoundLocal inlineArrayLocal = _factory.StoreToTemp(new BoundDefaultExpression(syntax, inlineArrayType), out assignmentToTemp);
931var localsBuilder = ArrayBuilder<BoundLocal>.GetInstance();
938BoundLocal? indexTemp = null;
951BoundLocal arrayTemp = _factory.StoreToTemp(
1180ArrayBuilder<BoundLocal> localsBuilder,
1181BoundLocal indexTemp,
1197Debug.Assert((object)spreadOperandAsSpan != rewrittenSpreadOperand || spreadOperandAsSpan is BoundLocal { LocalSymbol.SynthesizedKind: SynthesizedLocalKind.LoweringTemp });
1202localsBuilder.Add((BoundLocal)spreadOperandAsSpan);
1236var localsBuilder = ArrayBuilder<BoundLocal>.GetInstance();
1263BoundLocal? knownLengthTemp = null;
1299BoundLocal listTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp);
1315BoundLocal spanTemp = _factory.StoreToTemp(_factory.Call(receiver: null, asSpan, listTemp), out assignmentToTemp);
1324BoundLocal? indexTemp = null;
1452ArrayBuilder<BoundLocal> locals,
1459BoundLocal temp = _factory.StoreToTemp(rewrittenExpression, out assignmentToTemp);
1468ArrayBuilder<BoundLocal> rewrittenExpressions,
1511private BoundExpression GetKnownLengthExpression(ImmutableArray<BoundNode> elements, int numberIncludingLastSpread, ArrayBuilder<BoundLocal> rewrittenExpressions)
1579var iterationLocal = _factory.Local(iterationVariable);
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (22)
60BoundLocal targetOfCompoundOperation = _factory.StoreToTemp(VisitExpression(node.Left), out tempAssignment);
125var isEvent = _factory.StoreToTemp(_dynamicFactory.MakeDynamicIsEventTest(memberAccess.Name, memberAccess.Receiver).ToExpression(), out BoundAssignmentOperator isEventAssignment);
131eventTemps.Add(((BoundLocal)lhsRead).LocalSymbol);
132var storeNonEvent = _factory.StoreToTemp(_factory.Conditional(_factory.Not(isEvent), receiverAssignment, _factory.Null(receiverAssignment.Type), receiverAssignment.Type), out BoundAssignmentOperator nonEventStore);
141eventTemps.Add(((BoundLocal)loweredRight).LocalSymbol);
234BoundLocal binaryResult = _factory.StoreToTemp(opFinal, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None);
354var receiverTemp = _factory.StoreToTemp(
365if (capturedReceiver is not BoundLocal { LocalSymbol.IsRef: false } &&
372Debug.Assert(capturedReceiver is BoundLocal);
378temps.Insert(insertTempHere, ((BoundLocal)capturedReceiver).LocalSymbol);
399var receiverTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp);
546var boundTemp = _factory.StoreToTemp(array, out storeToTemp);
564temps.Add(((BoundLocal)tempAssignment.Left).LocalSymbol);
620var variableTemp = _factory.StoreToTemp(arrayAccess, out assignmentToTemp, refKind: RefKind.Ref);
667var receiverTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp);
680var temp = _factory.StoreToTemp(VisitExpression(indexerAccess.Receiver), out assignmentToTemp);
698var temp = _factory.StoreToTemp(VisitExpression(arguments[i]), out assignmentToTemp, indexerAccess.ArgumentRefKindsOpt.RefKinds(i) != RefKind.None ? RefKind.Ref : RefKind.None);
926var variableTemp = _factory.StoreToTemp(rewrittenVariable, out assignmentToTemp2, refKind: RefKind.Ref);
955var arrayTemp = _factory.StoreToTemp(loweredExpression, out assignmentToArrayTemp);
958var boundTempArray = arrayTemp;
966var temp = _factory.StoreToTemp(loweredIndices[i], out assignmentToTemp);
1031return localsMayBeAssignedOrCaptured || ((BoundLocal)expression).LocalSymbol.RefKind != RefKind.None;
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (24)
164BoundLocal boundEnumeratorVar = MakeBoundLocal(forEachSyntax, enumeratorVar, enumeratorType);
321BoundLocal boundEnumeratorVar,
437BoundLocal boundDisposableVar = MakeBoundLocal(forEachSyntax, disposableVar, idisposableTypeSymbol);
635BoundLocal boundArrayVar = MakeBoundLocal(forEachSyntax, collectionTemp, collectionType);
641BoundLocal boundPositionVar = MakeBoundLocal(forEachSyntax, positionVar, intType);
707private delegate BoundExpression GetForEachStatementAsForItem<TArg>(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, BoundLocal boundArrayVar, BoundLocal boundPositionVar, TArg arg);
708private delegate BoundExpression GetForEachStatementAsForLength<TArg>(LocalRewriter rewriter, SyntaxNode syntax, BoundLocal boundArrayVar, TArg arg);
714getItem: static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, BoundLocal boundArrayVar, BoundLocal boundPositionVar, (MethodSymbol indexerGet, MethodSymbol lengthGet) arg) =>
723getLength: static (LocalRewriter rewriter, SyntaxNode syntax, BoundLocal boundArrayVar, (MethodSymbol indexerGet, MethodSymbol lengthGet) arg) =>
753BoundLocal boundLocal = rewriter._factory.StoreToTemp(rewrittenExpression, out BoundAssignmentOperator? valueStore);
766return static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, BoundLocal boundArrayVar, BoundLocal boundPositionVar, object? _) =>
792return static (LocalRewriter rewriter, SyntaxNode syntax, BoundLocal boundArrayVar, object? _) =>
924BoundLocal boundArrayVar = MakeBoundLocal(forEachSyntax, arrayVar, arrayType);
930BoundLocal boundPositionVar = MakeBoundLocal(forEachSyntax, positionVar, intType);
1073BoundLocal boundArrayVar = MakeBoundLocal(forEachSyntax, arrayVar, arrayType);
1087BoundLocal[] boundUpperVar = new BoundLocal[rank];
1109BoundLocal[] boundPositionVar = new BoundLocal[rank];
1231private static BoundLocal MakeBoundLocal(CSharpSyntaxNode syntax, LocalSymbol local, TypeSymbol type)
1251private BoundStatement MakePositionIncrement(CSharpSyntaxNode syntax, BoundLocal boundPositionVar, TypeSymbol intType)
Lowering\LocalRewriter\LocalRewriter_IndexerAccess.cs (23)
333localsBuilder.Insert(0, ((BoundLocal)possiblyRefCapturedReceiver).LocalSymbol);
357result = _factory.Sequence(ImmutableArray.Create(((BoundLocal)rewrittenReceiver).LocalSymbol),
582var receiverLocal = F.StoreToTemp(
595if (capturedReceiver is not BoundLocal { LocalSymbol.IsRef: false })
618locals.Insert(insertTempHere, ((BoundLocal)capturedReceiver).LocalSymbol);
645locals.Add(((BoundLocal)makeOffsetInput).LocalSymbol);
704var integerTemp = F.StoreToTemp(integerArgument, out BoundAssignmentOperator integerStore);
718var integerTemp = F.StoreToTemp(integerArgument, out BoundAssignmentOperator integerStore);
925var receiverLocal = F.StoreToTemp(
938if (capturedReceiver is not BoundLocal { LocalSymbol.IsRef: false })
979localsBuilder.Insert(insertTempHere, ((BoundLocal)capturedReceiver).LocalSymbol);
1116var lengthLocal = F.StoreToTemp(lengthAccess, out var lengthStore);
1129var startLocal = F.StoreToTemp(startExpr, out var startStore);
1134var rangeSizeLocal = F.StoreToTemp(rangeSizeExpr, out var rangeSizeStore);
1163localsBuilder.Add(((BoundLocal)expression).LocalSymbol);
1250startExpr is not BoundLocal { LocalSymbol.SynthesizedKind: not SynthesizedLocalKind.UserDefined })
1252var startLocal = F.StoreToTemp(startExpr, out var startStore);
1264private (BoundLocal startExpr, BoundLocal rangeSizeExpr)
1269var rangeLocal = F.StoreToTemp(rewrittenRangeArg, out var rangeStore);
1275var lengthLocal = F.StoreToTemp(lengthAccess, out var lengthStore);
1281var startLocal = F.StoreToTemp(
1291var rangeSizeLocal = F.StoreToTemp(
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (9)
204BoundLocal boundTemp = _factory.StoreToTemp(loweredOperand, out tempAssignment);
433BoundLocal boundTemp;
470BoundLocal boundTemp;
491BoundLocal capturedRight = _factory.StoreToTemp(rightOpt, out tempAssignment);
523static BoundCall makeIncrementCall(SyntaxNode syntax, BoundLocal boundTemp, BoundExpression? rightOpt, MethodSymbol operatorMethod)
528BoundExpression makeAssignmentBack(SyntaxNode syntax, BoundExpression transformedLHS, BoundLocal boundTemp, bool isChecked, AssignmentKind assignmentKind)
638return ((BoundLocal)expression).LocalSymbol.RefKind != RefKind.None;
671BoundLocal incrementResult = _factory.StoreToTemp(newValue, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None);
830BoundLocal boundTemp = _factory.StoreToTemp(rewrittenArgument, out tempAssignment);