Binder\LocalScopeBinder.cs (17)
21private ImmutableArray<LocalSymbol> _locals;
35internal sealed override ImmutableArray<LocalSymbol> Locals
41ImmutableInterlocked.InterlockedCompareExchange(ref _locals, BuildLocals(), default(ImmutableArray<LocalSymbol>));
48protected virtual ImmutableArray<LocalSymbol> BuildLocals()
50return ImmutableArray<LocalSymbol>.Empty;
89private SmallDictionary<string, LocalSymbol> _lazyLocalsMap;
90private SmallDictionary<string, LocalSymbol> LocalsMap
148protected ImmutableArray<LocalSymbol> BuildLocals(SyntaxList<StatementSyntax> statements, Binder enclosingBinder)
164ArrayBuilder<LocalSymbol> locals = ArrayBuilder<LocalSymbol>.GetInstance(DefaultLocalSymbolArrayCapacity);
173internal void BuildLocals(Binder enclosingBinder, StatementSyntax statement, ArrayBuilder<LocalSymbol> locals)
287static void findExpressionVariablesInRankSpecifier(ExpressionSyntax expression, (LocalScopeBinder localScopeBinder, ArrayBuilder<LocalSymbol> locals, Binder localDeclarationBinder) args)
383LocalSymbol result = null;
389foreach (var local in this.Locals)
444LocalSymbol localSymbol;
510declaredInThisScope |= newSymbolKind == SymbolKind.Local && this.Locals.Contains((LocalSymbol)newSymbol);
543LocalSymbol existingLocal = null;
Binder\RefSafetyAnalysis.cs (15)
66private Dictionary<LocalSymbol, (SafeContext RefEscapeScope, SafeContext ValEscapeScope)>? _localEscapeScopes;
94private readonly ImmutableArray<LocalSymbol> _locals;
98public LocalScope(RefSafetyAnalysis analysis, ImmutableArray<LocalSymbol> locals, bool adjustDepth = true)
106foreach (var local in locals)
114foreach (var local in _locals)
220private (SafeContext RefEscapeScope, SafeContext ValEscapeScope) GetLocalScopes(LocalSymbol local)
229private void SetLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
497private void AddLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
524private void AddOrSetLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
526_localEscapeScopes ??= new Dictionary<LocalSymbol, (SafeContext RefEscapeScope, SafeContext ValEscapeScope)>();
531private void RemoveLocalScopes(LocalSymbol local)
742if (pattern.Variable is LocalSymbol local)
1311using var _ = new LocalScope(this, ImmutableArray<LocalSymbol>.Empty);
1313foreach (var local in node.IterationVariables)
1340foreach (var local in node.IterationVariables)
CodeGen\Optimizer.cs (32)
60out HashSet<LocalSymbol> stackLocals)
65var locals = PooledDictionary<LocalSymbol, LocalDefUseInfo>.GetInstance();
78stackLocals = new HashSet<LocalSymbol>(locals.Keys);
92private static void FilterValidStackLocals(Dictionary<LocalSymbol, LocalDefUseInfo> info)
97foreach (var local in info.Keys.ToArray())
125private static void RemoveIntersectingLocals(Dictionary<LocalSymbol, LocalDefUseInfo> info, ArrayBuilder<LocalDefUseInfo> dummies)
403private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _locals;
417private StackOptimizerPass1(Dictionary<LocalSymbol, LocalDefUseInfo> locals,
432Dictionary<LocalSymbol, LocalDefUseInfo> locals,
618foreach (var local in node.Instrumentation.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;
1438var localSym = ((BoundLocal)boundExpression).LocalSymbol;
1876private void ShouldNotSchedule(LocalSymbol localSymbol)
1885private void RecordVarRef(LocalSymbol local)
1898private void RecordVarRead(LocalSymbol local)
1944private bool EvalStackHasLocal(LocalSymbol local)
1953private void RecordDummyWrite(LocalSymbol local)
1966private void RecordVarWrite(LocalSymbol local)
1996private bool CanScheduleToStack(LocalSymbol local)
2002private void DeclareLocals(ImmutableArray<LocalSymbol> locals, int stack)
2004foreach (var local in locals)
2010private void DeclareLocal(LocalSymbol local, int stack)
2092private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _info;
2094private StackOptimizerPass2(Dictionary<LocalSymbol, LocalDefUseInfo> info)
2099public static BoundStatement Rewrite(BoundStatement src, Dictionary<LocalSymbol, LocalDefUseInfo> info)
2362var sourceLocal = ((BoundLocal)exceptionSource).LocalSymbol;
2420internal override LocalSymbol WithSynthesizedLocalKindAndSyntax(
2467internal override ConstantValue GetConstantValue(SyntaxNode node, LocalSymbol inProgress, BindingDiagnosticBag diagnostics)
Generated\BoundNodes.xml.Generated.cs (122)
278protected BoundEqualsValue(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
289public ImmutableArray<LocalSymbol> Locals { get; }
295public BoundFieldEqualsValue(SyntaxNode syntax, FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
311public BoundFieldEqualsValue Update(FieldSymbol field, ImmutableArray<LocalSymbol> locals, BoundExpression value)
325public BoundPropertyEqualsValue(SyntaxNode syntax, PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
341public BoundPropertyEqualsValue Update(PropertySymbol property, ImmutableArray<LocalSymbol> locals, BoundExpression value)
355public BoundParameterEqualsValue(SyntaxNode syntax, ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value, bool hasErrors = false)
371public BoundParameterEqualsValue Update(ParameterSymbol parameter, ImmutableArray<LocalSymbol> locals, BoundExpression value)
2303public BoundBlockInstrumentation(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue, bool hasErrors = false)
2314public ImmutableArray<LocalSymbol> Locals { get; }
2321public BoundBlockInstrumentation Update(ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue)
2379public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type, bool hasErrors)
2390public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
2402public LocalSymbol Local { get; }
2408public BoundLocalId Update(LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
3354public BoundBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3368public ImmutableArray<LocalSymbol> Locals { get; }
3376public BoundBlock Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements)
3390public BoundScope(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3400public ImmutableArray<LocalSymbol> Locals { get; }
3405public BoundScope Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
3450public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
3463public LocalSymbol LocalSymbol { get; }
3472public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
3810public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel, bool hasErrors = false)
3831public ImmutableArray<LocalSymbol> InnerLocals { get; }
3841public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel)
3952protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
3967public ImmutableArray<LocalSymbol> Locals { get; }
3974public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
3990public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4004public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4020public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4034public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4052public ImmutableArray<LocalSymbol> OuterLocals { get; }
4054public ImmutableArray<LocalSymbol> InnerLocals { get; }
4062public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4076public BoundForEachStatement(SyntaxNode syntax, ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4102public ImmutableArray<LocalSymbol> IterationVariables { get; }
4111public BoundForEachStatement Update(ForEachEnumeratorInfo? enumeratorInfoOpt, BoundValuePlaceholder? elementPlaceholder, BoundExpression? elementConversion, BoundTypeExpression iterationVariableType, ImmutableArray<LocalSymbol> iterationVariables, BoundExpression? iterationErrorExpressionOpt, BoundExpression expression, BoundForEachDeconstructStep? deconstructionOpt, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4156public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false)
4171public ImmutableArray<LocalSymbol> Locals { get; }
4181public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt)
4195public BoundFixedStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body, bool hasErrors = false)
4208public ImmutableArray<LocalSymbol> Locals { get; }
4215public BoundFixedStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body)
4297public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false)
4313public ImmutableArray<LocalSymbol> Locals { get; }
4324public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll)
4543public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type, bool hasErrors)
4556public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4570public LocalSymbol LocalSymbol { get; }
4578public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4592public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type, bool hasErrors)
4604public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4617public LocalSymbol LocalSymbol { get; }
4623public BoundPseudoVariable Update(LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4941public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false)
4958public ImmutableArray<LocalSymbol> Locals { get; }
4968public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label)
5726public BoundSwitchSection(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
5738public ImmutableArray<LocalSymbol> Locals { get; }
5744public BoundSwitchSection Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements)
5835public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5850public ImmutableArray<LocalSymbol> Locals { get; }
5857public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type)
5871public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5886public ImmutableArray<LocalSymbol> Locals { get; }
5893public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type)
8952public BoundConstructorMethodBody(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody, bool hasErrors = false)
8962public ImmutableArray<LocalSymbol> Locals { get; }
8968public BoundConstructorMethodBody Update(ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody)
11109ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11116ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11123ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11481ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11494LocalSymbol local = this.VisitLocalSymbol(node.Local);
11642ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11650ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11662LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11722ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11746ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11755ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11764ImmutableArray<LocalSymbol> outerLocals = this.VisitLocals(node.OuterLocals);
11765ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11776ImmutableArray<LocalSymbol> iterationVariables = this.VisitLocals(node.IterationVariables);
11796ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11805ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11826ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11866LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11872LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11926ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12077ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12097ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12105ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12681ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12725ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12733ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12741ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13493ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13518LocalSymbol local = GetUpdatedSymbol(node, node.Local);
13855ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13864ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13878LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
13895ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13906ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13914ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13922ImmutableArray<LocalSymbol> outerLocals = GetUpdatedArray(node, node.OuterLocals);
13923ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13933ImmutableArray<LocalSymbol> iterationVariables = GetUpdatedArray(node, node.IterationVariables);
13946ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13956ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13964ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14047LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14064LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14128ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14226ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14251ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14270ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
15419ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
Lowering\AsyncRewriter\AsyncRewriter.AsyncIteratorRewriter.cs (6)
200protected override void InitializeStateMachine(ArrayBuilder<BoundStatement> bodyBuilder, NamedTypeSymbol frameType, LocalSymbol stateMachineLocal)
263protected override BoundStatement GenerateStateMachineCreation(LocalSymbol stateMachineVariable, NamedTypeSymbol frameType, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies)
325out LocalSymbol instSymbol,
337var versionSymbol = F.SynthesizedLocal(F.SpecialType(SpecialType.System_Int16));
368private void GetPartsForStartingMachine(out BoundExpressionStatement callReset, out LocalSymbol instSymbol, out BoundStatement instAssignment,
435out LocalSymbol instSymbol,
Lowering\AsyncRewriter\RuntimeAsyncRewriter.cs (10)
30var hoistedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
91private readonly RefInitializationHoister<LocalSymbol, BoundLocal> _refInitializationHoister;
92private readonly ArrayBuilder<LocalSymbol> _hoistedLocals;
95private RuntimeAsyncRewriter(SyntheticBoundNodeFactory factory, int methodOrdinal, IReadOnlySet<Symbol> variablesToHoist, ArrayBuilder<LocalSymbol> hoistedLocals)
109_refInitializationHoister = new RefInitializationHoister<LocalSymbol, BoundLocal>(_factory, _factory.CurrentFunction, TypeMap.Empty);
262var critTemp = _factory.SynthesizedLocal(criticalNotifyCompletionType);
357static LocalSymbol createHoistedLocal(TypeSymbol type, RuntimeAsyncRewriter @this, LocalSymbol local)
359var hoistedLocal = @this._factory.SynthesizedLocal(type, syntax: local.GetDeclaratorSyntax(), kind: SynthesizedLocalKind.AwaitByRefSpill);
364static BoundLocal createHoistedAccess(LocalSymbol local, RuntimeAsyncRewriter @this)
Lowering\ClosureConversion\ClosureConversion.cs (28)
97private readonly HashSet<LocalSymbol> _assignLocals;
133private ArrayBuilder<LocalSymbol> _addedLocals;
173HashSet<LocalSymbol> assignLocals)
207Debug.Assert(localOrParameter is LocalSymbol || localOrParameter is ParameterSymbol ||
244HashSet<LocalSymbol> assignLocals)
646var localFrame = (LocalSymbol)framePointer;
674private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F)
681LocalSymbol framePointer = new SynthesizedLocal(_topLevelMethod, TypeWithAnnotations.Create(frameType), SynthesizedLocalKind.LambdaDisplayClass, frame.ScopeSyntaxOpt);
736var addedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
759private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue)
779var local = (LocalSymbol)symbol;
785LocalSymbol localToUse;
1138locals: ImmutableArray<LocalSymbol>.Empty,
1149private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1170return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1175return RewriteBlock(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1179private BoundBlock RewriteBlock(BoundBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1232return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1239return RewriteCatch(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1243private BoundNode RewriteCatch(BoundCatchBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1261ImmutableArray.Create<LocalSymbol>(),
1306return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1313return RewriteSequence(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1323return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1733var cacheLocal = F.SynthesizedLocal(type, kind: SynthesizedLocalKind.CachedAnonymousMethodDelegate);
1734if (_addedLocals == null) _addedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (10)
871locals: ImmutableArray<LocalSymbol>.Empty,
1117locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1306locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1415locals: ImmutableArray<LocalSymbol>.Empty,
1459var locals = ArrayBuilder<LocalSymbol>.GetInstance();
1508ArrayBuilder<LocalSymbol> locals,
1753locals: ImmutableArray.Create<LocalSymbol>(boundTemp.LocalSymbol),
1814locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1902locals: ImmutableArray.Create<LocalSymbol>(boundTempX.LocalSymbol, boundTempY.LocalSymbol),
1983locals: ImmutableArray<LocalSymbol>.Empty,
Lowering\LocalRewriter\LocalRewriter_Call.cs (17)
141ref ArrayBuilder<LocalSymbol> temps,
394ArrayBuilder<LocalSymbol>? temps = null;
463ImmutableArray<LocalSymbol> temps)
673ref ArrayBuilder<LocalSymbol>? tempsOpt,
737tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
827ImmutableArray<LocalSymbol>.Empty,
835void ensureTempTrackingSetup([NotNull] ref ArrayBuilder<LocalSymbol>? tempsOpt, ref BitVector positionsAssignedToTemp)
837tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
850ref ArrayBuilder<LocalSymbol>? tempsOpt,
905visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local);
993private void ReferToTempIfReferenceTypeReceiver(BoundLocal receiverTemp, ref BoundAssignmentOperator assignmentToTemp, out BoundAssignmentOperator? extraRefInitialization, ArrayBuilder<LocalSymbol> temps)
1066[NotNull] ref ArrayBuilder<LocalSymbol>? temps,
1078temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
1541ArrayBuilder<LocalSymbol> temporariesBuilder)
1665ImmutableArray<LocalSymbol>.Empty,
1689ArrayBuilder<LocalSymbol> temporariesBuilder)
1729locals: ImmutableArray<LocalSymbol>.Empty,
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (13)
85var temps = ArrayBuilder<LocalSymbol>.GetInstance();
118var eventTemps = ArrayBuilder<LocalSymbol>.GetInstance();
262private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
350private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
367private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
439ArrayBuilder<LocalSymbol> temps)
477ArrayBuilder<LocalSymbol> temps)
539ArrayBuilder<LocalSymbol> temps,
553private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
592private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
635private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
694private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
913ArrayBuilder<LocalSymbol> temps)
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (27)
146ImmutableArray<LocalSymbol> iterationVariables,
161LocalSymbol enumeratorVar = _factory.SynthesizedLocal(enumeratorType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachEnumerator);
264tryBlock: new BoundBlock(forEachSyntax, locals: ImmutableArray<LocalSymbol>.Empty, statements: ImmutableArray.Create(whileLoop)),
421locals: ImmutableArray<LocalSymbol>.Empty,
434LocalSymbol disposableVar = _factory.SynthesizedLocal(idisposableTypeSymbol);
602ImmutableArray<LocalSymbol> iterationVariables,
617LocalSymbol? preambleLocal = null;
622LocalSymbol collectionTemp = _factory.SynthesizedLocal(collectionType, forEachSyntax, kind: SynthesizedLocalKind.ForEachArray, refKind: collectionTempRefKind);
638LocalSymbol positionVar = _factory.SynthesizedLocal(intType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArrayIndex);
692outerLocals: preambleLocal is null ? ImmutableArray.Create<LocalSymbol>(collectionTemp, positionVar) : ImmutableArray.Create<LocalSymbol>(preambleLocal, collectionTemp, positionVar),
706private delegate BoundStatement? GetForEachStatementAsForPreamble(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind);
745return static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind) =>
811ImmutableArray<LocalSymbol> iterationVariables,
837ImmutableArray<LocalSymbol> iterationVariables,
898ImmutableArray<LocalSymbol> iterationVariables,
916LocalSymbol arrayVar = _factory.SynthesizedLocal(arrayType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArray);
927LocalSymbol positionVar = _factory.SynthesizedLocal(intType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArrayIndex);
988outerLocals: ImmutableArray.Create<LocalSymbol>(arrayVar, positionVar),
1047ImmutableArray<LocalSymbol> iterationVariables,
1072LocalSymbol arrayVar = _factory.SynthesizedLocal(arrayType, syntax: forEachSyntax, kind: SynthesizedLocalKind.ForEachArray);
1086LocalSymbol[] upperVar = new LocalSymbol[rank];
1108LocalSymbol[] positionVar = new LocalSymbol[rank];
1231private static BoundLocal MakeBoundLocal(CSharpSyntaxNode syntax, LocalSymbol local, TypeSymbol type)
1239private BoundStatement MakeLocalDeclaration(CSharpSyntaxNode syntax, LocalSymbol local, BoundExpression rewrittenInitialValue)
Lowering\LocalRewriter\LocalRewriter_IndexerAccess.cs (10)
164ArrayBuilder<LocalSymbol>? temps = null;
200temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
311var localsBuilder = ArrayBuilder<LocalSymbol>.GetInstance();
517var locals = ArrayBuilder<LocalSymbol>.GetInstance(2);
539ArrayBuilder<LocalSymbol> locals,
834var localsBuilder = ArrayBuilder<LocalSymbol>.GetInstance();
852private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, bool cacheAllArgumentsOnly)
1111void storeExpressionIfNotConstant([DisallowNull] ref BoundExpression? expression, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
1186private BoundExpression MakeRangeSize(ref BoundExpression startExpr, BoundExpression endExpr, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
1218DeconstructRangeIntoLocals(BoundExpression rewrittenRangeArg, BoundExpression lengthAccess, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
Lowering\LocalRewriter\LocalRewriter_ObjectOrCollectionInitializerExpression.cs (14)
33ref ArrayBuilder<LocalSymbol>? temps,
214ArrayBuilder<LocalSymbol>? temps = null;
245private BoundExpression VisitObjectInitializerMember(BoundObjectInitializerMember node, ref BoundExpression rewrittenReceiver, ArrayBuilder<BoundExpression> sideEffects, ref ArrayBuilder<LocalSymbol>? temps)
253ArrayBuilder<LocalSymbol>? constructionTemps = null;
284ref ArrayBuilder<LocalSymbol>? temps,
304ref ArrayBuilder<LocalSymbol>? temps,
457temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
493temps = ArrayBuilder<LocalSymbol>.GetInstance();
515temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
625ref ArrayBuilder<LocalSymbol>? temps)
639(LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg = (rewriter: this, sideeffects, temps);
642static (BoundExpression element, ref (LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg) =>
671private BoundExpression EvaluateSideEffects(BoundExpression arg, RefKind refKind, ArrayBuilder<BoundExpression> sideeffects, ref ArrayBuilder<LocalSymbol>? temps)
680temps = ArrayBuilder<LocalSymbol>.GetInstance();
Lowering\LocalRewriter\LocalRewriter_TupleBinaryOperator.cs (14)
32var temps = ArrayBuilder<LocalSymbol>.GetInstance();
102ArrayBuilder<LocalSymbol> temps)
145ArrayBuilder<LocalSymbol> temps)
186ArrayBuilder<LocalSymbol> temps,
252ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
272TypeSymbol boolType, ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
313BoundExpression innerSequence = _factory.Sequence(locals: ImmutableArray<LocalSymbol>.Empty, innerEffects.ToImmutableAndFree(), logicalExpression);
328return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
336return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
345_factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
359private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects,
423private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
436ArrayBuilder<LocalSymbol> temps,
493ArrayBuilder<LocalSymbol> temps, BinaryOperatorKind operatorKind)
Lowering\SpillSequenceSpiller.cs (37)
22private readonly PooledDictionary<LocalSymbol, LocalSymbol> _tempSubstitution;
23private readonly PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> _receiverSubstitution;
27PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
28PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
41private ArrayBuilder<LocalSymbol> _locals;
67public ImmutableArray<LocalSymbol> GetLocals()
69return (_locals == null) ? ImmutableArray<LocalSymbol>.Empty : _locals.ToImmutable();
122public void AddLocal(LocalSymbol local)
126_locals = ArrayBuilder<LocalSymbol>.GetInstance();
132public void AddLocals(ImmutableArray<LocalSymbol> locals)
134foreach (var local in locals)
183private readonly PooledDictionary<LocalSymbol, LocalSymbol> _tempSubstitution;
184private readonly PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> _receiverSubstitution;
187PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
188PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
197PooledDictionary<LocalSymbol, LocalSymbol> tempSubstitution,
198PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver> receiverSubstitution,
214LocalSymbol longLived;
234var tempSubstitution = PooledDictionary<LocalSymbol, LocalSymbol>.GetInstance();
235var receiverSubstitution = PooledDictionary<LocalSymbol, BoundComplexConditionalReceiver>.GetInstance();
357out LocalSymbol receiverRefLocal,
530out LocalSymbol outReceiverRefLocal,
1010var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1149var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1164var tmp = _F.SynthesizedLocal(condition.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1264var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1320var clone = _F.SynthesizedLocal(receiver.Type, _F.Syntax, refKind: RefKind.None, kind: SynthesizedLocalKind.Spill);
1350var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1501private void PromoteAndAddLocals(BoundSpillSequenceBuilder builder, ImmutableArray<LocalSymbol> locals)
1503foreach (var local in locals)
1511LocalSymbol longLived = local.WithSynthesizedLocalKindAndSyntax(SynthesizedLocalKind.Spill, _F.Syntax);
Lowering\StateMachineRewriter\RefInitializationHoister.cs (6)
59LocalSymbol local,
62Func<TypeSymbol, TArg, LocalSymbol, THoistedSymbol> createHoistedSymbol,
97var sacrificialTemp = _factory.SynthesizedLocal(type, refKind: RefKind.Ref);
110return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, sideEffects.ToImmutableAndFree(), last);
136LocalSymbol assignedLocal,
141Func<TypeSymbol, TArg, LocalSymbol, THoistedSymbol> createHoistedSymbol,
Lowering\SyntheticBoundNodeFactory.cs (28)
233public 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)
491public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, ImmutableArray<BoundStatement> statements)
520public BoundBlockInstrumentation CombineInstrumentation(BoundBlockInstrumentation? innerInstrumentation = null, LocalSymbol? local = null, BoundStatement? prologue = null, BoundStatement? epilogue = null)
600public LocalSymbol SynthesizedLocal(
622public LocalSymbol InterpolatedStringHandlerLocal(
955return If(condition, ImmutableArray<LocalSymbol>.Empty, thenClause, elseClauseOpt);
963public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
1019public BoundLocal Local(LocalSymbol local)
1024public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts)
1026return MakeSequence(ImmutableArray.Create<LocalSymbol>(temp), parts);
1031return MakeSequence(ImmutableArray<LocalSymbol>.Empty, parts);
1034public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts)
1060return new BoundSequence(Syntax, ImmutableArray<LocalSymbol>.Empty, sideEffects.AsImmutableOrNull(), result, resultType) { WasCompilerGenerated = true };
1063public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result)
1072public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result)
1361public BoundExpression LocalId(LocalSymbol symbol)
1610LocalSymbol local,
1621return new BoundCatchBlock(Syntax, ImmutableArray<LocalSymbol>.Empty, source, source.Type, exceptionFilterPrologueOpt: null, exceptionFilterOpt: null, body: block, isSynthesizedAsyncCatchAll: false);
1729internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, ArrayBuilder<LocalSymbol> temps)
1731LocalSymbol temp;
1737internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, out LocalSymbol temp)
1745internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder)
1863locals: ImmutableArray<LocalSymbol>.Empty,