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)
496private void AddLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
523private void AddOrSetLocalScopes(LocalSymbol local, SafeContext refEscapeScope, SafeContext valEscapeScope)
525_localEscapeScopes ??= new Dictionary<LocalSymbol, (SafeContext RefEscapeScope, SafeContext ValEscapeScope)>();
530private void RemoveLocalScopes(LocalSymbol local)
726if (pattern.Variable is LocalSymbol local)
1274using var _ = new LocalScope(this, ImmutableArray<LocalSymbol>.Empty);
1276foreach (var local in node.IterationVariables)
1303foreach (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;
1436var localSym = ((BoundLocal)boundExpression).LocalSymbol;
1874private void ShouldNotSchedule(LocalSymbol localSymbol)
1883private void RecordVarRef(LocalSymbol local)
1896private void RecordVarRead(LocalSymbol local)
1942private bool EvalStackHasLocal(LocalSymbol local)
1951private void RecordDummyWrite(LocalSymbol local)
1964private void RecordVarWrite(LocalSymbol local)
1994private bool CanScheduleToStack(LocalSymbol local)
2000private void DeclareLocals(ImmutableArray<LocalSymbol> locals, int stack)
2002foreach (var local in locals)
2008private void DeclareLocal(LocalSymbol local, int stack)
2090private readonly Dictionary<LocalSymbol, LocalDefUseInfo> _info;
2092private StackOptimizerPass2(Dictionary<LocalSymbol, LocalDefUseInfo> info)
2097public static BoundStatement Rewrite(BoundStatement src, Dictionary<LocalSymbol, LocalDefUseInfo> info)
2360var sourceLocal = ((BoundLocal)exceptionSource).LocalSymbol;
2418internal override LocalSymbol WithSynthesizedLocalKindAndSyntax(
2465internal 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)
2309public BoundBlockInstrumentation(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue, bool hasErrors = false)
2320public ImmutableArray<LocalSymbol> Locals { get; }
2327public BoundBlockInstrumentation Update(ImmutableArray<LocalSymbol> locals, BoundStatement? prologue, BoundStatement? epilogue)
2385public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type, bool hasErrors)
2396public BoundLocalId(SyntaxNode syntax, LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
2408public LocalSymbol Local { get; }
2414public BoundLocalId Update(LocalSymbol local, FieldSymbol? hoistedField, TypeSymbol type)
3360public BoundBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3374public ImmutableArray<LocalSymbol> Locals { get; }
3382public BoundBlock Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, bool hasUnsafeModifier, BoundBlockInstrumentation? instrumentation, ImmutableArray<BoundStatement> statements)
3396public BoundScope(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
3406public ImmutableArray<LocalSymbol> Locals { get; }
3411public BoundScope Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
3456public BoundLocalDeclaration(SyntaxNode syntax, LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType, bool hasErrors = false)
3469public LocalSymbol LocalSymbol { get; }
3478public BoundLocalDeclaration Update(LocalSymbol localSymbol, BoundTypeExpression? declaredTypeOpt, BoundExpression? initializerOpt, ImmutableArray<BoundExpression> argumentsOpt, bool inferredType)
3830public BoundSwitchStatement(SyntaxNode syntax, BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel, bool hasErrors = false)
3851public ImmutableArray<LocalSymbol> InnerLocals { get; }
3861public BoundSwitchStatement Update(BoundExpression expression, ImmutableArray<LocalSymbol> innerLocals, ImmutableArray<MethodSymbol> innerLocalFunctions, ImmutableArray<BoundSwitchSection> switchSections, BoundDecisionDag reachabilityDecisionDag, BoundSwitchLabel? defaultLabel, LabelSymbol breakLabel)
3972protected BoundConditionalLoopStatement(BoundKind kind, SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
3987public ImmutableArray<LocalSymbol> Locals { get; }
3994public BoundDoStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4010public BoundDoStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4024public BoundWhileStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4040public BoundWhileStatement Update(ImmutableArray<LocalSymbol> locals, BoundExpression condition, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4054public BoundForStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel, bool hasErrors = false)
4072public ImmutableArray<LocalSymbol> OuterLocals { get; }
4074public ImmutableArray<LocalSymbol> InnerLocals { get; }
4082public BoundForStatement Update(ImmutableArray<LocalSymbol> outerLocals, BoundStatement? initializer, ImmutableArray<LocalSymbol> innerLocals, BoundExpression? condition, BoundStatement? increment, BoundStatement body, LabelSymbol breakLabel, LabelSymbol continueLabel)
4096public 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)
4122public ImmutableArray<LocalSymbol> IterationVariables { get; }
4131public 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)
4176public BoundUsingStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt, bool hasErrors = false)
4191public ImmutableArray<LocalSymbol> Locals { get; }
4201public BoundUsingStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations? declarationsOpt, BoundExpression? expressionOpt, BoundStatement body, BoundAwaitableInfo? awaitOpt, MethodArgumentInfo? patternDisposeInfoOpt)
4215public BoundFixedStatement(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body, bool hasErrors = false)
4228public ImmutableArray<LocalSymbol> Locals { get; }
4235public BoundFixedStatement Update(ImmutableArray<LocalSymbol> locals, BoundMultipleLocalDeclarations declarations, BoundStatement body)
4317public BoundCatchBlock(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll, bool hasErrors = false)
4333public ImmutableArray<LocalSymbol> Locals { get; }
4344public BoundCatchBlock Update(ImmutableArray<LocalSymbol> locals, BoundExpression? exceptionSourceOpt, TypeSymbol? exceptionTypeOpt, BoundStatementList? exceptionFilterPrologueOpt, BoundExpression? exceptionFilterOpt, BoundBlock body, bool isSynthesizedAsyncCatchAll)
4563public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type, bool hasErrors)
4576public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4590public LocalSymbol LocalSymbol { get; }
4598public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4612public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type, bool hasErrors)
4624public BoundPseudoVariable(SyntaxNode syntax, LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4637public LocalSymbol LocalSymbol { get; }
4643public BoundPseudoVariable Update(LocalSymbol localSymbol, PseudoVariableExpressions emitExpressions, TypeSymbol type)
4961public BoundSwitchExpressionArm(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label, bool hasErrors = false)
4978public ImmutableArray<LocalSymbol> Locals { get; }
4988public BoundSwitchExpressionArm Update(ImmutableArray<LocalSymbol> locals, BoundPattern pattern, bool hasUnionMatching, BoundExpression? whenClause, BoundExpression value, LabelSymbol label)
5746public BoundSwitchSection(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements, bool hasErrors = false)
5758public ImmutableArray<LocalSymbol> Locals { get; }
5764public BoundSwitchSection Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundSwitchLabel> switchLabels, ImmutableArray<BoundStatement> statements)
5855public BoundSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5870public ImmutableArray<LocalSymbol> Locals { get; }
5877public BoundSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression value, TypeSymbol type)
5891public BoundSpillSequence(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type, bool hasErrors = false)
5906public ImmutableArray<LocalSymbol> Locals { get; }
5913public BoundSpillSequence Update(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression value, TypeSymbol type)
8970public BoundConstructorMethodBody(SyntaxNode syntax, ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody, bool hasErrors = false)
8980public ImmutableArray<LocalSymbol> Locals { get; }
8986public BoundConstructorMethodBody Update(ImmutableArray<LocalSymbol> locals, BoundStatement? initializer, BoundBlock? blockBody, BoundBlock? expressionBody)
11113ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11120ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11127ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11484ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11497LocalSymbol local = this.VisitLocalSymbol(node.Local);
11645ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11653ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11665LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11723ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11747ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11756ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11765ImmutableArray<LocalSymbol> outerLocals = this.VisitLocals(node.OuterLocals);
11766ImmutableArray<LocalSymbol> innerLocals = this.VisitLocals(node.InnerLocals);
11777ImmutableArray<LocalSymbol> iterationVariables = this.VisitLocals(node.IterationVariables);
11797ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11806ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11827ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
11867LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11873LocalSymbol localSymbol = this.VisitLocalSymbol(node.LocalSymbol);
11927ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12078ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12098ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12106ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12680ImmutableArray<LocalSymbol> locals = this.VisitLocals(node.Locals);
12724ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12732ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
12740ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13487ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13512LocalSymbol local = GetUpdatedSymbol(node, node.Local);
13849ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13858ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13872LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
13889ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13900ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13908ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13916ImmutableArray<LocalSymbol> outerLocals = GetUpdatedArray(node, node.OuterLocals);
13917ImmutableArray<LocalSymbol> innerLocals = GetUpdatedArray(node, node.InnerLocals);
13927ImmutableArray<LocalSymbol> iterationVariables = GetUpdatedArray(node, node.IterationVariables);
13940ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13950ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
13958ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14041LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14058LocalSymbol localSymbol = GetUpdatedSymbol(node, node.LocalSymbol);
14122ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14220ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14245ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
14264ImmutableArray<LocalSymbol> locals = GetUpdatedArray(node, node.Locals);
15411ImmutableArray<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 (9)
28var hoistedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
76private readonly RefInitializationHoister<LocalSymbol, BoundLocal> _refInitializationHoister;
77private readonly ArrayBuilder<LocalSymbol> _hoistedLocals;
80private RuntimeAsyncRewriter(SyntheticBoundNodeFactory factory, IReadOnlySet<Symbol> variablesToHoist, ArrayBuilder<LocalSymbol> hoistedLocals)
86_refInitializationHoister = new RefInitializationHoister<LocalSymbol, BoundLocal>(_factory, _factory.CurrentFunction, TypeMap.Empty);
255static LocalSymbol createHoistedLocal(TypeSymbol type, RuntimeAsyncRewriter @this, LocalSymbol local)
257var hoistedLocal = @this._factory.SynthesizedLocal(type, syntax: local.GetDeclaratorSyntax(), kind: SynthesizedLocalKind.AwaitByRefSpill);
262static 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)
636var localFrame = (LocalSymbol)framePointer;
664private BoundNode IntroduceFrame(BoundNode node, Analysis.ClosureEnvironment env, Func<ArrayBuilder<BoundExpression>, ArrayBuilder<LocalSymbol>, BoundNode> F)
671LocalSymbol framePointer = new SynthesizedLocal(_topLevelMethod, TypeWithAnnotations.Create(frameType), SynthesizedLocalKind.LambdaDisplayClass, frame.ScopeSyntaxOpt);
726var addedLocals = ArrayBuilder<LocalSymbol>.GetInstance();
749private void InitVariableProxy(SyntaxNode syntax, Symbol symbol, LocalSymbol framePointer, ArrayBuilder<BoundExpression> prologue)
769var local = (LocalSymbol)symbol;
775LocalSymbol localToUse;
1128locals: ImmutableArray<LocalSymbol>.Empty,
1139private BoundSequence RewriteSequence(BoundSequence node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1160return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1165return RewriteBlock(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1169private BoundBlock RewriteBlock(BoundBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1222return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1229return RewriteCatch(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1233private BoundNode RewriteCatch(BoundCatchBlock node, ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals)
1251ImmutableArray.Create<LocalSymbol>(),
1296return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1303return RewriteSequence(node, ArrayBuilder<BoundExpression>.GetInstance(), ArrayBuilder<LocalSymbol>.GetInstance());
1313return IntroduceFrame(node, frame, (ArrayBuilder<BoundExpression> prologue, ArrayBuilder<LocalSymbol> newLocals) =>
1723var cacheLocal = F.SynthesizedLocal(type, kind: SynthesizedLocalKind.CachedAnonymousMethodDelegate);
1724if (_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)
670ref ArrayBuilder<LocalSymbol>? tempsOpt,
734tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
826ImmutableArray<LocalSymbol>.Empty,
834void ensureTempTrackingSetup([NotNull] ref ArrayBuilder<LocalSymbol>? tempsOpt, ref BitVector positionsAssignedToTemp)
836tempsOpt ??= ArrayBuilder<LocalSymbol>.GetInstance();
849ref ArrayBuilder<LocalSymbol>? tempsOpt,
904visitedArgumentsBuilder[argIndex] = _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, ImmutableArray.Create<BoundExpression>(store), local);
992private void ReferToTempIfReferenceTypeReceiver(BoundLocal receiverTemp, ref BoundAssignmentOperator assignmentToTemp, out BoundAssignmentOperator? extraRefInitialization, ArrayBuilder<LocalSymbol> temps)
1065[NotNull] ref ArrayBuilder<LocalSymbol>? temps,
1077temps ??= ArrayBuilder<LocalSymbol>.GetInstance();
1540ArrayBuilder<LocalSymbol> temporariesBuilder)
1664ImmutableArray<LocalSymbol>.Empty,
1688ArrayBuilder<LocalSymbol> temporariesBuilder)
1728locals: ImmutableArray<LocalSymbol>.Empty,
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (13)
85var temps = ArrayBuilder<LocalSymbol>.GetInstance();
118var eventTemps = ArrayBuilder<LocalSymbol>.GetInstance();
261private BoundExpression? TransformPropertyOrEventReceiver(Symbol propertyOrEvent, BoundExpression? receiverOpt, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
351private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
368private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
440ArrayBuilder<LocalSymbol> temps)
478ArrayBuilder<LocalSymbol> temps)
540ArrayBuilder<LocalSymbol> temps,
554private BoundExpression TransformIndexPatternIndexerAccess(BoundImplicitIndexerAccess implicitIndexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
590private bool TransformCompoundAssignmentFieldOrEventAccessReceiver(Symbol fieldOrEvent, ref BoundExpression? receiver, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
633private BoundDynamicIndexerAccess TransformDynamicIndexerAccess(BoundDynamicIndexerAccess indexerAccess, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps)
692private BoundExpression TransformCompoundAssignmentLHS(BoundExpression originalLHS, ArrayBuilder<BoundExpression> stores, ArrayBuilder<LocalSymbol> temps, bool isDynamicAssignment)
911ArrayBuilder<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 (8)
161ArrayBuilder<LocalSymbol>? temps = null;
290var localsBuilder = ArrayBuilder<LocalSymbol>.GetInstance();
495var locals = ArrayBuilder<LocalSymbol>.GetInstance(2);
516ArrayBuilder<LocalSymbol> locals)
798var localsBuilder = ArrayBuilder<LocalSymbol>.GetInstance();
809private BoundExpression VisitRangePatternIndexerAccess(BoundImplicitIndexerAccess node, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, bool cacheAllArgumentsOnly)
1036private BoundExpression MakeRangeSize(ref BoundExpression startExpr, BoundExpression endExpr, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder)
1067private void DeconstructRange(BoundExpression rewrittenRangeArg, BoundExpression lengthAccess, ArrayBuilder<LocalSymbol> localsBuilder, ArrayBuilder<BoundExpression> sideEffectsBuilder, out BoundExpression startExpr, out BoundExpression rangeSizeExpr)
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();
624ref ArrayBuilder<LocalSymbol>? temps)
638(LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg = (rewriter: this, sideeffects, temps);
641static (BoundExpression element, ref (LocalRewriter rewriter, ArrayBuilder<BoundExpression> sideeffects, ArrayBuilder<LocalSymbol>? temps) elementArg) =>
670private BoundExpression EvaluateSideEffects(BoundExpression arg, RefKind refKind, ArrayBuilder<BoundExpression> sideeffects, ref ArrayBuilder<LocalSymbol>? temps)
679temps = 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);
327return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
335return _factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
344_factory.Sequence(ImmutableArray<LocalSymbol>.Empty, outerEffects.ToImmutableAndFree(),
358private void MakeNullableParts(BoundExpression expr, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> innerEffects,
421private BoundLocal MakeTemp(BoundExpression loweredExpression, ArrayBuilder<LocalSymbol> temps, ArrayBuilder<BoundExpression> effects)
434ArrayBuilder<LocalSymbol> temps,
491ArrayBuilder<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,
1009var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1148var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1163var tmp = _F.SynthesizedLocal(condition.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1263var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1319var clone = _F.SynthesizedLocal(receiver.Type, _F.Syntax, refKind: RefKind.None, kind: SynthesizedLocalKind.Spill);
1349var tmp = _F.SynthesizedLocal(node.Type, kind: SynthesizedLocalKind.Spill, syntax: _F.Syntax);
1500private void PromoteAndAddLocals(BoundSpillSequenceBuilder builder, ImmutableArray<LocalSymbol> locals)
1502foreach (var local in locals)
1510LocalSymbol 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)
228public BoundExpression This(LocalSymbol thisTempOpt)
458return Block(ImmutableArray<LocalSymbol>.Empty, statements);
466public BoundBlock Block(ImmutableArray<LocalSymbol> locals, params BoundStatement[] statements)
471public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> statements)
476public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, params BoundStatement[] statements)
481public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<LocalFunctionSymbol> localFunctions, ImmutableArray<BoundStatement> statements)
486public BoundBlock Block(ImmutableArray<LocalSymbol> locals, ImmutableArray<MethodSymbol> localFunctions, ImmutableArray<BoundStatement> statements)
515public BoundBlockInstrumentation CombineInstrumentation(BoundBlockInstrumentation? innerInstrumentation = null, LocalSymbol? local = null, BoundStatement? prologue = null, BoundStatement? epilogue = null)
595public LocalSymbol SynthesizedLocal(
617public LocalSymbol InterpolatedStringHandlerLocal(
950return If(condition, ImmutableArray<LocalSymbol>.Empty, thenClause, elseClauseOpt);
958public BoundStatement If(BoundExpression condition, ImmutableArray<LocalSymbol> locals, BoundStatement thenClause, BoundStatement? elseClauseOpt = null)
1014public BoundLocal Local(LocalSymbol local)
1019public BoundExpression MakeSequence(LocalSymbol temp, params BoundExpression[] parts)
1021return MakeSequence(ImmutableArray.Create<LocalSymbol>(temp), parts);
1026return MakeSequence(ImmutableArray<LocalSymbol>.Empty, parts);
1029public BoundExpression MakeSequence(ImmutableArray<LocalSymbol> locals, params BoundExpression[] parts)
1055return new BoundSequence(Syntax, ImmutableArray<LocalSymbol>.Empty, sideEffects.AsImmutableOrNull(), result, resultType) { WasCompilerGenerated = true };
1058public BoundExpression Sequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundExpression> sideEffects, BoundExpression result)
1067public BoundSpillSequence SpillSequence(ImmutableArray<LocalSymbol> locals, ImmutableArray<BoundStatement> sideEffects, BoundExpression result)
1356public BoundExpression LocalId(LocalSymbol symbol)
1605LocalSymbol local,
1616return new BoundCatchBlock(Syntax, ImmutableArray<LocalSymbol>.Empty, source, source.Type, exceptionFilterPrologueOpt: null, exceptionFilterOpt: null, body: block, isSynthesizedAsyncCatchAll: false);
1724internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, ArrayBuilder<LocalSymbol> temps)
1726LocalSymbol temp;
1732internal BoundLocal MakeTempForDiscard(BoundDiscardExpression node, out LocalSymbol temp)
1740internal ImmutableArray<BoundExpression> MakeTempsForDiscardArguments(ImmutableArray<BoundExpression> arguments, ArrayBuilder<LocalSymbol> builder)
1858locals: ImmutableArray<LocalSymbol>.Empty,