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)
71private Dictionary<LocalSymbol, (SafeContext RefEscapeScope, SafeContext ValEscapeScope)>? _localEscapeScopes;
99private readonly ImmutableArray<LocalSymbol> _locals;
103public LocalScope(RefSafetyAnalysis analysis, ImmutableArray<LocalSymbol> locals, bool adjustDepth = true)
111foreach (var local in locals)
119foreach (var local in _locals)
225private (SafeContext RefEscapeScope, SafeContext ValEscapeScope) GetLocalScopes(LocalSymbol local)
234private void SetLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
551private void AddLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
578private void AddOrSetLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
580_localEscapeScopes ??= new Dictionary<LocalSymbol, (SafeContext RefEscapeScope, SafeContext ValEscapeScope)>();
585private void RemoveLocalScopes(LocalSymbol local)
796if (pattern.Variable is LocalSymbol local)
1365using var _ = new LocalScope(this, ImmutableArray<LocalSymbol>.Empty);
1367foreach (var local in node.IterationVariables)
1394foreach (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;
1882private void ShouldNotSchedule(LocalSymbol localSymbol)
1891private void RecordVarRef(LocalSymbol local)
1904private void RecordVarRead(LocalSymbol local)
1950private bool EvalStackHasLocal(LocalSymbol local)
1959private void RecordDummyWrite(LocalSymbol local)
1972private void RecordVarWrite(LocalSymbol local)
2002private bool CanScheduleToStack(LocalSymbol local)
2008private void DeclareLocals(ImmutableArray<LocalSymbol> locals, int stack)
2010foreach (var local in locals)
2016private void DeclareLocal(LocalSymbol local, int stack)
2098private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _info;
2100private StackOptimizerPass2(Dictionary<LocalSymbol, LocalDefUseInfo> info)
2105public static BoundStatement Rewrite(BoundStatement src, Dictionary<LocalSymbol, LocalDefUseInfo> info)
2369var sourceLocal = ((BoundLocal)exceptionSource).LocalSymbol;
2427internal override LocalSymbol WithSynthesizedLocalKindAndSyntax(
2474internal 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)
2307public BoundBlockInstrumentation(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue, bool hasErrors = false)
2318public ImmutableArray<LocalSymbol> Locals { get; }
2325public BoundBlockInstrumentation Update(ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue)
2383public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type, bool hasErrors)
2394public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
2406public LocalSymbol Local { get; }
2412public BoundLocalId Update(LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
3358public BoundBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3372public ImmutableArray<LocalSymbol> Locals { get; }
3380public BoundBlock Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements)
3394public BoundScope(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3404public ImmutableArray<LocalSymbol> Locals { get; }
3409public BoundScope Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
3454public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
3467public LocalSymbol LocalSymbol { get; }
3476public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
3814public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel, bool hasErrors = false)
3835public ImmutableArray<LocalSymbol> InnerLocals { get; }
3845public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel)
3956protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
3971public ImmutableArray<LocalSymbol> Locals { get; }
3978public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
3994public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4008public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4024public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4038public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4056public ImmutableArray<LocalSymbol> OuterLocals { get; }
4058public ImmutableArray<LocalSymbol> InnerLocals { get; }
4066public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4080public 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)
4106public ImmutableArray<LocalSymbol> IterationVariables { get; }
4115public 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)
4160public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false)
4175public ImmutableArray<LocalSymbol> Locals { get; }
4185public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt)
4199public BoundFixedStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body, bool hasErrors = false)
4212public ImmutableArray<LocalSymbol> Locals { get; }
4219public BoundFixedStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body)
4301public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false)
4317public ImmutableArray<LocalSymbol> Locals { get; }
4328public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll)
4547public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type, bool hasErrors)
4560public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4574public LocalSymbol LocalSymbol { get; }
4582public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4596public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type, bool hasErrors)
4608public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4621public LocalSymbol LocalSymbol { get; }
4627public BoundPseudoVariable Update(LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4945public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false)
4962public ImmutableArray<LocalSymbol> Locals { get; }
4972public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label)
5730public BoundSwitchSection(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
5742public ImmutableArray<LocalSymbol> Locals { get; }
5748public BoundSwitchSection Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements)
5839public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5854public ImmutableArray<LocalSymbol> Locals { get; }
5861public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type)
5875public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5890public ImmutableArray<LocalSymbol> Locals { get; }
5897public 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)
11107ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11114ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11121ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11479ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11492LocalSymbol local = this.VisitLocalSymbol(node.Local);
11640ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11648ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11660LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11720ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11744ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11753ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11762ImmutableArray<LocalSymbol> outerLocals = this.VisitLocals(node.OuterLocals);
11763ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11774ImmutableArray<LocalSymbol> iterationVariables = this.VisitLocals(node.IterationVariables);
11794ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11803ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11824ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11864LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11870LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11924ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12075ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12095ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12103ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12677ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12721ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12729ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12737ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13489ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13514LocalSymbol local = GetUpdatedSymbol(node, node.Local);
13851ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13860ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13874LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
13891ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13902ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13910ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13918ImmutableArray<LocalSymbol> outerLocals = GetUpdatedArray(node, node.OuterLocals);
13919ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13929ImmutableArray<LocalSymbol> iterationVariables = GetUpdatedArray(node, node.IterationVariables);
13942ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13952ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13960ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14043LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14060LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14124ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14222ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14247ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14266ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
15413ImmutableArray<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();
92private readonly RefInitializationHoister<LocalSymbol, BoundLocal> _refInitializationHoister;
93private readonly ArrayBuilder<LocalSymbol> _hoistedLocals;
96private RuntimeAsyncRewriter(SyntheticBoundNodeFactory factory, int methodOrdinal, IReadOnlySet<Symbol> variablesToHoist, ArrayBuilder<LocalSymbol> hoistedLocals)
110_refInitializationHoister = new RefInitializationHoister<LocalSymbol, BoundLocal>(_factory, _factory.CurrentFunction, TypeMap.Empty);
263var critTemp = _factory.SynthesizedLocal(criticalNotifyCompletionType);
358static LocalSymbol createHoistedLocal(TypeSymbol type, RuntimeAsyncRewriter @this, LocalSymbol local)
360var hoistedLocal = @this._factory.SynthesizedLocal(type, syntax: local.GetDeclaratorSyntax(), kind: SynthesizedLocalKind.AwaitByRefSpill);
365static 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,
396ArrayBuilder<LocalSymbol>? temps = null;
465ImmutableArray<LocalSymbol> temps)
678ref ArrayBuilder<LocalSymbol>? tempsOpt,
736tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
855ImmutableArray<LocalSymbol>.Empty,
867void ensureTempTrackingSetup([NotNull] ref ArrayBuilder<LocalSymbol>? tempsOpt, ref BitVector positionsAssignedToTemp)
869tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
882ref ArrayBuilder<LocalSymbol>? tempsOpt,
937visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local);
1093private BoundLocal ReferToTempIfReferenceTypeReceiver(BoundExpression receiver, [NotNull] ref BoundAssignmentOperator? assignmentToTemp, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
1198[NotNull] ref ArrayBuilder<LocalSymbol>? temps,
1210temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
1677ArrayBuilder<LocalSymbol> temporariesBuilder)
1801ImmutableArray<LocalSymbol>.Empty,
1825ArrayBuilder<LocalSymbol> temporariesBuilder)
1865locals: 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)
380private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
397private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
469ArrayBuilder<LocalSymbol> temps)
507ArrayBuilder<LocalSymbol> temps)
569ArrayBuilder<LocalSymbol> temps,
583private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
622private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
665private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
724private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
943ArrayBuilder<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,
864var localsBuilder = ArrayBuilder<LocalSymbol>.GetInstance();
883private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, bool cacheAllArgumentsOnly)
1151void storeExpressionIfNotConstant([DisallowNull] ref BoundExpression? expression, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
1268private BoundExpression MakeRangeSize(ref BoundExpression startExpr, BoundExpression endExpr, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
1300DeconstructRangeIntoLocals(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,
1066var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1219var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1234var tmp = _F.SynthesizedLocal(condition.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1334var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1390var clone = _F.SynthesizedLocal(receiver.Type, _F.Syntax, refKind: RefKind.None, kind: SynthesizedLocalKind.Spill);
1420var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1571private void PromoteAndAddLocals(BoundSpillSequenceBuilder builder, ImmutableArray<LocalSymbol> locals)
1573foreach (var local in locals)
1581LocalSymbol longLived = local.WithSynthesizedLocalKindAndSyntax(SynthesizedLocalKind.Spill, _F.Syntax);
Lowering\StateMachineRewriter\RefInitializationHoister.cs (6)
59LocalSymbol local,
62Func<TypeSymbol, TArg, LocalSymbol, THoistedSymbol> createHoistedSymbol,
98var sacrificialTemp = _factory.SynthesizedLocal(type, refKind: local.RefKind);
111return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, sideEffects.ToImmutableAndFree(), last);
137LocalSymbol assignedLocal,
142Func<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(
976return If(condition, ImmutableArray<LocalSymbol>.Empty, thenClause, elseClauseOpt);
984public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
1040public BoundLocal Local(LocalSymbol local)
1045public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts)
1047return MakeSequence(ImmutableArray.Create<LocalSymbol>(temp), parts);
1052return MakeSequence(ImmutableArray<LocalSymbol>.Empty, parts);
1055public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts)
1081return new BoundSequence(Syntax, ImmutableArray<LocalSymbol>.Empty, sideEffects.AsImmutableOrNull(), result, resultType) { WasCompilerGenerated = true };
1084public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result)
1093public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result)
1382public BoundExpression LocalId(LocalSymbol symbol)
1631LocalSymbol local,
1642return new BoundCatchBlock(Syntax, ImmutableArray<LocalSymbol>.Empty, source, source.Type, exceptionFilterPrologueOpt: null, exceptionFilterOpt: null, body: block, isSynthesizedAsyncCatchAll: false);
1750internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, ArrayBuilder<LocalSymbol> temps)
1752LocalSymbol temp;
1758internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, out LocalSymbol temp)
1766internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder)
1884locals: ImmutableArray<LocalSymbol>.Empty,