diff --git a/compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts b/compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts index 1a41bb64e1..2387f54b36 100644 --- a/compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts +++ b/compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts @@ -39,13 +39,13 @@ import { ReactiveFunctionVisitor, visitReactiveFunction } from "./visitors"; * their direct dependencies and those of their child scopes. */ export function propagateScopeDependencies(fn: ReactiveFunction): void { - const promotedTemporaries: PromotedTemporaries = { + const escapingTemporaries: TemporariesUsedOutsideDefiningScope = { declarations: new Map(), - used: new Set(), + usedOutsideDeclaringScope: new Set(), }; - visitReactiveFunction(fn, new FindPromotedTemporaries(), promotedTemporaries); + visitReactiveFunction(fn, new FindPromotedTemporaries(), escapingTemporaries); - const context = new Context(promotedTemporaries.used); + const context = new Context(escapingTemporaries.usedOutsideDeclaringScope); if (fn.id !== null) { context.declare(fn.id, { id: makeInstructionId(0), @@ -61,16 +61,19 @@ export function propagateScopeDependencies(fn: ReactiveFunction): void { visit(context, fn.body); } -type PromotedTemporaries = { +type TemporariesUsedOutsideDefiningScope = { + // tracks all relevant temporary declarations (currently LoadLocal and PropertyLoad) + // and the scope where they are defined declarations: Map; - used: Set; + // temporaries used outside of their defining scope + usedOutsideDeclaringScope: Set; }; -class FindPromotedTemporaries extends ReactiveFunctionVisitor { +class FindPromotedTemporaries extends ReactiveFunctionVisitor { scopes: Array = []; override visitScope( scope: ReactiveScopeBlock, - state: PromotedTemporaries + state: TemporariesUsedOutsideDefiningScope ): void { this.scopes.push(scope.scope); this.traverseScope(scope, state); @@ -79,7 +82,7 @@ class FindPromotedTemporaries extends ReactiveFunctionVisitor