Binder\RefSafetyAnalysis.cs (15)
82private Dictionary<LocalSymbol, (uint RefEscapeScope, uint ValEscapeScope)>? _localEscapeScopes;
92Dictionary<LocalSymbol, (uint RefEscapeScope, uint ValEscapeScope)>? localEscapeScopes = null)
109private readonly ImmutableArray<LocalSymbol> _locals;
111public LocalScope(RefSafetyAnalysis analysis, ImmutableArray<LocalSymbol> locals)
116foreach (var local in locals)
124foreach (var local in _locals)
193private (uint RefEscapeScope, uint ValEscapeScope) GetLocalScopes(LocalSymbol local)
199private void SetLocalScopes(LocalSymbol local, uint refEscapeScope, uint valEscapeScope)
386private void AddLocalScopes(LocalSymbol local, uint refEscapeScope, uint valEscapeScope)
408_localEscapeScopes ??= new Dictionary<LocalSymbol, (uint RefEscapeScope, uint ValEscapeScope)>();
413private void RemoveLocalScopes(LocalSymbol local)
551if (pattern.Variable is LocalSymbol local)
857using var _ = new LocalScope(this, ImmutableArray<LocalSymbol>.Empty);
859foreach (var local in node.IterationVariables)
877foreach (var local in node.IterationVariables)
CodeGen\Optimizer.cs (31)
61out HashSet<LocalSymbol> stackLocals)
66var locals = PooledDictionary<LocalSymbol, LocalDefUseInfo>.GetInstance();
79stackLocals = new HashSet<LocalSymbol>(locals.Keys);
93private static void FilterValidStackLocals(Dictionary<LocalSymbol, LocalDefUseInfo> info)
98foreach (var local in info.Keys.ToArray())
126private static void RemoveIntersectingLocals(Dictionary<LocalSymbol, LocalDefUseInfo> info, ArrayBuilder<LocalDefUseInfo> dummies)
404private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _locals;
418private StackOptimizerPass1(Dictionary<LocalSymbol, LocalDefUseInfo> locals,
433Dictionary<LocalSymbol, LocalDefUseInfo> locals,
696foreach (var local in locals)
756private bool IsNestedLocalOfCompoundOperator(LocalSymbol local, BoundSequence node)
806private readonly LocalSymbol _local;
809internal LocalUsedWalker(LocalSymbol local, int recursionDepth)
980LocalSymbol localSymbol = assignmentLocal.LocalSymbol;
1360var localSym = ((BoundLocal)boundExpression).LocalSymbol;
1796private void ShouldNotSchedule(LocalSymbol localSymbol)
1805private void RecordVarRef(LocalSymbol local)
1818private void RecordVarRead(LocalSymbol local)
1864private bool EvalStackHasLocal(LocalSymbol local)
1873private void RecordDummyWrite(LocalSymbol local)
1886private void RecordVarWrite(LocalSymbol local)
1916private bool CanScheduleToStack(LocalSymbol local)
1922private void DeclareLocals(ImmutableArray<LocalSymbol> locals, int stack)
1924foreach (var local in locals)
1930private void DeclareLocal(LocalSymbol local, int stack)
1965private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _info;
1967private StackOptimizerPass2(Dictionary<LocalSymbol, LocalDefUseInfo> info)
1972public static BoundStatement Rewrite(BoundStatement src, Dictionary<LocalSymbol, LocalDefUseInfo> info)
2178var sourceLocal = ((BoundLocal)exceptionSource).LocalSymbol;
2236internal override LocalSymbol WithSynthesizedLocalKindAndSyntax(
2283internal override ConstantValue GetConstantValue(SyntaxNode node, LocalSymbol inProgress, BindingDiagnosticBag diagnostics)
Generated\BoundNodes.xml.Generated.cs (98)
279protected BoundEqualsValue(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
290public ImmutableArray<LocalSymbol> Locals { 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)
2218public BoundBlockInstrumentation(SyntaxNode syntax, LocalSymbol local, BoundStatement prologue, BoundStatement epilogue, bool hasErrors = false)
2231public LocalSymbol Local { get; }
2238public BoundBlockInstrumentation Update(LocalSymbol local, BoundStatement prologue, BoundStatement epilogue)
2292public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type, bool hasErrors)
2303public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
2315public LocalSymbol Local { get; }
2321public BoundLocalId Update(LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
3193public BoundBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3207public ImmutableArray<LocalSymbol> Locals { get; }
3215public BoundBlock Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements)
3229public BoundScope(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3239public ImmutableArray<LocalSymbol> Locals { get; }
3244public BoundScope Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
3289public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
3302public LocalSymbol LocalSymbol { get; }
3311public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
3659public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<LocalFunctionSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, GeneratedLabelSymbol breakLabel, bool hasErrors = false)
3680public ImmutableArray<LocalSymbol> InnerLocals { get; }
3690public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<LocalFunctionSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, GeneratedLabelSymbol breakLabel)
3801protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, GeneratedLabelSymbol breakLabel, GeneratedLabelSymbol continueLabel, bool hasErrors = false)
3816public ImmutableArray<LocalSymbol> Locals { 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)
3901public ImmutableArray<LocalSymbol> OuterLocals { get; }
3903public ImmutableArray<LocalSymbol> InnerLocals { 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)
3952public ImmutableArray<LocalSymbol> IterationVariables { 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)
4022public ImmutableArray<LocalSymbol> Locals { get; }
4032public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt)
4046public BoundFixedStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body, bool hasErrors = false)
4059public ImmutableArray<LocalSymbol> Locals { get; }
4066public BoundFixedStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body)
4148public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false)
4164public ImmutableArray<LocalSymbol> Locals { get; }
4175public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll)
4394public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type, bool hasErrors)
4407public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4421public LocalSymbol LocalSymbol { get; }
4429public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4443public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type, bool hasErrors)
4455public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4468public LocalSymbol LocalSymbol { get; }
4474public BoundPseudoVariable Update(LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4792public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false)
4808public ImmutableArray<LocalSymbol> Locals { get; }
4817public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, BoundExpression? whenClause, BoundExpression value, LabelSymbol label)
5547public BoundSwitchSection(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
5559public ImmutableArray<LocalSymbol> Locals { get; }
5565public BoundSwitchSection Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements)
5654public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5669public ImmutableArray<LocalSymbol> Locals { 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)
5705public ImmutableArray<LocalSymbol> Locals { get; }
5712public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type)
8412public BoundConstructorMethodBody(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody, bool hasErrors = false)
8422public ImmutableArray<LocalSymbol> Locals { get; }
8428public BoundConstructorMethodBody Update(ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody)
11797ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
11805ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
11813ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12547LocalSymbol local = GetUpdatedSymbol(node, node.Local);
12572LocalSymbol local = GetUpdatedSymbol(node, node.Local);
12886ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12895ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12909LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
12926ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
12937ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12945ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12953ImmutableArray<LocalSymbol> outerLocals = GetUpdatedArray(node, node.OuterLocals);
12954ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
12964ImmutableArray<LocalSymbol> iterationVariables = GetUpdatedArray(node, node.IterationVariables);
12978ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12988ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12996ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13079LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
13096LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
13160ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13258ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13283ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13302ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14377ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
Lowering\AsyncRewriter\AsyncRewriter.AsyncIteratorRewriter.cs (6)
200protected override void InitializeStateMachine(ArrayBuilder<BoundStatement> bodyBuilder, NamedTypeSymbol frameType, LocalSymbol stateMachineLocal)
262protected override BoundStatement GenerateStateMachineCreation(LocalSymbol stateMachineVariable, NamedTypeSymbol frameType, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies)
324out LocalSymbol instSymbol,
336var versionSymbol = F.SynthesizedLocal(F.SpecialType(SpecialType.System_Int16));
367private void GetPartsForStartingMachine(out BoundExpressionStatement callReset, out LocalSymbol instSymbol, out BoundStatement instAssignment,
434out LocalSymbol instSymbol,
Lowering\ClosureConversion\ClosureConversion.cs (29)
96private readonly HashSet<LocalSymbol> _assignLocals;
131private ArrayBuilder<LocalSymbol> _addedLocals;
165HashSet<LocalSymbol> assignLocals)
200Debug.Assert(localOrParameter is LocalSymbol || localOrParameter is ParameterSymbol ||
235HashSet<LocalSymbol> assignLocals)
620var localFrame = (LocalSymbol)framePointer;
648private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F)
655LocalSymbol framePointer = new SynthesizedLocal(_topLevelMethod, TypeWithAnnotations.Create(frameType), SynthesizedLocalKind.LambdaDisplayClass, frame.ScopeSyntaxOpt);
710var addedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
733private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue)
753var local = (LocalSymbol)symbol;
759LocalSymbol localToUse;
1107locals: ImmutableArray<LocalSymbol>.Empty,
1118private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
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)
1185var newLocals = ArrayBuilder<LocalSymbol>.GetInstance();
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)
1232ImmutableArray.Create<LocalSymbol>(),
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) =>
1691var cacheLocal = F.SynthesizedLocal(type, kind: SynthesizedLocalKind.CachedAnonymousMethodDelegate);
1692if (_addedLocals == null) _addedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (10)
839locals: ImmutableArray<LocalSymbol>.Empty,
1047locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1206locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1315locals: ImmutableArray<LocalSymbol>.Empty,
1359var locals = ArrayBuilder<LocalSymbol>.GetInstance();
1408ArrayBuilder<LocalSymbol> locals,
1654locals: ImmutableArray.Create<LocalSymbol>(boundTemp.LocalSymbol),
1715locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1803locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1884locals: ImmutableArray<LocalSymbol>.Empty,
Lowering\LocalRewriter\LocalRewriter_Call.cs (17)
144ArrayBuilder<LocalSymbol>? temps = null;
188ArrayBuilder<LocalSymbol>? temps,
214ImmutableArray<LocalSymbol> temps)
428ref ArrayBuilder<LocalSymbol>? tempsOpt)
477tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
565ImmutableArray<LocalSymbol>.Empty,
573void ensureTempTrackingSetup([NotNull] ref ArrayBuilder<LocalSymbol>? tempsOpt, ref BitVector positionsAssignedToTemp)
575tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
588ref ArrayBuilder<LocalSymbol>? tempsOpt,
642visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local);
688private void ReferToTempIfReferenceTypeReceiver(BoundLocal receiverTemp, ref BoundAssignmentOperator assignmentToTemp, out BoundAssignmentOperator? extraRefInitialization, ArrayBuilder<LocalSymbol> temps)
762[NotNull] ref ArrayBuilder<LocalSymbol>? temps,
775temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
1349ArrayBuilder<LocalSymbol> temporariesBuilder)
1451ImmutableArray<LocalSymbol>.Empty,
1476ArrayBuilder<LocalSymbol> temporariesBuilder)
1516locals: ImmutableArray<LocalSymbol>.Empty,
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (12)
27var temps = ArrayBuilder<LocalSymbol>.GetInstance();
58var eventTemps = ArrayBuilder<LocalSymbol>.GetInstance();
160private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
226private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
243private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
319ArrayBuilder<LocalSymbol> temps)
402ArrayBuilder<LocalSymbol> temps,
416private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
451private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
494private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
553private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, bool isRegularCompoundAssignment, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
768ArrayBuilder<LocalSymbol> temps)
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (23)
123LocalSymbol enumeratorVar = _factory.SynthesizedLocal(enumeratorType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachEnumerator);
168ImmutableArray<LocalSymbol> iterationVariables = node.IterationVariables;
347locals: ImmutableArray<LocalSymbol>.Empty,
360LocalSymbol disposableVar = _factory.SynthesizedLocal(idisposableTypeSymbol);
418locals: ImmutableArray<LocalSymbol>.Empty,
537LocalSymbol collectionTemp = _factory.SynthesizedLocal(collectionType, forEachSyntax, kind: SynthesizedLocalKind.ForEachArray);
548LocalSymbol positionVar = _factory.SynthesizedLocal(intType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArrayIndex);
568ImmutableArray<LocalSymbol> iterationVariables = node.IterationVariables;
610outerLocals: ImmutableArray.Create<LocalSymbol>(collectionTemp, positionVar),
633ImmutableArray<LocalSymbol> iterationVariables,
662ImmutableArray<LocalSymbol> iterationVariables,
716LocalSymbol arrayVar = _factory.SynthesizedLocal(arrayType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArray);
727LocalSymbol positionVar = _factory.SynthesizedLocal(intType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArrayIndex);
747ImmutableArray<LocalSymbol> iterationVariables = node.IterationVariables;
789outerLocals: ImmutableArray.Create<LocalSymbol>(arrayVar, positionVar),
847LocalSymbol arrayVar = _factory.SynthesizedLocal(arrayType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArray);
861LocalSymbol[] upperVar = new LocalSymbol[rank];
883LocalSymbol[] positionVar = new LocalSymbol[rank];
902ImmutableArray<LocalSymbol> iterationVariables = node.IterationVariables;
1007private static BoundLocal MakeBoundLocal(CSharpSyntaxNode syntax, LocalSymbol local, TypeSymbol type)
1015private BoundStatement MakeLocalDeclaration(CSharpSyntaxNode syntax, LocalSymbol local, BoundExpression rewrittenInitialValue)
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (14)
32var temps = ArrayBuilder<LocalSymbol>.GetInstance();
101ArrayBuilder<LocalSymbol> temps)
142ArrayBuilder<LocalSymbol> temps)
183ArrayBuilder<LocalSymbol> temps,
247ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
267TypeSymbol boolType, ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
308BoundExpression innerSequence = _factory.Sequence(locals: ImmutableArray<LocalSymbol>.Empty, innerEffects.ToImmutableAndFree(), logicalExpression);
322return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
330return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
339_factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
353private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects,
416private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
429ArrayBuilder<LocalSymbol> temps,
486ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
Lowering\SpillSequenceSpiller.cs (36)
23private readonly PooledDictionary<LocalSymbol, LocalSymbol> _tempSubstitution;
24private readonly PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> _receiverSubstitution;
28PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
29PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
42private ArrayBuilder<LocalSymbol> _locals;
68public ImmutableArray<LocalSymbol> GetLocals()
70return (_locals == null) ? ImmutableArray<LocalSymbol>.Empty : _locals.ToImmutable();
123public void AddLocal(LocalSymbol local)
127_locals = ArrayBuilder<LocalSymbol>.GetInstance();
133public void AddLocals(ImmutableArray<LocalSymbol> locals)
135foreach (var local in locals)
184private readonly PooledDictionary<LocalSymbol, LocalSymbol> _tempSubstitution;
185private readonly PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> _receiverSubstitution;
188PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
189PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
198PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
199PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
215LocalSymbol longLived;
235var tempSubstitution = PooledDictionary<LocalSymbol, LocalSymbol>.GetInstance();
236var receiverSubstitution = PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver>.GetInstance();
358out LocalSymbol receiverRefLocal,
459out LocalSymbol outReceiverRefLocal,
925var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1064var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1152var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1210var clone = _F.SynthesizedLocal(receiver.Type, _F.Syntax, refKind: RefKind.None, kind: SynthesizedLocalKind.Spill);
1244var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1395private void PromoteAndAddLocals(BoundSpillSequenceBuilder builder, ImmutableArray<LocalSymbol> locals)
1397foreach (var local in locals)
1405LocalSymbol longLived = local.WithSynthesizedLocalKindAndSyntax(SynthesizedLocalKind.Spill, _F.Syntax);
Lowering\SyntheticBoundNodeFactory.cs (26)
267public BoundExpression This(LocalSymbol thisTempOpt)
463return Block(ImmutableArray<LocalSymbol>.Empty, statements);
471public BoundBlock Block(ImmutableArray<LocalSymbol> locals, params BoundStatement[] statements)
476public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
481public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, params BoundStatement[] statements)
486public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, ImmutableArray<BoundStatement> statements)
549public LocalSymbol SynthesizedLocal(
571public LocalSymbol InterpolatedStringHandlerLocal(
853return If(condition, ImmutableArray<LocalSymbol>.Empty, thenClause, elseClauseOpt);
861public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
917public BoundLocal Local(LocalSymbol local)
922public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts)
924return MakeSequence(ImmutableArray.Create<LocalSymbol>(temp), parts);
929return MakeSequence(ImmutableArray<LocalSymbol>.Empty, parts);
932public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts)
958return new BoundSequence(Syntax, ImmutableArray<LocalSymbol>.Empty, sideEffects.AsImmutableOrNull(), result, resultType) { WasCompilerGenerated = true };
961public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result)
970public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result)
1235public BoundExpression LocalId(LocalSymbol symbol)
1467LocalSymbol local,
1478return new BoundCatchBlock(Syntax, ImmutableArray<LocalSymbol>.Empty, source, source.Type, exceptionFilterPrologueOpt: null, exceptionFilterOpt: null, body: block, isSynthesizedAsyncCatchAll: false);
1586internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, ArrayBuilder<LocalSymbol> temps)
1588LocalSymbol temp;
1594internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, out LocalSymbol temp)
1602internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder)
1716locals: ImmutableArray<LocalSymbol>.Empty,
Microsoft.CodeAnalysis.CSharp.ExpressionEvaluator.ExpressionCompiler.UnitTests (2)