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
}