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

[new-arch][easy] Handle declarations (let/const) through codegen

Distinguishes between `LValue` and `Place`. For the most part this is the same data structure (LValue composes Place), but it's helpful to distinguish them since LValue has other properties such as the kind of declaration. The representations may diverge more in the future. This change lets us correctly emit code for variable declarations: previously we didn't emit `let` or `const`.

Joseph Savona committed Oct 6, 2022 at 08:56 UTC cbbfba27b4d88c3ada8118a8096a07350c2aa5ed
25 files changed +625 -787
compiler/forget/src/HIR/BuildDefUseGraph.ts
+8 -8
@@ -329,9 +329,9 @@ function buildInputsOutputsForBlock(
329 case "Identifier": {
330 builder.reference(instrValue, instrValue, Capability.Readonly);
331 valueCapability = instrValue.capability;
332 - if (instr.place !== null && instr.place.memberPath === null) {
333 - builder.assign(instr.place, instr, instrValue);
334 - instr.place.capability = valueCapability;
332 + if (instr.lvalue !== null && instr.lvalue.place.memberPath === null) {
333 + builder.assign(instr.lvalue.place, instr, instrValue);
334 + instr.lvalue.place.capability = valueCapability;
335 continue;
336 }
337 break;
@@ -340,12 +340,12 @@ function buildInputsOutputsForBlock(
340 assertExhaustive(instrValue, "Unexpected instruction kind");
341 }
342 }
343 - if (instr.place !== null) {
344 - if (instr.place.memberPath == null) {
345 - builder.init(instr.place, instr, true);
346 - instr.place.capability = valueCapability;
343 + if (instr.lvalue !== null) {
344 + if (instr.lvalue.place.memberPath == null) {
345 + builder.init(instr.lvalue.place, instr, true);
346 + instr.lvalue.place.capability = valueCapability;
347 } else {
348 - builder.reference(instr.place, instr, valueCapability);
348 + builder.reference(instr.lvalue.place, instr, valueCapability);
349 }
350 }
351 }
compiler/forget/src/HIR/BuildHIR.ts
+23 -12
@@ -14,6 +14,7 @@ import {
14 HIRFunction,
15 Identifier,
16 IfTerminal,
17 + InstructionKind,
18 InstructionValue,
19 Place,
20 ReturnTerminal,
@@ -546,11 +547,13 @@ function lowerStatement(
547 }
548 case "VariableDeclaration": {
549 const stmt = stmtPath as NodePath<t.VariableDeclaration>;
549 - const kind: string = stmt.node.kind;
550 + const nodeKind: string = stmt.node.kind;
551 invariant(
551 - kind === "let" || kind === "const",
552 + nodeKind === "let" || nodeKind === "const",
553 "`var` declarations are not supported, use let or const"
554 );
555 + const kind =
556 + nodeKind === "let" ? InstructionKind.Let : InstructionKind.Const;
557 for (const declaration of stmt.get("declarations")) {
558 const id = lowerLVal(builder, declaration.get("id"));
559 const init = declaration.get("init");
@@ -565,7 +568,7 @@ function lowerStatement(
568 };
569 }
570 builder.push({
568 - place: id,
571 + lvalue: { place: id, kind },
572 value,
573 path: stmt,
574 });
@@ -581,7 +584,7 @@ function lowerStatement(
584 return;
585 }
586 builder.push({
584 - place: null,
587 + lvalue: null,
588 value,
589 path: stmt,
590 });
@@ -620,7 +623,7 @@ function lowerStatement(
623 case "WithStatement": {
624 builder.push({
625 path: stmtPath,
623 - place: null,
626 + lvalue: null,
627 value: { kind: "OtherStatement", path: stmtPath },
628 });
629 return;
@@ -816,9 +819,9 @@ function lowerExpression(
819 const operator = expr.node.operator;
820 todoInvariant(operator === "=", "todo: support non-simple assignment");
821 builder.push({
822 + lvalue: { place: left, kind: InstructionKind.Reassign },
823 path: exprPath,
824 value: right,
821 - place: left,
825 });
826 return left;
827 }
@@ -907,7 +910,11 @@ function lowerConditional(
910 // Block for the consequent (if the test is truthy)
911 const consequentBlock = builder.enter((blockId) => {
912 let value = consequent();
910 - builder.push({ value, place: { ...place }, path: value.path });
913 + builder.push({
914 + value,
915 + lvalue: { place: { ...place }, kind: InstructionKind.Const },
916 + path: value.path,
917 + });
918 return {
919 kind: "goto",
920 block: continuationBlock.id,
@@ -916,7 +923,11 @@ function lowerConditional(
923 // Block for the alternate (if the test is not truthy)
924 const alternateBlock = builder.enter((blockId) => {
925 let value = alternate();
919 - builder.push({ value, place: { ...place }, path: value.path });
926 + builder.push({
927 + value,
928 + lvalue: { place: { ...place }, kind: InstructionKind.Const },
929 + path: value.path,
930 + });
931 return {
932 kind: "goto",
933 block: continuationBlock.id,
@@ -969,7 +980,7 @@ function lowerJsxElementName(
980 builder.push({
981 value: { kind: "Primitive", value: tag, path: exprPath },
982 path: exprPath,
972 - place,
983 + lvalue: { place, kind: InstructionKind.Const },
984 });
985 return { ...place };
986 }
@@ -1002,7 +1013,7 @@ function lowerJsxElement(
1013 builder.push({
1014 value: { kind: "JSXText", value: exprPath.node.value, path: exprPath },
1015 path: exprPath,
1005 - place: { ...place },
1016 + lvalue: { place: { ...place }, kind: InstructionKind.Const },
1017 });
1018 return place;
1019 } else {
@@ -1016,7 +1027,7 @@ function lowerJsxElement(
1027 builder.push({
1028 value: { kind: "OtherStatement", path: exprPath },
1029 path: exprPath,
1019 - place: { ...place },
1030 + lvalue: { place: { ...place }, kind: InstructionKind.Const },
1031 });
1032 return place;
1033 }
@@ -1040,7 +1051,7 @@ function lowerExpressionToPlace(
1051 builder.push({
1052 value: instr,
1053 path: exprPath,
1043 - place: { ...place },
1054 + lvalue: { place: { ...place }, kind: InstructionKind.Const },
1055 });
1056 return place;
1057 }
compiler/forget/src/HIR/Codegen.ts
+40 -19
@@ -15,6 +15,8 @@ import {
15 Identifier,
16 IdentifierId,
17 Instruction,
18 + InstructionKind,
19 + LValue,
20 Place,
21 } from "./HIR";
22 import { todoInvariant } from "./todo";
@@ -269,20 +271,46 @@ function writeInstr(cx: Context, instr: Instruction, body: Array<t.Statement>) {
271 assertExhaustive(instrValue, "Unexpected instruction kind");
272 }
273 }
272 - if (instr.place !== null) {
274 + if (instr.lvalue !== null) {
275 if (
274 - instr.place.kind === "Identifier" &&
275 - instr.place.value.name === null &&
276 - instr.place.memberPath === null
276 + instr.lvalue.place.value.name === null &&
277 + instr.lvalue.place.memberPath === null
278 ) {
279 // Temporary value: don't immediately emit, instead save the value to refer to later
279 - cx.temp.set(instr.place.value.id, value);
280 + cx.temp.set(instr.lvalue.place.value.id, value);
281 } else {
281 - body.push(
282 - t.expressionStatement(
283 - t.assignmentExpression("=", codegenLVal(instr.place), value)
284 - )
285 - );
282 + switch (instr.lvalue.kind) {
283 + case InstructionKind.Const: {
284 + body.push(
285 + t.variableDeclaration("const", [
286 + t.variableDeclarator(codegenLVal(instr.lvalue), value),
287 + ])
288 + );
289 + break;
290 + }
291 + case InstructionKind.Let: {
292 + body.push(
293 + t.variableDeclaration("let", [
294 + t.variableDeclarator(codegenLVal(instr.lvalue), value),
295 + ])
296 + );
297 + break;
298 + }
299 + case InstructionKind.Reassign: {
300 + body.push(
301 + t.expressionStatement(
302 + t.assignmentExpression("=", codegenLVal(instr.lvalue), value)
303 + )
304 + );
305 + break;
306 + }
307 + default: {
308 + assertExhaustive(
309 + instr.lvalue.kind,
310 + `Unexpected instruction kind '${instr.lvalue.kind}'`
311 + );
312 + }
313 + }
314 }
315 } else {
316 body.push(t.expressionStatement(value));
@@ -309,15 +337,8 @@ function codegenJsxElement(
337 }
338 }
339
312 -function codegenLVal(place: Place): t.LVal {
313 - switch (place.kind) {
314 - case "Identifier": {
315 - return convertIdentifier(place.value);
316 - }
317 - default: {
318 - throw new Error("todo other lval kinds");
319 - }
320 - }
340 +function codegenLVal(lval: LValue): t.LVal {
341 + return convertIdentifier(lval.place.value);
342 }
343
344 function codegenValue(
compiler/forget/src/HIR/HIR.ts
+12 -1
@@ -128,11 +128,22 @@ export type SwitchTerminal = {
128 * or may occur only for side-effects (many expression statements).
129 */
130 export type Instruction = {
131 - place: Place | null;
131 + lvalue: LValue | null;
132 value: InstructionValue;
133 path: NodePath;
134 };
135
136 +export type LValue = {
137 + place: Place;
138 + kind: InstructionKind;
139 +};
140 +
141 +export enum InstructionKind {
142 + Const, // const declaration
143 + Let, // let declaration
144 + Reassign, // assing a new value to a let binding
145 +}
146 +
147 /**
148 * A value that may be assigned to a place. Similar to instructions, values
149 * are not recursive: complex values such as objects or arrays are always
compiler/forget/src/HIR/InferMutability.ts
+20 -20
@@ -220,11 +220,11 @@ function flowMutabilityBackwards(vertex: Vertex, epoch: number) {
220
221 function inferBlock(graph: UseGraph, block: BasicBlock) {
222 for (const instr of block.instructions) {
223 - if (instr.place !== null) {
224 - if (instr.place.memberPath == null) {
225 - graph.init(instr.place, instr);
223 + if (instr.lvalue !== null) {
224 + if (instr.lvalue.place.memberPath == null) {
225 + graph.init(instr.lvalue.place, instr);
226 } else {
227 - graph.reference(instr.place, instr, Capability.Mutable);
227 + graph.reference(instr.lvalue.place, instr, Capability.Mutable);
228 }
229 }
230 const instrValue = instr.value;
@@ -239,8 +239,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
239 case "ArrayExpression": {
240 for (const element of instrValue.elements) {
241 graph.reference(element, instrValue, Capability.Readonly);
242 - if (instr.place !== null) {
243 - graph.capture(instr.place, instr, element);
242 + if (instr.lvalue !== null) {
243 + graph.capture(instr.lvalue.place, instr, element);
244 }
245 }
246 break;
@@ -250,8 +250,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
250 let prevArg: Place | null = null;
251 for (const arg of instrValue.args) {
252 graph.reference(arg, instrValue, Capability.Mutable);
253 - if (instr.place !== null) {
254 - graph.capture(instr.place, instr, arg);
253 + if (instr.lvalue !== null) {
254 + graph.capture(instr.lvalue.place, instr, arg);
255 }
256 if (prevArg !== null) {
257 graph.capture(prevArg, instr, arg);
@@ -271,8 +271,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
271 let prevArg: Place | null = null;
272 for (const arg of instrValue.args) {
273 graph.reference(arg, instrValue, capability);
274 - if (instr.place !== null) {
275 - graph.capture(instr.place, instr, arg);
274 + if (instr.lvalue !== null) {
275 + graph.capture(instr.lvalue.place, instr, arg);
276 }
277 if (prevArg !== null) {
278 graph.capture(prevArg, instr, arg);
@@ -286,8 +286,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
286 if (instrValue.properties !== null) {
287 for (const [_key, value] of Object.entries(instrValue.properties)) {
288 graph.reference(value, instrValue, Capability.Readonly);
289 - if (instr.place !== null) {
290 - graph.capture(instr.place, instr, value);
289 + if (instr.lvalue !== null) {
290 + graph.capture(instr.lvalue.place, instr, value);
291 }
292 }
293 }
@@ -306,15 +306,15 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
306 graph.reference(instrValue.tag, instrValue, Capability.Readonly);
307 for (const [_prop, value] of Object.entries(instrValue.props)) {
308 graph.reference(value, instrValue, Capability.Readonly);
309 - if (instr.place !== null) {
310 - graph.capture(instr.place, instr, value);
309 + if (instr.lvalue !== null) {
310 + graph.capture(instr.lvalue.place, instr, value);
311 }
312 }
313 if (instrValue.children !== null) {
314 for (const child of instrValue.children) {
315 graph.reference(child, instrValue, Capability.Readonly);
316 - if (instr.place !== null) {
317 - graph.capture(instr.place, instr, child);
316 + if (instr.lvalue !== null) {
317 + graph.capture(instr.lvalue.place, instr, child);
318 }
319 }
320 }
@@ -327,8 +327,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
327 }
328 case "Identifier": {
329 graph.reference(instrValue, instrValue, Capability.Readonly);
330 - if (instr.place !== null) {
331 - graph.assign(instr.place, instr, instrValue);
330 + if (instr.lvalue !== null) {
331 + graph.assign(instr.lvalue.place, instr, instrValue);
332 }
333 valueCapability = instrValue.capability;
334 break;
@@ -337,8 +337,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
337 assertExhaustive(instrValue, "Unexpected instruction kind");
338 }
339 }
340 - if (instr.place !== null) {
341 - instr.place.capability = valueCapability;
340 + if (instr.lvalue !== null) {
341 + instr.lvalue.place.capability = valueCapability;
342 }
343 }
344 }
compiler/forget/src/HIR/PrintHIR.ts
+29 -3
@@ -6,7 +6,15 @@
6 */
7
8 import { assertExhaustive } from "../Common/utils";
9 -import { HIR, Instruction, InstructionValue, Place, Terminal } from "./HIR";
9 +import {
10 + HIR,
11 + Instruction,
12 + InstructionKind,
13 + InstructionValue,
14 + LValue,
15 + Place,
16 + Terminal,
17 +} from "./HIR";
18
19 export type Options = {
20 indent: number;
@@ -63,8 +71,8 @@ export function printMixedHIR(
71 function printInstruction(instr: Instruction): string {
72 const value = printInstructionValue(instr.value);
73
66 - if (instr.place !== null) {
67 - return `${printPlace(instr.place)} = ${value}`;
74 + if (instr.lvalue !== null) {
75 + return `${printLValue(instr.lvalue)} = ${value}`;
76 } else {
77 return value;
78 }
@@ -204,6 +212,24 @@ function printInstructionValue(instrValue: InstructionValue): string {
212 return value;
213 }
214
215 +export function printLValue(lval: LValue): string {
216 + const place = printPlace(lval.place);
217 + switch (lval.kind) {
218 + case InstructionKind.Let: {
219 + return `Let ${place}`;
220 + }
221 + case InstructionKind.Const: {
222 + return `Const ${place}`;
223 + }
224 + case InstructionKind.Reassign: {
225 + return `Reassign ${place}`;
226 + }
227 + default: {
228 + assertExhaustive(lval.kind, `Unexpected lvalue kind '${lval.kind}'`);
229 + }
230 + }
231 +}
232 +
233 export function printPlace(place: Place): string {
234 const items = [place.capability, " ", place.value.name, "$", place.value.id];
235 if (place.memberPath != null) {
compiler/forget/src/HIR/ScopeAnalysis.ts
-235
@@ -5,26 +5,14 @@
5 * LICENSE file in the root directory of this source tree.
6 */
7
8 -import { assertExhaustive } from "../Common/utils";
9 -import { invariant } from "../CompilerError";
10 -import DisjointSet from "./DisjointSet";
8 import {
12 - BasicBlock,
13 - BlockId,
9 Capability,
15 - HIR,
10 HIRFunction,
17 - IdentifierId,
18 - Instruction,
19 - InstructionValue,
11 makeScopeId,
21 - Place,
12 ReactFunction,
13 ReactiveScope,
14 ScopeId,
25 - Terminal,
15 } from "./HIR";
27 -import todo from "./todo";
16
17 // import * as t from "@babel/types";
18
@@ -197,11 +185,6 @@ function analyze(fn: HIRFunction): ReactFunction {
185 const returnScopeId = makeScopeId(0);
186 const scopes: Map<ScopeId, ReactiveScope> = new Map();
187
200 - const block = fn.body.blocks.get(fn.body.entry)!;
201 - const context = new Context(fn.body);
202 - analyzeBlock(context, fn.body.entry, block);
203 - context.analyzeControls();
204 -
188 return {
189 path: fn.path,
190 id: fn.id,
@@ -210,221 +193,3 @@ function analyze(fn: HIRFunction): ReactFunction {
193 scopes,
194 };
195 }
213 -
214 -class Context {
215 - #blocks: Map<IdentifierId, Set<BasicBlock>> = new Map();
216 - #groups: DisjointSet<IdentifierId | Instruction | BasicBlock> =
217 - new DisjointSet();
218 - body: HIR;
219 -
220 - constructor(body: HIR) {
221 - this.body = body;
222 - }
223 -
224 - union(items: Array<IdentifierId | Instruction>, block: BasicBlock) {
225 - this.#groups.union(items);
226 - for (const item of items) {
227 - if (typeof item === "number") {
228 - // IdentifierId
229 - let set = this.#blocks.get(item);
230 - if (set == null) {
231 - set = new Set();
232 - this.#blocks.set(item, set);
233 - }
234 - set.add(block);
235 - }
236 - }
237 - }
238 -
239 - /**
240 - * Find items that participate in control flow together
241 - */
242 - analyzeControls() {
243 - const mergeSets: Array<Array<BasicBlock>> = [];
244 - const blocks: Map<BlockId, BasicBlock> = new Map();
245 - this.#groups.forEach((prevItem, prevGroup) => {
246 - this.#groups.forEach((nextItem, nextGroup) => {
247 - if (
248 - prevGroup === nextGroup ||
249 - typeof prevItem !== "number" ||
250 - typeof nextItem !== "number"
251 - ) {
252 - // Already part of the same group, by definition this includes item === nextItem
253 - return;
254 - }
255 - const prevBlocks = this.#blocks.get(prevItem)!;
256 - const nextBlocks = this.#blocks.get(nextItem)!;
257 -
258 - const overlap = [];
259 - for (const block of prevBlocks) {
260 - if (nextBlocks.has(block)) {
261 - overlap.push(block);
262 - }
263 - }
264 - if (overlap.length > 1) {
265 - mergeSets.push(overlap);
266 - }
267 - });
268 - });
269 - for (const set of mergeSets) {
270 - this.#groups.union(set);
271 - }
272 - }
273 -}
274 -
275 -function analyzeBlock(cx: Context, id: BlockId, block: BasicBlock) {
276 - for (const instr of block.instructions) {
277 - const instrValue = instr.value;
278 - let mutables: Array<IdentifierId | Instruction> = [];
279 - switch (instrValue.kind) {
280 - case "JSXText":
281 - case "Primitive": {
282 - // no mutable values
283 - break;
284 - }
285 - case "Identifier": {
286 - const value = getMutable(instrValue);
287 - if (value !== null) {
288 - mutables.push(value);
289 - }
290 - break;
291 - }
292 - case "UnaryExpression": {
293 - const value = getMutable(instrValue.value);
294 - if (value !== null) {
295 - mutables.push(value);
296 - }
297 - break;
298 - }
299 - case "BinaryExpression": {
300 - const left = getMutable(instrValue.left);
301 - const right = getMutable(instrValue.right);
302 - if (left !== null) {
303 - mutables.push(left);
304 - }
305 - if (right !== null) {
306 - mutables.push(right);
307 - }
308 - break;
309 - }
310 - case "ArrayExpression": {
311 - for (const _element of instrValue.elements) {
312 - const element = getMutable(_element);
313 - if (element !== null) {
314 - mutables.push(element);
315 - }
316 - }
317 - break;
318 - }
319 - case "ObjectExpression": {
320 - if (instrValue.properties !== null) {
321 - for (const _value of Object.values(instrValue.properties)) {
322 - const value = getMutable(_value);
323 - if (value !== null) {
324 - mutables.push(value);
325 - }
326 - }
327 - }
328 - break;
329 - }
330 - case "JsxExpression": {
331 - const tag = getMutable(instrValue.tag);
332 - if (tag !== null) {
333 - mutables.push(tag);
334 - }
335 - for (const _prop of Object.values(instrValue.props)) {
336 - const prop = getMutable(_prop);
337 - if (prop !== null) {
338 - mutables.push(prop);
339 - }
340 - }
341 - if (instrValue.children !== null) {
342 - for (const _child of instrValue.children) {
343 - const child = getMutable(_child);
344 - if (child !== null) {
345 - mutables.push(child);
346 - }
347 - }
348 - }
349 - break;
350 - }
351 - case "NewExpression":
352 - case "CallExpression": {
353 - const callee = getMutable(instrValue.callee);
354 - if (callee !== null) {
355 - mutables.push(callee);
356 - }
357 - for (const _arg of instrValue.args) {
358 - const arg = getMutable(_arg);
359 - if (arg !== null) {
360 - mutables.push(arg);
361 - }
362 - }
363 - break;
364 - }
365 - case "OtherStatement": {
366 - // no-op for the value itself
367 - break;
368 - }
369 - default: {
370 - assertExhaustive(
371 - instrValue,
372 - `Unexpected instruction kind '${
373 - (instrValue as any as InstructionValue).kind
374 - }'`
375 - );
376 - }
377 - }
378 - const place = instr.place !== null ? getMutable(instr.place) : null;
379 - invariant(
380 - instr.place === null ||
381 - instr.place.kind !== "Identifier" ||
382 - place !== null,
383 - "Expected instruction assignment target to be inferred as mutable if present."
384 - );
385 - if (place !== null) {
386 - mutables.push(place);
387 - }
388 - if (mutables.length !== 0) {
389 - mutables.push(instr);
390 - cx.union(mutables, block);
391 - }
392 - }
393 - switch (block.terminal.kind) {
394 - case "if": {
395 - const consequent = cx.body.blocks.get(block.terminal.consequent)!;
396 - analyzeBlock(cx, block.terminal.consequent, consequent);
397 - const alternate = cx.body.blocks.get(block.terminal.alternate)!;
398 - analyzeBlock(cx, block.terminal.alternate, alternate);
399 - if (
400 - block.terminal.fallthrough !== null &&
401 - block.terminal.fallthrough !== block.terminal.alternate
402 - ) {
403 - const fallthrough = cx.body.blocks.get(block.terminal.fallthrough)!;
404 - analyzeBlock(cx, block.terminal.fallthrough, fallthrough);
405 - }
406 - break;
407 - }
408 - case "switch": {
409 - todo("implement scope analysis for switch statements");
410 - }
411 - case "throw":
412 - case "return":
413 - case "goto": {
414 - // no-op
415 - break;
416 - }
417 - default: {
418 - assertExhaustive(
419 - block.terminal,
420 - `Unexpected terminal kind '${(block.terminal as any as Terminal).kind}'`
421 - );
422 - }
423 - }
424 -}
425 -
426 -function getMutable(place: Place): IdentifierId | null {
427 - return place.kind === "Identifier" && place.capability === Capability.Mutable
428 - ? place.value.id
429 - : null;
430 -}
compiler/forget/src/__tests__/fixtures/hir-svg/component.svg
+242 -242
@@ -4,721 +4,721 @@
4 <!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 -->
6 <!-- Title: BuildDefUseGraph Pages: 1 -->
7 -<svg width="13468pt" height="482pt"
8 - viewBox="0.00 0.00 13467.86 481.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7 +<svg width="13574pt" height="482pt"
8 + viewBox="0.00 0.00 13573.52 481.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 477.6)">
10 <title>BuildDefUseGraph</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-477.6 13463.86,-477.6 13463.86,4 -4,4"/>
11 +<polygon fill="white" stroke="none" points="-4,4 -4,-477.6 13569.52,-477.6 13569.52,4 -4,4"/>
12 <!-- v0 -->
13 <g id="node1" class="node">
14 <title>v0</title>
15 -<polygon fill="none" stroke="black" points="611.86,-396 256.43,-396 256.43,-360 611.86,-360 611.86,-396"/>
16 -<text text-anchor="middle" x="434.14" y="-373.8" font-family="Times,serif" font-size="14.00">v0 (frozen props$1.items @ frozen props$1.items) &lt;update&gt;</text>
15 +<polygon fill="none" stroke="black" points="627.43,-396 272.01,-396 272.01,-360 627.43,-360 627.43,-396"/>
16 +<text text-anchor="middle" x="449.72" y="-373.8" font-family="Times,serif" font-size="14.00">v0 (frozen props$1.items @ frozen props$1.items) &lt;update&gt;</text>
17 </g>
18 <!-- v1 -->
19 <g id="node2" class="node">
20 <title>v1</title>
21 -<polygon fill="none" stroke="black" points="428.91,-324 11.38,-324 11.38,-288 428.91,-288 428.91,-324"/>
22 -<text text-anchor="middle" x="220.14" y="-301.8" font-family="Times,serif" font-size="14.00">v1 (frozen items$2 @ frozen items$2 = frozen props$1.items) &lt;assign&gt;</text>
21 +<polygon fill="none" stroke="black" points="453.66,-324 -0.22,-324 -0.22,-288 453.66,-288 453.66,-324"/>
22 +<text text-anchor="middle" x="226.72" y="-301.8" font-family="Times,serif" font-size="14.00">v1 (frozen items$2 @ Const frozen items$2 = frozen props$1.items) &lt;assign&gt;</text>
23 </g>
24 <!-- v0&#45;&gt;v1 -->
25 <g id="edge1" class="edge">
26 <title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M382.07,-359.97C351.91,-350.1 313.76,-337.62 282.07,-327.25"/>
28 -<polygon fill="black" stroke="black" points="283.05,-323.89 272.45,-324.11 280.87,-330.55 283.05,-323.89"/>
27 +<path fill="none" stroke="black" d="M395.45,-359.97C363.89,-350.06 323.93,-337.51 290.82,-327.12"/>
28 +<polygon fill="black" stroke="black" points="291.82,-323.77 281.23,-324.11 289.72,-330.45 291.82,-323.77"/>
29 </g>
30 <!-- v2 -->
31 <g id="node3" class="node">
32 <title>v2</title>
33 -<polygon fill="none" stroke="black" points="863.11,-324 457.18,-324 457.18,-288 863.11,-288 863.11,-324"/>
34 -<text text-anchor="middle" x="660.14" y="-301.8" font-family="Times,serif" font-size="14.00">v2 (frozen props$1.maxItems @ frozen props$1.maxItems) &lt;update&gt;</text>
33 +<polygon fill="none" stroke="black" points="887.68,-324 481.76,-324 481.76,-288 887.68,-288 887.68,-324"/>
34 +<text text-anchor="middle" x="684.72" y="-301.8" font-family="Times,serif" font-size="14.00">v2 (frozen props$1.maxItems @ frozen props$1.maxItems) &lt;update&gt;</text>
35 </g>
36 <!-- v0&#45;&gt;v2 -->
37 <g id="edge2" class="edge">
38 <title>v0&#45;&gt;v2</title>
39 -<path fill="none" stroke="black" d="M489.14,-359.97C521.13,-350.06 561.63,-337.51 595.18,-327.12"/>
40 -<polygon fill="black" stroke="black" points="596.38,-330.41 604.9,-324.11 594.31,-323.73 596.38,-330.41"/>
39 +<path fill="none" stroke="black" d="M506.91,-359.97C540.31,-350.01 582.64,-337.41 617.62,-326.99"/>
40 +<polygon fill="black" stroke="black" points="618.69,-330.32 627.28,-324.11 616.69,-323.61 618.69,-330.32"/>
41 </g>
42 <!-- v12 -->
43 <g id="node4" class="node">
44 <title>v12</title>
45 -<polygon fill="none" stroke="black" points="418.43,-252 -0.14,-252 -0.14,-216 418.43,-216 418.43,-252"/>
46 -<text text-anchor="middle" x="209.14" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (frozen items$2 @ If (frozen items$2) then:bb3 else:bb2) &lt;update&gt;</text>
45 +<polygon fill="none" stroke="black" points="425.01,-252 6.43,-252 6.43,-216 425.01,-216 425.01,-252"/>
46 +<text text-anchor="middle" x="215.72" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (frozen items$2 @ If (frozen items$2) then:bb3 else:bb2) &lt;update&gt;</text>
47 </g>
48 <!-- v1&#45;&gt;v12 -->
49 <g id="edge3" class="edge">
50 <title>v1&#45;&gt;v12</title>
51 -<path fill="none" stroke="black" d="M217.42,-287.7C216.21,-279.98 214.76,-270.71 213.4,-262.11"/>
52 -<polygon fill="black" stroke="black" points="216.84,-261.44 211.83,-252.1 209.93,-262.53 216.84,-261.44"/>
51 +<path fill="none" stroke="black" d="M224,-287.7C222.79,-279.98 221.33,-270.71 219.98,-262.11"/>
52 +<polygon fill="black" stroke="black" points="223.42,-261.44 218.41,-252.1 216.5,-262.53 223.42,-261.44"/>
53 </g>
54 <!-- v3 -->
55 <g id="node5" class="node">
56 <title>v3</title>
57 -<polygon fill="none" stroke="black" points="928.03,-252 436.25,-252 436.25,-216 928.03,-216 928.03,-252"/>
58 -<text text-anchor="middle" x="682.14" y="-229.8" font-family="Times,serif" font-size="14.00">v3 (frozen maxItems$3 @ frozen maxItems$3 = frozen props$1.maxItems) &lt;assign&gt;</text>
57 +<polygon fill="none" stroke="black" points="970.79,-252 442.65,-252 442.65,-216 970.79,-216 970.79,-252"/>
58 +<text text-anchor="middle" x="706.72" y="-229.8" font-family="Times,serif" font-size="14.00">v3 (frozen maxItems$3 @ Const frozen maxItems$3 = frozen props$1.maxItems) &lt;assign&gt;</text>
59 </g>
60 <!-- v2&#45;&gt;v3 -->
61 <g id="edge4" class="edge">
62 <title>v2&#45;&gt;v3</title>
63 -<path fill="none" stroke="black" d="M665.58,-287.7C668.03,-279.9 670.98,-270.51 673.71,-261.83"/>
64 -<polygon fill="black" stroke="black" points="677.11,-262.69 676.77,-252.1 670.43,-260.59 677.11,-262.69"/>
63 +<path fill="none" stroke="black" d="M690.16,-287.7C692.61,-279.9 695.56,-270.51 698.29,-261.83"/>
64 +<polygon fill="black" stroke="black" points="701.68,-262.69 701.34,-252.1 695.01,-260.59 701.68,-262.69"/>
65 </g>
66 <!-- v10 -->
67 <g id="node6" class="node">
68 <title>v10</title>
69 -<polygon fill="none" stroke="black" points="966.39,-180 397.9,-180 397.9,-144 966.39,-144 966.39,-180"/>
70 -<text text-anchor="middle" x="682.14" y="-157.8" font-family="Times,serif" font-size="14.00">v10 (frozen maxItems$3 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
69 +<polygon fill="none" stroke="black" points="990.97,-180 422.47,-180 422.47,-144 990.97,-144 990.97,-180"/>
70 +<text text-anchor="middle" x="706.72" y="-157.8" font-family="Times,serif" font-size="14.00">v10 (frozen maxItems$3 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
71 </g>
72 <!-- v3&#45;&gt;v10 -->
73 <g id="edge5" class="edge">
74 <title>v3&#45;&gt;v10</title>
75 -<path fill="none" stroke="black" d="M682.14,-215.7C682.14,-207.98 682.14,-198.71 682.14,-190.11"/>
76 -<polygon fill="black" stroke="black" points="685.64,-190.1 682.14,-180.1 678.64,-190.1 685.64,-190.1"/>
75 +<path fill="none" stroke="black" d="M706.72,-215.7C706.72,-207.98 706.72,-198.71 706.72,-190.11"/>
76 +<polygon fill="black" stroke="black" points="710.22,-190.1 706.72,-180.1 703.22,-190.1 710.22,-190.1"/>
77 </g>
78 <!-- v4 -->
79 <g id="node7" class="node">
80 <title>v4</title>
81 -<polygon fill="none" stroke="black" points="1837.62,-470.8 1366.67,-470.8 1366.67,-434.8 1837.62,-434.8 1837.62,-470.8"/>
82 -<text text-anchor="middle" x="1602.14" y="-448.6" font-family="Times,serif" font-size="14.00">v4 (readonly renderedItems$4 @ readonly renderedItems$4 = Array []) &lt;assign&gt;</text>
81 +<polygon fill="none" stroke="black" points="1725.87,-470.8 1219.57,-470.8 1219.57,-434.8 1725.87,-434.8 1725.87,-470.8"/>
82 +<text text-anchor="middle" x="1472.72" y="-448.6" font-family="Times,serif" font-size="14.00">v4 (readonly renderedItems$4 @ Const readonly renderedItems$4 = Array []) &lt;assign&gt;</text>
83 </g>
84 <!-- v18 -->
85 <g id="node8" class="node">
86 <title>v18</title>
87 -<polygon fill="none" stroke="black" points="1884.55,-180 1387.73,-180 1387.73,-144 1884.55,-144 1884.55,-180"/>
88 -<text text-anchor="middle" x="1636.14" y="-157.8" font-family="Times,serif" font-size="14.00">v18 (readonly renderedItems$4.length @ readonly renderedItems$4.length) &lt;update&gt;</text>
87 +<polygon fill="none" stroke="black" points="1927.13,-180 1430.31,-180 1430.31,-144 1927.13,-144 1927.13,-180"/>
88 +<text text-anchor="middle" x="1678.72" y="-157.8" font-family="Times,serif" font-size="14.00">v18 (readonly renderedItems$4.length @ readonly renderedItems$4.length) &lt;update&gt;</text>
89 </g>
90 <!-- v4&#45;&gt;v18 -->
91 <g id="edge6" class="edge">
92 <title>v4&#45;&gt;v18</title>
93 -<path fill="none" stroke="black" d="M1674.19,-434.78C1697.1,-426.34 1720.93,-413.97 1738.14,-396 1761.68,-371.43 1758.28,-357.51 1764.14,-324 1772.44,-276.62 1785.38,-254.94 1757.14,-216 1747.07,-202.11 1732.55,-191.81 1717.04,-184.19"/>
94 -<polygon fill="black" stroke="black" points="1718.38,-180.95 1707.83,-180.01 1715.48,-187.33 1718.38,-180.95"/>
93 +<path fill="none" stroke="black" d="M1658.17,-434.74C1713.55,-426.26 1765.05,-413.87 1785.72,-396 1846.43,-343.53 1848.15,-279.98 1799.72,-216 1789.25,-202.17 1774.4,-191.88 1758.67,-184.25"/>
94 +<polygon fill="black" stroke="black" points="1759.89,-180.97 1749.34,-180.06 1757.03,-187.35 1759.89,-180.97"/>
95 </g>
96 <!-- v49 -->
97 <g id="node9" class="node">
98 <title>v49</title>
99 -<polygon fill="none" stroke="black" points="1700.95,-396 1123.34,-396 1123.34,-360 1700.95,-360 1700.95,-396"/>
100 -<text text-anchor="middle" x="1412.14" y="-373.8" font-family="Times,serif" font-size="14.00">v49 (mutable renderedItems$4.push @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
99 +<polygon fill="none" stroke="black" points="1743.52,-396 1165.91,-396 1165.91,-360 1743.52,-360 1743.52,-396"/>
100 +<text text-anchor="middle" x="1454.72" y="-373.8" font-family="Times,serif" font-size="14.00">v49 (mutable renderedItems$4.push @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
101 </g>
102 <!-- v4&#45;&gt;v49 -->
103 <g id="edge7" class="edge">
104 <title>v4&#45;&gt;v49</title>
105 -<path fill="none" stroke="black" d="M1557.6,-434.73C1530.3,-424.27 1495.17,-410.81 1466.28,-399.74"/>
106 -<polygon fill="black" stroke="black" points="1467.33,-396.4 1456.74,-396.09 1464.83,-402.93 1467.33,-396.4"/>
105 +<path fill="none" stroke="black" d="M1468.45,-434.55C1466.35,-426.03 1463.76,-415.55 1461.39,-405.99"/>
106 +<polygon fill="black" stroke="black" points="1464.75,-405 1458.95,-396.13 1457.96,-406.68 1464.75,-405"/>
107 </g>
108 <!-- v62 -->
109 <g id="node10" class="node">
110 <title>v62</title>
111 -<polygon fill="none" stroke="black" points="1747.88,-252 1524.41,-252 1524.41,-216 1747.88,-216 1747.88,-252"/>
112 -<text text-anchor="middle" x="1636.14" y="-229.8" font-family="Times,serif" font-size="14.00">v62 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
111 +<polygon fill="none" stroke="black" points="1790.46,-252 1566.98,-252 1566.98,-216 1790.46,-216 1790.46,-252"/>
112 +<text text-anchor="middle" x="1678.72" y="-229.8" font-family="Times,serif" font-size="14.00">v62 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
113 </g>
114 <!-- v4&#45;&gt;v62 -->
115 <g id="edge8" class="edge">
116 <title>v4&#45;&gt;v62</title>
117 -<path fill="none" stroke="black" d="M1650.1,-434.7C1670.49,-425.62 1693.37,-412.81 1710.14,-396 1735.56,-370.53 1738.68,-358.97 1747.14,-324 1750.91,-308.45 1755.68,-301.53 1747.14,-288 1738.51,-274.31 1725.27,-264.09 1710.89,-256.47"/>
118 -<polygon fill="black" stroke="black" points="1712.35,-253.29 1701.83,-252.05 1709.29,-259.58 1712.35,-253.29"/>
117 +<path fill="none" stroke="black" d="M1616.67,-434.75C1673.44,-425.66 1730.41,-412.83 1752.72,-396 1793.22,-365.44 1816.79,-330.92 1789.72,-288 1781.09,-274.31 1767.84,-264.09 1753.47,-256.47"/>
118 +<polygon fill="black" stroke="black" points="1754.93,-253.29 1744.4,-252.05 1751.86,-259.58 1754.93,-253.29"/>
119 </g>
120 <!-- v71 -->
121 <g id="node11" class="node">
122 <title>v71</title>
123 -<polygon fill="none" stroke="black" points="1169.88,-252 946.41,-252 946.41,-216 1169.88,-216 1169.88,-252"/>
124 -<text text-anchor="middle" x="1058.14" y="-229.8" font-family="Times,serif" font-size="14.00">v71 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
123 +<polygon fill="none" stroke="black" points="1212.46,-252 988.98,-252 988.98,-216 1212.46,-216 1212.46,-252"/>
124 +<text text-anchor="middle" x="1100.72" y="-229.8" font-family="Times,serif" font-size="14.00">v71 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
125 </g>
126 <!-- v4&#45;&gt;v71 -->
127 <g id="edge9" class="edge">
128 <title>v4&#45;&gt;v71</title>
129 -<path fill="none" stroke="black" d="M1366.72,-441.69C1264.44,-433.9 1158.03,-420.16 1114.14,-396 1078.15,-376.18 1069.81,-362.75 1056.14,-324 1049.17,-304.23 1050.15,-280.43 1052.61,-262.42"/>
130 -<polygon fill="black" stroke="black" points="1056.1,-262.72 1054.23,-252.3 1049.19,-261.62 1056.1,-262.72"/>
129 +<path fill="none" stroke="black" d="M1317.95,-434.8C1252.32,-425.49 1184.6,-412.47 1156.72,-396 1121.34,-375.09 1112.39,-362.75 1098.72,-324 1091.75,-304.23 1092.72,-280.43 1095.18,-262.42"/>
130 +<polygon fill="black" stroke="black" points="1098.68,-262.72 1096.8,-252.3 1091.77,-261.62 1098.68,-262.72"/>
131 </g>
132 <!-- v19 -->
133 <g id="node31" class="node">
134 <title>v19</title>
135 -<polygon fill="none" stroke="black" points="1538.76,-108 1005.53,-108 1005.53,-72 1538.76,-72 1538.76,-108"/>
136 -<text text-anchor="middle" x="1272.14" y="-85.8" font-family="Times,serif" font-size="14.00">v19 (readonly count$17 @ readonly count$17 = readonly renderedItems$4.length) &lt;assign&gt;</text>
135 +<polygon fill="none" stroke="black" points="1590.51,-108 1020.93,-108 1020.93,-72 1590.51,-72 1590.51,-108"/>
136 +<text text-anchor="middle" x="1305.72" y="-85.8" font-family="Times,serif" font-size="14.00">v19 (readonly count$17 @ Const readonly count$17 = readonly renderedItems$4.length) &lt;assign&gt;</text>
137 </g>
138 <!-- v18&#45;&gt;v19 -->
139 <g id="edge21" class="edge">
140 <title>v18&#45;&gt;v19</title>
141 -<path fill="none" stroke="black" d="M1547.57,-143.97C1494.17,-133.7 1426.07,-120.6 1370.94,-110"/>
142 -<polygon fill="black" stroke="black" points="1371.29,-106.5 1360.8,-108.05 1369.96,-113.38 1371.29,-106.5"/>
141 +<path fill="none" stroke="black" d="M1587.95,-143.97C1533.13,-133.68 1463.16,-120.55 1406.61,-109.93"/>
142 +<polygon fill="black" stroke="black" points="1407.05,-106.45 1396.57,-108.05 1405.75,-113.33 1407.05,-106.45"/>
143 </g>
144 <!-- v34 -->
145 <g id="node32" class="node">
146 <title>v34</title>
147 -<polygon fill="none" stroke="black" points="2441.14,-108 1557.15,-108 1557.15,-72 2441.14,-72 2441.14,-108"/>
148 -<text text-anchor="middle" x="1999.14" y="-85.8" font-family="Times,serif" font-size="14.00">v34 (frozen renderedItems$4 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
147 +<polygon fill="none" stroke="black" points="2492.71,-108 1608.73,-108 1608.73,-72 2492.71,-72 2492.71,-108"/>
148 +<text text-anchor="middle" x="2050.72" y="-85.8" font-family="Times,serif" font-size="14.00">v34 (frozen renderedItems$4 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
149 </g>
150 <!-- v18&#45;&gt;v34 -->
151 <g id="edge22" class="edge">
152 <title>v18&#45;&gt;v34</title>
153 -<path fill="none" stroke="black" d="M1724.48,-143.97C1777.72,-133.7 1845.64,-120.6 1900.62,-110"/>
154 -<polygon fill="black" stroke="black" points="1901.57,-113.38 1910.73,-108.05 1900.25,-106.51 1901.57,-113.38"/>
153 +<path fill="none" stroke="black" d="M1769.24,-143.97C1823.92,-133.68 1893.7,-120.55 1950.1,-109.93"/>
154 +<polygon fill="black" stroke="black" points="1950.93,-113.34 1960.11,-108.05 1949.64,-106.46 1950.93,-113.34"/>
155 </g>
156 <!-- v51 -->
157 <g id="node59" class="node">
158 <title>v51</title>
159 -<polygon fill="none" stroke="black" points="1738.03,-324 1086.26,-324 1086.26,-288 1738.03,-288 1738.03,-324"/>
160 -<text text-anchor="middle" x="1412.14" y="-301.8" font-family="Times,serif" font-size="14.00">v51 (readonly renderedItems$4.length @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
159 +<polygon fill="none" stroke="black" points="1780.61,-324 1128.83,-324 1128.83,-288 1780.61,-288 1780.61,-324"/>
160 +<text text-anchor="middle" x="1454.72" y="-301.8" font-family="Times,serif" font-size="14.00">v51 (readonly renderedItems$4.length @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
161 </g>
162 <!-- v49&#45;&gt;v51 -->
163 <g id="edge43" class="edge">
164 <title>v49&#45;&gt;v51</title>
165 -<path fill="none" stroke="black" d="M1412.14,-359.7C1412.14,-351.98 1412.14,-342.71 1412.14,-334.11"/>
166 -<polygon fill="black" stroke="black" points="1415.64,-334.1 1412.14,-324.1 1408.64,-334.1 1415.64,-334.1"/>
165 +<path fill="none" stroke="black" d="M1454.72,-359.7C1454.72,-351.98 1454.72,-342.71 1454.72,-334.11"/>
166 +<polygon fill="black" stroke="black" points="1458.22,-334.1 1454.72,-324.1 1451.22,-334.1 1458.22,-334.1"/>
167 </g>
168 <!-- v62&#45;&gt;v18 -->
169 <g id="edge54" class="edge">
170 <title>v62&#45;&gt;v18</title>
171 -<path fill="none" stroke="black" d="M1636.14,-215.7C1636.14,-207.98 1636.14,-198.71 1636.14,-190.11"/>
172 -<polygon fill="black" stroke="black" points="1639.64,-190.1 1636.14,-180.1 1632.64,-190.1 1639.64,-190.1"/>
171 +<path fill="none" stroke="black" d="M1678.72,-215.7C1678.72,-207.98 1678.72,-198.71 1678.72,-190.11"/>
172 +<polygon fill="black" stroke="black" points="1682.22,-190.1 1678.72,-180.1 1675.22,-190.1 1682.22,-190.1"/>
173 </g>
174 <!-- v71&#45;&gt;v49 -->
175 <g id="edge55" class="edge">
176 <title>v71&#45;&gt;v49</title>
177 -<path fill="none" stroke="black" d="M1056.54,-252.13C1055.67,-272.34 1057.65,-305.52 1077.14,-324 1093.53,-339.54 1130.17,-350.52 1173.46,-358.28"/>
178 -<polygon fill="black" stroke="black" points="1172.94,-361.75 1183.38,-359.99 1174.12,-354.85 1172.94,-361.75"/>
177 +<path fill="none" stroke="black" d="M1099.11,-252.13C1098.24,-272.34 1100.23,-305.52 1119.72,-324 1136.11,-339.54 1172.75,-350.52 1216.03,-358.28"/>
178 +<polygon fill="black" stroke="black" points="1215.51,-361.75 1225.96,-359.99 1216.7,-354.85 1215.51,-361.75"/>
179 </g>
180 <!-- v5 -->
181 <g id="node12" class="node">
182 <title>v5</title>
183 -<polygon fill="none" stroke="black" points="2228.7,-470.8 1909.59,-470.8 1909.59,-434.8 2228.7,-434.8 2228.7,-470.8"/>
184 -<text text-anchor="middle" x="2069.14" y="-448.6" font-family="Times,serif" font-size="14.00">v5 (mutable Set$6 @ New mutable Set$6()) &lt;update&gt;</text>
183 +<polygon fill="none" stroke="black" points="2081.28,-470.8 1762.16,-470.8 1762.16,-434.8 2081.28,-434.8 2081.28,-470.8"/>
184 +<text text-anchor="middle" x="1921.72" y="-448.6" font-family="Times,serif" font-size="14.00">v5 (mutable Set$6 @ New mutable Set$6()) &lt;update&gt;</text>
185 </g>
186 <!-- v6 -->
187 <g id="node13" class="node">
188 <title>v6</title>
189 -<polygon fill="none" stroke="black" points="2708.5,-470.8 2273.78,-470.8 2273.78,-434.8 2708.5,-434.8 2708.5,-470.8"/>
190 -<text text-anchor="middle" x="2491.14" y="-448.6" font-family="Times,serif" font-size="14.00">v6 (readonly seen$5 @ readonly seen$5 = New mutable Set$6()) &lt;assign&gt;</text>
189 +<polygon fill="none" stroke="black" points="2605.75,-470.8 2135.68,-470.8 2135.68,-434.8 2605.75,-434.8 2605.75,-470.8"/>
190 +<text text-anchor="middle" x="2370.72" y="-448.6" font-family="Times,serif" font-size="14.00">v6 (readonly seen$5 @ Const readonly seen$5 = New mutable Set$6()) &lt;assign&gt;</text>
191 </g>
192 <!-- v39 -->
193 <g id="node14" class="node">
194 <title>v39</title>
195 -<polygon fill="none" stroke="black" points="2724.53,-396 2257.76,-396 2257.76,-360 2724.53,-360 2724.53,-396"/>
196 -<text text-anchor="middle" x="2491.14" y="-373.8" font-family="Times,serif" font-size="14.00">v39 (mutable seen$5.has @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
195 +<polygon fill="none" stroke="black" points="2604.1,-396 2137.33,-396 2137.33,-360 2604.1,-360 2604.1,-396"/>
196 +<text text-anchor="middle" x="2370.72" y="-373.8" font-family="Times,serif" font-size="14.00">v39 (mutable seen$5.has @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
197 </g>
198 <!-- v6&#45;&gt;v39 -->
199 <g id="edge10" class="edge">
200 <title>v6&#45;&gt;v39</title>
201 -<path fill="none" stroke="black" d="M2491.14,-434.55C2491.14,-426.12 2491.14,-415.77 2491.14,-406.3"/>
202 -<polygon fill="black" stroke="black" points="2494.64,-406.13 2491.14,-396.13 2487.64,-406.13 2494.64,-406.13"/>
201 +<path fill="none" stroke="black" d="M2370.72,-434.55C2370.72,-426.12 2370.72,-415.77 2370.72,-406.3"/>
202 +<polygon fill="black" stroke="black" points="2374.22,-406.13 2370.72,-396.13 2367.22,-406.13 2374.22,-406.13"/>
203 </g>
204 <!-- v56 -->
205 <g id="node15" class="node">
206 <title>v56</title>
207 -<polygon fill="none" stroke="black" points="2341.88,-324 2118.41,-324 2118.41,-288 2341.88,-288 2341.88,-324"/>
208 -<text text-anchor="middle" x="2230.14" y="-301.8" font-family="Times,serif" font-size="14.00">v56 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
207 +<polygon fill="none" stroke="black" points="2221.46,-324 1997.98,-324 1997.98,-288 2221.46,-288 2221.46,-324"/>
208 +<text text-anchor="middle" x="2109.72" y="-301.8" font-family="Times,serif" font-size="14.00">v56 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
209 </g>
210 <!-- v6&#45;&gt;v56 -->
211 <g id="edge11" class="edge">
212 <title>v6&#45;&gt;v56</title>
213 -<path fill="none" stroke="black" d="M2362.33,-434.79C2313.65,-425.81 2265.93,-413.06 2249.14,-396 2233.34,-379.94 2229.25,-354.16 2228.72,-334.47"/>
214 -<polygon fill="black" stroke="black" points="2232.22,-334.26 2228.75,-324.26 2225.22,-334.25 2232.22,-334.26"/>
213 +<path fill="none" stroke="black" d="M2241.91,-434.79C2193.23,-425.81 2145.5,-413.06 2128.72,-396 2112.92,-379.94 2108.83,-354.16 2108.3,-334.47"/>
214 +<polygon fill="black" stroke="black" points="2111.8,-334.26 2108.32,-324.26 2104.8,-334.25 2111.8,-334.26"/>
215 </g>
216 <!-- v59 -->
217 <g id="node16" class="node">
218 <title>v59</title>
219 -<polygon fill="none" stroke="black" points="2613.88,-180 2390.41,-180 2390.41,-144 2613.88,-144 2613.88,-180"/>
220 -<text text-anchor="middle" x="2502.14" y="-157.8" font-family="Times,serif" font-size="14.00">v59 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
219 +<polygon fill="none" stroke="black" points="2493.46,-180 2269.98,-180 2269.98,-144 2493.46,-144 2493.46,-180"/>
220 +<text text-anchor="middle" x="2381.72" y="-157.8" font-family="Times,serif" font-size="14.00">v59 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
221 </g>
222 <!-- v6&#45;&gt;v59 -->
223 <g id="edge12" class="edge">
224 <title>v6&#45;&gt;v59</title>
225 -<path fill="none" stroke="black" d="M2630.68,-434.76C2676.42,-426.1 2719.15,-413.59 2733.14,-396 2800.81,-310.95 2639.3,-223.25 2552.63,-184.09"/>
226 -<polygon fill="black" stroke="black" points="2554.03,-180.89 2543.47,-180.01 2551.18,-187.28 2554.03,-180.89"/>
225 +<path fill="none" stroke="black" d="M2510.26,-434.76C2556,-426.1 2598.73,-413.59 2612.72,-396 2680.39,-310.95 2518.87,-223.25 2432.21,-184.09"/>
226 +<polygon fill="black" stroke="black" points="2433.61,-180.89 2423.05,-180.01 2430.76,-187.28 2433.61,-180.89"/>
227 </g>
228 <!-- v39&#45;&gt;v56 -->
229 <g id="edge33" class="edge">
230 <title>v39&#45;&gt;v56</title>
231 -<path fill="none" stroke="black" d="M2427.63,-359.97C2390.21,-349.93 2342.71,-337.19 2303.67,-326.72"/>
232 -<polygon fill="black" stroke="black" points="2304.51,-323.32 2293.94,-324.11 2302.69,-330.08 2304.51,-323.32"/>
231 +<path fill="none" stroke="black" d="M2307.21,-359.97C2269.79,-349.93 2222.29,-337.19 2183.25,-326.72"/>
232 +<polygon fill="black" stroke="black" points="2184.08,-323.32 2173.52,-324.11 2182.27,-330.08 2184.08,-323.32"/>
233 </g>
234 <!-- v39&#45;&gt;v59 -->
235 <g id="edge34" class="edge">
236 <title>v39&#45;&gt;v59</title>
237 -<path fill="none" stroke="black" d="M2488.15,-359.85C2486.52,-322.83 2490.75,-235.18 2496.04,-190.39"/>
238 -<polygon fill="black" stroke="black" points="2499.55,-190.6 2497.37,-180.23 2492.6,-189.69 2499.55,-190.6"/>
237 +<path fill="none" stroke="black" d="M2367.72,-359.85C2366.09,-322.83 2370.32,-235.18 2375.62,-190.39"/>
238 +<polygon fill="black" stroke="black" points="2379.12,-190.6 2376.95,-180.23 2372.18,-189.69 2379.12,-190.6"/>
239 </g>
240 <!-- v43 -->
241 <g id="node52" class="node">
242 <title>v43</title>
243 -<polygon fill="none" stroke="black" points="2465.13,-252 1995.16,-252 1995.16,-216 2465.13,-216 2465.13,-252"/>
244 -<text text-anchor="middle" x="2230.14" y="-229.8" font-family="Times,serif" font-size="14.00">v43 (mutable seen$5.add @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
243 +<polygon fill="none" stroke="black" points="2344.71,-252 1874.73,-252 1874.73,-216 2344.71,-216 2344.71,-252"/>
244 +<text text-anchor="middle" x="2109.72" y="-229.8" font-family="Times,serif" font-size="14.00">v43 (mutable seen$5.add @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
245 </g>
246 <!-- v56&#45;&gt;v43 -->
247 <g id="edge50" class="edge">
248 <title>v56&#45;&gt;v43</title>
249 -<path fill="none" stroke="black" d="M2224.23,-287.7C2223.43,-279.98 2223.21,-270.71 2223.55,-262.11"/>
250 -<polygon fill="black" stroke="black" points="2227.04,-262.32 2224.25,-252.1 2220.06,-261.84 2227.04,-262.32"/>
249 +<path fill="none" stroke="black" d="M2103.8,-287.7C2103.01,-279.98 2102.78,-270.71 2103.12,-262.11"/>
250 +<polygon fill="black" stroke="black" points="2106.62,-262.32 2103.82,-252.1 2099.63,-261.84 2106.62,-262.32"/>
251 </g>
252 <!-- v59&#45;&gt;v39 -->
253 <g id="edge53" class="edge">
254 <title>v59&#45;&gt;v39</title>
255 -<path fill="none" stroke="black" d="M2505.14,-180.23C2506.77,-217.32 2502.53,-304.98 2497.23,-349.71"/>
256 -<polygon fill="black" stroke="black" points="2493.73,-349.48 2495.9,-359.85 2500.67,-350.39 2493.73,-349.48"/>
255 +<path fill="none" stroke="black" d="M2384.72,-180.23C2386.34,-217.32 2382.1,-304.98 2376.81,-349.71"/>
256 +<polygon fill="black" stroke="black" points="2373.31,-349.48 2375.48,-359.85 2380.25,-350.39 2373.31,-349.48"/>
257 </g>
258 <!-- v7 -->
259 <g id="node17" class="node">
260 <title>v7</title>
261 -<polygon fill="none" stroke="black" points="3174.01,-470.8 2902.28,-470.8 2902.28,-434.8 3174.01,-434.8 3174.01,-470.8"/>
262 -<text text-anchor="middle" x="3038.14" y="-448.6" font-family="Times,serif" font-size="14.00">v7 (readonly $9 @ readonly $9 = 0) &lt;assign&gt;</text>
261 +<polygon fill="none" stroke="black" points="3071.76,-470.8 2763.68,-470.8 2763.68,-434.8 3071.76,-434.8 3071.76,-470.8"/>
262 +<text text-anchor="middle" x="2917.72" y="-448.6" font-family="Times,serif" font-size="14.00">v7 (readonly $9 @ Const readonly $9 = 0) &lt;assign&gt;</text>
263 </g>
264 <!-- v9 -->
265 <g id="node18" class="node">
266 <title>v9</title>
267 -<polygon fill="none" stroke="black" points="3296.03,-396 2780.26,-396 2780.26,-360 3296.03,-360 3296.03,-396"/>
268 -<text text-anchor="middle" x="3038.14" y="-373.8" font-family="Times,serif" font-size="14.00">v9 (mutable $9 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
267 +<polygon fill="none" stroke="black" points="3175.6,-396 2659.83,-396 2659.83,-360 3175.6,-360 3175.6,-396"/>
268 +<text text-anchor="middle" x="2917.72" y="-373.8" font-family="Times,serif" font-size="14.00">v9 (mutable $9 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
269 </g>
270 <!-- v7&#45;&gt;v9 -->
271 <g id="edge13" class="edge">
272 <title>v7&#45;&gt;v9</title>
273 -<path fill="none" stroke="black" d="M3038.14,-434.55C3038.14,-426.12 3038.14,-415.77 3038.14,-406.3"/>
274 -<polygon fill="black" stroke="black" points="3041.64,-406.13 3038.14,-396.13 3034.64,-406.13 3041.64,-406.13"/>
273 +<path fill="none" stroke="black" d="M2917.72,-434.55C2917.72,-426.12 2917.72,-415.77 2917.72,-406.3"/>
274 +<polygon fill="black" stroke="black" points="2921.22,-406.13 2917.72,-396.13 2914.22,-406.13 2921.22,-406.13"/>
275 </g>
276 <!-- v8 -->
277 <g id="node19" class="node">
278 <title>v8</title>
279 -<polygon fill="none" stroke="black" points="3764.68,-470.8 3191.6,-470.8 3191.6,-434.8 3764.68,-434.8 3764.68,-470.8"/>
280 -<text text-anchor="middle" x="3478.14" y="-448.6" font-family="Times,serif" font-size="14.00">v8 (mutable Math$8.max @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
279 +<polygon fill="none" stroke="black" points="3663.26,-470.8 3090.18,-470.8 3090.18,-434.8 3663.26,-434.8 3663.26,-470.8"/>
280 +<text text-anchor="middle" x="3376.72" y="-448.6" font-family="Times,serif" font-size="14.00">v8 (mutable Math$8.max @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
281 </g>
282 <!-- v11 -->
283 <g id="node20" class="node">
284 <title>v11</title>
285 -<polygon fill="none" stroke="black" points="4437.18,-470.8 3783.11,-470.8 3783.11,-434.8 4437.18,-434.8 4437.18,-470.8"/>
286 -<text text-anchor="middle" x="4110.14" y="-448.6" font-family="Times,serif" font-size="14.00">v11 (readonly max$7 @ readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;assign&gt;</text>
285 +<polygon fill="none" stroke="black" points="4371.93,-470.8 3681.51,-470.8 3681.51,-434.8 4371.93,-434.8 4371.93,-470.8"/>
286 +<text text-anchor="middle" x="4026.72" y="-448.6" font-family="Times,serif" font-size="14.00">v11 (readonly max$7 @ Const readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;assign&gt;</text>
287 </g>
288 <!-- v52 -->
289 <g id="node21" class="node">
290 <title>v52</title>
291 -<polygon fill="none" stroke="black" points="4212.57,-396 3655.72,-396 3655.72,-360 4212.57,-360 4212.57,-396"/>
292 -<text text-anchor="middle" x="3934.14" y="-373.8" font-family="Times,serif" font-size="14.00">v52 (readonly max$7 @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
291 +<polygon fill="none" stroke="black" points="4147.15,-396 3590.29,-396 3590.29,-360 4147.15,-360 4147.15,-396"/>
292 +<text text-anchor="middle" x="3868.72" y="-373.8" font-family="Times,serif" font-size="14.00">v52 (readonly max$7 @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
293 </g>
294 <!-- v11&#45;&gt;v52 -->
295 <g id="edge14" class="edge">
296 <title>v11&#45;&gt;v52</title>
297 -<path fill="none" stroke="black" d="M4068.88,-434.73C4043.81,-424.36 4011.62,-411.05 3984.99,-400.03"/>
298 -<polygon fill="black" stroke="black" points="3986.03,-396.68 3975.45,-396.09 3983.36,-403.14 3986.03,-396.68"/>
297 +<path fill="none" stroke="black" d="M3989.68,-434.73C3967.37,-424.45 3938.78,-411.28 3915,-400.32"/>
298 +<polygon fill="black" stroke="black" points="3916.35,-397.09 3905.8,-396.09 3913.42,-403.45 3916.35,-397.09"/>
299 </g>
300 <!-- v72 -->
301 <g id="node22" class="node">
302 <title>v72</title>
303 -<polygon fill="none" stroke="black" points="4045.88,-324 3822.41,-324 3822.41,-288 4045.88,-288 4045.88,-324"/>
304 -<text text-anchor="middle" x="3934.14" y="-301.8" font-family="Times,serif" font-size="14.00">v72 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
303 +<polygon fill="none" stroke="black" points="3980.46,-324 3756.98,-324 3756.98,-288 3980.46,-288 3980.46,-324"/>
304 +<text text-anchor="middle" x="3868.72" y="-301.8" font-family="Times,serif" font-size="14.00">v72 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
305 </g>
306 <!-- v11&#45;&gt;v72 -->
307 <g id="edge15" class="edge">
308 <title>v11&#45;&gt;v72</title>
309 -<path fill="none" stroke="black" d="M4172.41,-434.7C4191.38,-426.26 4210.11,-413.9 4221.14,-396 4229.54,-382.38 4231.38,-372.3 4221.14,-360 4199.75,-334.29 4124.11,-321.01 4055.85,-314.16"/>
310 -<polygon fill="black" stroke="black" points="4056.13,-310.68 4045.84,-313.2 4055.46,-317.64 4056.13,-310.68"/>
309 +<path fill="none" stroke="black" d="M4104.56,-434.72C4124.57,-426.42 4143.79,-414.15 4155.72,-396 4164.5,-382.63 4165.95,-372.3 4155.72,-360 4134.33,-334.29 4058.68,-321.01 3990.43,-314.16"/>
310 +<polygon fill="black" stroke="black" points="3990.71,-310.68 3980.42,-313.2 3990.03,-317.64 3990.71,-310.68"/>
311 </g>
312 <!-- v52&#45;&gt;v72 -->
313 <g id="edge47" class="edge">
314 <title>v52&#45;&gt;v72</title>
315 -<path fill="none" stroke="black" d="M3928.23,-359.7C3927.43,-351.98 3927.21,-342.71 3927.55,-334.11"/>
316 -<polygon fill="black" stroke="black" points="3931.04,-334.32 3928.25,-324.1 3924.06,-333.84 3931.04,-334.32"/>
315 +<path fill="none" stroke="black" d="M3862.8,-359.7C3862.01,-351.98 3861.78,-342.71 3862.12,-334.11"/>
316 +<polygon fill="black" stroke="black" points="3865.62,-334.32 3862.82,-324.1 3858.63,-333.84 3865.62,-334.32"/>
317 </g>
318 <!-- v72&#45;&gt;v52 -->
319 <g id="edge56" class="edge">
320 <title>v72&#45;&gt;v52</title>
321 -<path fill="none" stroke="black" d="M3940.04,-324.1C3940.84,-331.79 3941.08,-341.05 3940.75,-349.67"/>
322 -<polygon fill="black" stroke="black" points="3937.25,-349.48 3940.06,-359.7 3944.24,-349.96 3937.25,-349.48"/>
321 +<path fill="none" stroke="black" d="M3874.61,-324.1C3875.42,-331.79 3875.66,-341.05 3875.32,-349.67"/>
322 +<polygon fill="black" stroke="black" points="3871.83,-349.48 3874.63,-359.7 3878.81,-349.96 3871.83,-349.48"/>
323 </g>
324 <!-- v13 -->
325 <g id="node23" class="node">
326 <title>v13</title>
327 -<polygon fill="none" stroke="black" points="4762.79,-470.8 4455.5,-470.8 4455.5,-434.8 4762.79,-434.8 4762.79,-470.8"/>
328 -<text text-anchor="middle" x="4609.14" y="-448.6" font-family="Times,serif" font-size="14.00">v13 (readonly $11 @ readonly $11 = null) &lt;assign&gt;</text>
327 +<polygon fill="none" stroke="black" points="4733.54,-470.8 4389.9,-470.8 4389.9,-434.8 4733.54,-434.8 4733.54,-470.8"/>
328 +<text text-anchor="middle" x="4561.72" y="-448.6" font-family="Times,serif" font-size="14.00">v13 (readonly $11 @ Const readonly $11 = null) &lt;assign&gt;</text>
329 </g>
330 <!-- v15 -->
331 <g id="node24" class="node">
332 <title>v15</title>
333 -<polygon fill="none" stroke="black" points="4820.46,-396 4397.83,-396 4397.83,-360 4820.46,-360 4820.46,-396"/>
334 -<text text-anchor="middle" x="4609.14" y="-373.8" font-family="Times,serif" font-size="14.00">v15 (readonly $11 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
333 +<polygon fill="none" stroke="black" points="4773.03,-396 4350.41,-396 4350.41,-360 4773.03,-360 4773.03,-396"/>
334 +<text text-anchor="middle" x="4561.72" y="-373.8" font-family="Times,serif" font-size="14.00">v15 (readonly $11 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
335 </g>
336 <!-- v13&#45;&gt;v15 -->
337 <g id="edge16" class="edge">
338 <title>v13&#45;&gt;v15</title>
339 -<path fill="none" stroke="black" d="M4609.14,-434.55C4609.14,-426.12 4609.14,-415.77 4609.14,-406.3"/>
340 -<polygon fill="black" stroke="black" points="4612.64,-406.13 4609.14,-396.13 4605.64,-406.13 4612.64,-406.13"/>
339 +<path fill="none" stroke="black" d="M4561.72,-434.55C4561.72,-426.12 4561.72,-415.77 4561.72,-406.3"/>
340 +<polygon fill="black" stroke="black" points="4565.22,-406.13 4561.72,-396.13 4558.22,-406.13 4565.22,-406.13"/>
341 </g>
342 <!-- v14 -->
343 <g id="node25" class="node">
344 <title>v14</title>
345 -<polygon fill="none" stroke="black" points="5535.61,-470.8 5100.68,-470.8 5100.68,-434.8 5535.61,-434.8 5535.61,-470.8"/>
346 -<text text-anchor="middle" x="5318.14" y="-448.6" font-family="Times,serif" font-size="14.00">v14 (frozen item$10 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
345 +<polygon fill="none" stroke="black" points="5488.19,-470.8 5053.25,-470.8 5053.25,-434.8 5488.19,-434.8 5488.19,-470.8"/>
346 +<text text-anchor="middle" x="5270.72" y="-448.6" font-family="Times,serif" font-size="14.00">v14 (frozen item$10 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
347 </g>
348 <!-- v40 -->
349 <g id="node26" class="node">
350 <title>v40</title>
351 -<polygon fill="none" stroke="black" points="5281.53,-396 4838.76,-396 4838.76,-360 5281.53,-360 5281.53,-396"/>
352 -<text text-anchor="middle" x="5060.14" y="-373.8" font-family="Times,serif" font-size="14.00">v40 (frozen item$10 @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
351 +<polygon fill="none" stroke="black" points="5234.1,-396 4791.33,-396 4791.33,-360 5234.1,-360 5234.1,-396"/>
352 +<text text-anchor="middle" x="5012.72" y="-373.8" font-family="Times,serif" font-size="14.00">v40 (frozen item$10 @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
353 </g>
354 <!-- v14&#45;&gt;v40 -->
355 <g id="edge17" class="edge">
356 <title>v14&#45;&gt;v40</title>
357 -<path fill="none" stroke="black" d="M5257.65,-434.73C5219.54,-423.98 5170.19,-410.05 5130.35,-398.81"/>
358 -<polygon fill="black" stroke="black" points="5131.28,-395.43 5120.7,-396.09 5129.37,-402.17 5131.28,-395.43"/>
357 +<path fill="none" stroke="black" d="M5210.23,-434.73C5172.12,-423.98 5122.76,-410.05 5082.92,-398.81"/>
358 +<polygon fill="black" stroke="black" points="5083.85,-395.43 5073.28,-396.09 5081.95,-402.17 5083.85,-395.43"/>
359 </g>
360 <!-- v57 -->
361 <g id="node27" class="node">
362 <title>v57</title>
363 -<polygon fill="none" stroke="black" points="5429.88,-324 5206.41,-324 5206.41,-288 5429.88,-288 5429.88,-324"/>
364 -<text text-anchor="middle" x="5318.14" y="-301.8" font-family="Times,serif" font-size="14.00">v57 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
363 +<polygon fill="none" stroke="black" points="5382.46,-324 5158.98,-324 5158.98,-288 5382.46,-288 5382.46,-324"/>
364 +<text text-anchor="middle" x="5270.72" y="-301.8" font-family="Times,serif" font-size="14.00">v57 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
365 </g>
366 <!-- v14&#45;&gt;v57 -->
367 <g id="edge18" class="edge">
368 <title>v14&#45;&gt;v57</title>
369 -<path fill="none" stroke="black" d="M5313.59,-434.62C5310.98,-409.8 5310.7,-363.66 5312.74,-334.19"/>
370 -<polygon fill="black" stroke="black" points="5316.23,-334.42 5313.59,-324.16 5309.25,-333.82 5316.23,-334.42"/>
369 +<path fill="none" stroke="black" d="M5266.16,-434.62C5263.56,-409.8 5263.27,-363.66 5265.31,-334.19"/>
370 +<polygon fill="black" stroke="black" points="5268.8,-334.42 5266.17,-324.16 5261.83,-333.82 5268.8,-334.42"/>
371 </g>
372 <!-- v40&#45;&gt;v57 -->
373 <g id="edge35" class="edge">
374 <title>v40&#45;&gt;v57</title>
375 -<path fill="none" stroke="black" d="M5122.93,-359.97C5159.76,-349.97 5206.47,-337.3 5244.97,-326.85"/>
376 -<polygon fill="black" stroke="black" points="5246.34,-330.11 5255.08,-324.11 5244.51,-323.35 5246.34,-330.11"/>
375 +<path fill="none" stroke="black" d="M5075.5,-359.97C5112.34,-349.97 5159.05,-337.3 5197.54,-326.85"/>
376 +<polygon fill="black" stroke="black" points="5198.92,-330.11 5207.65,-324.11 5197.09,-323.35 5198.92,-330.11"/>
377 </g>
378 <!-- v57&#45;&gt;v14 -->
379 <g id="edge52" class="edge">
380 <title>v57&#45;&gt;v14</title>
381 -<path fill="none" stroke="black" d="M5322.7,-324.16C5325.31,-348.96 5325.59,-395.1 5323.55,-424.58"/>
382 -<polygon fill="black" stroke="black" points="5320.06,-424.36 5322.7,-434.62 5327.04,-424.95 5320.06,-424.36"/>
381 +<path fill="none" stroke="black" d="M5275.27,-324.16C5277.88,-348.96 5278.17,-395.1 5276.13,-424.58"/>
382 +<polygon fill="black" stroke="black" points="5272.64,-424.36 5275.27,-434.62 5279.61,-424.95 5272.64,-424.36"/>
383 </g>
384 <!-- v44 -->
385 <g id="node53" class="node">
386 <title>v44</title>
387 -<polygon fill="none" stroke="black" points="5415.08,-252 4971.21,-252 4971.21,-216 5415.08,-216 5415.08,-252"/>
388 -<text text-anchor="middle" x="5193.14" y="-229.8" font-family="Times,serif" font-size="14.00">v44 (frozen item$10 @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
387 +<polygon fill="none" stroke="black" points="5367.66,-252 4923.78,-252 4923.78,-216 5367.66,-216 5367.66,-252"/>
388 +<text text-anchor="middle" x="5145.72" y="-229.8" font-family="Times,serif" font-size="14.00">v44 (frozen item$10 @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
389 </g>
390 <!-- v57&#45;&gt;v44 -->
391 <g id="edge51" class="edge">
392 <title>v57&#45;&gt;v44</title>
393 -<path fill="none" stroke="black" d="M5287.57,-287.88C5271.07,-278.64 5250.52,-267.13 5232.81,-257.21"/>
394 -<polygon fill="black" stroke="black" points="5234.28,-254.02 5223.84,-252.19 5230.85,-260.13 5234.28,-254.02"/>
393 +<path fill="none" stroke="black" d="M5240.14,-287.88C5223.65,-278.64 5203.1,-267.13 5185.38,-257.21"/>
394 +<polygon fill="black" stroke="black" points="5186.85,-254.02 5176.42,-252.19 5183.43,-260.13 5186.85,-254.02"/>
395 </g>
396 <!-- v16 -->
397 <g id="node28" class="node">
398 <title>v16</title>
399 -<polygon fill="none" stroke="black" points="6035.56,-470.8 5552.73,-470.8 5552.73,-434.8 6035.56,-434.8 6035.56,-470.8"/>
400 -<text text-anchor="middle" x="5794.14" y="-448.6" font-family="Times,serif" font-size="14.00">v16 (frozen $12 @ frozen $12 = Binary frozen item$10 == readonly $11) &lt;assign&gt;</text>
399 +<polygon fill="none" stroke="black" points="6024.81,-470.8 5506.63,-470.8 5506.63,-434.8 6024.81,-434.8 6024.81,-470.8"/>
400 +<text text-anchor="middle" x="5765.72" y="-448.6" font-family="Times,serif" font-size="14.00">v16 (frozen $12 @ Const frozen $12 = Binary frozen item$10 == readonly $11) &lt;assign&gt;</text>
401 </g>
402 <!-- v17 -->
403 <g id="node29" class="node">
404 <title>v17</title>
405 -<polygon fill="none" stroke="black" points="5979.77,-396 5608.52,-396 5608.52,-360 5979.77,-360 5979.77,-396"/>
406 -<text text-anchor="middle" x="5794.14" y="-373.8" font-family="Times,serif" font-size="14.00">v17 (frozen $12 @ If (frozen $12) then:bb8 else:bb9) &lt;update&gt;</text>
405 +<polygon fill="none" stroke="black" points="5951.35,-396 5580.09,-396 5580.09,-360 5951.35,-360 5951.35,-396"/>
406 +<text text-anchor="middle" x="5765.72" y="-373.8" font-family="Times,serif" font-size="14.00">v17 (frozen $12 @ If (frozen $12) then:bb8 else:bb9) &lt;update&gt;</text>
407 </g>
408 <!-- v16&#45;&gt;v17 -->
409 <g id="edge19" class="edge">
410 <title>v16&#45;&gt;v17</title>
411 -<path fill="none" stroke="black" d="M5794.14,-434.55C5794.14,-426.12 5794.14,-415.77 5794.14,-406.3"/>
412 -<polygon fill="black" stroke="black" points="5797.64,-406.13 5794.14,-396.13 5790.64,-406.13 5797.64,-406.13"/>
411 +<path fill="none" stroke="black" d="M5765.72,-434.55C5765.72,-426.12 5765.72,-415.77 5765.72,-406.3"/>
412 +<polygon fill="black" stroke="black" points="5769.22,-406.13 5765.72,-396.13 5762.22,-406.13 5769.22,-406.13"/>
413 </g>
414 <!-- v38 -->
415 <g id="node30" class="node">
416 <title>v38</title>
417 -<polygon fill="none" stroke="black" points="5953.8,-324 5634.48,-324 5634.48,-288 5953.8,-288 5953.8,-324"/>
418 -<text text-anchor="middle" x="5794.14" y="-301.8" font-family="Times,serif" font-size="14.00">v38 (frozen $13 @ frozen $13 = frozen $12) &lt;assign&gt;</text>
417 +<polygon fill="none" stroke="black" points="5943.55,-324 5587.88,-324 5587.88,-288 5943.55,-288 5943.55,-324"/>
418 +<text text-anchor="middle" x="5765.72" y="-301.8" font-family="Times,serif" font-size="14.00">v38 (frozen $13 @ Const frozen $13 = frozen $12) &lt;assign&gt;</text>
419 </g>
420 <!-- v17&#45;&gt;v38 -->
421 <g id="edge20" class="edge">
422 <title>v17&#45;&gt;v38</title>
423 -<path fill="none" stroke="black" d="M5794.14,-359.7C5794.14,-351.98 5794.14,-342.71 5794.14,-334.11"/>
424 -<polygon fill="black" stroke="black" points="5797.64,-334.1 5794.14,-324.1 5790.64,-334.1 5797.64,-334.1"/>
423 +<path fill="none" stroke="black" d="M5765.72,-359.7C5765.72,-351.98 5765.72,-342.71 5765.72,-334.11"/>
424 +<polygon fill="black" stroke="black" points="5769.22,-334.1 5765.72,-324.1 5762.22,-334.1 5769.22,-334.1"/>
425 </g>
426 <!-- v42 -->
427 <g id="node50" class="node">
428 <title>v42</title>
429 -<polygon fill="none" stroke="black" points="6197.77,-252 5826.52,-252 5826.52,-216 6197.77,-216 6197.77,-252"/>
430 -<text text-anchor="middle" x="6012.14" y="-229.8" font-family="Times,serif" font-size="14.00">v42 (frozen $13 @ If (frozen $13) then:bb1 else:bb4) &lt;update&gt;</text>
429 +<polygon fill="none" stroke="black" points="6187.35,-252 5816.09,-252 5816.09,-216 6187.35,-216 6187.35,-252"/>
430 +<text text-anchor="middle" x="6001.72" y="-229.8" font-family="Times,serif" font-size="14.00">v42 (frozen $13 @ If (frozen $13) then:bb1 else:bb4) &lt;update&gt;</text>
431 </g>
432 <!-- v38&#45;&gt;v42 -->
433 <g id="edge32" class="edge">
434 <title>v38&#45;&gt;v42</title>
435 -<path fill="none" stroke="black" d="M5847.19,-287.97C5877.92,-278.1 5916.78,-265.62 5949.06,-255.25"/>
436 -<polygon fill="black" stroke="black" points="5950.4,-258.5 5958.86,-252.11 5948.26,-251.84 5950.4,-258.5"/>
435 +<path fill="none" stroke="black" d="M5823.15,-287.97C5856.7,-278.01 5899.21,-265.41 5934.33,-254.99"/>
436 +<polygon fill="black" stroke="black" points="5935.44,-258.31 5944.03,-252.11 5933.45,-251.6 5935.44,-258.31"/>
437 </g>
438 <!-- v25 -->
439 <g id="node33" class="node">
440 <title>v25</title>
441 -<polygon fill="none" stroke="black" points="1561.63,-36 982.66,-36 982.66,0 1561.63,0 1561.63,-36"/>
442 -<text text-anchor="middle" x="1272.14" y="-13.8" font-family="Times,serif" font-size="14.00">v25 (frozen count$17 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
441 +<polygon fill="none" stroke="black" points="1595.21,-36 1016.23,-36 1016.23,0 1595.21,0 1595.21,-36"/>
442 +<text text-anchor="middle" x="1305.72" y="-13.8" font-family="Times,serif" font-size="14.00">v25 (frozen count$17 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
443 </g>
444 <!-- v19&#45;&gt;v25 -->
445 <g id="edge23" class="edge">
446 <title>v19&#45;&gt;v25</title>
447 -<path fill="none" stroke="black" d="M1272.14,-71.7C1272.14,-63.98 1272.14,-54.71 1272.14,-46.11"/>
448 -<polygon fill="black" stroke="black" points="1275.64,-46.1 1272.14,-36.1 1268.64,-46.1 1275.64,-46.1"/>
447 +<path fill="none" stroke="black" d="M1305.72,-71.7C1305.72,-63.98 1305.72,-54.71 1305.72,-46.11"/>
448 +<polygon fill="black" stroke="black" points="1309.22,-46.1 1305.72,-36.1 1302.22,-46.1 1309.22,-46.1"/>
449 </g>
450 <!-- v20 -->
451 <g id="node34" class="node">
452 <title>v20</title>
453 -<polygon fill="none" stroke="black" points="6560.83,-470.8 6245.46,-470.8 6245.46,-434.8 6560.83,-434.8 6560.83,-470.8"/>
454 -<text text-anchor="middle" x="6403.14" y="-448.6" font-family="Times,serif" font-size="14.00">v20 (readonly $18 @ readonly $18 = &quot;div&quot;) &lt;assign&gt;</text>
453 +<polygon fill="none" stroke="black" points="6550.58,-470.8 6198.86,-470.8 6198.86,-434.8 6550.58,-434.8 6550.58,-470.8"/>
454 +<text text-anchor="middle" x="6374.72" y="-448.6" font-family="Times,serif" font-size="14.00">v20 (readonly $18 @ Const readonly $18 = &quot;div&quot;) &lt;assign&gt;</text>
455 </g>
456 <!-- v30 -->
457 <g id="node35" class="node">
458 <title>v30</title>
459 -<polygon fill="none" stroke="black" points="6808.57,-396 5997.72,-396 5997.72,-360 6808.57,-360 6808.57,-396"/>
460 -<text text-anchor="middle" x="6403.14" y="-373.8" font-family="Times,serif" font-size="14.00">v30 (frozen $18 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
459 +<polygon fill="none" stroke="black" points="6780.14,-396 5969.3,-396 5969.3,-360 6780.14,-360 6780.14,-396"/>
460 +<text text-anchor="middle" x="6374.72" y="-373.8" font-family="Times,serif" font-size="14.00">v30 (frozen $18 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
461 </g>
462 <!-- v20&#45;&gt;v30 -->
463 <g id="edge24" class="edge">
464 <title>v20&#45;&gt;v30</title>
465 -<path fill="none" stroke="black" d="M6403.14,-434.55C6403.14,-426.12 6403.14,-415.77 6403.14,-406.3"/>
466 -<polygon fill="black" stroke="black" points="6406.64,-406.13 6403.14,-396.13 6399.64,-406.13 6406.64,-406.13"/>
465 +<path fill="none" stroke="black" d="M6374.72,-434.55C6374.72,-426.12 6374.72,-415.77 6374.72,-406.3"/>
466 +<polygon fill="black" stroke="black" points="6378.22,-406.13 6374.72,-396.13 6371.22,-406.13 6378.22,-406.13"/>
467 </g>
468 <!-- v21 -->
469 <g id="node36" class="node">
470 <title>v21</title>
471 -<polygon fill="none" stroke="black" points="7348.27,-473.4 7116.02,-473.4 7116.02,-432.2 7348.27,-432.2 7348.27,-473.4"/>
472 -<text text-anchor="middle" x="7232.14" y="-457" font-family="Times,serif" font-size="14.00">v21 (readonly $19 @ readonly $19 = &quot;</text>
473 -<text text-anchor="middle" x="7232.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
471 +<polygon fill="none" stroke="black" points="7338.02,-473.4 7069.42,-473.4 7069.42,-432.2 7338.02,-432.2 7338.02,-473.4"/>
472 +<text text-anchor="middle" x="7203.72" y="-457" font-family="Times,serif" font-size="14.00">v21 (readonly $19 @ Const readonly $19 = &quot;</text>
473 +<text text-anchor="middle" x="7203.72" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
474 </g>
475 <!-- v31 -->
476 <g id="node37" class="node">
477 <title>v31</title>
478 -<polygon fill="none" stroke="black" points="7637.57,-396 6826.72,-396 6826.72,-360 7637.57,-360 7637.57,-396"/>
479 -<text text-anchor="middle" x="7232.14" y="-373.8" font-family="Times,serif" font-size="14.00">v31 (frozen $19 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
478 +<polygon fill="none" stroke="black" points="7609.14,-396 6798.3,-396 6798.3,-360 7609.14,-360 7609.14,-396"/>
479 +<text text-anchor="middle" x="7203.72" y="-373.8" font-family="Times,serif" font-size="14.00">v31 (frozen $19 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
480 </g>
481 <!-- v21&#45;&gt;v31 -->
482 <g id="edge25" class="edge">
483 <title>v21&#45;&gt;v31</title>
484 -<path fill="none" stroke="black" d="M7232.14,-431.91C7232.14,-424.09 7232.14,-414.99 7232.14,-406.56"/>
485 -<polygon fill="black" stroke="black" points="7235.64,-406.39 7232.14,-396.39 7228.64,-406.39 7235.64,-406.39"/>
484 +<path fill="none" stroke="black" d="M7203.72,-431.91C7203.72,-424.09 7203.72,-414.99 7203.72,-406.56"/>
485 +<polygon fill="black" stroke="black" points="7207.22,-406.39 7203.72,-396.39 7200.22,-406.39 7207.22,-406.39"/>
486 </g>
487 <!-- v22 -->
488 <g id="node38" class="node">
489 <title>v22</title>
490 -<polygon fill="none" stroke="black" points="8084.94,-470.8 7773.35,-470.8 7773.35,-434.8 8084.94,-434.8 8084.94,-470.8"/>
491 -<text text-anchor="middle" x="7929.14" y="-448.6" font-family="Times,serif" font-size="14.00">v22 (readonly $20 @ readonly $20 = &quot;h1&quot;) &lt;assign&gt;</text>
490 +<polygon fill="none" stroke="black" points="8074.69,-470.8 7726.75,-470.8 7726.75,-434.8 8074.69,-434.8 8074.69,-470.8"/>
491 +<text text-anchor="middle" x="7900.72" y="-448.6" font-family="Times,serif" font-size="14.00">v22 (readonly $20 @ Const readonly $20 = &quot;h1&quot;) &lt;assign&gt;</text>
492 </g>
493 <!-- v24 -->
494 <g id="node39" class="node">
495 <title>v24</title>
496 -<polygon fill="none" stroke="black" points="8203.03,-396 7655.26,-396 7655.26,-360 8203.03,-360 8203.03,-396"/>
497 -<text text-anchor="middle" x="7929.14" y="-373.8" font-family="Times,serif" font-size="14.00">v24 (frozen $20 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
496 +<polygon fill="none" stroke="black" points="8174.6,-396 7626.84,-396 7626.84,-360 8174.6,-360 8174.6,-396"/>
497 +<text text-anchor="middle" x="7900.72" y="-373.8" font-family="Times,serif" font-size="14.00">v24 (frozen $20 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
498 </g>
499 <!-- v22&#45;&gt;v24 -->
500 <g id="edge26" class="edge">
501 <title>v22&#45;&gt;v24</title>
502 -<path fill="none" stroke="black" d="M7929.14,-434.55C7929.14,-426.12 7929.14,-415.77 7929.14,-406.3"/>
503 -<polygon fill="black" stroke="black" points="7932.64,-406.13 7929.14,-396.13 7925.64,-406.13 7932.64,-406.13"/>
502 +<path fill="none" stroke="black" d="M7900.72,-434.55C7900.72,-426.12 7900.72,-415.77 7900.72,-406.3"/>
503 +<polygon fill="black" stroke="black" points="7904.22,-406.13 7900.72,-396.13 7897.22,-406.13 7904.22,-406.13"/>
504 </g>
505 <!-- v23 -->
506 <g id="node40" class="node">
507 <title>v23</title>
508 -<polygon fill="none" stroke="black" points="8661.04,-470.8 8329.25,-470.8 8329.25,-434.8 8661.04,-434.8 8661.04,-470.8"/>
509 -<text text-anchor="middle" x="8495.14" y="-448.6" font-family="Times,serif" font-size="14.00">v23 (readonly $21 @ readonly $21 = &quot; Items&quot;) &lt;assign&gt;</text>
508 +<polygon fill="none" stroke="black" points="8650.79,-470.8 8282.65,-470.8 8282.65,-434.8 8650.79,-434.8 8650.79,-470.8"/>
509 +<text text-anchor="middle" x="8466.72" y="-448.6" font-family="Times,serif" font-size="14.00">v23 (readonly $21 @ Const readonly $21 = &quot; Items&quot;) &lt;assign&gt;</text>
510 </g>
511 <!-- v26 -->
512 <g id="node41" class="node">
513 <title>v26</title>
514 -<polygon fill="none" stroke="black" points="8769.03,-396 8221.26,-396 8221.26,-360 8769.03,-360 8769.03,-396"/>
515 -<text text-anchor="middle" x="8495.14" y="-373.8" font-family="Times,serif" font-size="14.00">v26 (frozen $21 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
514 +<polygon fill="none" stroke="black" points="8740.6,-396 8192.84,-396 8192.84,-360 8740.6,-360 8740.6,-396"/>
515 +<text text-anchor="middle" x="8466.72" y="-373.8" font-family="Times,serif" font-size="14.00">v26 (frozen $21 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
516 </g>
517 <!-- v23&#45;&gt;v26 -->
518 <g id="edge27" class="edge">
519 <title>v23&#45;&gt;v26</title>
520 -<path fill="none" stroke="black" d="M8495.14,-434.55C8495.14,-426.12 8495.14,-415.77 8495.14,-406.3"/>
521 -<polygon fill="black" stroke="black" points="8498.64,-406.13 8495.14,-396.13 8491.64,-406.13 8498.64,-406.13"/>
520 +<path fill="none" stroke="black" d="M8466.72,-434.55C8466.72,-426.12 8466.72,-415.77 8466.72,-406.3"/>
521 +<polygon fill="black" stroke="black" points="8470.22,-406.13 8466.72,-396.13 8463.22,-406.13 8470.22,-406.13"/>
522 </g>
523 <!-- v27 -->
524 <g id="node42" class="node">
525 <title>v27</title>
526 -<polygon fill="none" stroke="black" points="9515.81,-470.8 8868.48,-470.8 8868.48,-434.8 9515.81,-434.8 9515.81,-470.8"/>
527 -<text text-anchor="middle" x="9192.14" y="-448.6" font-family="Times,serif" font-size="14.00">v27 (readonly $22 @ readonly $22 = JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;assign&gt;</text>
526 +<polygon fill="none" stroke="black" points="9505.56,-470.8 8821.87,-470.8 8821.87,-434.8 9505.56,-434.8 9505.56,-470.8"/>
527 +<text text-anchor="middle" x="9163.72" y="-448.6" font-family="Times,serif" font-size="14.00">v27 (readonly $22 @ Const readonly $22 = JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;assign&gt;</text>
528 </g>
529 <!-- v32 -->
530 <g id="node43" class="node">
531 <title>v32</title>
532 -<polygon fill="none" stroke="black" points="9597.57,-396 8786.72,-396 8786.72,-360 9597.57,-360 9597.57,-396"/>
533 -<text text-anchor="middle" x="9192.14" y="-373.8" font-family="Times,serif" font-size="14.00">v32 (frozen $22 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
532 +<polygon fill="none" stroke="black" points="9569.14,-396 8758.3,-396 8758.3,-360 9569.14,-360 9569.14,-396"/>
533 +<text text-anchor="middle" x="9163.72" y="-373.8" font-family="Times,serif" font-size="14.00">v32 (frozen $22 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
534 </g>
535 <!-- v27&#45;&gt;v32 -->
536 <g id="edge28" class="edge">
537 <title>v27&#45;&gt;v32</title>
538 -<path fill="none" stroke="black" d="M9192.14,-434.55C9192.14,-426.12 9192.14,-415.77 9192.14,-406.3"/>
539 -<polygon fill="black" stroke="black" points="9195.64,-406.13 9192.14,-396.13 9188.64,-406.13 9195.64,-406.13"/>
538 +<path fill="none" stroke="black" d="M9163.72,-434.55C9163.72,-426.12 9163.72,-415.77 9163.72,-406.3"/>
539 +<polygon fill="black" stroke="black" points="9167.22,-406.13 9163.72,-396.13 9160.22,-406.13 9167.22,-406.13"/>
540 </g>
541 <!-- v28 -->
542 <g id="node44" class="node">
543 <title>v28</title>
544 -<polygon fill="none" stroke="black" points="10137.27,-473.4 9905.02,-473.4 9905.02,-432.2 10137.27,-432.2 10137.27,-473.4"/>
545 -<text text-anchor="middle" x="10021.14" y="-457" font-family="Times,serif" font-size="14.00">v28 (readonly $23 @ readonly $23 = &quot;</text>
546 -<text text-anchor="middle" x="10021.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
544 +<polygon fill="none" stroke="black" points="10127.02,-473.4 9858.42,-473.4 9858.42,-432.2 10127.02,-432.2 10127.02,-473.4"/>
545 +<text text-anchor="middle" x="9992.72" y="-457" font-family="Times,serif" font-size="14.00">v28 (readonly $23 @ Const readonly $23 = &quot;</text>
546 +<text text-anchor="middle" x="9992.72" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
547 </g>
548 <!-- v33 -->
549 <g id="node45" class="node">
550 <title>v33</title>
551 -<polygon fill="none" stroke="black" points="10426.57,-396 9615.72,-396 9615.72,-360 10426.57,-360 10426.57,-396"/>
552 -<text text-anchor="middle" x="10021.14" y="-373.8" font-family="Times,serif" font-size="14.00">v33 (frozen $23 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
551 +<polygon fill="none" stroke="black" points="10398.14,-396 9587.3,-396 9587.3,-360 10398.14,-360 10398.14,-396"/>
552 +<text text-anchor="middle" x="9992.72" y="-373.8" font-family="Times,serif" font-size="14.00">v33 (frozen $23 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
553 </g>
554 <!-- v28&#45;&gt;v33 -->
555 <g id="edge29" class="edge">
556 <title>v28&#45;&gt;v33</title>
557 -<path fill="none" stroke="black" d="M10021.14,-431.91C10021.14,-424.09 10021.14,-414.99 10021.14,-406.56"/>
558 -<polygon fill="black" stroke="black" points="10024.64,-406.39 10021.14,-396.39 10017.64,-406.39 10024.64,-406.39"/>
557 +<path fill="none" stroke="black" d="M9992.72,-431.91C9992.72,-424.09 9992.72,-414.99 9992.72,-406.56"/>
558 +<polygon fill="black" stroke="black" points="9996.22,-406.39 9992.72,-396.39 9989.22,-406.39 9996.22,-406.39"/>
559 </g>
560 <!-- v29 -->
561 <g id="node46" class="node">
562 <title>v29</title>
563 -<polygon fill="none" stroke="black" points="10966.27,-473.4 10734.02,-473.4 10734.02,-432.2 10966.27,-432.2 10966.27,-473.4"/>
564 -<text text-anchor="middle" x="10850.14" y="-457" font-family="Times,serif" font-size="14.00">v29 (readonly $24 @ readonly $24 = &quot;</text>
565 -<text text-anchor="middle" x="10850.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
563 +<polygon fill="none" stroke="black" points="10956.02,-473.4 10687.42,-473.4 10687.42,-432.2 10956.02,-432.2 10956.02,-473.4"/>
564 +<text text-anchor="middle" x="10821.72" y="-457" font-family="Times,serif" font-size="14.00">v29 (readonly $24 @ Const readonly $24 = &quot;</text>
565 +<text text-anchor="middle" x="10821.72" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
566 </g>
567 <!-- v35 -->
568 <g id="node47" class="node">
569 <title>v35</title>
570 -<polygon fill="none" stroke="black" points="11255.57,-396 10444.72,-396 10444.72,-360 11255.57,-360 11255.57,-396"/>
571 -<text text-anchor="middle" x="10850.14" y="-373.8" font-family="Times,serif" font-size="14.00">v35 (frozen $24 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
570 +<polygon fill="none" stroke="black" points="11227.14,-396 10416.3,-396 10416.3,-360 11227.14,-360 11227.14,-396"/>
571 +<text text-anchor="middle" x="10821.72" y="-373.8" font-family="Times,serif" font-size="14.00">v35 (frozen $24 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
572 </g>
573 <!-- v29&#45;&gt;v35 -->
574 <g id="edge30" class="edge">
575 <title>v29&#45;&gt;v35</title>
576 -<path fill="none" stroke="black" d="M10850.14,-431.91C10850.14,-424.09 10850.14,-414.99 10850.14,-406.56"/>
577 -<polygon fill="black" stroke="black" points="10853.64,-406.39 10850.14,-396.39 10846.64,-406.39 10853.64,-406.39"/>
576 +<path fill="none" stroke="black" d="M10821.72,-431.91C10821.72,-424.09 10821.72,-414.99 10821.72,-406.56"/>
577 +<polygon fill="black" stroke="black" points="10825.22,-406.39 10821.72,-396.39 10818.22,-406.39 10825.22,-406.39"/>
578 </g>
579 <!-- v36 -->
580 <g id="node48" class="node">
581 <title>v36</title>
582 -<polygon fill="none" stroke="black" points="11894.35,-470.8 10983.94,-470.8 10983.94,-434.8 11894.35,-434.8 11894.35,-470.8"/>
583 -<text text-anchor="middle" x="11439.14" y="-448.6" font-family="Times,serif" font-size="14.00">v36 (readonly $25 @ readonly $25 = JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;assign&gt;</text>
582 +<polygon fill="none" stroke="black" points="11921.1,-470.8 10974.33,-470.8 10974.33,-434.8 11921.1,-434.8 11921.1,-470.8"/>
583 +<text text-anchor="middle" x="11447.72" y="-448.6" font-family="Times,serif" font-size="14.00">v36 (readonly $25 @ Const readonly $25 = JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;assign&gt;</text>
584 </g>
585 <!-- v37 -->
586 <g id="node49" class="node">
587 <title>v37</title>
588 -<polygon fill="none" stroke="black" points="11583.58,-396 11294.71,-396 11294.71,-360 11583.58,-360 11583.58,-396"/>
589 -<text text-anchor="middle" x="11439.14" y="-373.8" font-family="Times,serif" font-size="14.00">v37 (frozen $25 @ Return frozen $25) &lt;update&gt;</text>
588 +<polygon fill="none" stroke="black" points="11592.15,-396 11303.29,-396 11303.29,-360 11592.15,-360 11592.15,-396"/>
589 +<text text-anchor="middle" x="11447.72" y="-373.8" font-family="Times,serif" font-size="14.00">v37 (frozen $25 @ Return frozen $25) &lt;update&gt;</text>
590 </g>
591 <!-- v36&#45;&gt;v37 -->
592 <g id="edge31" class="edge">
593 <title>v36&#45;&gt;v37</title>
594 -<path fill="none" stroke="black" d="M11439.14,-434.55C11439.14,-426.12 11439.14,-415.77 11439.14,-406.3"/>
595 -<polygon fill="black" stroke="black" points="11442.64,-406.13 11439.14,-396.13 11435.64,-406.13 11442.64,-406.13"/>
594 +<path fill="none" stroke="black" d="M11447.72,-434.55C11447.72,-426.12 11447.72,-415.77 11447.72,-406.3"/>
595 +<polygon fill="black" stroke="black" points="11451.22,-406.13 11447.72,-396.13 11444.22,-406.13 11451.22,-406.13"/>
596 </g>
597 <!-- v41 -->
598 <g id="node51" class="node">
599 <title>v41</title>
600 -<polygon fill="none" stroke="black" points="6488.43,-324 5971.86,-324 5971.86,-288 6488.43,-288 6488.43,-324"/>
601 -<text text-anchor="middle" x="6230.14" y="-301.8" font-family="Times,serif" font-size="14.00">v41 (readonly $13 @ readonly $13 = Call mutable seen$5.has(frozen item$10)) &lt;assign&gt;</text>
600 +<polygon fill="none" stroke="black" points="6514.18,-324 5961.26,-324 5961.26,-288 6514.18,-288 6514.18,-324"/>
601 +<text text-anchor="middle" x="6237.72" y="-301.8" font-family="Times,serif" font-size="14.00">v41 (readonly $13 @ Const readonly $13 = Call mutable seen$5.has(frozen item$10)) &lt;assign&gt;</text>
602 </g>
603 <!-- v41&#45;&gt;v42 -->
604 <g id="edge36" class="edge">
605 <title>v41&#45;&gt;v42</title>
606 -<path fill="none" stroke="black" d="M6177.09,-287.97C6146.37,-278.1 6107.51,-265.62 6075.22,-255.25"/>
607 -<polygon fill="black" stroke="black" points="6076.02,-251.84 6065.43,-252.11 6073.88,-258.5 6076.02,-251.84"/>
606 +<path fill="none" stroke="black" d="M6180.29,-287.97C6146.74,-278.01 6104.23,-265.41 6069.11,-254.99"/>
607 +<polygon fill="black" stroke="black" points="6069.99,-251.6 6059.41,-252.11 6068,-258.31 6069.99,-251.6"/>
608 </g>
609 <!-- v43&#45;&gt;v56 -->
610 <g id="edge38" class="edge">
611 <title>v43&#45;&gt;v56</title>
612 -<path fill="none" stroke="black" d="M2236.04,-252.1C2236.84,-259.79 2237.08,-269.05 2236.75,-277.67"/>
613 -<polygon fill="black" stroke="black" points="2233.25,-277.48 2236.06,-287.7 2240.24,-277.96 2233.25,-277.48"/>
612 +<path fill="none" stroke="black" d="M2115.61,-252.1C2116.42,-259.79 2116.66,-269.05 2116.32,-277.67"/>
613 +<polygon fill="black" stroke="black" points="2112.83,-277.48 2115.63,-287.7 2119.81,-277.96 2112.83,-277.48"/>
614 </g>
615 <!-- v43&#45;&gt;v59 -->
616 <g id="edge37" class="edge">
617 <title>v43&#45;&gt;v59</title>
618 -<path fill="none" stroke="black" d="M2296.33,-215.97C2335.41,-205.91 2385.04,-193.14 2425.77,-182.65"/>
619 -<polygon fill="black" stroke="black" points="2426.84,-185.99 2435.66,-180.11 2425.1,-179.21 2426.84,-185.99"/>
618 +<path fill="none" stroke="black" d="M2175.91,-215.97C2214.99,-205.91 2264.62,-193.14 2305.35,-182.65"/>
619 +<polygon fill="black" stroke="black" points="2306.42,-185.99 2315.23,-180.11 2304.67,-179.21 2306.42,-185.99"/>
620 </g>
621 <!-- v47 -->
622 <g id="node54" class="node">
623 <title>v47</title>
624 -<polygon fill="none" stroke="black" points="5564.5,-180 5071.79,-180 5071.79,-144 5564.5,-144 5564.5,-180"/>
625 -<text text-anchor="middle" x="5318.14" y="-157.8" font-family="Times,serif" font-size="14.00">v47 (frozen item$10 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
624 +<polygon fill="none" stroke="black" points="5517.07,-180 5024.36,-180 5024.36,-144 5517.07,-144 5517.07,-180"/>
625 +<text text-anchor="middle" x="5270.72" y="-157.8" font-family="Times,serif" font-size="14.00">v47 (frozen item$10 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
626 </g>
627 <!-- v44&#45;&gt;v47 -->
628 <g id="edge39" class="edge">
629 <title>v44&#45;&gt;v47</title>
630 -<path fill="none" stroke="black" d="M5223.72,-215.88C5240.22,-206.64 5260.77,-195.13 5278.48,-185.21"/>
631 -<polygon fill="black" stroke="black" points="5280.43,-188.13 5287.45,-180.19 5277.01,-182.02 5280.43,-188.13"/>
630 +<path fill="none" stroke="black" d="M5176.3,-215.88C5192.79,-206.64 5213.34,-195.13 5231.06,-185.21"/>
631 +<polygon fill="black" stroke="black" points="5233.01,-188.13 5240.02,-180.19 5229.59,-182.02 5233.01,-188.13"/>
632 </g>
633 <!-- v47&#45;&gt;v57 -->
634 <g id="edge41" class="edge">
635 <title>v47&#45;&gt;v57</title>
636 -<path fill="none" stroke="black" d="M5379.55,-180.05C5396.98,-188.03 5413.98,-199.55 5424.14,-216 5432.56,-229.61 5432.56,-238.39 5424.14,-252 5415.8,-265.5 5402.87,-275.67 5388.87,-283.3"/>
637 -<polygon fill="black" stroke="black" points="5386.93,-280.35 5379.55,-287.95 5390.06,-286.62 5386.93,-280.35"/>
636 +<path fill="none" stroke="black" d="M5332.12,-180.05C5349.56,-188.03 5366.55,-199.55 5376.72,-216 5385.13,-229.61 5385.13,-238.39 5376.72,-252 5368.38,-265.5 5355.45,-275.67 5341.44,-283.3"/>
637 +<polygon fill="black" stroke="black" points="5339.51,-280.35 5332.12,-287.95 5342.63,-286.62 5339.51,-280.35"/>
638 </g>
639 <!-- v45 -->
640 <g id="node55" class="node">
641 <title>v45</title>
642 -<polygon fill="none" stroke="black" points="12227.83,-470.8 11912.46,-470.8 11912.46,-434.8 12227.83,-434.8 12227.83,-470.8"/>
643 -<text text-anchor="middle" x="12070.14" y="-448.6" font-family="Times,serif" font-size="14.00">v45 (readonly $14 @ readonly $14 = &quot;div&quot;) &lt;assign&gt;</text>
642 +<polygon fill="none" stroke="black" points="12290.58,-470.8 11938.86,-470.8 11938.86,-434.8 12290.58,-434.8 12290.58,-470.8"/>
643 +<text text-anchor="middle" x="12114.72" y="-448.6" font-family="Times,serif" font-size="14.00">v45 (readonly $14 @ Const readonly $14 = &quot;div&quot;) &lt;assign&gt;</text>
644 </g>
645 <!-- v46 -->
646 <g id="node56" class="node">
647 <title>v46</title>
648 -<polygon fill="none" stroke="black" points="12304.12,-396 11836.17,-396 11836.17,-360 12304.12,-360 12304.12,-396"/>
649 -<text text-anchor="middle" x="12070.14" y="-373.8" font-family="Times,serif" font-size="14.00">v46 (frozen $14 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
648 +<polygon fill="none" stroke="black" points="12348.69,-396 11880.75,-396 11880.75,-360 12348.69,-360 12348.69,-396"/>
649 +<text text-anchor="middle" x="12114.72" y="-373.8" font-family="Times,serif" font-size="14.00">v46 (frozen $14 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
650 </g>
651 <!-- v45&#45;&gt;v46 -->
652 <g id="edge40" class="edge">
653 <title>v45&#45;&gt;v46</title>
654 -<path fill="none" stroke="black" d="M12070.14,-434.55C12070.14,-426.12 12070.14,-415.77 12070.14,-406.3"/>
655 -<polygon fill="black" stroke="black" points="12073.64,-406.13 12070.14,-396.13 12066.64,-406.13 12073.64,-406.13"/>
654 +<path fill="none" stroke="black" d="M12114.72,-434.55C12114.72,-426.12 12114.72,-415.77 12114.72,-406.3"/>
655 +<polygon fill="black" stroke="black" points="12118.22,-406.13 12114.72,-396.13 12111.22,-406.13 12118.22,-406.13"/>
656 </g>
657 <!-- v48 -->
658 <g id="node57" class="node">
659 <title>v48</title>
660 -<polygon fill="none" stroke="black" points="12842.9,-470.8 12275.39,-470.8 12275.39,-434.8 12842.9,-434.8 12842.9,-470.8"/>
661 -<text text-anchor="middle" x="12559.14" y="-448.6" font-family="Times,serif" font-size="14.00">v48 (readonly $15 @ readonly $15 = JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;assign&gt;</text>
660 +<polygon fill="none" stroke="black" points="12911.65,-470.8 12307.79,-470.8 12307.79,-434.8 12911.65,-434.8 12911.65,-470.8"/>
661 +<text text-anchor="middle" x="12609.72" y="-448.6" font-family="Times,serif" font-size="14.00">v48 (readonly $15 @ Const readonly $15 = JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;assign&gt;</text>
662 </g>
663 <!-- v50 -->
664 <g id="node58" class="node">
665 <title>v50</title>
666 -<polygon fill="none" stroke="black" points="12796.43,-396 12321.86,-396 12321.86,-360 12796.43,-360 12796.43,-396"/>
667 -<text text-anchor="middle" x="12559.14" y="-373.8" font-family="Times,serif" font-size="14.00">v50 (mutable $15 @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
666 +<polygon fill="none" stroke="black" points="12847.01,-396 12372.43,-396 12372.43,-360 12847.01,-360 12847.01,-396"/>
667 +<text text-anchor="middle" x="12609.72" y="-373.8" font-family="Times,serif" font-size="14.00">v50 (mutable $15 @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
668 </g>
669 <!-- v48&#45;&gt;v50 -->
670 <g id="edge42" class="edge">
671 <title>v48&#45;&gt;v50</title>
672 -<path fill="none" stroke="black" d="M12559.14,-434.55C12559.14,-426.12 12559.14,-415.77 12559.14,-406.3"/>
673 -<polygon fill="black" stroke="black" points="12562.64,-406.13 12559.14,-396.13 12555.64,-406.13 12562.64,-406.13"/>
672 +<path fill="none" stroke="black" d="M12609.72,-434.55C12609.72,-426.12 12609.72,-415.77 12609.72,-406.3"/>
673 +<polygon fill="black" stroke="black" points="12613.22,-406.13 12609.72,-396.13 12606.22,-406.13 12613.22,-406.13"/>
674 </g>
675 <!-- v51&#45;&gt;v18 -->
676 <g id="edge44" class="edge">
677 <title>v51&#45;&gt;v18</title>
678 -<path fill="none" stroke="black" d="M1428.73,-287.84C1448.1,-268.51 1481.76,-237.06 1515.14,-216 1534.99,-203.48 1558.31,-192.5 1579.14,-183.83"/>
679 -<polygon fill="black" stroke="black" points="1580.58,-187.03 1588.52,-180.01 1577.94,-180.54 1580.58,-187.03"/>
678 +<path fill="none" stroke="black" d="M1471.31,-287.84C1490.68,-268.51 1524.34,-237.06 1557.72,-216 1577.57,-203.48 1600.88,-192.5 1621.72,-183.83"/>
679 +<polygon fill="black" stroke="black" points="1623.16,-187.03 1631.1,-180.01 1620.52,-180.54 1623.16,-187.03"/>
680 </g>
681 <!-- v51&#45;&gt;v62 -->
682 <g id="edge45" class="edge">
683 <title>v51&#45;&gt;v62</title>
684 -<path fill="none" stroke="black" d="M1466.65,-287.97C1498.36,-278.06 1538.5,-265.51 1571.76,-255.12"/>
685 -<polygon fill="black" stroke="black" points="1572.89,-258.43 1581.39,-252.11 1570.8,-251.75 1572.89,-258.43"/>
684 +<path fill="none" stroke="black" d="M1509.23,-287.97C1540.94,-278.06 1581.07,-265.51 1614.33,-255.12"/>
685 +<polygon fill="black" stroke="black" points="1615.46,-258.43 1623.96,-252.11 1613.38,-251.75 1615.46,-258.43"/>
686 </g>
687 <!-- v51&#45;&gt;v71 -->
688 <g id="edge46" class="edge">
689 <title>v51&#45;&gt;v71</title>
690 -<path fill="none" stroke="black" d="M1326,-287.97C1274.07,-277.7 1207.84,-264.6 1154.23,-254"/>
691 -<polygon fill="black" stroke="black" points="1154.86,-250.56 1144.37,-252.05 1153.5,-257.42 1154.86,-250.56"/>
690 +<path fill="none" stroke="black" d="M1368.57,-287.97C1316.65,-277.7 1250.42,-264.6 1196.8,-254"/>
691 +<polygon fill="black" stroke="black" points="1197.43,-250.56 1186.94,-252.05 1196.07,-257.42 1197.43,-250.56"/>
692 </g>
693 <!-- v53 -->
694 <g id="node60" class="node">
695 <title>v53</title>
696 -<polygon fill="none" stroke="black" points="13460.07,-470.8 12860.22,-470.8 12860.22,-434.8 13460.07,-434.8 13460.07,-470.8"/>
697 -<text text-anchor="middle" x="13160.14" y="-448.6" font-family="Times,serif" font-size="14.00">v53 (frozen $16 @ frozen $16 = Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;assign&gt;</text>
696 +<polygon fill="none" stroke="black" points="13565.32,-470.8 12930.12,-470.8 12930.12,-434.8 13565.32,-434.8 13565.32,-470.8"/>
697 +<text text-anchor="middle" x="13247.72" y="-448.6" font-family="Times,serif" font-size="14.00">v53 (frozen $16 @ Const frozen $16 = Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;assign&gt;</text>
698 </g>
699 <!-- v54 -->
700 <g id="node61" class="node">
701 <title>v54</title>
702 -<polygon fill="none" stroke="black" points="13345.77,-396 12974.52,-396 12974.52,-360 13345.77,-360 13345.77,-396"/>
703 -<text text-anchor="middle" x="13160.14" y="-373.8" font-family="Times,serif" font-size="14.00">v54 (frozen $16 @ If (frozen $16) then:bb2 else:bb1) &lt;update&gt;</text>
702 +<polygon fill="none" stroke="black" points="13433.35,-396 13062.09,-396 13062.09,-360 13433.35,-360 13433.35,-396"/>
703 +<text text-anchor="middle" x="13247.72" y="-373.8" font-family="Times,serif" font-size="14.00">v54 (frozen $16 @ If (frozen $16) then:bb2 else:bb1) &lt;update&gt;</text>
704 </g>
705 <!-- v53&#45;&gt;v54 -->
706 <g id="edge48" class="edge">
707 <title>v53&#45;&gt;v54</title>
708 -<path fill="none" stroke="black" d="M13160.14,-434.55C13160.14,-426.12 13160.14,-415.77 13160.14,-406.3"/>
709 -<polygon fill="black" stroke="black" points="13163.64,-406.13 13160.14,-396.13 13156.64,-406.13 13163.64,-406.13"/>
708 +<path fill="none" stroke="black" d="M13247.72,-434.55C13247.72,-426.12 13247.72,-415.77 13247.72,-406.3"/>
709 +<polygon fill="black" stroke="black" points="13251.22,-406.13 13247.72,-396.13 13244.22,-406.13 13251.22,-406.13"/>
710 </g>
711 <!-- v55 -->
712 <g id="node62" class="node">
713 <title>v55</title>
714 -<polygon fill="none" stroke="black" points="567.86,-470.8 300.43,-470.8 300.43,-434.8 567.86,-434.8 567.86,-470.8"/>
715 -<text text-anchor="middle" x="434.14" y="-448.6" font-family="Times,serif" font-size="14.00">v55 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
714 +<polygon fill="none" stroke="black" points="583.43,-470.8 316.01,-470.8 316.01,-434.8 583.43,-434.8 583.43,-470.8"/>
715 +<text text-anchor="middle" x="449.72" y="-448.6" font-family="Times,serif" font-size="14.00">v55 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
716 </g>
717 <!-- v55&#45;&gt;v0 -->
718 <g id="edge49" class="edge">
719 <title>v55&#45;&gt;v0</title>
720 -<path fill="none" stroke="black" d="M434.14,-434.55C434.14,-426.12 434.14,-415.77 434.14,-406.3"/>
721 -<polygon fill="black" stroke="black" points="437.64,-406.13 434.14,-396.13 430.64,-406.13 437.64,-406.13"/>
720 +<path fill="none" stroke="black" d="M449.72,-434.55C449.72,-426.12 449.72,-415.77 449.72,-406.3"/>
721 +<polygon fill="black" stroke="black" points="453.22,-406.13 449.72,-396.13 446.22,-406.13 453.22,-406.13"/>
722 </g>
723 </g>
724 </svg>
compiler/forget/src/__tests__/fixtures/hir-svg/switch.svg
+99 -99
@@ -4,298 +4,298 @@
4 <!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 -->
6 <!-- Title: BuildDefUseGraph Pages: 1 -->
7 -<svg width="5273pt" height="476pt"
8 - viewBox="0.00 0.00 5272.64 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7 +<svg width="5435pt" height="476pt"
8 + viewBox="0.00 0.00 5434.75 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 472)">
10 <title>BuildDefUseGraph</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-472 5268.64,-472 5268.64,4 -4,4"/>
11 +<polygon fill="white" stroke="none" points="-4,4 -4,-472 5430.75,-472 5430.75,4 -4,4"/>
12 <!-- v0 -->
13 <g id="node1" class="node">
14 <title>v0</title>
15 -<polygon fill="none" stroke="black" points="801.01,-468 476.34,-468 476.34,-432 801.01,-432 801.01,-468"/>
16 -<text text-anchor="middle" x="638.67" y="-445.8" font-family="Times,serif" font-size="14.00">v0 (readonly x$2 @ readonly x$2 = Array []) &lt;assign&gt;</text>
15 +<polygon fill="none" stroke="black" points="866.19,-468 519.21,-468 519.21,-432 866.19,-432 866.19,-468"/>
16 +<text text-anchor="middle" x="692.7" y="-445.8" font-family="Times,serif" font-size="14.00">v0 (readonly x$2 @ Let readonly x$2 = Array []) &lt;assign&gt;</text>
17 </g>
18 <!-- v7 -->
19 <g id="node2" class="node">
20 <title>v7</title>
21 -<polygon fill="none" stroke="black" points="611.1,-396 154.24,-396 154.24,-360 611.1,-360 611.1,-396"/>
22 -<text text-anchor="middle" x="382.67" y="-373.8" font-family="Times,serif" font-size="14.00">v7 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
21 +<polygon fill="none" stroke="black" points="665.13,-396 208.26,-396 208.26,-360 665.13,-360 665.13,-396"/>
22 +<text text-anchor="middle" x="436.7" y="-373.8" font-family="Times,serif" font-size="14.00">v7 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
23 </g>
24 <!-- v0&#45;&gt;v7 -->
25 <g id="edge1" class="edge">
26 <title>v0&#45;&gt;v7</title>
27 -<path fill="none" stroke="black" d="M576.37,-431.97C539.83,-421.97 493.48,-409.3 455.28,-398.85"/>
28 -<polygon fill="black" stroke="black" points="455.82,-395.37 445.25,-396.11 453.97,-402.12 455.82,-395.37"/>
27 +<path fill="none" stroke="black" d="M630.4,-431.97C593.85,-421.97 547.5,-409.3 509.31,-398.85"/>
28 +<polygon fill="black" stroke="black" points="509.84,-395.37 499.27,-396.11 508,-402.12 509.84,-395.37"/>
29 </g>
30 <!-- v12 -->
31 <g id="node3" class="node">
32 <title>v12</title>
33 -<polygon fill="none" stroke="black" points="583.46,-252 309.89,-252 309.89,-216 583.46,-216 583.46,-252"/>
34 -<text text-anchor="middle" x="446.67" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (readonly x$2 @ readonly x$2) &lt;update&gt;</text>
33 +<polygon fill="none" stroke="black" points="637.48,-252 363.91,-252 363.91,-216 637.48,-216 637.48,-252"/>
34 +<text text-anchor="middle" x="500.7" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (readonly x$2 @ readonly x$2) &lt;update&gt;</text>
35 </g>
36 <!-- v0&#45;&gt;v12 -->
37 <g id="edge2" class="edge">
38 <title>v0&#45;&gt;v12</title>
39 -<path fill="none" stroke="black" d="M642.19,-431.62C647.67,-399.31 654.3,-329.49 619.67,-288 608.04,-274.06 592.84,-263.72 576.28,-256.05"/>
40 -<polygon fill="black" stroke="black" points="577.52,-252.77 566.95,-252.06 574.77,-259.21 577.52,-252.77"/>
39 +<path fill="none" stroke="black" d="M696.22,-431.62C701.7,-399.31 708.32,-329.49 673.7,-288 662.06,-274.06 646.86,-263.72 630.3,-256.05"/>
40 +<polygon fill="black" stroke="black" points="631.55,-252.77 620.98,-252.06 628.8,-259.21 631.55,-252.77"/>
41 </g>
42 <!-- v15 -->
43 <g id="node4" class="node">
44 <title>v15</title>
45 -<polygon fill="none" stroke="black" points="975.63,-180 377.71,-180 377.71,-144 975.63,-144 975.63,-180"/>
46 -<text text-anchor="middle" x="676.67" y="-157.8" font-family="Times,serif" font-size="14.00">v15 (frozen x$2 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
45 +<polygon fill="none" stroke="black" points="1029.66,-180 431.73,-180 431.73,-144 1029.66,-144 1029.66,-180"/>
46 +<text text-anchor="middle" x="730.7" y="-157.8" font-family="Times,serif" font-size="14.00">v15 (frozen x$2 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
47 </g>
48 <!-- v0&#45;&gt;v15 -->
49 <g id="edge3" class="edge">
50 <title>v0&#45;&gt;v15</title>
51 -<path fill="none" stroke="black" d="M647.48,-431.81C652.25,-421.66 657.75,-408.41 660.67,-396 677.79,-323.23 678.55,-234.42 677.63,-190.42"/>
52 -<polygon fill="black" stroke="black" points="681.13,-190.15 677.37,-180.24 674.13,-190.32 681.13,-190.15"/>
51 +<path fill="none" stroke="black" d="M701.51,-431.81C706.28,-421.66 711.78,-408.41 714.7,-396 731.81,-323.23 732.57,-234.42 731.66,-190.42"/>
52 +<polygon fill="black" stroke="black" points="735.15,-190.15 731.4,-180.24 728.16,-190.32 735.15,-190.15"/>
53 </g>
54 <!-- v9 -->
55 <g id="node15" class="node">
56 <title>v9</title>
57 -<polygon fill="none" stroke="black" points="611.1,-324 154.24,-324 154.24,-288 611.1,-288 611.1,-324"/>
58 -<text text-anchor="middle" x="382.67" y="-301.8" font-family="Times,serif" font-size="14.00">v9 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
57 +<polygon fill="none" stroke="black" points="665.13,-324 208.26,-324 208.26,-288 665.13,-288 665.13,-324"/>
58 +<text text-anchor="middle" x="436.7" y="-301.8" font-family="Times,serif" font-size="14.00">v9 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
59 </g>
60 <!-- v7&#45;&gt;v9 -->
61 <g id="edge10" class="edge">
62 <title>v7&#45;&gt;v9</title>
63 -<path fill="none" stroke="black" d="M382.67,-359.7C382.67,-351.98 382.67,-342.71 382.67,-334.11"/>
64 -<polygon fill="black" stroke="black" points="386.17,-334.1 382.67,-324.1 379.17,-334.1 386.17,-334.1"/>
63 +<path fill="none" stroke="black" d="M436.7,-359.7C436.7,-351.98 436.7,-342.71 436.7,-334.11"/>
64 +<polygon fill="black" stroke="black" points="440.2,-334.1 436.7,-324.1 433.2,-334.1 440.2,-334.1"/>
65 </g>
66 <!-- v12&#45;&gt;v15 -->
67 <g id="edge15" class="edge">
68 <title>v12&#45;&gt;v15</title>
69 -<path fill="none" stroke="black" d="M502.64,-215.97C535.2,-206.06 576.41,-193.51 610.56,-183.12"/>
70 -<polygon fill="black" stroke="black" points="611.9,-186.37 620.45,-180.11 609.86,-179.67 611.9,-186.37"/>
69 +<path fill="none" stroke="black" d="M556.67,-215.97C589.22,-206.06 630.44,-193.51 664.58,-183.12"/>
70 +<polygon fill="black" stroke="black" points="665.93,-186.37 674.48,-180.11 663.89,-179.67 665.93,-186.37"/>
71 </g>
72 <!-- v13 -->
73 <g id="node18" class="node">
74 <title>v13</title>
75 -<polygon fill="none" stroke="black" points="359.51,-180 -0.17,-180 -0.17,-144 359.51,-144 359.51,-180"/>
76 -<text text-anchor="middle" x="179.67" y="-157.8" font-family="Times,serif" font-size="14.00">v13 (readonly y$3 @ readonly y$3 = readonly x$2) &lt;assign&gt;</text>
75 +<polygon fill="none" stroke="black" points="413.59,-180 -0.2,-180 -0.2,-144 413.59,-144 413.59,-180"/>
76 +<text text-anchor="middle" x="206.7" y="-157.8" font-family="Times,serif" font-size="14.00">v13 (readonly y$3 @ Reassign readonly y$3 = readonly x$2) &lt;assign&gt;</text>
77 </g>
78 <!-- v12&#45;&gt;v13 -->
79 <g id="edge14" class="edge">
80 <title>v12&#45;&gt;v13</title>
81 -<path fill="none" stroke="black" d="M381.7,-215.97C343.34,-205.91 294.62,-193.14 254.64,-182.65"/>
82 -<polygon fill="black" stroke="black" points="255.5,-179.26 244.94,-180.11 253.72,-186.03 255.5,-179.26"/>
81 +<path fill="none" stroke="black" d="M429.15,-215.97C386.57,-205.83 332.39,-192.93 288.16,-182.4"/>
82 +<polygon fill="black" stroke="black" points="288.85,-178.96 278.31,-180.05 287.22,-185.77 288.85,-178.96"/>
83 </g>
84 <!-- v1 -->
85 <g id="node5" class="node">
86 <title>v1</title>
87 -<polygon fill="none" stroke="black" points="1328.01,-180 993.33,-180 993.33,-144 1328.01,-144 1328.01,-180"/>
88 -<text text-anchor="middle" x="1160.67" y="-157.8" font-family="Times,serif" font-size="14.00">v1 (readonly y$3 @ readonly y$3 = undefined) &lt;assign&gt;</text>
87 +<polygon fill="none" stroke="black" points="1404.19,-180 1047.2,-180 1047.2,-144 1404.19,-144 1404.19,-180"/>
88 +<text text-anchor="middle" x="1225.7" y="-157.8" font-family="Times,serif" font-size="14.00">v1 (readonly y$3 @ Let readonly y$3 = undefined) &lt;assign&gt;</text>
89 </g>
90 <!-- v17 -->
91 <g id="node6" class="node">
92 <title>v17</title>
93 -<polygon fill="none" stroke="black" points="902.6,-108 438.74,-108 438.74,-72 902.6,-72 902.6,-108"/>
94 -<text text-anchor="middle" x="670.67" y="-85.8" font-family="Times,serif" font-size="14.00">v17 (mutable y$3.push @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
93 +<polygon fill="none" stroke="black" points="948.63,-108 484.76,-108 484.76,-72 948.63,-72 948.63,-108"/>
94 +<text text-anchor="middle" x="716.7" y="-85.8" font-family="Times,serif" font-size="14.00">v17 (mutable y$3.push @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
95 </g>
96 <!-- v1&#45;&gt;v17 -->
97 <g id="edge4" class="edge">
98 <title>v1&#45;&gt;v17</title>
99 -<path fill="none" stroke="black" d="M1041.43,-143.97C968.37,-133.53 874.83,-120.17 799.99,-109.47"/>
100 -<polygon fill="black" stroke="black" points="800.42,-106 790.02,-108.05 799.43,-112.93 800.42,-106"/>
99 +<path fill="none" stroke="black" d="M1101.83,-143.97C1025.93,-133.53 928.77,-120.17 851.03,-109.47"/>
100 +<polygon fill="black" stroke="black" points="851.06,-105.95 840.68,-108.05 850.1,-112.88 851.06,-105.95"/>
101 </g>
102 <!-- v20 -->
103 <g id="node23" class="node">
104 <title>v20</title>
105 -<polygon fill="none" stroke="black" points="1016.82,-36 324.52,-36 324.52,0 1016.82,0 1016.82,-36"/>
106 -<text text-anchor="middle" x="670.67" y="-13.8" font-family="Times,serif" font-size="14.00">v20 (frozen y$3 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
105 +<polygon fill="none" stroke="black" points="1062.85,-36 370.55,-36 370.55,0 1062.85,0 1062.85,-36"/>
106 +<text text-anchor="middle" x="716.7" y="-13.8" font-family="Times,serif" font-size="14.00">v20 (frozen y$3 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
107 </g>
108 <!-- v17&#45;&gt;v20 -->
109 <g id="edge19" class="edge">
110 <title>v17&#45;&gt;v20</title>
111 -<path fill="none" stroke="black" d="M670.67,-71.7C670.67,-63.98 670.67,-54.71 670.67,-46.11"/>
112 -<polygon fill="black" stroke="black" points="674.17,-46.1 670.67,-36.1 667.17,-46.1 674.17,-46.1"/>
111 +<path fill="none" stroke="black" d="M716.7,-71.7C716.7,-63.98 716.7,-54.71 716.7,-46.11"/>
112 +<polygon fill="black" stroke="black" points="720.2,-46.1 716.7,-36.1 713.2,-46.1 720.2,-46.1"/>
113 </g>
114 <!-- v2 -->
115 <g id="node7" class="node">
116 <title>v2</title>
117 -<polygon fill="none" stroke="black" points="1202.46,-468 910.88,-468 910.88,-432 1202.46,-432 1202.46,-468"/>
118 -<text text-anchor="middle" x="1056.67" y="-445.8" font-family="Times,serif" font-size="14.00">v2 (readonly $4 @ readonly $4 = false) &lt;assign&gt;</text>
117 +<polygon fill="none" stroke="black" points="1274.66,-468 946.73,-468 946.73,-432 1274.66,-432 1274.66,-468"/>
118 +<text text-anchor="middle" x="1110.7" y="-445.8" font-family="Times,serif" font-size="14.00">v2 (readonly $4 @ Const readonly $4 = false) &lt;assign&gt;</text>
119 </g>
120 <!-- v6 -->
121 <g id="node8" class="node">
122 <title>v6</title>
123 -<polygon fill="none" stroke="black" points="1408.76,-396 704.59,-396 704.59,-360 1408.76,-360 1408.76,-396"/>
124 -<text text-anchor="middle" x="1056.67" y="-373.8" font-family="Times,serif" font-size="14.00">v6 (readonly $4 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
123 +<polygon fill="none" stroke="black" points="1462.78,-396 758.61,-396 758.61,-360 1462.78,-360 1462.78,-396"/>
124 +<text text-anchor="middle" x="1110.7" y="-373.8" font-family="Times,serif" font-size="14.00">v6 (readonly $4 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
125 </g>
126 <!-- v2&#45;&gt;v6 -->
127 <g id="edge5" class="edge">
128 <title>v2&#45;&gt;v6</title>
129 -<path fill="none" stroke="black" d="M1056.67,-431.7C1056.67,-423.98 1056.67,-414.71 1056.67,-406.11"/>
130 -<polygon fill="black" stroke="black" points="1060.17,-406.1 1056.67,-396.1 1053.17,-406.1 1060.17,-406.1"/>
129 +<path fill="none" stroke="black" d="M1110.7,-431.7C1110.7,-423.98 1110.7,-414.71 1110.7,-406.11"/>
130 +<polygon fill="black" stroke="black" points="1114.2,-406.1 1110.7,-396.1 1107.2,-406.1 1114.2,-406.1"/>
131 </g>
132 <!-- v3 -->
133 <g id="node9" class="node">
134 <title>v3</title>
135 -<polygon fill="none" stroke="black" points="1921.8,-468 1635.54,-468 1635.54,-432 1921.8,-432 1921.8,-468"/>
136 -<text text-anchor="middle" x="1778.67" y="-445.8" font-family="Times,serif" font-size="14.00">v3 (readonly $5 @ readonly $5 = true) &lt;assign&gt;</text>
135 +<polygon fill="none" stroke="black" points="1994,-468 1671.39,-468 1671.39,-432 1994,-432 1994,-468"/>
136 +<text text-anchor="middle" x="1832.7" y="-445.8" font-family="Times,serif" font-size="14.00">v3 (readonly $5 @ Const readonly $5 = true) &lt;assign&gt;</text>
137 </g>
138 <!-- v5 -->
139 <g id="node10" class="node">
140 <title>v5</title>
141 -<polygon fill="none" stroke="black" points="2130.76,-396 1426.59,-396 1426.59,-360 2130.76,-360 2130.76,-396"/>
142 -<text text-anchor="middle" x="1778.67" y="-373.8" font-family="Times,serif" font-size="14.00">v5 (readonly $5 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
141 +<polygon fill="none" stroke="black" points="2184.78,-396 1480.61,-396 1480.61,-360 2184.78,-360 2184.78,-396"/>
142 +<text text-anchor="middle" x="1832.7" y="-373.8" font-family="Times,serif" font-size="14.00">v5 (readonly $5 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
143 </g>
144 <!-- v3&#45;&gt;v5 -->
145 <g id="edge6" class="edge">
146 <title>v3&#45;&gt;v5</title>
147 -<path fill="none" stroke="black" d="M1778.67,-431.7C1778.67,-423.98 1778.67,-414.71 1778.67,-406.11"/>
148 -<polygon fill="black" stroke="black" points="1782.17,-406.1 1778.67,-396.1 1775.17,-406.1 1782.17,-406.1"/>
147 +<path fill="none" stroke="black" d="M1832.7,-431.7C1832.7,-423.98 1832.7,-414.71 1832.7,-406.11"/>
148 +<polygon fill="black" stroke="black" points="1836.2,-406.1 1832.7,-396.1 1829.2,-406.1 1836.2,-406.1"/>
149 </g>
150 <!-- v4 -->
151 <g id="node11" class="node">
152 <title>v4</title>
153 -<polygon fill="none" stroke="black" points="2888.64,-396 2148.7,-396 2148.7,-360 2888.64,-360 2888.64,-396"/>
154 -<text text-anchor="middle" x="2518.67" y="-373.8" font-family="Times,serif" font-size="14.00">v4 (frozen props$1.p0 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
153 +<polygon fill="none" stroke="black" points="2942.66,-396 2202.73,-396 2202.73,-360 2942.66,-360 2942.66,-396"/>
154 +<text text-anchor="middle" x="2572.7" y="-373.8" font-family="Times,serif" font-size="14.00">v4 (frozen props$1.p0 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
155 </g>
156 <!-- v8 -->
157 <g id="node12" class="node">
158 <title>v8</title>
159 -<polygon fill="none" stroke="black" points="2488.92,-324 2030.42,-324 2030.42,-288 2488.92,-288 2488.92,-324"/>
160 -<text text-anchor="middle" x="2259.67" y="-301.8" font-family="Times,serif" font-size="14.00">v8 (frozen props$1.p2 @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
159 +<polygon fill="none" stroke="black" points="2542.95,-324 2084.45,-324 2084.45,-288 2542.95,-288 2542.95,-324"/>
160 +<text text-anchor="middle" x="2313.7" y="-301.8" font-family="Times,serif" font-size="14.00">v8 (frozen props$1.p2 @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
161 </g>
162 <!-- v4&#45;&gt;v8 -->
163 <g id="edge7" class="edge">
164 <title>v4&#45;&gt;v8</title>
165 -<path fill="none" stroke="black" d="M2455.64,-359.97C2418.51,-349.93 2371.38,-337.19 2332.64,-326.72"/>
166 -<polygon fill="black" stroke="black" points="2333.55,-323.34 2322.98,-324.11 2331.72,-330.1 2333.55,-323.34"/>
165 +<path fill="none" stroke="black" d="M2509.67,-359.97C2472.54,-349.93 2425.4,-337.19 2386.66,-326.72"/>
166 +<polygon fill="black" stroke="black" points="2387.57,-323.34 2377.01,-324.11 2385.75,-330.1 2387.57,-323.34"/>
167 </g>
168 <!-- v18 -->
169 <g id="node13" class="node">
170 <title>v18</title>
171 -<polygon fill="none" stroke="black" points="2719.42,-108 2253.92,-108 2253.92,-72 2719.42,-72 2719.42,-108"/>
172 -<text text-anchor="middle" x="2486.67" y="-85.8" font-family="Times,serif" font-size="14.00">v18 (frozen props$1.p4 @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
171 +<polygon fill="none" stroke="black" points="2773.45,-108 2307.95,-108 2307.95,-72 2773.45,-72 2773.45,-108"/>
172 +<text text-anchor="middle" x="2540.7" y="-85.8" font-family="Times,serif" font-size="14.00">v18 (frozen props$1.p4 @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
173 </g>
174 <!-- v4&#45;&gt;v18 -->
175 <g id="edge8" class="edge">
176 <title>v4&#45;&gt;v18</title>
177 -<path fill="none" stroke="black" d="M2526.56,-359.75C2530.78,-349.58 2535.53,-336.33 2537.67,-324 2551.37,-245.18 2567.57,-218.2 2537.67,-144 2533.32,-133.21 2525.61,-123.39 2517.48,-115.21"/>
178 -<polygon fill="black" stroke="black" points="2519.67,-112.46 2509.98,-108.18 2514.88,-117.57 2519.67,-112.46"/>
177 +<path fill="none" stroke="black" d="M2580.59,-359.75C2584.8,-349.58 2589.55,-336.33 2591.7,-324 2605.4,-245.18 2621.6,-218.2 2591.7,-144 2587.35,-133.21 2579.63,-123.39 2571.5,-115.21"/>
178 +<polygon fill="black" stroke="black" points="2573.69,-112.46 2564,-108.18 2568.91,-117.57 2573.69,-112.46"/>
179 </g>
180 <!-- v25 -->
181 <g id="node14" class="node">
182 <title>v25</title>
183 -<polygon fill="none" stroke="black" points="2528.41,-180 2304.93,-180 2304.93,-144 2528.41,-144 2528.41,-180"/>
184 -<text text-anchor="middle" x="2416.67" y="-157.8" font-family="Times,serif" font-size="14.00">v25 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
183 +<polygon fill="none" stroke="black" points="2582.44,-180 2358.96,-180 2358.96,-144 2582.44,-144 2582.44,-180"/>
184 +<text text-anchor="middle" x="2470.7" y="-157.8" font-family="Times,serif" font-size="14.00">v25 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
185 </g>
186 <!-- v4&#45;&gt;v25 -->
187 <g id="edge9" class="edge">
188 <title>v4&#45;&gt;v25</title>
189 -<path fill="none" stroke="black" d="M2521.14,-359.94C2524.75,-328.75 2528.23,-261.55 2499.67,-216 2491.78,-203.41 2479.67,-193.25 2467.13,-185.34"/>
190 -<polygon fill="black" stroke="black" points="2468.81,-182.27 2458.42,-180.21 2465.26,-188.3 2468.81,-182.27"/>
189 +<path fill="none" stroke="black" d="M2575.17,-359.94C2578.77,-328.75 2582.25,-261.55 2553.7,-216 2545.8,-203.41 2533.7,-193.25 2521.15,-185.34"/>
190 +<polygon fill="black" stroke="black" points="2522.84,-182.27 2512.44,-180.21 2519.29,-188.3 2522.84,-182.27"/>
191 </g>
192 <!-- v10 -->
193 <g id="node16" class="node">
194 <title>v10</title>
195 -<polygon fill="none" stroke="black" points="2490.42,-252 2024.92,-252 2024.92,-216 2490.42,-216 2490.42,-252"/>
196 -<text text-anchor="middle" x="2257.67" y="-229.8" font-family="Times,serif" font-size="14.00">v10 (frozen props$1.p3 @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
195 +<polygon fill="none" stroke="black" points="2544.45,-252 2078.95,-252 2078.95,-216 2544.45,-216 2544.45,-252"/>
196 +<text text-anchor="middle" x="2311.7" y="-229.8" font-family="Times,serif" font-size="14.00">v10 (frozen props$1.p3 @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
197 </g>
198 <!-- v8&#45;&gt;v10 -->
199 <g id="edge11" class="edge">
200 <title>v8&#45;&gt;v10</title>
201 -<path fill="none" stroke="black" d="M2259.18,-287.7C2258.96,-279.98 2258.69,-270.71 2258.45,-262.11"/>
202 -<polygon fill="black" stroke="black" points="2261.94,-262 2258.16,-252.1 2254.95,-262.2 2261.94,-262"/>
201 +<path fill="none" stroke="black" d="M2313.2,-287.7C2312.98,-279.98 2312.72,-270.71 2312.47,-262.11"/>
202 +<polygon fill="black" stroke="black" points="2315.97,-262 2312.19,-252.1 2308.97,-262.2 2315.97,-262"/>
203 </g>
204 <!-- v25&#45;&gt;v18 -->
205 <g id="edge22" class="edge">
206 <title>v25&#45;&gt;v18</title>
207 -<path fill="none" stroke="black" d="M2433.97,-143.7C2442.54,-135.14 2453.01,-124.66 2462.37,-115.3"/>
208 -<polygon fill="black" stroke="black" points="2464.97,-117.65 2469.57,-108.1 2460.02,-112.7 2464.97,-117.65"/>
207 +<path fill="none" stroke="black" d="M2488,-143.7C2496.56,-135.14 2507.04,-124.66 2516.39,-115.3"/>
208 +<polygon fill="black" stroke="black" points="2519,-117.65 2523.59,-108.1 2514.05,-112.7 2519,-117.65"/>
209 </g>
210 <!-- v9&#45;&gt;v12 -->
211 <g id="edge12" class="edge">
212 <title>v9&#45;&gt;v12</title>
213 -<path fill="none" stroke="black" d="M398.49,-287.7C406.24,-279.22 415.71,-268.86 424.2,-259.58"/>
214 -<polygon fill="black" stroke="black" points="426.87,-261.85 431.03,-252.1 421.7,-257.12 426.87,-261.85"/>
213 +<path fill="none" stroke="black" d="M452.52,-287.7C460.27,-279.22 469.74,-268.86 478.22,-259.58"/>
214 +<polygon fill="black" stroke="black" points="480.89,-261.85 485.06,-252.1 475.73,-257.12 480.89,-261.85"/>
215 </g>
216 <!-- v10&#45;&gt;v25 -->
217 <g id="edge13" class="edge">
218 <title>v10&#45;&gt;v25</title>
219 -<path fill="none" stroke="black" d="M2296.57,-215.88C2318.3,-206.31 2345.57,-194.3 2368.64,-184.15"/>
220 -<polygon fill="black" stroke="black" points="2370.16,-187.3 2377.9,-180.07 2367.34,-180.89 2370.16,-187.3"/>
219 +<path fill="none" stroke="black" d="M2350.59,-215.88C2372.33,-206.31 2399.6,-194.3 2422.66,-184.15"/>
220 +<polygon fill="black" stroke="black" points="2424.19,-187.3 2431.93,-180.07 2421.36,-180.89 2424.19,-187.3"/>
221 </g>
222 <!-- v11 -->
223 <g id="node17" class="node">
224 <title>v11</title>
225 -<polygon fill="none" stroke="black" points="3002.51,-468 2670.84,-468 2670.84,-432 3002.51,-432 3002.51,-468"/>
226 -<text text-anchor="middle" x="2836.67" y="-445.8" font-family="Times,serif" font-size="14.00">v11 (readonly y$3 @ readonly y$3 = Array []) &lt;assign&gt;</text>
225 +<polygon fill="none" stroke="black" points="3110.58,-468 2724.81,-468 2724.81,-432 3110.58,-432 3110.58,-468"/>
226 +<text text-anchor="middle" x="2917.7" y="-445.8" font-family="Times,serif" font-size="14.00">v11 (readonly y$3 @ Reassign readonly y$3 = Array []) &lt;assign&gt;</text>
227 </g>
228 <!-- v13&#45;&gt;v17 -->
229 <g id="edge16" class="edge">
230 <title>v13&#45;&gt;v17</title>
231 -<path fill="none" stroke="black" d="M299.16,-143.97C372.37,-133.53 466.1,-120.17 541.09,-109.47"/>
232 -<polygon fill="black" stroke="black" points="541.67,-112.93 551.08,-108.05 540.68,-106 541.67,-112.93"/>
231 +<path fill="none" stroke="black" d="M330.8,-143.97C406.85,-133.53 504.21,-120.17 582.1,-109.47"/>
232 +<polygon fill="black" stroke="black" points="583.04,-112.88 592.47,-108.05 582.09,-105.94 583.04,-112.88"/>
233 </g>
234 <!-- v14 -->
235 <g id="node19" class="node">
236 <title>v14</title>
237 -<polygon fill="none" stroke="black" points="3676.97,-468 3020.38,-468 3020.38,-432 3676.97,-432 3676.97,-468"/>
238 -<text text-anchor="middle" x="3348.67" y="-445.8" font-family="Times,serif" font-size="14.00">v14 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
237 +<polygon fill="none" stroke="black" points="3784.99,-468 3128.4,-468 3128.4,-432 3784.99,-432 3784.99,-468"/>
238 +<text text-anchor="middle" x="3456.7" y="-445.8" font-family="Times,serif" font-size="14.00">v14 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
239 </g>
240 <!-- v19 -->
241 <g id="node20" class="node">
242 <title>v19</title>
243 -<polygon fill="none" stroke="black" points="3724.15,-396 2973.19,-396 2973.19,-360 3724.15,-360 3724.15,-396"/>
244 -<text text-anchor="middle" x="3348.67" y="-373.8" font-family="Times,serif" font-size="14.00">v19 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
243 +<polygon fill="none" stroke="black" points="3832.18,-396 3081.22,-396 3081.22,-360 3832.18,-360 3832.18,-396"/>
244 +<text text-anchor="middle" x="3456.7" y="-373.8" font-family="Times,serif" font-size="14.00">v19 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
245 </g>
246 <!-- v14&#45;&gt;v19 -->
247 <g id="edge17" class="edge">
248 <title>v14&#45;&gt;v19</title>
249 -<path fill="none" stroke="black" d="M3348.67,-431.7C3348.67,-423.98 3348.67,-414.71 3348.67,-406.11"/>
250 -<polygon fill="black" stroke="black" points="3352.17,-406.1 3348.67,-396.1 3345.17,-406.1 3352.17,-406.1"/>
249 +<path fill="none" stroke="black" d="M3456.7,-431.7C3456.7,-423.98 3456.7,-414.71 3456.7,-406.11"/>
250 +<polygon fill="black" stroke="black" points="3460.2,-406.1 3456.7,-396.1 3453.2,-406.1 3460.2,-406.1"/>
251 </g>
252 <!-- v16 -->
253 <g id="node21" class="node">
254 <title>v16</title>
255 -<polygon fill="none" stroke="black" points="4468.41,-468 3728.94,-468 3728.94,-432 4468.41,-432 4468.41,-468"/>
256 -<text text-anchor="middle" x="4098.67" y="-445.8" font-family="Times,serif" font-size="14.00">v16 (readonly child$6 @ readonly child$6 = JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
255 +<polygon fill="none" stroke="black" points="4594.61,-468 3818.79,-468 3818.79,-432 4594.61,-432 4594.61,-468"/>
256 +<text text-anchor="middle" x="4206.7" y="-445.8" font-family="Times,serif" font-size="14.00">v16 (readonly child$6 @ Const readonly child$6 = JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
257 </g>
258 <!-- v21 -->
259 <g id="node22" class="node">
260 <title>v21</title>
261 -<polygon fill="none" stroke="black" points="4455.31,-396 3742.03,-396 3742.03,-360 4455.31,-360 4455.31,-396"/>
262 -<text text-anchor="middle" x="4098.67" y="-373.8" font-family="Times,serif" font-size="14.00">v21 (frozen child$6 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
261 +<polygon fill="none" stroke="black" points="4563.34,-396 3850.06,-396 3850.06,-360 4563.34,-360 4563.34,-396"/>
262 +<text text-anchor="middle" x="4206.7" y="-373.8" font-family="Times,serif" font-size="14.00">v21 (frozen child$6 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
263 </g>
264 <!-- v16&#45;&gt;v21 -->
265 <g id="edge18" class="edge">
266 <title>v16&#45;&gt;v21</title>
267 -<path fill="none" stroke="black" d="M4098.67,-431.7C4098.67,-423.98 4098.67,-414.71 4098.67,-406.11"/>
268 -<polygon fill="black" stroke="black" points="4102.17,-406.1 4098.67,-396.1 4095.17,-406.1 4102.17,-406.1"/>
267 +<path fill="none" stroke="black" d="M4206.7,-431.7C4206.7,-423.98 4206.7,-414.71 4206.7,-406.11"/>
268 +<polygon fill="black" stroke="black" points="4210.2,-406.1 4206.7,-396.1 4203.2,-406.1 4210.2,-406.1"/>
269 </g>
270 <!-- v22 -->
271 <g id="node24" class="node">
272 <title>v22</title>
273 -<polygon fill="none" stroke="black" points="5264.6,-468 4486.74,-468 4486.74,-432 5264.6,-432 5264.6,-468"/>
274 -<text text-anchor="middle" x="4875.67" y="-445.8" font-family="Times,serif" font-size="14.00">v22 (readonly $7 @ readonly $7 = JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
273 +<polygon fill="none" stroke="black" points="5426.81,-468 4612.59,-468 4612.59,-432 5426.81,-432 5426.81,-468"/>
274 +<text text-anchor="middle" x="5019.7" y="-445.8" font-family="Times,serif" font-size="14.00">v22 (readonly $7 @ Const readonly $7 = JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
275 </g>
276 <!-- v23 -->
277 <g id="node25" class="node">
278 <title>v23</title>
279 -<polygon fill="none" stroke="black" points="5013.1,-396 4738.24,-396 4738.24,-360 5013.1,-360 5013.1,-396"/>
280 -<text text-anchor="middle" x="4875.67" y="-373.8" font-family="Times,serif" font-size="14.00">v23 (frozen $7 @ Return frozen $7) &lt;update&gt;</text>
279 +<polygon fill="none" stroke="black" points="5157.13,-396 4882.26,-396 4882.26,-360 5157.13,-360 5157.13,-396"/>
280 +<text text-anchor="middle" x="5019.7" y="-373.8" font-family="Times,serif" font-size="14.00">v23 (frozen $7 @ Return frozen $7) &lt;update&gt;</text>
281 </g>
282 <!-- v22&#45;&gt;v23 -->
283 <g id="edge20" class="edge">
284 <title>v22&#45;&gt;v23</title>
285 -<path fill="none" stroke="black" d="M4875.67,-431.7C4875.67,-423.98 4875.67,-414.71 4875.67,-406.11"/>
286 -<polygon fill="black" stroke="black" points="4879.17,-406.1 4875.67,-396.1 4872.17,-406.1 4879.17,-406.1"/>
285 +<path fill="none" stroke="black" d="M5019.7,-431.7C5019.7,-423.98 5019.7,-414.71 5019.7,-406.11"/>
286 +<polygon fill="black" stroke="black" points="5023.2,-406.1 5019.7,-396.1 5016.2,-406.1 5023.2,-406.1"/>
287 </g>
288 <!-- v24 -->
289 <g id="node26" class="node">
290 <title>v24</title>
291 -<polygon fill="none" stroke="black" points="2652.38,-468 2384.96,-468 2384.96,-432 2652.38,-432 2652.38,-468"/>
292 -<text text-anchor="middle" x="2518.67" y="-445.8" font-family="Times,serif" font-size="14.00">v24 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
291 +<polygon fill="none" stroke="black" points="2706.41,-468 2438.98,-468 2438.98,-432 2706.41,-432 2706.41,-468"/>
292 +<text text-anchor="middle" x="2572.7" y="-445.8" font-family="Times,serif" font-size="14.00">v24 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
293 </g>
294 <!-- v24&#45;&gt;v4 -->
295 <g id="edge21" class="edge">
296 <title>v24&#45;&gt;v4</title>
297 -<path fill="none" stroke="black" d="M2518.67,-431.7C2518.67,-423.98 2518.67,-414.71 2518.67,-406.11"/>
298 -<polygon fill="black" stroke="black" points="2522.17,-406.1 2518.67,-396.1 2515.17,-406.1 2522.17,-406.1"/>
297 +<path fill="none" stroke="black" d="M2572.7,-431.7C2572.7,-423.98 2572.7,-414.71 2572.7,-406.11"/>
298 +<polygon fill="black" stroke="black" points="2576.2,-406.1 2572.7,-396.1 2569.2,-406.1 2576.2,-406.1"/>
299 </g>
300 </g>
301 </svg>
compiler/forget/src/__tests__/fixtures/hir/call.expect.md
+10 -9
@@ -34,14 +34,14 @@ function foo$0() {
34
35 ```
36 bb0:
37 - readonly a$2 = Array []
38 - readonly b$3 = Object { }
37 + Const readonly a$2 = Array []
38 + Const readonly b$3 = Object { }
39 Call mutable foo$4(mutable a$2, mutable b$3)
40 - readonly $6 = "div"
41 - readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
40 + Const readonly $6 = "div"
41 + Let readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
42 Call mutable foo$4(mutable b$3)
43 - readonly $7 = "div"
44 - readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
43 + Const readonly $7 = "div"
44 + Const readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
45 Return frozen $8
46 ```
47
@@ -49,10 +49,11 @@ bb0:
49
50 ```javascript
51 function Component$0(props$1) {
52 - a$2 = [];
53 - b$3 = {};
52 + const a$2 = [];
53 + const b$3 = {};
54 foo$4(a$2, b$3);
55 - _$5 = <div a={a$2}></div>;
55 + let _$5 = <div a={a$2}></div>;
56 +
57 foo$4(b$3);
58 return <div a={a$2} b={b$3}></div>;
59 }
compiler/forget/src/__tests__/fixtures/hir/component.expect.md
+27 -27
@@ -35,44 +35,44 @@ function Component(props) {
35
36 ```
37 bb0:
38 - frozen items$2 = frozen props$1.items
39 - frozen maxItems$3 = frozen props$1.maxItems
40 - readonly renderedItems$4 = Array []
41 - readonly seen$5 = New mutable Set$6()
42 - readonly $9 = 0
43 - readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)
38 + Const frozen items$2 = frozen props$1.items
39 + Const frozen maxItems$3 = frozen props$1.maxItems
40 + Const readonly renderedItems$4 = Array []
41 + Const readonly seen$5 = New mutable Set$6()
42 + Const readonly $9 = 0
43 + Const readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)
44 Goto bb1
45 bb1:
46 If (frozen items$2) then:bb3 else:bb2
47 bb3:
48 - readonly $11 = null
49 - frozen $12 = Binary frozen item$10 == readonly $11
48 + Const readonly $11 = null
49 + Const frozen $12 = Binary frozen item$10 == readonly $11
50 If (frozen $12) then:bb8 else:bb9
51 bb2:
52 - readonly count$17 = readonly renderedItems$4.length
53 - readonly $18 = "div"
54 - readonly $19 = "\n "
55 - readonly $20 = "h1"
56 - readonly $21 = " Items"
57 - readonly $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
58 - readonly $23 = "\n "
59 - readonly $24 = "\n "
60 - readonly $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}</frozen $18>
52 + Const readonly count$17 = readonly renderedItems$4.length
53 + Const readonly $18 = "div"
54 + Const readonly $19 = "\n "
55 + Const readonly $20 = "h1"
56 + Const readonly $21 = " Items"
57 + Const readonly $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
58 + Const readonly $23 = "\n "
59 + Const readonly $24 = "\n "
60 + Const readonly $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}</frozen $18>
61 Return frozen $25
62 bb8:
63 - frozen $13 = frozen $12
63 + Const frozen $13 = frozen $12
64 Goto bb7
65 bb9:
66 - readonly $13 = Call mutable seen$5.has(frozen item$10)
66 + Const readonly $13 = Call mutable seen$5.has(frozen item$10)
67 Goto bb7
68 bb7:
69 If (frozen $13) then:bb1 else:bb4
70 bb4:
71 Call mutable seen$5.add(frozen item$10)
72 - readonly $14 = "div"
73 - readonly $15 = JSX <frozen $14>{frozen item$10}</frozen $14>
72 + Const readonly $14 = "div"
73 + Const readonly $15 = JSX <frozen $14>{frozen item$10}</frozen $14>
74 Call mutable renderedItems$4.push(mutable $15)
75 - frozen $16 = Binary readonly renderedItems$4.length >= readonly max$7
75 + Const frozen $16 = Binary readonly renderedItems$4.length >= readonly max$7
76 If (frozen $16) then:bb2 else:bb1
77 ```
78
@@ -80,11 +80,11 @@ bb4:
80
81 ```javascript
82 function Component$0(props$1) {
83 - items$2 = props$1.items;
84 - maxItems$3 = props$1.maxItems;
85 - renderedItems$4 = [];
86 - seen$5 = new Set$6();
87 - max$7 = Math$8.max(0, maxItems$3);
83 + const items$2 = props$1.items;
84 + const maxItems$3 = props$1.maxItems;
85 + const renderedItems$4 = [];
86 + const seen$5 = new Set$6();
87 + const max$7 = Math$8.max(0, maxItems$3);
88 ("<<TODO: handle complex control flow in codegen>>");
89 }
90
compiler/forget/src/__tests__/fixtures/hir/conditional-break.expect.md
+12 -12
@@ -78,11 +78,11 @@ function Component(props) {
78
79 ```
80 bb0:
81 - readonly a_DEBUG$2 = Array []
81 + Const readonly a_DEBUG$2 = Array []
82 Call mutable a_DEBUG$2.push(frozen props$1.a)
83 If (frozen props$1.b) then:bb2 else:bb1
84 bb2:
85 - readonly $3 = null
85 + Const readonly $3 = null
86 Return frozen $3
87 bb1:
88 Call mutable a_DEBUG$2.push(frozen props$1.d)
@@ -93,7 +93,7 @@ bb1:
93
94 ```javascript
95 function Component$0(props$1) {
96 - a_DEBUG$2 = [];
96 + const a_DEBUG$2 = [];
97 a_DEBUG$2.push(props$1.a);
98 if (props$1.b) {
99 return null;
@@ -108,7 +108,7 @@ function Component$0(props$1) {
108
109 ```
110 bb0:
111 - readonly a$2 = Array []
111 + Const readonly a$2 = Array []
112 Call mutable a$2.push(frozen props$1.a)
113 If (frozen props$1.b) then:bb2 else:bb1
114 bb2:
@@ -123,7 +123,7 @@ bb1:
123
124 ```javascript
125 function Component$0(props$1) {
126 - a$2 = [];
126 + const a$2 = [];
127 a$2.push(props$1.a);
128 if (props$1.b) {
129 a$2.push(props$1.c);
@@ -139,12 +139,12 @@ function Component$0(props$1) {
139
140 ```
141 bb0:
142 - readonly a$2 = Array []
142 + Const readonly a$2 = Array []
143 Call mutable a$2.push(frozen props$1.a)
144 If (frozen props$1.b) then:bb2 else:bb1
145 bb2:
146 Call mutable a$2.push(frozen props$1.c)
147 - readonly $3 = null
147 + Const readonly $3 = null
148 Return frozen $3
149 bb1:
150 Call mutable a$2.push(frozen props$1.d)
@@ -155,7 +155,7 @@ bb1:
155
156 ```javascript
157 function Component$0(props$1) {
158 - a$2 = [];
158 + const a$2 = [];
159 a$2.push(props$1.a);
160 if (props$1.b) {
161 a$2.push(props$1.c);
@@ -171,7 +171,7 @@ function Component$0(props$1) {
171
172 ```
173 bb0:
174 - readonly a$2 = Array []
174 + Const readonly a$2 = Array []
175 Call mutable a$2.push(frozen props$1.a)
176 If (frozen props$1.b) then:bb2 else:bb1
177 bb2:
@@ -186,7 +186,7 @@ bb1:
186
187 ```javascript
188 function Component$0(props$1) {
189 - a$2 = [];
189 + const a$2 = [];
190 a$2.push(props$1.a);
191 if (props$1.b) {
192 a$2.push(props$1.c);
@@ -202,7 +202,7 @@ function Component$0(props$1) {
202
203 ```
204 bb0:
205 - readonly a$2 = Array []
205 + Const readonly a$2 = Array []
206 Call mutable a$2.push(frozen props$1.a)
207 If (frozen props$1.b) then:bb1 else:bb2
208 bb1:
@@ -217,7 +217,7 @@ bb2:
217
218 ```javascript
219 function Component$0(props$1) {
220 - a$2 = [];
220 + const a$2 = [];
221 a$2.push(props$1.a);
222 if (props$1.b) {
223 a$2.push(props$1.d);
compiler/forget/src/__tests__/fixtures/hir/conditional-on-mutable.expect.md
+11 -11
@@ -67,8 +67,8 @@ function mayMutate() {}
67
68 ```
69 bb0:
70 - readonly a$2 = Array []
71 - readonly b$3 = Array []
70 + Const readonly a$2 = Array []
71 + Const readonly b$3 = Array []
72 If (readonly b$3) then:bb2 else:bb1
73 bb2:
74 Call mutable a$2.push(frozen props$1.p0)
@@ -79,7 +79,7 @@ bb4:
79 Call mutable b$3.push(frozen props$1.p2)
80 Goto bb3
81 bb3:
82 - readonly $5 = JSX <frozen Foo$4 a={frozen a$2} b={frozen b$3} ></frozen Foo$4>
82 + Const readonly $5 = JSX <frozen Foo$4 a={frozen a$2} b={frozen b$3} ></frozen Foo$4>
83 Return frozen $5
84 ```
85
@@ -87,8 +87,8 @@ bb3:
87
88 ```javascript
89 function Component$0(props$1) {
90 - a$2 = [];
91 - b$3 = [];
90 + const a$2 = [];
91 + const b$3 = [];
92 if (b$3) {
93 a$2.push(props$1.p0);
94 ("<<TODO: handle complex control flow in codegen>>");
@@ -107,9 +107,9 @@ function Component$0(props$1) {
107
108 ```
109 bb0:
110 - readonly a$2 = Array []
111 - readonly b$3 = Array []
112 - readonly $5 = Call mutable mayMutate$4(mutable b$3)
110 + Const readonly a$2 = Array []
111 + Const readonly b$3 = Array []
112 + Const readonly $5 = Call mutable mayMutate$4(mutable b$3)
113 If (readonly $5) then:bb2 else:bb1
114 bb2:
115 Call mutable a$2.push(frozen props$1.p0)
@@ -120,7 +120,7 @@ bb4:
120 Call mutable b$3.push(frozen props$1.p2)
121 Goto bb3
122 bb3:
123 - readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$3} ></frozen Foo$6>
123 + Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$3} ></frozen Foo$6>
124 Return frozen $7
125 ```
126
@@ -128,8 +128,8 @@ bb3:
128
129 ```javascript
130 function Component$0(props$1) {
131 - a$2 = [];
132 - b$3 = [];
131 + const a$2 = [];
132 + const b$3 = [];
133 if (mayMutate$4(b$3)) {
134 a$2.push(props$1.p0);
135 ("<<TODO: handle complex control flow in codegen>>");
compiler/forget/src/__tests__/fixtures/hir/constructor.expect.md
+10 -9
@@ -34,14 +34,14 @@ function Foo$0() {
34
35 ```
36 bb0:
37 - readonly a$2 = Array []
38 - readonly b$3 = Object { }
37 + Const readonly a$2 = Array []
38 + Const readonly b$3 = Object { }
39 New mutable Foo$4(mutable a$2, mutable b$3)
40 - readonly $6 = "div"
41 - readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
40 + Const readonly $6 = "div"
41 + Let readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
42 New mutable Foo$4(mutable b$3)
43 - readonly $7 = "div"
44 - readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
43 + Const readonly $7 = "div"
44 + Const readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
45 Return frozen $8
46 ```
47
@@ -49,10 +49,11 @@ bb0:
49
50 ```javascript
51 function Component$0(props$1) {
52 - a$2 = [];
53 - b$3 = {};
52 + const a$2 = [];
53 + const b$3 = {};
54 new Foo$4(a$2, b$3);
55 - _$5 = <div a={a$2}></div>;
55 + let _$5 = <div a={a$2}></div>;
56 +
57 new Foo$4(b$3);
58 return <div a={a$2} b={b$3}></div>;
59 }
compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md
+8 -8
@@ -53,13 +53,13 @@ function foo$0() {
53
54 ```
55 bb0:
56 - readonly x$2 = Array []
57 - frozen y$3 = Call frozen useFreeze$4(frozen x$2)
56 + Const readonly x$2 = Array []
57 + Const frozen y$3 = Call frozen useFreeze$4(frozen x$2)
58 Call mutable foo$5(frozen y$3, frozen x$2)
59 - readonly $6 = "\n "
60 - readonly $7 = "\n "
61 - readonly $8 = "\n "
62 - readonly $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
59 + Const readonly $6 = "\n "
60 + Const readonly $7 = "\n "
61 + Const readonly $8 = "\n "
62 + Const readonly $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
63 Return frozen $9
64 ```
65
@@ -67,8 +67,8 @@ bb0:
67
68 ```javascript
69 function Component$0(props$1) {
70 - x$2 = [];
71 - y$3 = useFreeze$4(x$2);
70 + const x$2 = [];
71 + const y$3 = useFreeze$4(x$2);
72 foo$5(y$3, x$2);
73 return (
74 <Component$0>
compiler/forget/src/__tests__/fixtures/hir/independent-across-if.expect.md
+5 -5
@@ -97,15 +97,15 @@ function Foo$0() {
97
98 ```
99 bb0:
100 - readonly a$2 = Call mutable compute$3(frozen props$1.a)
101 - readonly b$4 = Call mutable compute$3(frozen props$1.b)
100 + Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
101 + Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
102 If (frozen props$1.c) then:bb2 else:bb1
103 bb2:
104 Call mutable mutate$5(mutable a$2)
105 Call mutable mutate$5(mutable b$4)
106 Goto bb1
107 bb1:
108 - readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
108 + Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
109 Return frozen $7
110 ```
111
@@ -113,8 +113,8 @@ bb1:
113
114 ```javascript
115 function Component$0(props$1) {
116 - a$2 = compute$3(props$1.a);
117 - b$4 = compute$3(props$1.b);
116 + const a$2 = compute$3(props$1.a);
117 + const b$4 = compute$3(props$1.b);
118 if (props$1.c) {
119 mutate$5(a$2);
120 mutate$5(b$4);
compiler/forget/src/__tests__/fixtures/hir/independent.expect.md
+5 -5
@@ -28,9 +28,9 @@ function Foo() {}
28
29 ```
30 bb0:
31 - readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 - readonly b$4 = Call mutable compute$3(frozen props$1.b)
33 - readonly $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
31 + Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 + Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
33 + Const readonly $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
34 Return frozen $6
35 ```
36
@@ -38,8 +38,8 @@ bb0:
38
39 ```javascript
40 function Component$0(props$1) {
41 - a$2 = compute$3(props$1.a);
42 - b$4 = compute$3(props$1.b);
41 + const a$2 = compute$3(props$1.a);
42 + const b$4 = compute$3(props$1.b);
43 return <Foo$5 a={a$2} b={b$4}></Foo$5>;
44 }
45
compiler/forget/src/__tests__/fixtures/hir/interdependent-across-if.expect.md
+5 -5
@@ -76,14 +76,14 @@ function Foo$0() {
76
77 ```
78 bb0:
79 - readonly a$2 = Call mutable compute$3(frozen props$1.a)
80 - readonly b$4 = Call mutable compute$3(frozen props$1.b)
79 + Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
80 + Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
81 If (frozen props$1.c) then:bb2 else:bb1
82 bb2:
83 Call mutable foo$5(mutable a$2, mutable b$4)
84 Goto bb1
85 bb1:
86 - readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
86 + Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
87 Return frozen $7
88 ```
89
@@ -91,8 +91,8 @@ bb1:
91
92 ```javascript
93 function Component$0(props$1) {
94 - a$2 = compute$3(props$1.a);
95 - b$4 = compute$3(props$1.b);
94 + const a$2 = compute$3(props$1.a);
95 + const b$4 = compute$3(props$1.b);
96 if (props$1.c) {
97 foo$5(a$2, b$4);
98 ("<<TODO: handle complex control flow in codegen>>");
compiler/forget/src/__tests__/fixtures/hir/interdependent.expect.md
+5 -5
@@ -28,10 +28,10 @@ function Foo() {}
28
29 ```
30 bb0:
31 - readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 - readonly b$4 = Call mutable compute$3(frozen props$1.b)
31 + Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 + Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
33 Call mutable foo$5(mutable a$2, mutable b$4)
34 - readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
34 + Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
35 Return frozen $7
36 ```
37
@@ -39,8 +39,8 @@ bb0:
39
40 ```javascript
41 function Component$0(props$1) {
42 - a$2 = compute$3(props$1.a);
43 - b$4 = compute$3(props$1.b);
42 + const a$2 = compute$3(props$1.a);
43 + const b$4 = compute$3(props$1.b);
44 foo$5(a$2, b$4);
45 return <Foo$6 a={a$2} b={b$4}></Foo$6>;
46 }
compiler/forget/src/__tests__/fixtures/hir/property-assignment.expect.md
+8 -8
@@ -17,12 +17,12 @@ function Component(props) {
17
18 ```
19 bb0:
20 - readonly x$2 = Object { }
21 - readonly y$3 = Array []
22 - readonly x$2.y = readonly y$3
23 - readonly child$4 = JSX <frozen Component$0 data={frozen y$3} ></frozen Component$0>
20 + Const readonly x$2 = Object { }
21 + Const readonly y$3 = Array []
22 + Reassign readonly x$2.y = readonly y$3
23 + Const readonly child$4 = JSX <frozen Component$0 data={frozen y$3} ></frozen Component$0>
24 Call mutable x$2.y.push(frozen props$1.p0)
25 - readonly $5 = JSX <frozen Component$0 data={frozen x$2} >{frozen child$4}</frozen Component$0>
25 + Const readonly $5 = JSX <frozen Component$0 data={frozen x$2} >{frozen child$4}</frozen Component$0>
26 Return frozen $5
27 ```
28
@@ -30,10 +30,10 @@ bb0:
30
31 ```javascript
32 function Component$0(props$1) {
33 - x$2 = {};
34 - y$3 = [];
33 + const x$2 = {};
34 + const y$3 = [];
35 x$2 = y$3;
36 - child$4 = <Component$0 data={y$3}></Component$0>;
36 + const child$4 = <Component$0 data={y$3}></Component$0>;
37 x$2.y.push(props$1.p0);
38 return <Component$0 data={x$2}>{child$4}</Component$0>;
39 }
compiler/forget/src/__tests__/fixtures/hir/reassignment-conditional.expect.md
+9 -8
@@ -23,17 +23,17 @@ function Component(props) {
23
24 ```
25 bb0:
26 - readonly x$2 = Array []
26 + Let readonly x$2 = Array []
27 Call mutable x$2.push(frozen props$1.p0)
28 - readonly y$3 = readonly x$2
28 + Let readonly y$3 = readonly x$2
29 If (frozen props$1.p1) then:bb2 else:bb1
30 bb2:
31 - readonly x$2 = Array []
31 + Reassign readonly x$2 = Array []
32 Goto bb1
33 bb1:
34 - readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
34 + Let readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
35 Call mutable y$3.push(frozen props$1.p2)
36 - readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
36 + Const readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
37 Return frozen $5
38 ```
39
@@ -41,15 +41,16 @@ bb1:
41
42 ```javascript
43 function Component$0(props$1) {
44 - x$2 = [];
44 + let x$2 = [];
45 x$2.push(props$1.p0);
46 - y$3 = x$2;
46 + let y$3 = x$2;
47 if (props$1.p1) {
48 x$2 = [];
49 ("<<TODO: handle complex control flow in codegen>>");
50 }
51
52 - _$4 = <Component$0 x={x$2}></Component$0>;
52 + let _$4 = <Component$0 x={x$2}></Component$0>;
53 +
54 y$3.push(props$1.p2);
55 return <Component$0 x={x$2} y={y$3}></Component$0>;
56 }
compiler/forget/src/__tests__/fixtures/hir/reassignment.expect.md
+9 -8
@@ -21,13 +21,13 @@ function Component(props) {
21
22 ```
23 bb0:
24 - readonly x$2 = Array []
24 + Let readonly x$2 = Array []
25 Call mutable x$2.push(frozen props$1.p0)
26 - readonly y$3 = readonly x$2
27 - readonly x$2 = Array []
28 - readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
26 + Let readonly y$3 = readonly x$2
27 + Reassign readonly x$2 = Array []
28 + Let readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
29 Call mutable y$3.push(frozen props$1.p1)
30 - readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
30 + Const readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
31 Return frozen $5
32 ```
33
@@ -35,11 +35,12 @@ bb0:
35
36 ```javascript
37 function Component$0(props$1) {
38 - x$2 = [];
38 + let x$2 = [];
39 x$2.push(props$1.p0);
40 - y$3 = x$2;
40 + let y$3 = x$2;
41 x$2 = [];
42 - _$4 = <Component$0 x={x$2}></Component$0>;
42 + let _$4 = <Component$0 x={x$2}></Component$0>;
43 +
44 y$3.push(props$1.p1);
45 return <Component$0 x={x$2} y={y$3}></Component$0>;
46 }
compiler/forget/src/__tests__/fixtures/hir/simple.expect.md
+5 -5
@@ -17,13 +17,13 @@ function foo(x, y) {
17 bb0:
18 If (frozen x$1) then:bb2 else:bb1
19 bb2:
20 - readonly $3 = false
21 - readonly $4 = Call mutable foo$0(mutable $3, frozen y$2)
20 + Const readonly $3 = false
21 + Const readonly $4 = Call mutable foo$0(mutable $3, frozen y$2)
22 Return frozen $4
23 bb1:
24 - readonly $5 = 10
25 - frozen $6 = Binary frozen y$2 * readonly $5
26 - readonly $7 = Array [frozen $6]
24 + Const readonly $5 = 10
25 + Const frozen $6 = Binary frozen y$2 * readonly $5
26 + Const readonly $7 = Array [frozen $6]
27 Return frozen $7
28 ```
29
compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md
+12 -12
@@ -32,27 +32,27 @@ function Component(props) {
32
33 ```
34 bb0:
35 - readonly x$2 = Array []
36 - readonly y$3 = undefined
37 - readonly $4 = false
38 - readonly $5 = true
39 - readonly $6 = 1
35 + Let readonly x$2 = Array []
36 + Let readonly y$3 = undefined
37 + Const readonly $4 = false
38 + Const readonly $5 = true
39 + Const readonly $6 = 1
40 Switch (frozen props$1.p0)
41 Case readonly $6: bb1
42 Case readonly $5: bb6
43 Default: bb1
44 Case readonly $4: bb2
45 bb1:
46 - readonly child$7 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
46 + Const readonly child$7 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
47 Call mutable y$3.push(frozen props$1.p4)
48 - readonly $8 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$7}</frozen Component$0>
48 + Const readonly $8 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$7}</frozen Component$0>
49 Return frozen $8
50 bb6:
51 Call mutable x$2.push(frozen props$1.p2)
52 - readonly y$3 = Array []
52 + Reassign readonly y$3 = Array []
53 Goto bb1
54 bb2:
55 - readonly y$3 = readonly x$2
55 + Reassign readonly y$3 = readonly x$2
56 Goto bb1
57 ```
58
@@ -60,8 +60,8 @@ bb2:
60
61 ```javascript
62 function Component$0(props$1) {
63 - x$2 = [];
64 - y$3 = undefined;
63 + let x$2 = [];
64 + let y$3 = undefined;
65 switch (props$1.p0) {
66 case 1:
67 break;
@@ -81,7 +81,7 @@ function Component$0(props$1) {
81 }
82 }
83
84 - child$7 = <Component$0 data={x$2}></Component$0>;
84 + const child$7 = <Component$0 data={x$2}></Component$0>;
85 y$3.push(props$1.p4);
86 return <Component$0 data={y$3}>{child$7}</Component$0>;
87 }
compiler/forget/src/__tests__/fixtures/hir/switch.expect.md
+11 -11
@@ -28,10 +28,10 @@ function Component(props) {
28
29 ```
30 bb0:
31 - readonly x$2 = Array []
32 - readonly y$3 = undefined
33 - readonly $4 = false
34 - readonly $5 = true
31 + Let readonly x$2 = Array []
32 + Let readonly y$3 = undefined
33 + Const readonly $4 = false
34 + Const readonly $5 = true
35 Switch (frozen props$1.p0)
36 Case readonly $5: bb4
37 Case readonly $4: bb2
@@ -39,15 +39,15 @@ bb0:
39 bb4:
40 Call mutable x$2.push(frozen props$1.p2)
41 Call mutable x$2.push(frozen props$1.p3)
42 - readonly y$3 = Array []
42 + Reassign readonly y$3 = Array []
43 Goto bb2
44 bb2:
45 - readonly y$3 = readonly x$2
45 + Reassign readonly y$3 = readonly x$2
46 Goto bb1
47 bb1:
48 - readonly child$6 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
48 + Const readonly child$6 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
49 Call mutable y$3.push(frozen props$1.p4)
50 - readonly $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
50 + Const readonly $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
51 Return frozen $7
52 ```
53
@@ -55,8 +55,8 @@ bb1:
55
56 ```javascript
57 function Component$0(props$1) {
58 - x$2 = [];
59 - y$3 = undefined;
58 + let x$2 = [];
59 + let y$3 = undefined;
60 switch (props$1.p0) {
61 case true: {
62 x$2.push(props$1.p2);
@@ -71,7 +71,7 @@ function Component$0(props$1) {
71 }
72 }
73
74 - child$6 = <Component$0 data={x$2}></Component$0>;
74 + const child$6 = <Component$0 data={x$2}></Component$0>;
75 y$3.push(props$1.p4);
76 return <Component$0 data={y$3}>{child$6}</Component$0>;
77 }