@samitouri / QOS-React-2 / commits / 1d77016026

Make ReactiveForTerminal.update nullable

Makes ReactiveForTerminal.update nullable, allowing the update clause to be omitted. Follow-up diffs null out the update clause in some circumstances.

Joe Savona committed Apr 4, 2023 at 13:29 UTC 1d77016026153f677a610ac29a64e459c7772fe2
5 files changed +13 -5
compiler/forget/src/HIR/HIR.ts
+1 -1
@@ -184,7 +184,7 @@ export type ReactiveForTerminal = {
184 kind: "for";
185 init: ReactiveValue;
186 test: ReactiveValue;
187 - update: ReactiveValue;
187 + update: ReactiveValue | null;
188 loop: ReactiveBlock;
189 id: InstructionId;
190 };
compiler/forget/src/ReactiveScopes/CodegenReactiveFunction.ts
+3 -1
@@ -306,7 +306,9 @@ function codegenTerminal(
306 return t.forStatement(
307 codegenForInit(cx, terminal.init),
308 codegenInstructionValue(cx, terminal.test),
309 - codegenInstructionValue(cx, terminal.update),
309 + terminal.update !== null
310 + ? codegenInstructionValue(cx, terminal.update)
311 + : null,
312 codegenBlock(cx, terminal.loop)
313 );
314 }
compiler/forget/src/ReactiveScopes/PrintReactiveFunction.ts
+3 -1
@@ -228,7 +228,9 @@ function printTerminal(writer: Writer, terminal: ReactiveTerminal): void {
228 writer.writeLine(";");
229 printReactiveValue(writer, terminal.test);
230 writer.writeLine(";");
231 - printReactiveValue(writer, terminal.update);
231 + if (terminal.update !== null) {
232 + printReactiveValue(writer, terminal.update);
233 + }
234 writer.writeLine(") {");
235 printReactiveInstructions(writer, terminal.loop);
236 writer.writeLine("}");
compiler/forget/src/ReactiveScopes/PropagateScopeDependencies.ts
+3 -1
@@ -374,7 +374,9 @@ function visit(context: Context, block: ReactiveBlock): void {
374 visitReactiveValue(context, terminal.id, terminal.init);
375 visitReactiveValue(context, terminal.id, terminal.test);
376 context.enterConditional(() => {
377 - visitReactiveValue(context, terminal.id, terminal.update);
377 + if (terminal.update !== null) {
378 + visitReactiveValue(context, terminal.id, terminal.update);
379 + }
380 visit(context, terminal.loop);
381 });
382 break;
compiler/forget/src/ReactiveScopes/visitors.ts
+3 -1
@@ -108,7 +108,9 @@ export class ReactiveFunctionVisitor<TState = void> {
108 case "for": {
109 this.visitValue(terminal.id, terminal.init, state);
110 this.visitValue(terminal.id, terminal.test, state);
111 - this.visitValue(terminal.id, terminal.update, state);
111 + if (terminal.update !== null) {
112 + this.visitValue(terminal.id, terminal.update, state);
113 + }
114 this.visitBlock(terminal.loop, state);
115 break;
116 }