Rename things for clarity in PropagateScopeDeps
Joe Savona committed
Apr 26, 2023 at 11:34 UTC
e5f4b3008fcb598c1bd2b15ec0b52f05cd8a3b11
1 file changed
+14
-11
compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts
+14
-11
@@ -39,13 +39,13 @@ import { ReactiveFunctionVisitor, visitReactiveFunction } from "./visitors";
39
* their direct dependencies and those of their child scopes.
40
*/
41
export function propagateScopeDependencies(fn: ReactiveFunction): void {
42
- const promotedTemporaries: PromotedTemporaries = {
42
+ const escapingTemporaries: TemporariesUsedOutsideDefiningScope = {
43
declarations: new Map(),
44
- used: new Set(),
44
+ usedOutsideDeclaringScope: new Set(),
45
};
46
- visitReactiveFunction(fn, new FindPromotedTemporaries(), promotedTemporaries);
46
+ visitReactiveFunction(fn, new FindPromotedTemporaries(), escapingTemporaries);
47
48
- const context = new Context(promotedTemporaries.used);
48
+ const context = new Context(escapingTemporaries.usedOutsideDeclaringScope);
49
if (fn.id !== null) {
50
context.declare(fn.id, {
51
id: makeInstructionId(0),
@@ -61,16 +61,19 @@ export function propagateScopeDependencies(fn: ReactiveFunction): void {
61
visit(context, fn.body);
62
}
63
64
-type PromotedTemporaries = {
64
+type TemporariesUsedOutsideDefiningScope = {
65
+ // tracks all relevant temporary declarations (currently LoadLocal and PropertyLoad)
66
+ // and the scope where they are defined
67
declarations: Map<IdentifierId, ReactiveScope>;
66
- used: Set<IdentifierId>;
68
+ // temporaries used outside of their defining scope
69
+ usedOutsideDeclaringScope: Set<IdentifierId>;
70
};
68
-class FindPromotedTemporaries extends ReactiveFunctionVisitor<PromotedTemporaries> {
71
+class FindPromotedTemporaries extends ReactiveFunctionVisitor<TemporariesUsedOutsideDefiningScope> {
72
scopes: Array<ReactiveScope> = [];
73
74
override visitScope(
75
scope: ReactiveScopeBlock,
73
- state: PromotedTemporaries
76
+ state: TemporariesUsedOutsideDefiningScope
77
): void {
78
this.scopes.push(scope.scope);
79
this.traverseScope(scope, state);
@@ -79,7 +82,7 @@ class FindPromotedTemporaries extends ReactiveFunctionVisitor<PromotedTemporarie
82
83
override visitInstruction(
84
instruction: ReactiveInstruction,
82
- state: PromotedTemporaries
85
+ state: TemporariesUsedOutsideDefiningScope
86
): void {
87
const scope = this.scopes.at(-1);
88
if (instruction.lvalue === null || scope === undefined) {
@@ -101,7 +104,7 @@ class FindPromotedTemporaries extends ReactiveFunctionVisitor<PromotedTemporarie
104
override visitPlace(
105
_id: InstructionId,
106
place: Place,
104
- state: PromotedTemporaries
107
+ state: TemporariesUsedOutsideDefiningScope
108
): void {
109
const declaringScope = state.declarations.get(place.identifier.id);
110
if (this.scopes.length === 0 || declaringScope === undefined) {
@@ -109,7 +112,7 @@ class FindPromotedTemporaries extends ReactiveFunctionVisitor<PromotedTemporarie
112
}
113
if (this.scopes.indexOf(declaringScope) === -1) {
114
// Declaring scope is not active === used outside declaring scope
112
- state.used.add(place.identifier.id);
115
+ state.usedOutsideDeclaringScope.add(place.identifier.id);
116
}
117
}
118
}