@samitouri / QOS-React-2 / commits / e5f4b3008f

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 }