[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`.
This commit is contained in:
Joseph Savona
2022-10-06 08:56:20 -07:00
parent 90ab346505
commit cbbfba27b4
25 changed files with 625 additions and 787 deletions
+8 -8
View File
@@ -329,9 +329,9 @@ function buildInputsOutputsForBlock(
case "Identifier": {
builder.reference(instrValue, instrValue, Capability.Readonly);
valueCapability = instrValue.capability;
if (instr.place !== null && instr.place.memberPath === null) {
builder.assign(instr.place, instr, instrValue);
instr.place.capability = valueCapability;
if (instr.lvalue !== null && instr.lvalue.place.memberPath === null) {
builder.assign(instr.lvalue.place, instr, instrValue);
instr.lvalue.place.capability = valueCapability;
continue;
}
break;
@@ -340,12 +340,12 @@ function buildInputsOutputsForBlock(
assertExhaustive(instrValue, "Unexpected instruction kind");
}
}
if (instr.place !== null) {
if (instr.place.memberPath == null) {
builder.init(instr.place, instr, true);
instr.place.capability = valueCapability;
if (instr.lvalue !== null) {
if (instr.lvalue.place.memberPath == null) {
builder.init(instr.lvalue.place, instr, true);
instr.lvalue.place.capability = valueCapability;
} else {
builder.reference(instr.place, instr, valueCapability);
builder.reference(instr.lvalue.place, instr, valueCapability);
}
}
}
+23 -12
View File
@@ -14,6 +14,7 @@ import {
HIRFunction,
Identifier,
IfTerminal,
InstructionKind,
InstructionValue,
Place,
ReturnTerminal,
@@ -546,11 +547,13 @@ function lowerStatement(
}
case "VariableDeclaration": {
const stmt = stmtPath as NodePath<t.VariableDeclaration>;
const kind: string = stmt.node.kind;
const nodeKind: string = stmt.node.kind;
invariant(
kind === "let" || kind === "const",
nodeKind === "let" || nodeKind === "const",
"`var` declarations are not supported, use let or const"
);
const kind =
nodeKind === "let" ? InstructionKind.Let : InstructionKind.Const;
for (const declaration of stmt.get("declarations")) {
const id = lowerLVal(builder, declaration.get("id"));
const init = declaration.get("init");
@@ -565,7 +568,7 @@ function lowerStatement(
};
}
builder.push({
place: id,
lvalue: { place: id, kind },
value,
path: stmt,
});
@@ -581,7 +584,7 @@ function lowerStatement(
return;
}
builder.push({
place: null,
lvalue: null,
value,
path: stmt,
});
@@ -620,7 +623,7 @@ function lowerStatement(
case "WithStatement": {
builder.push({
path: stmtPath,
place: null,
lvalue: null,
value: { kind: "OtherStatement", path: stmtPath },
});
return;
@@ -816,9 +819,9 @@ function lowerExpression(
const operator = expr.node.operator;
todoInvariant(operator === "=", "todo: support non-simple assignment");
builder.push({
lvalue: { place: left, kind: InstructionKind.Reassign },
path: exprPath,
value: right,
place: left,
});
return left;
}
@@ -907,7 +910,11 @@ function lowerConditional(
// Block for the consequent (if the test is truthy)
const consequentBlock = builder.enter((blockId) => {
let value = consequent();
builder.push({ value, place: { ...place }, path: value.path });
builder.push({
value,
lvalue: { place: { ...place }, kind: InstructionKind.Const },
path: value.path,
});
return {
kind: "goto",
block: continuationBlock.id,
@@ -916,7 +923,11 @@ function lowerConditional(
// Block for the alternate (if the test is not truthy)
const alternateBlock = builder.enter((blockId) => {
let value = alternate();
builder.push({ value, place: { ...place }, path: value.path });
builder.push({
value,
lvalue: { place: { ...place }, kind: InstructionKind.Const },
path: value.path,
});
return {
kind: "goto",
block: continuationBlock.id,
@@ -969,7 +980,7 @@ function lowerJsxElementName(
builder.push({
value: { kind: "Primitive", value: tag, path: exprPath },
path: exprPath,
place,
lvalue: { place, kind: InstructionKind.Const },
});
return { ...place };
}
@@ -1002,7 +1013,7 @@ function lowerJsxElement(
builder.push({
value: { kind: "JSXText", value: exprPath.node.value, path: exprPath },
path: exprPath,
place: { ...place },
lvalue: { place: { ...place }, kind: InstructionKind.Const },
});
return place;
} else {
@@ -1016,7 +1027,7 @@ function lowerJsxElement(
builder.push({
value: { kind: "OtherStatement", path: exprPath },
path: exprPath,
place: { ...place },
lvalue: { place: { ...place }, kind: InstructionKind.Const },
});
return place;
}
@@ -1040,7 +1051,7 @@ function lowerExpressionToPlace(
builder.push({
value: instr,
path: exprPath,
place: { ...place },
lvalue: { place: { ...place }, kind: InstructionKind.Const },
});
return place;
}
+40 -19
View File
@@ -15,6 +15,8 @@ import {
Identifier,
IdentifierId,
Instruction,
InstructionKind,
LValue,
Place,
} from "./HIR";
import { todoInvariant } from "./todo";
@@ -269,20 +271,46 @@ function writeInstr(cx: Context, instr: Instruction, body: Array<t.Statement>) {
assertExhaustive(instrValue, "Unexpected instruction kind");
}
}
if (instr.place !== null) {
if (instr.lvalue !== null) {
if (
instr.place.kind === "Identifier" &&
instr.place.value.name === null &&
instr.place.memberPath === null
instr.lvalue.place.value.name === null &&
instr.lvalue.place.memberPath === null
) {
// Temporary value: don't immediately emit, instead save the value to refer to later
cx.temp.set(instr.place.value.id, value);
cx.temp.set(instr.lvalue.place.value.id, value);
} else {
body.push(
t.expressionStatement(
t.assignmentExpression("=", codegenLVal(instr.place), value)
)
);
switch (instr.lvalue.kind) {
case InstructionKind.Const: {
body.push(
t.variableDeclaration("const", [
t.variableDeclarator(codegenLVal(instr.lvalue), value),
])
);
break;
}
case InstructionKind.Let: {
body.push(
t.variableDeclaration("let", [
t.variableDeclarator(codegenLVal(instr.lvalue), value),
])
);
break;
}
case InstructionKind.Reassign: {
body.push(
t.expressionStatement(
t.assignmentExpression("=", codegenLVal(instr.lvalue), value)
)
);
break;
}
default: {
assertExhaustive(
instr.lvalue.kind,
`Unexpected instruction kind '${instr.lvalue.kind}'`
);
}
}
}
} else {
body.push(t.expressionStatement(value));
@@ -309,15 +337,8 @@ function codegenJsxElement(
}
}
function codegenLVal(place: Place): t.LVal {
switch (place.kind) {
case "Identifier": {
return convertIdentifier(place.value);
}
default: {
throw new Error("todo other lval kinds");
}
}
function codegenLVal(lval: LValue): t.LVal {
return convertIdentifier(lval.place.value);
}
function codegenValue(
+12 -1
View File
@@ -128,11 +128,22 @@ export type SwitchTerminal = {
* or may occur only for side-effects (many expression statements).
*/
export type Instruction = {
place: Place | null;
lvalue: LValue | null;
value: InstructionValue;
path: NodePath;
};
export type LValue = {
place: Place;
kind: InstructionKind;
};
export enum InstructionKind {
Const, // const declaration
Let, // let declaration
Reassign, // assing a new value to a let binding
}
/**
* A value that may be assigned to a place. Similar to instructions, values
* are not recursive: complex values such as objects or arrays are always
+20 -20
View File
@@ -220,11 +220,11 @@ function flowMutabilityBackwards(vertex: Vertex, epoch: number) {
function inferBlock(graph: UseGraph, block: BasicBlock) {
for (const instr of block.instructions) {
if (instr.place !== null) {
if (instr.place.memberPath == null) {
graph.init(instr.place, instr);
if (instr.lvalue !== null) {
if (instr.lvalue.place.memberPath == null) {
graph.init(instr.lvalue.place, instr);
} else {
graph.reference(instr.place, instr, Capability.Mutable);
graph.reference(instr.lvalue.place, instr, Capability.Mutable);
}
}
const instrValue = instr.value;
@@ -239,8 +239,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
case "ArrayExpression": {
for (const element of instrValue.elements) {
graph.reference(element, instrValue, Capability.Readonly);
if (instr.place !== null) {
graph.capture(instr.place, instr, element);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, element);
}
}
break;
@@ -250,8 +250,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
let prevArg: Place | null = null;
for (const arg of instrValue.args) {
graph.reference(arg, instrValue, Capability.Mutable);
if (instr.place !== null) {
graph.capture(instr.place, instr, arg);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, arg);
}
if (prevArg !== null) {
graph.capture(prevArg, instr, arg);
@@ -271,8 +271,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
let prevArg: Place | null = null;
for (const arg of instrValue.args) {
graph.reference(arg, instrValue, capability);
if (instr.place !== null) {
graph.capture(instr.place, instr, arg);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, arg);
}
if (prevArg !== null) {
graph.capture(prevArg, instr, arg);
@@ -286,8 +286,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
if (instrValue.properties !== null) {
for (const [_key, value] of Object.entries(instrValue.properties)) {
graph.reference(value, instrValue, Capability.Readonly);
if (instr.place !== null) {
graph.capture(instr.place, instr, value);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, value);
}
}
}
@@ -306,15 +306,15 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
graph.reference(instrValue.tag, instrValue, Capability.Readonly);
for (const [_prop, value] of Object.entries(instrValue.props)) {
graph.reference(value, instrValue, Capability.Readonly);
if (instr.place !== null) {
graph.capture(instr.place, instr, value);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, value);
}
}
if (instrValue.children !== null) {
for (const child of instrValue.children) {
graph.reference(child, instrValue, Capability.Readonly);
if (instr.place !== null) {
graph.capture(instr.place, instr, child);
if (instr.lvalue !== null) {
graph.capture(instr.lvalue.place, instr, child);
}
}
}
@@ -327,8 +327,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
}
case "Identifier": {
graph.reference(instrValue, instrValue, Capability.Readonly);
if (instr.place !== null) {
graph.assign(instr.place, instr, instrValue);
if (instr.lvalue !== null) {
graph.assign(instr.lvalue.place, instr, instrValue);
}
valueCapability = instrValue.capability;
break;
@@ -337,8 +337,8 @@ function inferBlock(graph: UseGraph, block: BasicBlock) {
assertExhaustive(instrValue, "Unexpected instruction kind");
}
}
if (instr.place !== null) {
instr.place.capability = valueCapability;
if (instr.lvalue !== null) {
instr.lvalue.place.capability = valueCapability;
}
}
}
+29 -3
View File
@@ -6,7 +6,15 @@
*/
import { assertExhaustive } from "../Common/utils";
import { HIR, Instruction, InstructionValue, Place, Terminal } from "./HIR";
import {
HIR,
Instruction,
InstructionKind,
InstructionValue,
LValue,
Place,
Terminal,
} from "./HIR";
export type Options = {
indent: number;
@@ -63,8 +71,8 @@ export function printMixedHIR(
function printInstruction(instr: Instruction): string {
const value = printInstructionValue(instr.value);
if (instr.place !== null) {
return `${printPlace(instr.place)} = ${value}`;
if (instr.lvalue !== null) {
return `${printLValue(instr.lvalue)} = ${value}`;
} else {
return value;
}
@@ -204,6 +212,24 @@ function printInstructionValue(instrValue: InstructionValue): string {
return value;
}
export function printLValue(lval: LValue): string {
const place = printPlace(lval.place);
switch (lval.kind) {
case InstructionKind.Let: {
return `Let ${place}`;
}
case InstructionKind.Const: {
return `Const ${place}`;
}
case InstructionKind.Reassign: {
return `Reassign ${place}`;
}
default: {
assertExhaustive(lval.kind, `Unexpected lvalue kind '${lval.kind}'`);
}
}
}
export function printPlace(place: Place): string {
const items = [place.capability, " ", place.value.name, "$", place.value.id];
if (place.memberPath != null) {
-235
View File
@@ -5,26 +5,14 @@
* LICENSE file in the root directory of this source tree.
*/
import { assertExhaustive } from "../Common/utils";
import { invariant } from "../CompilerError";
import DisjointSet from "./DisjointSet";
import {
BasicBlock,
BlockId,
Capability,
HIR,
HIRFunction,
IdentifierId,
Instruction,
InstructionValue,
makeScopeId,
Place,
ReactFunction,
ReactiveScope,
ScopeId,
Terminal,
} from "./HIR";
import todo from "./todo";
// import * as t from "@babel/types";
@@ -197,11 +185,6 @@ function analyze(fn: HIRFunction): ReactFunction {
const returnScopeId = makeScopeId(0);
const scopes: Map<ScopeId, ReactiveScope> = new Map();
const block = fn.body.blocks.get(fn.body.entry)!;
const context = new Context(fn.body);
analyzeBlock(context, fn.body.entry, block);
context.analyzeControls();
return {
path: fn.path,
id: fn.id,
@@ -210,221 +193,3 @@ function analyze(fn: HIRFunction): ReactFunction {
scopes,
};
}
class Context {
#blocks: Map<IdentifierId, Set<BasicBlock>> = new Map();
#groups: DisjointSet<IdentifierId | Instruction | BasicBlock> =
new DisjointSet();
body: HIR;
constructor(body: HIR) {
this.body = body;
}
union(items: Array<IdentifierId | Instruction>, block: BasicBlock) {
this.#groups.union(items);
for (const item of items) {
if (typeof item === "number") {
// IdentifierId
let set = this.#blocks.get(item);
if (set == null) {
set = new Set();
this.#blocks.set(item, set);
}
set.add(block);
}
}
}
/**
* Find items that participate in control flow together
*/
analyzeControls() {
const mergeSets: Array<Array<BasicBlock>> = [];
const blocks: Map<BlockId, BasicBlock> = new Map();
this.#groups.forEach((prevItem, prevGroup) => {
this.#groups.forEach((nextItem, nextGroup) => {
if (
prevGroup === nextGroup ||
typeof prevItem !== "number" ||
typeof nextItem !== "number"
) {
// Already part of the same group, by definition this includes item === nextItem
return;
}
const prevBlocks = this.#blocks.get(prevItem)!;
const nextBlocks = this.#blocks.get(nextItem)!;
const overlap = [];
for (const block of prevBlocks) {
if (nextBlocks.has(block)) {
overlap.push(block);
}
}
if (overlap.length > 1) {
mergeSets.push(overlap);
}
});
});
for (const set of mergeSets) {
this.#groups.union(set);
}
}
}
function analyzeBlock(cx: Context, id: BlockId, block: BasicBlock) {
for (const instr of block.instructions) {
const instrValue = instr.value;
let mutables: Array<IdentifierId | Instruction> = [];
switch (instrValue.kind) {
case "JSXText":
case "Primitive": {
// no mutable values
break;
}
case "Identifier": {
const value = getMutable(instrValue);
if (value !== null) {
mutables.push(value);
}
break;
}
case "UnaryExpression": {
const value = getMutable(instrValue.value);
if (value !== null) {
mutables.push(value);
}
break;
}
case "BinaryExpression": {
const left = getMutable(instrValue.left);
const right = getMutable(instrValue.right);
if (left !== null) {
mutables.push(left);
}
if (right !== null) {
mutables.push(right);
}
break;
}
case "ArrayExpression": {
for (const _element of instrValue.elements) {
const element = getMutable(_element);
if (element !== null) {
mutables.push(element);
}
}
break;
}
case "ObjectExpression": {
if (instrValue.properties !== null) {
for (const _value of Object.values(instrValue.properties)) {
const value = getMutable(_value);
if (value !== null) {
mutables.push(value);
}
}
}
break;
}
case "JsxExpression": {
const tag = getMutable(instrValue.tag);
if (tag !== null) {
mutables.push(tag);
}
for (const _prop of Object.values(instrValue.props)) {
const prop = getMutable(_prop);
if (prop !== null) {
mutables.push(prop);
}
}
if (instrValue.children !== null) {
for (const _child of instrValue.children) {
const child = getMutable(_child);
if (child !== null) {
mutables.push(child);
}
}
}
break;
}
case "NewExpression":
case "CallExpression": {
const callee = getMutable(instrValue.callee);
if (callee !== null) {
mutables.push(callee);
}
for (const _arg of instrValue.args) {
const arg = getMutable(_arg);
if (arg !== null) {
mutables.push(arg);
}
}
break;
}
case "OtherStatement": {
// no-op for the value itself
break;
}
default: {
assertExhaustive(
instrValue,
`Unexpected instruction kind '${
(instrValue as any as InstructionValue).kind
}'`
);
}
}
const place = instr.place !== null ? getMutable(instr.place) : null;
invariant(
instr.place === null ||
instr.place.kind !== "Identifier" ||
place !== null,
"Expected instruction assignment target to be inferred as mutable if present."
);
if (place !== null) {
mutables.push(place);
}
if (mutables.length !== 0) {
mutables.push(instr);
cx.union(mutables, block);
}
}
switch (block.terminal.kind) {
case "if": {
const consequent = cx.body.blocks.get(block.terminal.consequent)!;
analyzeBlock(cx, block.terminal.consequent, consequent);
const alternate = cx.body.blocks.get(block.terminal.alternate)!;
analyzeBlock(cx, block.terminal.alternate, alternate);
if (
block.terminal.fallthrough !== null &&
block.terminal.fallthrough !== block.terminal.alternate
) {
const fallthrough = cx.body.blocks.get(block.terminal.fallthrough)!;
analyzeBlock(cx, block.terminal.fallthrough, fallthrough);
}
break;
}
case "switch": {
todo("implement scope analysis for switch statements");
}
case "throw":
case "return":
case "goto": {
// no-op
break;
}
default: {
assertExhaustive(
block.terminal,
`Unexpected terminal kind '${(block.terminal as any as Terminal).kind}'`
);
}
}
}
function getMutable(place: Place): IdentifierId | null {
return place.kind === "Identifier" && place.capability === Capability.Mutable
? place.value.id
: null;
}
@@ -4,721 +4,721 @@
<!-- Generated by graphviz version 6.0.1 (20220924.0800)
-->
<!-- Title: BuildDefUseGraph Pages: 1 -->
<svg width="13468pt" height="482pt"
viewBox="0.00 0.00 13467.86 481.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="13574pt" height="482pt"
viewBox="0.00 0.00 13573.52 481.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 477.6)">
<title>BuildDefUseGraph</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-477.6 13463.86,-477.6 13463.86,4 -4,4"/>
<polygon fill="white" stroke="none" points="-4,4 -4,-477.6 13569.52,-477.6 13569.52,4 -4,4"/>
<!-- v0 -->
<g id="node1" class="node">
<title>v0</title>
<polygon fill="none" stroke="black" points="611.86,-396 256.43,-396 256.43,-360 611.86,-360 611.86,-396"/>
<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>
<polygon fill="none" stroke="black" points="627.43,-396 272.01,-396 272.01,-360 627.43,-360 627.43,-396"/>
<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>
</g>
<!-- v1 -->
<g id="node2" class="node">
<title>v1</title>
<polygon fill="none" stroke="black" points="428.91,-324 11.38,-324 11.38,-288 428.91,-288 428.91,-324"/>
<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>
<polygon fill="none" stroke="black" points="453.66,-324 -0.22,-324 -0.22,-288 453.66,-288 453.66,-324"/>
<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>
</g>
<!-- v0&#45;&gt;v1 -->
<g id="edge1" class="edge">
<title>v0&#45;&gt;v1</title>
<path fill="none" stroke="black" d="M382.07,-359.97C351.91,-350.1 313.76,-337.62 282.07,-327.25"/>
<polygon fill="black" stroke="black" points="283.05,-323.89 272.45,-324.11 280.87,-330.55 283.05,-323.89"/>
<path fill="none" stroke="black" d="M395.45,-359.97C363.89,-350.06 323.93,-337.51 290.82,-327.12"/>
<polygon fill="black" stroke="black" points="291.82,-323.77 281.23,-324.11 289.72,-330.45 291.82,-323.77"/>
</g>
<!-- v2 -->
<g id="node3" class="node">
<title>v2</title>
<polygon fill="none" stroke="black" points="863.11,-324 457.18,-324 457.18,-288 863.11,-288 863.11,-324"/>
<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>
<polygon fill="none" stroke="black" points="887.68,-324 481.76,-324 481.76,-288 887.68,-288 887.68,-324"/>
<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>
</g>
<!-- v0&#45;&gt;v2 -->
<g id="edge2" class="edge">
<title>v0&#45;&gt;v2</title>
<path fill="none" stroke="black" d="M489.14,-359.97C521.13,-350.06 561.63,-337.51 595.18,-327.12"/>
<polygon fill="black" stroke="black" points="596.38,-330.41 604.9,-324.11 594.31,-323.73 596.38,-330.41"/>
<path fill="none" stroke="black" d="M506.91,-359.97C540.31,-350.01 582.64,-337.41 617.62,-326.99"/>
<polygon fill="black" stroke="black" points="618.69,-330.32 627.28,-324.11 616.69,-323.61 618.69,-330.32"/>
</g>
<!-- v12 -->
<g id="node4" class="node">
<title>v12</title>
<polygon fill="none" stroke="black" points="418.43,-252 -0.14,-252 -0.14,-216 418.43,-216 418.43,-252"/>
<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>
<polygon fill="none" stroke="black" points="425.01,-252 6.43,-252 6.43,-216 425.01,-216 425.01,-252"/>
<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>
</g>
<!-- v1&#45;&gt;v12 -->
<g id="edge3" class="edge">
<title>v1&#45;&gt;v12</title>
<path fill="none" stroke="black" d="M217.42,-287.7C216.21,-279.98 214.76,-270.71 213.4,-262.11"/>
<polygon fill="black" stroke="black" points="216.84,-261.44 211.83,-252.1 209.93,-262.53 216.84,-261.44"/>
<path fill="none" stroke="black" d="M224,-287.7C222.79,-279.98 221.33,-270.71 219.98,-262.11"/>
<polygon fill="black" stroke="black" points="223.42,-261.44 218.41,-252.1 216.5,-262.53 223.42,-261.44"/>
</g>
<!-- v3 -->
<g id="node5" class="node">
<title>v3</title>
<polygon fill="none" stroke="black" points="928.03,-252 436.25,-252 436.25,-216 928.03,-216 928.03,-252"/>
<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>
<polygon fill="none" stroke="black" points="970.79,-252 442.65,-252 442.65,-216 970.79,-216 970.79,-252"/>
<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>
</g>
<!-- v2&#45;&gt;v3 -->
<g id="edge4" class="edge">
<title>v2&#45;&gt;v3</title>
<path fill="none" stroke="black" d="M665.58,-287.7C668.03,-279.9 670.98,-270.51 673.71,-261.83"/>
<polygon fill="black" stroke="black" points="677.11,-262.69 676.77,-252.1 670.43,-260.59 677.11,-262.69"/>
<path fill="none" stroke="black" d="M690.16,-287.7C692.61,-279.9 695.56,-270.51 698.29,-261.83"/>
<polygon fill="black" stroke="black" points="701.68,-262.69 701.34,-252.1 695.01,-260.59 701.68,-262.69"/>
</g>
<!-- v10 -->
<g id="node6" class="node">
<title>v10</title>
<polygon fill="none" stroke="black" points="966.39,-180 397.9,-180 397.9,-144 966.39,-144 966.39,-180"/>
<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>
<polygon fill="none" stroke="black" points="990.97,-180 422.47,-180 422.47,-144 990.97,-144 990.97,-180"/>
<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>
</g>
<!-- v3&#45;&gt;v10 -->
<g id="edge5" class="edge">
<title>v3&#45;&gt;v10</title>
<path fill="none" stroke="black" d="M682.14,-215.7C682.14,-207.98 682.14,-198.71 682.14,-190.11"/>
<polygon fill="black" stroke="black" points="685.64,-190.1 682.14,-180.1 678.64,-190.1 685.64,-190.1"/>
<path fill="none" stroke="black" d="M706.72,-215.7C706.72,-207.98 706.72,-198.71 706.72,-190.11"/>
<polygon fill="black" stroke="black" points="710.22,-190.1 706.72,-180.1 703.22,-190.1 710.22,-190.1"/>
</g>
<!-- v4 -->
<g id="node7" class="node">
<title>v4</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v18 -->
<g id="node8" class="node">
<title>v18</title>
<polygon fill="none" stroke="black" points="1884.55,-180 1387.73,-180 1387.73,-144 1884.55,-144 1884.55,-180"/>
<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>
<polygon fill="none" stroke="black" points="1927.13,-180 1430.31,-180 1430.31,-144 1927.13,-144 1927.13,-180"/>
<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>
</g>
<!-- v4&#45;&gt;v18 -->
<g id="edge6" class="edge">
<title>v4&#45;&gt;v18</title>
<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"/>
<polygon fill="black" stroke="black" points="1718.38,-180.95 1707.83,-180.01 1715.48,-187.33 1718.38,-180.95"/>
<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"/>
<polygon fill="black" stroke="black" points="1759.89,-180.97 1749.34,-180.06 1757.03,-187.35 1759.89,-180.97"/>
</g>
<!-- v49 -->
<g id="node9" class="node">
<title>v49</title>
<polygon fill="none" stroke="black" points="1700.95,-396 1123.34,-396 1123.34,-360 1700.95,-360 1700.95,-396"/>
<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>
<polygon fill="none" stroke="black" points="1743.52,-396 1165.91,-396 1165.91,-360 1743.52,-360 1743.52,-396"/>
<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>
</g>
<!-- v4&#45;&gt;v49 -->
<g id="edge7" class="edge">
<title>v4&#45;&gt;v49</title>
<path fill="none" stroke="black" d="M1557.6,-434.73C1530.3,-424.27 1495.17,-410.81 1466.28,-399.74"/>
<polygon fill="black" stroke="black" points="1467.33,-396.4 1456.74,-396.09 1464.83,-402.93 1467.33,-396.4"/>
<path fill="none" stroke="black" d="M1468.45,-434.55C1466.35,-426.03 1463.76,-415.55 1461.39,-405.99"/>
<polygon fill="black" stroke="black" points="1464.75,-405 1458.95,-396.13 1457.96,-406.68 1464.75,-405"/>
</g>
<!-- v62 -->
<g id="node10" class="node">
<title>v62</title>
<polygon fill="none" stroke="black" points="1747.88,-252 1524.41,-252 1524.41,-216 1747.88,-216 1747.88,-252"/>
<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>
<polygon fill="none" stroke="black" points="1790.46,-252 1566.98,-252 1566.98,-216 1790.46,-216 1790.46,-252"/>
<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>
</g>
<!-- v4&#45;&gt;v62 -->
<g id="edge8" class="edge">
<title>v4&#45;&gt;v62</title>
<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"/>
<polygon fill="black" stroke="black" points="1712.35,-253.29 1701.83,-252.05 1709.29,-259.58 1712.35,-253.29"/>
<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"/>
<polygon fill="black" stroke="black" points="1754.93,-253.29 1744.4,-252.05 1751.86,-259.58 1754.93,-253.29"/>
</g>
<!-- v71 -->
<g id="node11" class="node">
<title>v71</title>
<polygon fill="none" stroke="black" points="1169.88,-252 946.41,-252 946.41,-216 1169.88,-216 1169.88,-252"/>
<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>
<polygon fill="none" stroke="black" points="1212.46,-252 988.98,-252 988.98,-216 1212.46,-216 1212.46,-252"/>
<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>
</g>
<!-- v4&#45;&gt;v71 -->
<g id="edge9" class="edge">
<title>v4&#45;&gt;v71</title>
<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"/>
<polygon fill="black" stroke="black" points="1056.1,-262.72 1054.23,-252.3 1049.19,-261.62 1056.1,-262.72"/>
<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"/>
<polygon fill="black" stroke="black" points="1098.68,-262.72 1096.8,-252.3 1091.77,-261.62 1098.68,-262.72"/>
</g>
<!-- v19 -->
<g id="node31" class="node">
<title>v19</title>
<polygon fill="none" stroke="black" points="1538.76,-108 1005.53,-108 1005.53,-72 1538.76,-72 1538.76,-108"/>
<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>
<polygon fill="none" stroke="black" points="1590.51,-108 1020.93,-108 1020.93,-72 1590.51,-72 1590.51,-108"/>
<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>
</g>
<!-- v18&#45;&gt;v19 -->
<g id="edge21" class="edge">
<title>v18&#45;&gt;v19</title>
<path fill="none" stroke="black" d="M1547.57,-143.97C1494.17,-133.7 1426.07,-120.6 1370.94,-110"/>
<polygon fill="black" stroke="black" points="1371.29,-106.5 1360.8,-108.05 1369.96,-113.38 1371.29,-106.5"/>
<path fill="none" stroke="black" d="M1587.95,-143.97C1533.13,-133.68 1463.16,-120.55 1406.61,-109.93"/>
<polygon fill="black" stroke="black" points="1407.05,-106.45 1396.57,-108.05 1405.75,-113.33 1407.05,-106.45"/>
</g>
<!-- v34 -->
<g id="node32" class="node">
<title>v34</title>
<polygon fill="none" stroke="black" points="2441.14,-108 1557.15,-108 1557.15,-72 2441.14,-72 2441.14,-108"/>
<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>
<polygon fill="none" stroke="black" points="2492.71,-108 1608.73,-108 1608.73,-72 2492.71,-72 2492.71,-108"/>
<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>
</g>
<!-- v18&#45;&gt;v34 -->
<g id="edge22" class="edge">
<title>v18&#45;&gt;v34</title>
<path fill="none" stroke="black" d="M1724.48,-143.97C1777.72,-133.7 1845.64,-120.6 1900.62,-110"/>
<polygon fill="black" stroke="black" points="1901.57,-113.38 1910.73,-108.05 1900.25,-106.51 1901.57,-113.38"/>
<path fill="none" stroke="black" d="M1769.24,-143.97C1823.92,-133.68 1893.7,-120.55 1950.1,-109.93"/>
<polygon fill="black" stroke="black" points="1950.93,-113.34 1960.11,-108.05 1949.64,-106.46 1950.93,-113.34"/>
</g>
<!-- v51 -->
<g id="node59" class="node">
<title>v51</title>
<polygon fill="none" stroke="black" points="1738.03,-324 1086.26,-324 1086.26,-288 1738.03,-288 1738.03,-324"/>
<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>
<polygon fill="none" stroke="black" points="1780.61,-324 1128.83,-324 1128.83,-288 1780.61,-288 1780.61,-324"/>
<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>
</g>
<!-- v49&#45;&gt;v51 -->
<g id="edge43" class="edge">
<title>v49&#45;&gt;v51</title>
<path fill="none" stroke="black" d="M1412.14,-359.7C1412.14,-351.98 1412.14,-342.71 1412.14,-334.11"/>
<polygon fill="black" stroke="black" points="1415.64,-334.1 1412.14,-324.1 1408.64,-334.1 1415.64,-334.1"/>
<path fill="none" stroke="black" d="M1454.72,-359.7C1454.72,-351.98 1454.72,-342.71 1454.72,-334.11"/>
<polygon fill="black" stroke="black" points="1458.22,-334.1 1454.72,-324.1 1451.22,-334.1 1458.22,-334.1"/>
</g>
<!-- v62&#45;&gt;v18 -->
<g id="edge54" class="edge">
<title>v62&#45;&gt;v18</title>
<path fill="none" stroke="black" d="M1636.14,-215.7C1636.14,-207.98 1636.14,-198.71 1636.14,-190.11"/>
<polygon fill="black" stroke="black" points="1639.64,-190.1 1636.14,-180.1 1632.64,-190.1 1639.64,-190.1"/>
<path fill="none" stroke="black" d="M1678.72,-215.7C1678.72,-207.98 1678.72,-198.71 1678.72,-190.11"/>
<polygon fill="black" stroke="black" points="1682.22,-190.1 1678.72,-180.1 1675.22,-190.1 1682.22,-190.1"/>
</g>
<!-- v71&#45;&gt;v49 -->
<g id="edge55" class="edge">
<title>v71&#45;&gt;v49</title>
<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"/>
<polygon fill="black" stroke="black" points="1172.94,-361.75 1183.38,-359.99 1174.12,-354.85 1172.94,-361.75"/>
<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"/>
<polygon fill="black" stroke="black" points="1215.51,-361.75 1225.96,-359.99 1216.7,-354.85 1215.51,-361.75"/>
</g>
<!-- v5 -->
<g id="node12" class="node">
<title>v5</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v6 -->
<g id="node13" class="node">
<title>v6</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v39 -->
<g id="node14" class="node">
<title>v39</title>
<polygon fill="none" stroke="black" points="2724.53,-396 2257.76,-396 2257.76,-360 2724.53,-360 2724.53,-396"/>
<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>
<polygon fill="none" stroke="black" points="2604.1,-396 2137.33,-396 2137.33,-360 2604.1,-360 2604.1,-396"/>
<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>
</g>
<!-- v6&#45;&gt;v39 -->
<g id="edge10" class="edge">
<title>v6&#45;&gt;v39</title>
<path fill="none" stroke="black" d="M2491.14,-434.55C2491.14,-426.12 2491.14,-415.77 2491.14,-406.3"/>
<polygon fill="black" stroke="black" points="2494.64,-406.13 2491.14,-396.13 2487.64,-406.13 2494.64,-406.13"/>
<path fill="none" stroke="black" d="M2370.72,-434.55C2370.72,-426.12 2370.72,-415.77 2370.72,-406.3"/>
<polygon fill="black" stroke="black" points="2374.22,-406.13 2370.72,-396.13 2367.22,-406.13 2374.22,-406.13"/>
</g>
<!-- v56 -->
<g id="node15" class="node">
<title>v56</title>
<polygon fill="none" stroke="black" points="2341.88,-324 2118.41,-324 2118.41,-288 2341.88,-288 2341.88,-324"/>
<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>
<polygon fill="none" stroke="black" points="2221.46,-324 1997.98,-324 1997.98,-288 2221.46,-288 2221.46,-324"/>
<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>
</g>
<!-- v6&#45;&gt;v56 -->
<g id="edge11" class="edge">
<title>v6&#45;&gt;v56</title>
<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"/>
<polygon fill="black" stroke="black" points="2232.22,-334.26 2228.75,-324.26 2225.22,-334.25 2232.22,-334.26"/>
<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"/>
<polygon fill="black" stroke="black" points="2111.8,-334.26 2108.32,-324.26 2104.8,-334.25 2111.8,-334.26"/>
</g>
<!-- v59 -->
<g id="node16" class="node">
<title>v59</title>
<polygon fill="none" stroke="black" points="2613.88,-180 2390.41,-180 2390.41,-144 2613.88,-144 2613.88,-180"/>
<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>
<polygon fill="none" stroke="black" points="2493.46,-180 2269.98,-180 2269.98,-144 2493.46,-144 2493.46,-180"/>
<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>
</g>
<!-- v6&#45;&gt;v59 -->
<g id="edge12" class="edge">
<title>v6&#45;&gt;v59</title>
<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"/>
<polygon fill="black" stroke="black" points="2554.03,-180.89 2543.47,-180.01 2551.18,-187.28 2554.03,-180.89"/>
<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"/>
<polygon fill="black" stroke="black" points="2433.61,-180.89 2423.05,-180.01 2430.76,-187.28 2433.61,-180.89"/>
</g>
<!-- v39&#45;&gt;v56 -->
<g id="edge33" class="edge">
<title>v39&#45;&gt;v56</title>
<path fill="none" stroke="black" d="M2427.63,-359.97C2390.21,-349.93 2342.71,-337.19 2303.67,-326.72"/>
<polygon fill="black" stroke="black" points="2304.51,-323.32 2293.94,-324.11 2302.69,-330.08 2304.51,-323.32"/>
<path fill="none" stroke="black" d="M2307.21,-359.97C2269.79,-349.93 2222.29,-337.19 2183.25,-326.72"/>
<polygon fill="black" stroke="black" points="2184.08,-323.32 2173.52,-324.11 2182.27,-330.08 2184.08,-323.32"/>
</g>
<!-- v39&#45;&gt;v59 -->
<g id="edge34" class="edge">
<title>v39&#45;&gt;v59</title>
<path fill="none" stroke="black" d="M2488.15,-359.85C2486.52,-322.83 2490.75,-235.18 2496.04,-190.39"/>
<polygon fill="black" stroke="black" points="2499.55,-190.6 2497.37,-180.23 2492.6,-189.69 2499.55,-190.6"/>
<path fill="none" stroke="black" d="M2367.72,-359.85C2366.09,-322.83 2370.32,-235.18 2375.62,-190.39"/>
<polygon fill="black" stroke="black" points="2379.12,-190.6 2376.95,-180.23 2372.18,-189.69 2379.12,-190.6"/>
</g>
<!-- v43 -->
<g id="node52" class="node">
<title>v43</title>
<polygon fill="none" stroke="black" points="2465.13,-252 1995.16,-252 1995.16,-216 2465.13,-216 2465.13,-252"/>
<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>
<polygon fill="none" stroke="black" points="2344.71,-252 1874.73,-252 1874.73,-216 2344.71,-216 2344.71,-252"/>
<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>
</g>
<!-- v56&#45;&gt;v43 -->
<g id="edge50" class="edge">
<title>v56&#45;&gt;v43</title>
<path fill="none" stroke="black" d="M2224.23,-287.7C2223.43,-279.98 2223.21,-270.71 2223.55,-262.11"/>
<polygon fill="black" stroke="black" points="2227.04,-262.32 2224.25,-252.1 2220.06,-261.84 2227.04,-262.32"/>
<path fill="none" stroke="black" d="M2103.8,-287.7C2103.01,-279.98 2102.78,-270.71 2103.12,-262.11"/>
<polygon fill="black" stroke="black" points="2106.62,-262.32 2103.82,-252.1 2099.63,-261.84 2106.62,-262.32"/>
</g>
<!-- v59&#45;&gt;v39 -->
<g id="edge53" class="edge">
<title>v59&#45;&gt;v39</title>
<path fill="none" stroke="black" d="M2505.14,-180.23C2506.77,-217.32 2502.53,-304.98 2497.23,-349.71"/>
<polygon fill="black" stroke="black" points="2493.73,-349.48 2495.9,-359.85 2500.67,-350.39 2493.73,-349.48"/>
<path fill="none" stroke="black" d="M2384.72,-180.23C2386.34,-217.32 2382.1,-304.98 2376.81,-349.71"/>
<polygon fill="black" stroke="black" points="2373.31,-349.48 2375.48,-359.85 2380.25,-350.39 2373.31,-349.48"/>
</g>
<!-- v7 -->
<g id="node17" class="node">
<title>v7</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v9 -->
<g id="node18" class="node">
<title>v9</title>
<polygon fill="none" stroke="black" points="3296.03,-396 2780.26,-396 2780.26,-360 3296.03,-360 3296.03,-396"/>
<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>
<polygon fill="none" stroke="black" points="3175.6,-396 2659.83,-396 2659.83,-360 3175.6,-360 3175.6,-396"/>
<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>
</g>
<!-- v7&#45;&gt;v9 -->
<g id="edge13" class="edge">
<title>v7&#45;&gt;v9</title>
<path fill="none" stroke="black" d="M3038.14,-434.55C3038.14,-426.12 3038.14,-415.77 3038.14,-406.3"/>
<polygon fill="black" stroke="black" points="3041.64,-406.13 3038.14,-396.13 3034.64,-406.13 3041.64,-406.13"/>
<path fill="none" stroke="black" d="M2917.72,-434.55C2917.72,-426.12 2917.72,-415.77 2917.72,-406.3"/>
<polygon fill="black" stroke="black" points="2921.22,-406.13 2917.72,-396.13 2914.22,-406.13 2921.22,-406.13"/>
</g>
<!-- v8 -->
<g id="node19" class="node">
<title>v8</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v11 -->
<g id="node20" class="node">
<title>v11</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v52 -->
<g id="node21" class="node">
<title>v52</title>
<polygon fill="none" stroke="black" points="4212.57,-396 3655.72,-396 3655.72,-360 4212.57,-360 4212.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="4147.15,-396 3590.29,-396 3590.29,-360 4147.15,-360 4147.15,-396"/>
<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>
</g>
<!-- v11&#45;&gt;v52 -->
<g id="edge14" class="edge">
<title>v11&#45;&gt;v52</title>
<path fill="none" stroke="black" d="M4068.88,-434.73C4043.81,-424.36 4011.62,-411.05 3984.99,-400.03"/>
<polygon fill="black" stroke="black" points="3986.03,-396.68 3975.45,-396.09 3983.36,-403.14 3986.03,-396.68"/>
<path fill="none" stroke="black" d="M3989.68,-434.73C3967.37,-424.45 3938.78,-411.28 3915,-400.32"/>
<polygon fill="black" stroke="black" points="3916.35,-397.09 3905.8,-396.09 3913.42,-403.45 3916.35,-397.09"/>
</g>
<!-- v72 -->
<g id="node22" class="node">
<title>v72</title>
<polygon fill="none" stroke="black" points="4045.88,-324 3822.41,-324 3822.41,-288 4045.88,-288 4045.88,-324"/>
<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>
<polygon fill="none" stroke="black" points="3980.46,-324 3756.98,-324 3756.98,-288 3980.46,-288 3980.46,-324"/>
<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>
</g>
<!-- v11&#45;&gt;v72 -->
<g id="edge15" class="edge">
<title>v11&#45;&gt;v72</title>
<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"/>
<polygon fill="black" stroke="black" points="4056.13,-310.68 4045.84,-313.2 4055.46,-317.64 4056.13,-310.68"/>
<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"/>
<polygon fill="black" stroke="black" points="3990.71,-310.68 3980.42,-313.2 3990.03,-317.64 3990.71,-310.68"/>
</g>
<!-- v52&#45;&gt;v72 -->
<g id="edge47" class="edge">
<title>v52&#45;&gt;v72</title>
<path fill="none" stroke="black" d="M3928.23,-359.7C3927.43,-351.98 3927.21,-342.71 3927.55,-334.11"/>
<polygon fill="black" stroke="black" points="3931.04,-334.32 3928.25,-324.1 3924.06,-333.84 3931.04,-334.32"/>
<path fill="none" stroke="black" d="M3862.8,-359.7C3862.01,-351.98 3861.78,-342.71 3862.12,-334.11"/>
<polygon fill="black" stroke="black" points="3865.62,-334.32 3862.82,-324.1 3858.63,-333.84 3865.62,-334.32"/>
</g>
<!-- v72&#45;&gt;v52 -->
<g id="edge56" class="edge">
<title>v72&#45;&gt;v52</title>
<path fill="none" stroke="black" d="M3940.04,-324.1C3940.84,-331.79 3941.08,-341.05 3940.75,-349.67"/>
<polygon fill="black" stroke="black" points="3937.25,-349.48 3940.06,-359.7 3944.24,-349.96 3937.25,-349.48"/>
<path fill="none" stroke="black" d="M3874.61,-324.1C3875.42,-331.79 3875.66,-341.05 3875.32,-349.67"/>
<polygon fill="black" stroke="black" points="3871.83,-349.48 3874.63,-359.7 3878.81,-349.96 3871.83,-349.48"/>
</g>
<!-- v13 -->
<g id="node23" class="node">
<title>v13</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v15 -->
<g id="node24" class="node">
<title>v15</title>
<polygon fill="none" stroke="black" points="4820.46,-396 4397.83,-396 4397.83,-360 4820.46,-360 4820.46,-396"/>
<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>
<polygon fill="none" stroke="black" points="4773.03,-396 4350.41,-396 4350.41,-360 4773.03,-360 4773.03,-396"/>
<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>
</g>
<!-- v13&#45;&gt;v15 -->
<g id="edge16" class="edge">
<title>v13&#45;&gt;v15</title>
<path fill="none" stroke="black" d="M4609.14,-434.55C4609.14,-426.12 4609.14,-415.77 4609.14,-406.3"/>
<polygon fill="black" stroke="black" points="4612.64,-406.13 4609.14,-396.13 4605.64,-406.13 4612.64,-406.13"/>
<path fill="none" stroke="black" d="M4561.72,-434.55C4561.72,-426.12 4561.72,-415.77 4561.72,-406.3"/>
<polygon fill="black" stroke="black" points="4565.22,-406.13 4561.72,-396.13 4558.22,-406.13 4565.22,-406.13"/>
</g>
<!-- v14 -->
<g id="node25" class="node">
<title>v14</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v40 -->
<g id="node26" class="node">
<title>v40</title>
<polygon fill="none" stroke="black" points="5281.53,-396 4838.76,-396 4838.76,-360 5281.53,-360 5281.53,-396"/>
<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>
<polygon fill="none" stroke="black" points="5234.1,-396 4791.33,-396 4791.33,-360 5234.1,-360 5234.1,-396"/>
<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>
</g>
<!-- v14&#45;&gt;v40 -->
<g id="edge17" class="edge">
<title>v14&#45;&gt;v40</title>
<path fill="none" stroke="black" d="M5257.65,-434.73C5219.54,-423.98 5170.19,-410.05 5130.35,-398.81"/>
<polygon fill="black" stroke="black" points="5131.28,-395.43 5120.7,-396.09 5129.37,-402.17 5131.28,-395.43"/>
<path fill="none" stroke="black" d="M5210.23,-434.73C5172.12,-423.98 5122.76,-410.05 5082.92,-398.81"/>
<polygon fill="black" stroke="black" points="5083.85,-395.43 5073.28,-396.09 5081.95,-402.17 5083.85,-395.43"/>
</g>
<!-- v57 -->
<g id="node27" class="node">
<title>v57</title>
<polygon fill="none" stroke="black" points="5429.88,-324 5206.41,-324 5206.41,-288 5429.88,-288 5429.88,-324"/>
<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>
<polygon fill="none" stroke="black" points="5382.46,-324 5158.98,-324 5158.98,-288 5382.46,-288 5382.46,-324"/>
<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>
</g>
<!-- v14&#45;&gt;v57 -->
<g id="edge18" class="edge">
<title>v14&#45;&gt;v57</title>
<path fill="none" stroke="black" d="M5313.59,-434.62C5310.98,-409.8 5310.7,-363.66 5312.74,-334.19"/>
<polygon fill="black" stroke="black" points="5316.23,-334.42 5313.59,-324.16 5309.25,-333.82 5316.23,-334.42"/>
<path fill="none" stroke="black" d="M5266.16,-434.62C5263.56,-409.8 5263.27,-363.66 5265.31,-334.19"/>
<polygon fill="black" stroke="black" points="5268.8,-334.42 5266.17,-324.16 5261.83,-333.82 5268.8,-334.42"/>
</g>
<!-- v40&#45;&gt;v57 -->
<g id="edge35" class="edge">
<title>v40&#45;&gt;v57</title>
<path fill="none" stroke="black" d="M5122.93,-359.97C5159.76,-349.97 5206.47,-337.3 5244.97,-326.85"/>
<polygon fill="black" stroke="black" points="5246.34,-330.11 5255.08,-324.11 5244.51,-323.35 5246.34,-330.11"/>
<path fill="none" stroke="black" d="M5075.5,-359.97C5112.34,-349.97 5159.05,-337.3 5197.54,-326.85"/>
<polygon fill="black" stroke="black" points="5198.92,-330.11 5207.65,-324.11 5197.09,-323.35 5198.92,-330.11"/>
</g>
<!-- v57&#45;&gt;v14 -->
<g id="edge52" class="edge">
<title>v57&#45;&gt;v14</title>
<path fill="none" stroke="black" d="M5322.7,-324.16C5325.31,-348.96 5325.59,-395.1 5323.55,-424.58"/>
<polygon fill="black" stroke="black" points="5320.06,-424.36 5322.7,-434.62 5327.04,-424.95 5320.06,-424.36"/>
<path fill="none" stroke="black" d="M5275.27,-324.16C5277.88,-348.96 5278.17,-395.1 5276.13,-424.58"/>
<polygon fill="black" stroke="black" points="5272.64,-424.36 5275.27,-434.62 5279.61,-424.95 5272.64,-424.36"/>
</g>
<!-- v44 -->
<g id="node53" class="node">
<title>v44</title>
<polygon fill="none" stroke="black" points="5415.08,-252 4971.21,-252 4971.21,-216 5415.08,-216 5415.08,-252"/>
<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>
<polygon fill="none" stroke="black" points="5367.66,-252 4923.78,-252 4923.78,-216 5367.66,-216 5367.66,-252"/>
<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>
</g>
<!-- v57&#45;&gt;v44 -->
<g id="edge51" class="edge">
<title>v57&#45;&gt;v44</title>
<path fill="none" stroke="black" d="M5287.57,-287.88C5271.07,-278.64 5250.52,-267.13 5232.81,-257.21"/>
<polygon fill="black" stroke="black" points="5234.28,-254.02 5223.84,-252.19 5230.85,-260.13 5234.28,-254.02"/>
<path fill="none" stroke="black" d="M5240.14,-287.88C5223.65,-278.64 5203.1,-267.13 5185.38,-257.21"/>
<polygon fill="black" stroke="black" points="5186.85,-254.02 5176.42,-252.19 5183.43,-260.13 5186.85,-254.02"/>
</g>
<!-- v16 -->
<g id="node28" class="node">
<title>v16</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v17 -->
<g id="node29" class="node">
<title>v17</title>
<polygon fill="none" stroke="black" points="5979.77,-396 5608.52,-396 5608.52,-360 5979.77,-360 5979.77,-396"/>
<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>
<polygon fill="none" stroke="black" points="5951.35,-396 5580.09,-396 5580.09,-360 5951.35,-360 5951.35,-396"/>
<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>
</g>
<!-- v16&#45;&gt;v17 -->
<g id="edge19" class="edge">
<title>v16&#45;&gt;v17</title>
<path fill="none" stroke="black" d="M5794.14,-434.55C5794.14,-426.12 5794.14,-415.77 5794.14,-406.3"/>
<polygon fill="black" stroke="black" points="5797.64,-406.13 5794.14,-396.13 5790.64,-406.13 5797.64,-406.13"/>
<path fill="none" stroke="black" d="M5765.72,-434.55C5765.72,-426.12 5765.72,-415.77 5765.72,-406.3"/>
<polygon fill="black" stroke="black" points="5769.22,-406.13 5765.72,-396.13 5762.22,-406.13 5769.22,-406.13"/>
</g>
<!-- v38 -->
<g id="node30" class="node">
<title>v38</title>
<polygon fill="none" stroke="black" points="5953.8,-324 5634.48,-324 5634.48,-288 5953.8,-288 5953.8,-324"/>
<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>
<polygon fill="none" stroke="black" points="5943.55,-324 5587.88,-324 5587.88,-288 5943.55,-288 5943.55,-324"/>
<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>
</g>
<!-- v17&#45;&gt;v38 -->
<g id="edge20" class="edge">
<title>v17&#45;&gt;v38</title>
<path fill="none" stroke="black" d="M5794.14,-359.7C5794.14,-351.98 5794.14,-342.71 5794.14,-334.11"/>
<polygon fill="black" stroke="black" points="5797.64,-334.1 5794.14,-324.1 5790.64,-334.1 5797.64,-334.1"/>
<path fill="none" stroke="black" d="M5765.72,-359.7C5765.72,-351.98 5765.72,-342.71 5765.72,-334.11"/>
<polygon fill="black" stroke="black" points="5769.22,-334.1 5765.72,-324.1 5762.22,-334.1 5769.22,-334.1"/>
</g>
<!-- v42 -->
<g id="node50" class="node">
<title>v42</title>
<polygon fill="none" stroke="black" points="6197.77,-252 5826.52,-252 5826.52,-216 6197.77,-216 6197.77,-252"/>
<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>
<polygon fill="none" stroke="black" points="6187.35,-252 5816.09,-252 5816.09,-216 6187.35,-216 6187.35,-252"/>
<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>
</g>
<!-- v38&#45;&gt;v42 -->
<g id="edge32" class="edge">
<title>v38&#45;&gt;v42</title>
<path fill="none" stroke="black" d="M5847.19,-287.97C5877.92,-278.1 5916.78,-265.62 5949.06,-255.25"/>
<polygon fill="black" stroke="black" points="5950.4,-258.5 5958.86,-252.11 5948.26,-251.84 5950.4,-258.5"/>
<path fill="none" stroke="black" d="M5823.15,-287.97C5856.7,-278.01 5899.21,-265.41 5934.33,-254.99"/>
<polygon fill="black" stroke="black" points="5935.44,-258.31 5944.03,-252.11 5933.45,-251.6 5935.44,-258.31"/>
</g>
<!-- v25 -->
<g id="node33" class="node">
<title>v25</title>
<polygon fill="none" stroke="black" points="1561.63,-36 982.66,-36 982.66,0 1561.63,0 1561.63,-36"/>
<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>
<polygon fill="none" stroke="black" points="1595.21,-36 1016.23,-36 1016.23,0 1595.21,0 1595.21,-36"/>
<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>
</g>
<!-- v19&#45;&gt;v25 -->
<g id="edge23" class="edge">
<title>v19&#45;&gt;v25</title>
<path fill="none" stroke="black" d="M1272.14,-71.7C1272.14,-63.98 1272.14,-54.71 1272.14,-46.11"/>
<polygon fill="black" stroke="black" points="1275.64,-46.1 1272.14,-36.1 1268.64,-46.1 1275.64,-46.1"/>
<path fill="none" stroke="black" d="M1305.72,-71.7C1305.72,-63.98 1305.72,-54.71 1305.72,-46.11"/>
<polygon fill="black" stroke="black" points="1309.22,-46.1 1305.72,-36.1 1302.22,-46.1 1309.22,-46.1"/>
</g>
<!-- v20 -->
<g id="node34" class="node">
<title>v20</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v30 -->
<g id="node35" class="node">
<title>v30</title>
<polygon fill="none" stroke="black" points="6808.57,-396 5997.72,-396 5997.72,-360 6808.57,-360 6808.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="6780.14,-396 5969.3,-396 5969.3,-360 6780.14,-360 6780.14,-396"/>
<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>
</g>
<!-- v20&#45;&gt;v30 -->
<g id="edge24" class="edge">
<title>v20&#45;&gt;v30</title>
<path fill="none" stroke="black" d="M6403.14,-434.55C6403.14,-426.12 6403.14,-415.77 6403.14,-406.3"/>
<polygon fill="black" stroke="black" points="6406.64,-406.13 6403.14,-396.13 6399.64,-406.13 6406.64,-406.13"/>
<path fill="none" stroke="black" d="M6374.72,-434.55C6374.72,-426.12 6374.72,-415.77 6374.72,-406.3"/>
<polygon fill="black" stroke="black" points="6378.22,-406.13 6374.72,-396.13 6371.22,-406.13 6378.22,-406.13"/>
</g>
<!-- v21 -->
<g id="node36" class="node">
<title>v21</title>
<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"/>
<text text-anchor="middle" x="7232.14" y="-457" font-family="Times,serif" font-size="14.00">v21 (readonly $19 @ readonly $19 = &quot;</text>
<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>
<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"/>
<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>
<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>
</g>
<!-- v31 -->
<g id="node37" class="node">
<title>v31</title>
<polygon fill="none" stroke="black" points="7637.57,-396 6826.72,-396 6826.72,-360 7637.57,-360 7637.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="7609.14,-396 6798.3,-396 6798.3,-360 7609.14,-360 7609.14,-396"/>
<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>
</g>
<!-- v21&#45;&gt;v31 -->
<g id="edge25" class="edge">
<title>v21&#45;&gt;v31</title>
<path fill="none" stroke="black" d="M7232.14,-431.91C7232.14,-424.09 7232.14,-414.99 7232.14,-406.56"/>
<polygon fill="black" stroke="black" points="7235.64,-406.39 7232.14,-396.39 7228.64,-406.39 7235.64,-406.39"/>
<path fill="none" stroke="black" d="M7203.72,-431.91C7203.72,-424.09 7203.72,-414.99 7203.72,-406.56"/>
<polygon fill="black" stroke="black" points="7207.22,-406.39 7203.72,-396.39 7200.22,-406.39 7207.22,-406.39"/>
</g>
<!-- v22 -->
<g id="node38" class="node">
<title>v22</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v24 -->
<g id="node39" class="node">
<title>v24</title>
<polygon fill="none" stroke="black" points="8203.03,-396 7655.26,-396 7655.26,-360 8203.03,-360 8203.03,-396"/>
<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>
<polygon fill="none" stroke="black" points="8174.6,-396 7626.84,-396 7626.84,-360 8174.6,-360 8174.6,-396"/>
<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>
</g>
<!-- v22&#45;&gt;v24 -->
<g id="edge26" class="edge">
<title>v22&#45;&gt;v24</title>
<path fill="none" stroke="black" d="M7929.14,-434.55C7929.14,-426.12 7929.14,-415.77 7929.14,-406.3"/>
<polygon fill="black" stroke="black" points="7932.64,-406.13 7929.14,-396.13 7925.64,-406.13 7932.64,-406.13"/>
<path fill="none" stroke="black" d="M7900.72,-434.55C7900.72,-426.12 7900.72,-415.77 7900.72,-406.3"/>
<polygon fill="black" stroke="black" points="7904.22,-406.13 7900.72,-396.13 7897.22,-406.13 7904.22,-406.13"/>
</g>
<!-- v23 -->
<g id="node40" class="node">
<title>v23</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v26 -->
<g id="node41" class="node">
<title>v26</title>
<polygon fill="none" stroke="black" points="8769.03,-396 8221.26,-396 8221.26,-360 8769.03,-360 8769.03,-396"/>
<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>
<polygon fill="none" stroke="black" points="8740.6,-396 8192.84,-396 8192.84,-360 8740.6,-360 8740.6,-396"/>
<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>
</g>
<!-- v23&#45;&gt;v26 -->
<g id="edge27" class="edge">
<title>v23&#45;&gt;v26</title>
<path fill="none" stroke="black" d="M8495.14,-434.55C8495.14,-426.12 8495.14,-415.77 8495.14,-406.3"/>
<polygon fill="black" stroke="black" points="8498.64,-406.13 8495.14,-396.13 8491.64,-406.13 8498.64,-406.13"/>
<path fill="none" stroke="black" d="M8466.72,-434.55C8466.72,-426.12 8466.72,-415.77 8466.72,-406.3"/>
<polygon fill="black" stroke="black" points="8470.22,-406.13 8466.72,-396.13 8463.22,-406.13 8470.22,-406.13"/>
</g>
<!-- v27 -->
<g id="node42" class="node">
<title>v27</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v32 -->
<g id="node43" class="node">
<title>v32</title>
<polygon fill="none" stroke="black" points="9597.57,-396 8786.72,-396 8786.72,-360 9597.57,-360 9597.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="9569.14,-396 8758.3,-396 8758.3,-360 9569.14,-360 9569.14,-396"/>
<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>
</g>
<!-- v27&#45;&gt;v32 -->
<g id="edge28" class="edge">
<title>v27&#45;&gt;v32</title>
<path fill="none" stroke="black" d="M9192.14,-434.55C9192.14,-426.12 9192.14,-415.77 9192.14,-406.3"/>
<polygon fill="black" stroke="black" points="9195.64,-406.13 9192.14,-396.13 9188.64,-406.13 9195.64,-406.13"/>
<path fill="none" stroke="black" d="M9163.72,-434.55C9163.72,-426.12 9163.72,-415.77 9163.72,-406.3"/>
<polygon fill="black" stroke="black" points="9167.22,-406.13 9163.72,-396.13 9160.22,-406.13 9167.22,-406.13"/>
</g>
<!-- v28 -->
<g id="node44" class="node">
<title>v28</title>
<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"/>
<text text-anchor="middle" x="10021.14" y="-457" font-family="Times,serif" font-size="14.00">v28 (readonly $23 @ readonly $23 = &quot;</text>
<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>
<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"/>
<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>
<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>
</g>
<!-- v33 -->
<g id="node45" class="node">
<title>v33</title>
<polygon fill="none" stroke="black" points="10426.57,-396 9615.72,-396 9615.72,-360 10426.57,-360 10426.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="10398.14,-396 9587.3,-396 9587.3,-360 10398.14,-360 10398.14,-396"/>
<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>
</g>
<!-- v28&#45;&gt;v33 -->
<g id="edge29" class="edge">
<title>v28&#45;&gt;v33</title>
<path fill="none" stroke="black" d="M10021.14,-431.91C10021.14,-424.09 10021.14,-414.99 10021.14,-406.56"/>
<polygon fill="black" stroke="black" points="10024.64,-406.39 10021.14,-396.39 10017.64,-406.39 10024.64,-406.39"/>
<path fill="none" stroke="black" d="M9992.72,-431.91C9992.72,-424.09 9992.72,-414.99 9992.72,-406.56"/>
<polygon fill="black" stroke="black" points="9996.22,-406.39 9992.72,-396.39 9989.22,-406.39 9996.22,-406.39"/>
</g>
<!-- v29 -->
<g id="node46" class="node">
<title>v29</title>
<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"/>
<text text-anchor="middle" x="10850.14" y="-457" font-family="Times,serif" font-size="14.00">v29 (readonly $24 @ readonly $24 = &quot;</text>
<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>
<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"/>
<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>
<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>
</g>
<!-- v35 -->
<g id="node47" class="node">
<title>v35</title>
<polygon fill="none" stroke="black" points="11255.57,-396 10444.72,-396 10444.72,-360 11255.57,-360 11255.57,-396"/>
<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>
<polygon fill="none" stroke="black" points="11227.14,-396 10416.3,-396 10416.3,-360 11227.14,-360 11227.14,-396"/>
<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>
</g>
<!-- v29&#45;&gt;v35 -->
<g id="edge30" class="edge">
<title>v29&#45;&gt;v35</title>
<path fill="none" stroke="black" d="M10850.14,-431.91C10850.14,-424.09 10850.14,-414.99 10850.14,-406.56"/>
<polygon fill="black" stroke="black" points="10853.64,-406.39 10850.14,-396.39 10846.64,-406.39 10853.64,-406.39"/>
<path fill="none" stroke="black" d="M10821.72,-431.91C10821.72,-424.09 10821.72,-414.99 10821.72,-406.56"/>
<polygon fill="black" stroke="black" points="10825.22,-406.39 10821.72,-396.39 10818.22,-406.39 10825.22,-406.39"/>
</g>
<!-- v36 -->
<g id="node48" class="node">
<title>v36</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v37 -->
<g id="node49" class="node">
<title>v37</title>
<polygon fill="none" stroke="black" points="11583.58,-396 11294.71,-396 11294.71,-360 11583.58,-360 11583.58,-396"/>
<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>
<polygon fill="none" stroke="black" points="11592.15,-396 11303.29,-396 11303.29,-360 11592.15,-360 11592.15,-396"/>
<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>
</g>
<!-- v36&#45;&gt;v37 -->
<g id="edge31" class="edge">
<title>v36&#45;&gt;v37</title>
<path fill="none" stroke="black" d="M11439.14,-434.55C11439.14,-426.12 11439.14,-415.77 11439.14,-406.3"/>
<polygon fill="black" stroke="black" points="11442.64,-406.13 11439.14,-396.13 11435.64,-406.13 11442.64,-406.13"/>
<path fill="none" stroke="black" d="M11447.72,-434.55C11447.72,-426.12 11447.72,-415.77 11447.72,-406.3"/>
<polygon fill="black" stroke="black" points="11451.22,-406.13 11447.72,-396.13 11444.22,-406.13 11451.22,-406.13"/>
</g>
<!-- v41 -->
<g id="node51" class="node">
<title>v41</title>
<polygon fill="none" stroke="black" points="6488.43,-324 5971.86,-324 5971.86,-288 6488.43,-288 6488.43,-324"/>
<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>
<polygon fill="none" stroke="black" points="6514.18,-324 5961.26,-324 5961.26,-288 6514.18,-288 6514.18,-324"/>
<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>
</g>
<!-- v41&#45;&gt;v42 -->
<g id="edge36" class="edge">
<title>v41&#45;&gt;v42</title>
<path fill="none" stroke="black" d="M6177.09,-287.97C6146.37,-278.1 6107.51,-265.62 6075.22,-255.25"/>
<polygon fill="black" stroke="black" points="6076.02,-251.84 6065.43,-252.11 6073.88,-258.5 6076.02,-251.84"/>
<path fill="none" stroke="black" d="M6180.29,-287.97C6146.74,-278.01 6104.23,-265.41 6069.11,-254.99"/>
<polygon fill="black" stroke="black" points="6069.99,-251.6 6059.41,-252.11 6068,-258.31 6069.99,-251.6"/>
</g>
<!-- v43&#45;&gt;v56 -->
<g id="edge38" class="edge">
<title>v43&#45;&gt;v56</title>
<path fill="none" stroke="black" d="M2236.04,-252.1C2236.84,-259.79 2237.08,-269.05 2236.75,-277.67"/>
<polygon fill="black" stroke="black" points="2233.25,-277.48 2236.06,-287.7 2240.24,-277.96 2233.25,-277.48"/>
<path fill="none" stroke="black" d="M2115.61,-252.1C2116.42,-259.79 2116.66,-269.05 2116.32,-277.67"/>
<polygon fill="black" stroke="black" points="2112.83,-277.48 2115.63,-287.7 2119.81,-277.96 2112.83,-277.48"/>
</g>
<!-- v43&#45;&gt;v59 -->
<g id="edge37" class="edge">
<title>v43&#45;&gt;v59</title>
<path fill="none" stroke="black" d="M2296.33,-215.97C2335.41,-205.91 2385.04,-193.14 2425.77,-182.65"/>
<polygon fill="black" stroke="black" points="2426.84,-185.99 2435.66,-180.11 2425.1,-179.21 2426.84,-185.99"/>
<path fill="none" stroke="black" d="M2175.91,-215.97C2214.99,-205.91 2264.62,-193.14 2305.35,-182.65"/>
<polygon fill="black" stroke="black" points="2306.42,-185.99 2315.23,-180.11 2304.67,-179.21 2306.42,-185.99"/>
</g>
<!-- v47 -->
<g id="node54" class="node">
<title>v47</title>
<polygon fill="none" stroke="black" points="5564.5,-180 5071.79,-180 5071.79,-144 5564.5,-144 5564.5,-180"/>
<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>
<polygon fill="none" stroke="black" points="5517.07,-180 5024.36,-180 5024.36,-144 5517.07,-144 5517.07,-180"/>
<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>
</g>
<!-- v44&#45;&gt;v47 -->
<g id="edge39" class="edge">
<title>v44&#45;&gt;v47</title>
<path fill="none" stroke="black" d="M5223.72,-215.88C5240.22,-206.64 5260.77,-195.13 5278.48,-185.21"/>
<polygon fill="black" stroke="black" points="5280.43,-188.13 5287.45,-180.19 5277.01,-182.02 5280.43,-188.13"/>
<path fill="none" stroke="black" d="M5176.3,-215.88C5192.79,-206.64 5213.34,-195.13 5231.06,-185.21"/>
<polygon fill="black" stroke="black" points="5233.01,-188.13 5240.02,-180.19 5229.59,-182.02 5233.01,-188.13"/>
</g>
<!-- v47&#45;&gt;v57 -->
<g id="edge41" class="edge">
<title>v47&#45;&gt;v57</title>
<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"/>
<polygon fill="black" stroke="black" points="5386.93,-280.35 5379.55,-287.95 5390.06,-286.62 5386.93,-280.35"/>
<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"/>
<polygon fill="black" stroke="black" points="5339.51,-280.35 5332.12,-287.95 5342.63,-286.62 5339.51,-280.35"/>
</g>
<!-- v45 -->
<g id="node55" class="node">
<title>v45</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v46 -->
<g id="node56" class="node">
<title>v46</title>
<polygon fill="none" stroke="black" points="12304.12,-396 11836.17,-396 11836.17,-360 12304.12,-360 12304.12,-396"/>
<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>
<polygon fill="none" stroke="black" points="12348.69,-396 11880.75,-396 11880.75,-360 12348.69,-360 12348.69,-396"/>
<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>
</g>
<!-- v45&#45;&gt;v46 -->
<g id="edge40" class="edge">
<title>v45&#45;&gt;v46</title>
<path fill="none" stroke="black" d="M12070.14,-434.55C12070.14,-426.12 12070.14,-415.77 12070.14,-406.3"/>
<polygon fill="black" stroke="black" points="12073.64,-406.13 12070.14,-396.13 12066.64,-406.13 12073.64,-406.13"/>
<path fill="none" stroke="black" d="M12114.72,-434.55C12114.72,-426.12 12114.72,-415.77 12114.72,-406.3"/>
<polygon fill="black" stroke="black" points="12118.22,-406.13 12114.72,-396.13 12111.22,-406.13 12118.22,-406.13"/>
</g>
<!-- v48 -->
<g id="node57" class="node">
<title>v48</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v50 -->
<g id="node58" class="node">
<title>v50</title>
<polygon fill="none" stroke="black" points="12796.43,-396 12321.86,-396 12321.86,-360 12796.43,-360 12796.43,-396"/>
<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>
<polygon fill="none" stroke="black" points="12847.01,-396 12372.43,-396 12372.43,-360 12847.01,-360 12847.01,-396"/>
<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>
</g>
<!-- v48&#45;&gt;v50 -->
<g id="edge42" class="edge">
<title>v48&#45;&gt;v50</title>
<path fill="none" stroke="black" d="M12559.14,-434.55C12559.14,-426.12 12559.14,-415.77 12559.14,-406.3"/>
<polygon fill="black" stroke="black" points="12562.64,-406.13 12559.14,-396.13 12555.64,-406.13 12562.64,-406.13"/>
<path fill="none" stroke="black" d="M12609.72,-434.55C12609.72,-426.12 12609.72,-415.77 12609.72,-406.3"/>
<polygon fill="black" stroke="black" points="12613.22,-406.13 12609.72,-396.13 12606.22,-406.13 12613.22,-406.13"/>
</g>
<!-- v51&#45;&gt;v18 -->
<g id="edge44" class="edge">
<title>v51&#45;&gt;v18</title>
<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"/>
<polygon fill="black" stroke="black" points="1580.58,-187.03 1588.52,-180.01 1577.94,-180.54 1580.58,-187.03"/>
<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"/>
<polygon fill="black" stroke="black" points="1623.16,-187.03 1631.1,-180.01 1620.52,-180.54 1623.16,-187.03"/>
</g>
<!-- v51&#45;&gt;v62 -->
<g id="edge45" class="edge">
<title>v51&#45;&gt;v62</title>
<path fill="none" stroke="black" d="M1466.65,-287.97C1498.36,-278.06 1538.5,-265.51 1571.76,-255.12"/>
<polygon fill="black" stroke="black" points="1572.89,-258.43 1581.39,-252.11 1570.8,-251.75 1572.89,-258.43"/>
<path fill="none" stroke="black" d="M1509.23,-287.97C1540.94,-278.06 1581.07,-265.51 1614.33,-255.12"/>
<polygon fill="black" stroke="black" points="1615.46,-258.43 1623.96,-252.11 1613.38,-251.75 1615.46,-258.43"/>
</g>
<!-- v51&#45;&gt;v71 -->
<g id="edge46" class="edge">
<title>v51&#45;&gt;v71</title>
<path fill="none" stroke="black" d="M1326,-287.97C1274.07,-277.7 1207.84,-264.6 1154.23,-254"/>
<polygon fill="black" stroke="black" points="1154.86,-250.56 1144.37,-252.05 1153.5,-257.42 1154.86,-250.56"/>
<path fill="none" stroke="black" d="M1368.57,-287.97C1316.65,-277.7 1250.42,-264.6 1196.8,-254"/>
<polygon fill="black" stroke="black" points="1197.43,-250.56 1186.94,-252.05 1196.07,-257.42 1197.43,-250.56"/>
</g>
<!-- v53 -->
<g id="node60" class="node">
<title>v53</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v54 -->
<g id="node61" class="node">
<title>v54</title>
<polygon fill="none" stroke="black" points="13345.77,-396 12974.52,-396 12974.52,-360 13345.77,-360 13345.77,-396"/>
<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>
<polygon fill="none" stroke="black" points="13433.35,-396 13062.09,-396 13062.09,-360 13433.35,-360 13433.35,-396"/>
<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>
</g>
<!-- v53&#45;&gt;v54 -->
<g id="edge48" class="edge">
<title>v53&#45;&gt;v54</title>
<path fill="none" stroke="black" d="M13160.14,-434.55C13160.14,-426.12 13160.14,-415.77 13160.14,-406.3"/>
<polygon fill="black" stroke="black" points="13163.64,-406.13 13160.14,-396.13 13156.64,-406.13 13163.64,-406.13"/>
<path fill="none" stroke="black" d="M13247.72,-434.55C13247.72,-426.12 13247.72,-415.77 13247.72,-406.3"/>
<polygon fill="black" stroke="black" points="13251.22,-406.13 13247.72,-396.13 13244.22,-406.13 13251.22,-406.13"/>
</g>
<!-- v55 -->
<g id="node62" class="node">
<title>v55</title>
<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"/>
<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>
<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"/>
<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>
</g>
<!-- v55&#45;&gt;v0 -->
<g id="edge49" class="edge">
<title>v55&#45;&gt;v0</title>
<path fill="none" stroke="black" d="M434.14,-434.55C434.14,-426.12 434.14,-415.77 434.14,-406.3"/>
<polygon fill="black" stroke="black" points="437.64,-406.13 434.14,-396.13 430.64,-406.13 437.64,-406.13"/>
<path fill="none" stroke="black" d="M449.72,-434.55C449.72,-426.12 449.72,-415.77 449.72,-406.3"/>
<polygon fill="black" stroke="black" points="453.22,-406.13 449.72,-396.13 446.22,-406.13 453.22,-406.13"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

@@ -4,298 +4,298 @@
<!-- Generated by graphviz version 6.0.1 (20220924.0800)
-->
<!-- Title: BuildDefUseGraph Pages: 1 -->
<svg width="5273pt" height="476pt"
viewBox="0.00 0.00 5272.64 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="5435pt" height="476pt"
viewBox="0.00 0.00 5434.75 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 472)">
<title>BuildDefUseGraph</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-472 5268.64,-472 5268.64,4 -4,4"/>
<polygon fill="white" stroke="none" points="-4,4 -4,-472 5430.75,-472 5430.75,4 -4,4"/>
<!-- v0 -->
<g id="node1" class="node">
<title>v0</title>
<polygon fill="none" stroke="black" points="801.01,-468 476.34,-468 476.34,-432 801.01,-432 801.01,-468"/>
<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>
<polygon fill="none" stroke="black" points="866.19,-468 519.21,-468 519.21,-432 866.19,-432 866.19,-468"/>
<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>
</g>
<!-- v7 -->
<g id="node2" class="node">
<title>v7</title>
<polygon fill="none" stroke="black" points="611.1,-396 154.24,-396 154.24,-360 611.1,-360 611.1,-396"/>
<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>
<polygon fill="none" stroke="black" points="665.13,-396 208.26,-396 208.26,-360 665.13,-360 665.13,-396"/>
<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>
</g>
<!-- v0&#45;&gt;v7 -->
<g id="edge1" class="edge">
<title>v0&#45;&gt;v7</title>
<path fill="none" stroke="black" d="M576.37,-431.97C539.83,-421.97 493.48,-409.3 455.28,-398.85"/>
<polygon fill="black" stroke="black" points="455.82,-395.37 445.25,-396.11 453.97,-402.12 455.82,-395.37"/>
<path fill="none" stroke="black" d="M630.4,-431.97C593.85,-421.97 547.5,-409.3 509.31,-398.85"/>
<polygon fill="black" stroke="black" points="509.84,-395.37 499.27,-396.11 508,-402.12 509.84,-395.37"/>
</g>
<!-- v12 -->
<g id="node3" class="node">
<title>v12</title>
<polygon fill="none" stroke="black" points="583.46,-252 309.89,-252 309.89,-216 583.46,-216 583.46,-252"/>
<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>
<polygon fill="none" stroke="black" points="637.48,-252 363.91,-252 363.91,-216 637.48,-216 637.48,-252"/>
<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>
</g>
<!-- v0&#45;&gt;v12 -->
<g id="edge2" class="edge">
<title>v0&#45;&gt;v12</title>
<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"/>
<polygon fill="black" stroke="black" points="577.52,-252.77 566.95,-252.06 574.77,-259.21 577.52,-252.77"/>
<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"/>
<polygon fill="black" stroke="black" points="631.55,-252.77 620.98,-252.06 628.8,-259.21 631.55,-252.77"/>
</g>
<!-- v15 -->
<g id="node4" class="node">
<title>v15</title>
<polygon fill="none" stroke="black" points="975.63,-180 377.71,-180 377.71,-144 975.63,-144 975.63,-180"/>
<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>
<polygon fill="none" stroke="black" points="1029.66,-180 431.73,-180 431.73,-144 1029.66,-144 1029.66,-180"/>
<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>
</g>
<!-- v0&#45;&gt;v15 -->
<g id="edge3" class="edge">
<title>v0&#45;&gt;v15</title>
<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"/>
<polygon fill="black" stroke="black" points="681.13,-190.15 677.37,-180.24 674.13,-190.32 681.13,-190.15"/>
<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"/>
<polygon fill="black" stroke="black" points="735.15,-190.15 731.4,-180.24 728.16,-190.32 735.15,-190.15"/>
</g>
<!-- v9 -->
<g id="node15" class="node">
<title>v9</title>
<polygon fill="none" stroke="black" points="611.1,-324 154.24,-324 154.24,-288 611.1,-288 611.1,-324"/>
<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>
<polygon fill="none" stroke="black" points="665.13,-324 208.26,-324 208.26,-288 665.13,-288 665.13,-324"/>
<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>
</g>
<!-- v7&#45;&gt;v9 -->
<g id="edge10" class="edge">
<title>v7&#45;&gt;v9</title>
<path fill="none" stroke="black" d="M382.67,-359.7C382.67,-351.98 382.67,-342.71 382.67,-334.11"/>
<polygon fill="black" stroke="black" points="386.17,-334.1 382.67,-324.1 379.17,-334.1 386.17,-334.1"/>
<path fill="none" stroke="black" d="M436.7,-359.7C436.7,-351.98 436.7,-342.71 436.7,-334.11"/>
<polygon fill="black" stroke="black" points="440.2,-334.1 436.7,-324.1 433.2,-334.1 440.2,-334.1"/>
</g>
<!-- v12&#45;&gt;v15 -->
<g id="edge15" class="edge">
<title>v12&#45;&gt;v15</title>
<path fill="none" stroke="black" d="M502.64,-215.97C535.2,-206.06 576.41,-193.51 610.56,-183.12"/>
<polygon fill="black" stroke="black" points="611.9,-186.37 620.45,-180.11 609.86,-179.67 611.9,-186.37"/>
<path fill="none" stroke="black" d="M556.67,-215.97C589.22,-206.06 630.44,-193.51 664.58,-183.12"/>
<polygon fill="black" stroke="black" points="665.93,-186.37 674.48,-180.11 663.89,-179.67 665.93,-186.37"/>
</g>
<!-- v13 -->
<g id="node18" class="node">
<title>v13</title>
<polygon fill="none" stroke="black" points="359.51,-180 -0.17,-180 -0.17,-144 359.51,-144 359.51,-180"/>
<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>
<polygon fill="none" stroke="black" points="413.59,-180 -0.2,-180 -0.2,-144 413.59,-144 413.59,-180"/>
<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>
</g>
<!-- v12&#45;&gt;v13 -->
<g id="edge14" class="edge">
<title>v12&#45;&gt;v13</title>
<path fill="none" stroke="black" d="M381.7,-215.97C343.34,-205.91 294.62,-193.14 254.64,-182.65"/>
<polygon fill="black" stroke="black" points="255.5,-179.26 244.94,-180.11 253.72,-186.03 255.5,-179.26"/>
<path fill="none" stroke="black" d="M429.15,-215.97C386.57,-205.83 332.39,-192.93 288.16,-182.4"/>
<polygon fill="black" stroke="black" points="288.85,-178.96 278.31,-180.05 287.22,-185.77 288.85,-178.96"/>
</g>
<!-- v1 -->
<g id="node5" class="node">
<title>v1</title>
<polygon fill="none" stroke="black" points="1328.01,-180 993.33,-180 993.33,-144 1328.01,-144 1328.01,-180"/>
<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>
<polygon fill="none" stroke="black" points="1404.19,-180 1047.2,-180 1047.2,-144 1404.19,-144 1404.19,-180"/>
<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>
</g>
<!-- v17 -->
<g id="node6" class="node">
<title>v17</title>
<polygon fill="none" stroke="black" points="902.6,-108 438.74,-108 438.74,-72 902.6,-72 902.6,-108"/>
<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>
<polygon fill="none" stroke="black" points="948.63,-108 484.76,-108 484.76,-72 948.63,-72 948.63,-108"/>
<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>
</g>
<!-- v1&#45;&gt;v17 -->
<g id="edge4" class="edge">
<title>v1&#45;&gt;v17</title>
<path fill="none" stroke="black" d="M1041.43,-143.97C968.37,-133.53 874.83,-120.17 799.99,-109.47"/>
<polygon fill="black" stroke="black" points="800.42,-106 790.02,-108.05 799.43,-112.93 800.42,-106"/>
<path fill="none" stroke="black" d="M1101.83,-143.97C1025.93,-133.53 928.77,-120.17 851.03,-109.47"/>
<polygon fill="black" stroke="black" points="851.06,-105.95 840.68,-108.05 850.1,-112.88 851.06,-105.95"/>
</g>
<!-- v20 -->
<g id="node23" class="node">
<title>v20</title>
<polygon fill="none" stroke="black" points="1016.82,-36 324.52,-36 324.52,0 1016.82,0 1016.82,-36"/>
<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>
<polygon fill="none" stroke="black" points="1062.85,-36 370.55,-36 370.55,0 1062.85,0 1062.85,-36"/>
<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>
</g>
<!-- v17&#45;&gt;v20 -->
<g id="edge19" class="edge">
<title>v17&#45;&gt;v20</title>
<path fill="none" stroke="black" d="M670.67,-71.7C670.67,-63.98 670.67,-54.71 670.67,-46.11"/>
<polygon fill="black" stroke="black" points="674.17,-46.1 670.67,-36.1 667.17,-46.1 674.17,-46.1"/>
<path fill="none" stroke="black" d="M716.7,-71.7C716.7,-63.98 716.7,-54.71 716.7,-46.11"/>
<polygon fill="black" stroke="black" points="720.2,-46.1 716.7,-36.1 713.2,-46.1 720.2,-46.1"/>
</g>
<!-- v2 -->
<g id="node7" class="node">
<title>v2</title>
<polygon fill="none" stroke="black" points="1202.46,-468 910.88,-468 910.88,-432 1202.46,-432 1202.46,-468"/>
<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>
<polygon fill="none" stroke="black" points="1274.66,-468 946.73,-468 946.73,-432 1274.66,-432 1274.66,-468"/>
<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>
</g>
<!-- v6 -->
<g id="node8" class="node">
<title>v6</title>
<polygon fill="none" stroke="black" points="1408.76,-396 704.59,-396 704.59,-360 1408.76,-360 1408.76,-396"/>
<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>
<polygon fill="none" stroke="black" points="1462.78,-396 758.61,-396 758.61,-360 1462.78,-360 1462.78,-396"/>
<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>
</g>
<!-- v2&#45;&gt;v6 -->
<g id="edge5" class="edge">
<title>v2&#45;&gt;v6</title>
<path fill="none" stroke="black" d="M1056.67,-431.7C1056.67,-423.98 1056.67,-414.71 1056.67,-406.11"/>
<polygon fill="black" stroke="black" points="1060.17,-406.1 1056.67,-396.1 1053.17,-406.1 1060.17,-406.1"/>
<path fill="none" stroke="black" d="M1110.7,-431.7C1110.7,-423.98 1110.7,-414.71 1110.7,-406.11"/>
<polygon fill="black" stroke="black" points="1114.2,-406.1 1110.7,-396.1 1107.2,-406.1 1114.2,-406.1"/>
</g>
<!-- v3 -->
<g id="node9" class="node">
<title>v3</title>
<polygon fill="none" stroke="black" points="1921.8,-468 1635.54,-468 1635.54,-432 1921.8,-432 1921.8,-468"/>
<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>
<polygon fill="none" stroke="black" points="1994,-468 1671.39,-468 1671.39,-432 1994,-432 1994,-468"/>
<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>
</g>
<!-- v5 -->
<g id="node10" class="node">
<title>v5</title>
<polygon fill="none" stroke="black" points="2130.76,-396 1426.59,-396 1426.59,-360 2130.76,-360 2130.76,-396"/>
<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>
<polygon fill="none" stroke="black" points="2184.78,-396 1480.61,-396 1480.61,-360 2184.78,-360 2184.78,-396"/>
<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>
</g>
<!-- v3&#45;&gt;v5 -->
<g id="edge6" class="edge">
<title>v3&#45;&gt;v5</title>
<path fill="none" stroke="black" d="M1778.67,-431.7C1778.67,-423.98 1778.67,-414.71 1778.67,-406.11"/>
<polygon fill="black" stroke="black" points="1782.17,-406.1 1778.67,-396.1 1775.17,-406.1 1782.17,-406.1"/>
<path fill="none" stroke="black" d="M1832.7,-431.7C1832.7,-423.98 1832.7,-414.71 1832.7,-406.11"/>
<polygon fill="black" stroke="black" points="1836.2,-406.1 1832.7,-396.1 1829.2,-406.1 1836.2,-406.1"/>
</g>
<!-- v4 -->
<g id="node11" class="node">
<title>v4</title>
<polygon fill="none" stroke="black" points="2888.64,-396 2148.7,-396 2148.7,-360 2888.64,-360 2888.64,-396"/>
<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>
<polygon fill="none" stroke="black" points="2942.66,-396 2202.73,-396 2202.73,-360 2942.66,-360 2942.66,-396"/>
<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>
</g>
<!-- v8 -->
<g id="node12" class="node">
<title>v8</title>
<polygon fill="none" stroke="black" points="2488.92,-324 2030.42,-324 2030.42,-288 2488.92,-288 2488.92,-324"/>
<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>
<polygon fill="none" stroke="black" points="2542.95,-324 2084.45,-324 2084.45,-288 2542.95,-288 2542.95,-324"/>
<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>
</g>
<!-- v4&#45;&gt;v8 -->
<g id="edge7" class="edge">
<title>v4&#45;&gt;v8</title>
<path fill="none" stroke="black" d="M2455.64,-359.97C2418.51,-349.93 2371.38,-337.19 2332.64,-326.72"/>
<polygon fill="black" stroke="black" points="2333.55,-323.34 2322.98,-324.11 2331.72,-330.1 2333.55,-323.34"/>
<path fill="none" stroke="black" d="M2509.67,-359.97C2472.54,-349.93 2425.4,-337.19 2386.66,-326.72"/>
<polygon fill="black" stroke="black" points="2387.57,-323.34 2377.01,-324.11 2385.75,-330.1 2387.57,-323.34"/>
</g>
<!-- v18 -->
<g id="node13" class="node">
<title>v18</title>
<polygon fill="none" stroke="black" points="2719.42,-108 2253.92,-108 2253.92,-72 2719.42,-72 2719.42,-108"/>
<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>
<polygon fill="none" stroke="black" points="2773.45,-108 2307.95,-108 2307.95,-72 2773.45,-72 2773.45,-108"/>
<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>
</g>
<!-- v4&#45;&gt;v18 -->
<g id="edge8" class="edge">
<title>v4&#45;&gt;v18</title>
<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"/>
<polygon fill="black" stroke="black" points="2519.67,-112.46 2509.98,-108.18 2514.88,-117.57 2519.67,-112.46"/>
<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"/>
<polygon fill="black" stroke="black" points="2573.69,-112.46 2564,-108.18 2568.91,-117.57 2573.69,-112.46"/>
</g>
<!-- v25 -->
<g id="node14" class="node">
<title>v25</title>
<polygon fill="none" stroke="black" points="2528.41,-180 2304.93,-180 2304.93,-144 2528.41,-144 2528.41,-180"/>
<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>
<polygon fill="none" stroke="black" points="2582.44,-180 2358.96,-180 2358.96,-144 2582.44,-144 2582.44,-180"/>
<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>
</g>
<!-- v4&#45;&gt;v25 -->
<g id="edge9" class="edge">
<title>v4&#45;&gt;v25</title>
<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"/>
<polygon fill="black" stroke="black" points="2468.81,-182.27 2458.42,-180.21 2465.26,-188.3 2468.81,-182.27"/>
<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"/>
<polygon fill="black" stroke="black" points="2522.84,-182.27 2512.44,-180.21 2519.29,-188.3 2522.84,-182.27"/>
</g>
<!-- v10 -->
<g id="node16" class="node">
<title>v10</title>
<polygon fill="none" stroke="black" points="2490.42,-252 2024.92,-252 2024.92,-216 2490.42,-216 2490.42,-252"/>
<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>
<polygon fill="none" stroke="black" points="2544.45,-252 2078.95,-252 2078.95,-216 2544.45,-216 2544.45,-252"/>
<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>
</g>
<!-- v8&#45;&gt;v10 -->
<g id="edge11" class="edge">
<title>v8&#45;&gt;v10</title>
<path fill="none" stroke="black" d="M2259.18,-287.7C2258.96,-279.98 2258.69,-270.71 2258.45,-262.11"/>
<polygon fill="black" stroke="black" points="2261.94,-262 2258.16,-252.1 2254.95,-262.2 2261.94,-262"/>
<path fill="none" stroke="black" d="M2313.2,-287.7C2312.98,-279.98 2312.72,-270.71 2312.47,-262.11"/>
<polygon fill="black" stroke="black" points="2315.97,-262 2312.19,-252.1 2308.97,-262.2 2315.97,-262"/>
</g>
<!-- v25&#45;&gt;v18 -->
<g id="edge22" class="edge">
<title>v25&#45;&gt;v18</title>
<path fill="none" stroke="black" d="M2433.97,-143.7C2442.54,-135.14 2453.01,-124.66 2462.37,-115.3"/>
<polygon fill="black" stroke="black" points="2464.97,-117.65 2469.57,-108.1 2460.02,-112.7 2464.97,-117.65"/>
<path fill="none" stroke="black" d="M2488,-143.7C2496.56,-135.14 2507.04,-124.66 2516.39,-115.3"/>
<polygon fill="black" stroke="black" points="2519,-117.65 2523.59,-108.1 2514.05,-112.7 2519,-117.65"/>
</g>
<!-- v9&#45;&gt;v12 -->
<g id="edge12" class="edge">
<title>v9&#45;&gt;v12</title>
<path fill="none" stroke="black" d="M398.49,-287.7C406.24,-279.22 415.71,-268.86 424.2,-259.58"/>
<polygon fill="black" stroke="black" points="426.87,-261.85 431.03,-252.1 421.7,-257.12 426.87,-261.85"/>
<path fill="none" stroke="black" d="M452.52,-287.7C460.27,-279.22 469.74,-268.86 478.22,-259.58"/>
<polygon fill="black" stroke="black" points="480.89,-261.85 485.06,-252.1 475.73,-257.12 480.89,-261.85"/>
</g>
<!-- v10&#45;&gt;v25 -->
<g id="edge13" class="edge">
<title>v10&#45;&gt;v25</title>
<path fill="none" stroke="black" d="M2296.57,-215.88C2318.3,-206.31 2345.57,-194.3 2368.64,-184.15"/>
<polygon fill="black" stroke="black" points="2370.16,-187.3 2377.9,-180.07 2367.34,-180.89 2370.16,-187.3"/>
<path fill="none" stroke="black" d="M2350.59,-215.88C2372.33,-206.31 2399.6,-194.3 2422.66,-184.15"/>
<polygon fill="black" stroke="black" points="2424.19,-187.3 2431.93,-180.07 2421.36,-180.89 2424.19,-187.3"/>
</g>
<!-- v11 -->
<g id="node17" class="node">
<title>v11</title>
<polygon fill="none" stroke="black" points="3002.51,-468 2670.84,-468 2670.84,-432 3002.51,-432 3002.51,-468"/>
<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>
<polygon fill="none" stroke="black" points="3110.58,-468 2724.81,-468 2724.81,-432 3110.58,-432 3110.58,-468"/>
<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>
</g>
<!-- v13&#45;&gt;v17 -->
<g id="edge16" class="edge">
<title>v13&#45;&gt;v17</title>
<path fill="none" stroke="black" d="M299.16,-143.97C372.37,-133.53 466.1,-120.17 541.09,-109.47"/>
<polygon fill="black" stroke="black" points="541.67,-112.93 551.08,-108.05 540.68,-106 541.67,-112.93"/>
<path fill="none" stroke="black" d="M330.8,-143.97C406.85,-133.53 504.21,-120.17 582.1,-109.47"/>
<polygon fill="black" stroke="black" points="583.04,-112.88 592.47,-108.05 582.09,-105.94 583.04,-112.88"/>
</g>
<!-- v14 -->
<g id="node19" class="node">
<title>v14</title>
<polygon fill="none" stroke="black" points="3676.97,-468 3020.38,-468 3020.38,-432 3676.97,-432 3676.97,-468"/>
<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>
<polygon fill="none" stroke="black" points="3784.99,-468 3128.4,-468 3128.4,-432 3784.99,-432 3784.99,-468"/>
<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>
</g>
<!-- v19 -->
<g id="node20" class="node">
<title>v19</title>
<polygon fill="none" stroke="black" points="3724.15,-396 2973.19,-396 2973.19,-360 3724.15,-360 3724.15,-396"/>
<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>
<polygon fill="none" stroke="black" points="3832.18,-396 3081.22,-396 3081.22,-360 3832.18,-360 3832.18,-396"/>
<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>
</g>
<!-- v14&#45;&gt;v19 -->
<g id="edge17" class="edge">
<title>v14&#45;&gt;v19</title>
<path fill="none" stroke="black" d="M3348.67,-431.7C3348.67,-423.98 3348.67,-414.71 3348.67,-406.11"/>
<polygon fill="black" stroke="black" points="3352.17,-406.1 3348.67,-396.1 3345.17,-406.1 3352.17,-406.1"/>
<path fill="none" stroke="black" d="M3456.7,-431.7C3456.7,-423.98 3456.7,-414.71 3456.7,-406.11"/>
<polygon fill="black" stroke="black" points="3460.2,-406.1 3456.7,-396.1 3453.2,-406.1 3460.2,-406.1"/>
</g>
<!-- v16 -->
<g id="node21" class="node">
<title>v16</title>
<polygon fill="none" stroke="black" points="4468.41,-468 3728.94,-468 3728.94,-432 4468.41,-432 4468.41,-468"/>
<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>
<polygon fill="none" stroke="black" points="4594.61,-468 3818.79,-468 3818.79,-432 4594.61,-432 4594.61,-468"/>
<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>
</g>
<!-- v21 -->
<g id="node22" class="node">
<title>v21</title>
<polygon fill="none" stroke="black" points="4455.31,-396 3742.03,-396 3742.03,-360 4455.31,-360 4455.31,-396"/>
<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>
<polygon fill="none" stroke="black" points="4563.34,-396 3850.06,-396 3850.06,-360 4563.34,-360 4563.34,-396"/>
<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>
</g>
<!-- v16&#45;&gt;v21 -->
<g id="edge18" class="edge">
<title>v16&#45;&gt;v21</title>
<path fill="none" stroke="black" d="M4098.67,-431.7C4098.67,-423.98 4098.67,-414.71 4098.67,-406.11"/>
<polygon fill="black" stroke="black" points="4102.17,-406.1 4098.67,-396.1 4095.17,-406.1 4102.17,-406.1"/>
<path fill="none" stroke="black" d="M4206.7,-431.7C4206.7,-423.98 4206.7,-414.71 4206.7,-406.11"/>
<polygon fill="black" stroke="black" points="4210.2,-406.1 4206.7,-396.1 4203.2,-406.1 4210.2,-406.1"/>
</g>
<!-- v22 -->
<g id="node24" class="node">
<title>v22</title>
<polygon fill="none" stroke="black" points="5264.6,-468 4486.74,-468 4486.74,-432 5264.6,-432 5264.6,-468"/>
<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>
<polygon fill="none" stroke="black" points="5426.81,-468 4612.59,-468 4612.59,-432 5426.81,-432 5426.81,-468"/>
<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>
</g>
<!-- v23 -->
<g id="node25" class="node">
<title>v23</title>
<polygon fill="none" stroke="black" points="5013.1,-396 4738.24,-396 4738.24,-360 5013.1,-360 5013.1,-396"/>
<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>
<polygon fill="none" stroke="black" points="5157.13,-396 4882.26,-396 4882.26,-360 5157.13,-360 5157.13,-396"/>
<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>
</g>
<!-- v22&#45;&gt;v23 -->
<g id="edge20" class="edge">
<title>v22&#45;&gt;v23</title>
<path fill="none" stroke="black" d="M4875.67,-431.7C4875.67,-423.98 4875.67,-414.71 4875.67,-406.11"/>
<polygon fill="black" stroke="black" points="4879.17,-406.1 4875.67,-396.1 4872.17,-406.1 4879.17,-406.1"/>
<path fill="none" stroke="black" d="M5019.7,-431.7C5019.7,-423.98 5019.7,-414.71 5019.7,-406.11"/>
<polygon fill="black" stroke="black" points="5023.2,-406.1 5019.7,-396.1 5016.2,-406.1 5023.2,-406.1"/>
</g>
<!-- v24 -->
<g id="node26" class="node">
<title>v24</title>
<polygon fill="none" stroke="black" points="2652.38,-468 2384.96,-468 2384.96,-432 2652.38,-432 2652.38,-468"/>
<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>
<polygon fill="none" stroke="black" points="2706.41,-468 2438.98,-468 2438.98,-432 2706.41,-432 2706.41,-468"/>
<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>
</g>
<!-- v24&#45;&gt;v4 -->
<g id="edge21" class="edge">
<title>v24&#45;&gt;v4</title>
<path fill="none" stroke="black" d="M2518.67,-431.7C2518.67,-423.98 2518.67,-414.71 2518.67,-406.11"/>
<polygon fill="black" stroke="black" points="2522.17,-406.1 2518.67,-396.1 2515.17,-406.1 2522.17,-406.1"/>
<path fill="none" stroke="black" d="M2572.7,-431.7C2572.7,-423.98 2572.7,-414.71 2572.7,-406.11"/>
<polygon fill="black" stroke="black" points="2576.2,-406.1 2572.7,-396.1 2569.2,-406.1 2576.2,-406.1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

@@ -34,14 +34,14 @@ function foo$0() {
```
bb0:
readonly a$2 = Array []
readonly b$3 = Object { }
Const readonly a$2 = Array []
Const readonly b$3 = Object { }
Call mutable foo$4(mutable a$2, mutable b$3)
readonly $6 = "div"
readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
Const readonly $6 = "div"
Let readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
Call mutable foo$4(mutable b$3)
readonly $7 = "div"
readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
Const readonly $7 = "div"
Const readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
Return frozen $8
```
@@ -49,10 +49,11 @@ bb0:
```javascript
function Component$0(props$1) {
a$2 = [];
b$3 = {};
const a$2 = [];
const b$3 = {};
foo$4(a$2, b$3);
_$5 = <div a={a$2}></div>;
let _$5 = <div a={a$2}></div>;
foo$4(b$3);
return <div a={a$2} b={b$3}></div>;
}
@@ -35,44 +35,44 @@ function Component(props) {
```
bb0:
frozen items$2 = frozen props$1.items
frozen maxItems$3 = frozen props$1.maxItems
readonly renderedItems$4 = Array []
readonly seen$5 = New mutable Set$6()
readonly $9 = 0
readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)
Const frozen items$2 = frozen props$1.items
Const frozen maxItems$3 = frozen props$1.maxItems
Const readonly renderedItems$4 = Array []
Const readonly seen$5 = New mutable Set$6()
Const readonly $9 = 0
Const readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)
Goto bb1
bb1:
If (frozen items$2) then:bb3 else:bb2
bb3:
readonly $11 = null
frozen $12 = Binary frozen item$10 == readonly $11
Const readonly $11 = null
Const frozen $12 = Binary frozen item$10 == readonly $11
If (frozen $12) then:bb8 else:bb9
bb2:
readonly count$17 = readonly renderedItems$4.length
readonly $18 = "div"
readonly $19 = "\n "
readonly $20 = "h1"
readonly $21 = " Items"
readonly $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
readonly $23 = "\n "
readonly $24 = "\n "
readonly $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}</frozen $18>
Const readonly count$17 = readonly renderedItems$4.length
Const readonly $18 = "div"
Const readonly $19 = "\n "
Const readonly $20 = "h1"
Const readonly $21 = " Items"
Const readonly $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
Const readonly $23 = "\n "
Const readonly $24 = "\n "
Const readonly $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}</frozen $18>
Return frozen $25
bb8:
frozen $13 = frozen $12
Const frozen $13 = frozen $12
Goto bb7
bb9:
readonly $13 = Call mutable seen$5.has(frozen item$10)
Const readonly $13 = Call mutable seen$5.has(frozen item$10)
Goto bb7
bb7:
If (frozen $13) then:bb1 else:bb4
bb4:
Call mutable seen$5.add(frozen item$10)
readonly $14 = "div"
readonly $15 = JSX <frozen $14>{frozen item$10}</frozen $14>
Const readonly $14 = "div"
Const readonly $15 = JSX <frozen $14>{frozen item$10}</frozen $14>
Call mutable renderedItems$4.push(mutable $15)
frozen $16 = Binary readonly renderedItems$4.length >= readonly max$7
Const frozen $16 = Binary readonly renderedItems$4.length >= readonly max$7
If (frozen $16) then:bb2 else:bb1
```
@@ -80,11 +80,11 @@ bb4:
```javascript
function Component$0(props$1) {
items$2 = props$1.items;
maxItems$3 = props$1.maxItems;
renderedItems$4 = [];
seen$5 = new Set$6();
max$7 = Math$8.max(0, maxItems$3);
const items$2 = props$1.items;
const maxItems$3 = props$1.maxItems;
const renderedItems$4 = [];
const seen$5 = new Set$6();
const max$7 = Math$8.max(0, maxItems$3);
("<<TODO: handle complex control flow in codegen>>");
}
@@ -78,11 +78,11 @@ function Component(props) {
```
bb0:
readonly a_DEBUG$2 = Array []
Const readonly a_DEBUG$2 = Array []
Call mutable a_DEBUG$2.push(frozen props$1.a)
If (frozen props$1.b) then:bb2 else:bb1
bb2:
readonly $3 = null
Const readonly $3 = null
Return frozen $3
bb1:
Call mutable a_DEBUG$2.push(frozen props$1.d)
@@ -93,7 +93,7 @@ bb1:
```javascript
function Component$0(props$1) {
a_DEBUG$2 = [];
const a_DEBUG$2 = [];
a_DEBUG$2.push(props$1.a);
if (props$1.b) {
return null;
@@ -108,7 +108,7 @@ function Component$0(props$1) {
```
bb0:
readonly a$2 = Array []
Const readonly a$2 = Array []
Call mutable a$2.push(frozen props$1.a)
If (frozen props$1.b) then:bb2 else:bb1
bb2:
@@ -123,7 +123,7 @@ bb1:
```javascript
function Component$0(props$1) {
a$2 = [];
const a$2 = [];
a$2.push(props$1.a);
if (props$1.b) {
a$2.push(props$1.c);
@@ -139,12 +139,12 @@ function Component$0(props$1) {
```
bb0:
readonly a$2 = Array []
Const readonly a$2 = Array []
Call mutable a$2.push(frozen props$1.a)
If (frozen props$1.b) then:bb2 else:bb1
bb2:
Call mutable a$2.push(frozen props$1.c)
readonly $3 = null
Const readonly $3 = null
Return frozen $3
bb1:
Call mutable a$2.push(frozen props$1.d)
@@ -155,7 +155,7 @@ bb1:
```javascript
function Component$0(props$1) {
a$2 = [];
const a$2 = [];
a$2.push(props$1.a);
if (props$1.b) {
a$2.push(props$1.c);
@@ -171,7 +171,7 @@ function Component$0(props$1) {
```
bb0:
readonly a$2 = Array []
Const readonly a$2 = Array []
Call mutable a$2.push(frozen props$1.a)
If (frozen props$1.b) then:bb2 else:bb1
bb2:
@@ -186,7 +186,7 @@ bb1:
```javascript
function Component$0(props$1) {
a$2 = [];
const a$2 = [];
a$2.push(props$1.a);
if (props$1.b) {
a$2.push(props$1.c);
@@ -202,7 +202,7 @@ function Component$0(props$1) {
```
bb0:
readonly a$2 = Array []
Const readonly a$2 = Array []
Call mutable a$2.push(frozen props$1.a)
If (frozen props$1.b) then:bb1 else:bb2
bb1:
@@ -217,7 +217,7 @@ bb2:
```javascript
function Component$0(props$1) {
a$2 = [];
const a$2 = [];
a$2.push(props$1.a);
if (props$1.b) {
a$2.push(props$1.d);
@@ -67,8 +67,8 @@ function mayMutate() {}
```
bb0:
readonly a$2 = Array []
readonly b$3 = Array []
Const readonly a$2 = Array []
Const readonly b$3 = Array []
If (readonly b$3) then:bb2 else:bb1
bb2:
Call mutable a$2.push(frozen props$1.p0)
@@ -79,7 +79,7 @@ bb4:
Call mutable b$3.push(frozen props$1.p2)
Goto bb3
bb3:
readonly $5 = JSX <frozen Foo$4 a={frozen a$2} b={frozen b$3} ></frozen Foo$4>
Const readonly $5 = JSX <frozen Foo$4 a={frozen a$2} b={frozen b$3} ></frozen Foo$4>
Return frozen $5
```
@@ -87,8 +87,8 @@ bb3:
```javascript
function Component$0(props$1) {
a$2 = [];
b$3 = [];
const a$2 = [];
const b$3 = [];
if (b$3) {
a$2.push(props$1.p0);
("<<TODO: handle complex control flow in codegen>>");
@@ -107,9 +107,9 @@ function Component$0(props$1) {
```
bb0:
readonly a$2 = Array []
readonly b$3 = Array []
readonly $5 = Call mutable mayMutate$4(mutable b$3)
Const readonly a$2 = Array []
Const readonly b$3 = Array []
Const readonly $5 = Call mutable mayMutate$4(mutable b$3)
If (readonly $5) then:bb2 else:bb1
bb2:
Call mutable a$2.push(frozen props$1.p0)
@@ -120,7 +120,7 @@ bb4:
Call mutable b$3.push(frozen props$1.p2)
Goto bb3
bb3:
readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$3} ></frozen Foo$6>
Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$3} ></frozen Foo$6>
Return frozen $7
```
@@ -128,8 +128,8 @@ bb3:
```javascript
function Component$0(props$1) {
a$2 = [];
b$3 = [];
const a$2 = [];
const b$3 = [];
if (mayMutate$4(b$3)) {
a$2.push(props$1.p0);
("<<TODO: handle complex control flow in codegen>>");
@@ -34,14 +34,14 @@ function Foo$0() {
```
bb0:
readonly a$2 = Array []
readonly b$3 = Object { }
Const readonly a$2 = Array []
Const readonly b$3 = Object { }
New mutable Foo$4(mutable a$2, mutable b$3)
readonly $6 = "div"
readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
Const readonly $6 = "div"
Let readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
New mutable Foo$4(mutable b$3)
readonly $7 = "div"
readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
Const readonly $7 = "div"
Const readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
Return frozen $8
```
@@ -49,10 +49,11 @@ bb0:
```javascript
function Component$0(props$1) {
a$2 = [];
b$3 = {};
const a$2 = [];
const b$3 = {};
new Foo$4(a$2, b$3);
_$5 = <div a={a$2}></div>;
let _$5 = <div a={a$2}></div>;
new Foo$4(b$3);
return <div a={a$2} b={b$3}></div>;
}
@@ -53,13 +53,13 @@ function foo$0() {
```
bb0:
readonly x$2 = Array []
frozen y$3 = Call frozen useFreeze$4(frozen x$2)
Const readonly x$2 = Array []
Const frozen y$3 = Call frozen useFreeze$4(frozen x$2)
Call mutable foo$5(frozen y$3, frozen x$2)
readonly $6 = "\n "
readonly $7 = "\n "
readonly $8 = "\n "
readonly $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
Const readonly $6 = "\n "
Const readonly $7 = "\n "
Const readonly $8 = "\n "
Const readonly $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
Return frozen $9
```
@@ -67,8 +67,8 @@ bb0:
```javascript
function Component$0(props$1) {
x$2 = [];
y$3 = useFreeze$4(x$2);
const x$2 = [];
const y$3 = useFreeze$4(x$2);
foo$5(y$3, x$2);
return (
<Component$0>
@@ -97,15 +97,15 @@ function Foo$0() {
```
bb0:
readonly a$2 = Call mutable compute$3(frozen props$1.a)
readonly b$4 = Call mutable compute$3(frozen props$1.b)
Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
If (frozen props$1.c) then:bb2 else:bb1
bb2:
Call mutable mutate$5(mutable a$2)
Call mutable mutate$5(mutable b$4)
Goto bb1
bb1:
readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Return frozen $7
```
@@ -113,8 +113,8 @@ bb1:
```javascript
function Component$0(props$1) {
a$2 = compute$3(props$1.a);
b$4 = compute$3(props$1.b);
const a$2 = compute$3(props$1.a);
const b$4 = compute$3(props$1.b);
if (props$1.c) {
mutate$5(a$2);
mutate$5(b$4);
@@ -28,9 +28,9 @@ function Foo() {}
```
bb0:
readonly a$2 = Call mutable compute$3(frozen props$1.a)
readonly b$4 = Call mutable compute$3(frozen props$1.b)
readonly $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
Const readonly $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
Return frozen $6
```
@@ -38,8 +38,8 @@ bb0:
```javascript
function Component$0(props$1) {
a$2 = compute$3(props$1.a);
b$4 = compute$3(props$1.b);
const a$2 = compute$3(props$1.a);
const b$4 = compute$3(props$1.b);
return <Foo$5 a={a$2} b={b$4}></Foo$5>;
}
@@ -76,14 +76,14 @@ function Foo$0() {
```
bb0:
readonly a$2 = Call mutable compute$3(frozen props$1.a)
readonly b$4 = Call mutable compute$3(frozen props$1.b)
Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
If (frozen props$1.c) then:bb2 else:bb1
bb2:
Call mutable foo$5(mutable a$2, mutable b$4)
Goto bb1
bb1:
readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Return frozen $7
```
@@ -91,8 +91,8 @@ bb1:
```javascript
function Component$0(props$1) {
a$2 = compute$3(props$1.a);
b$4 = compute$3(props$1.b);
const a$2 = compute$3(props$1.a);
const b$4 = compute$3(props$1.b);
if (props$1.c) {
foo$5(a$2, b$4);
("<<TODO: handle complex control flow in codegen>>");
@@ -28,10 +28,10 @@ function Foo() {}
```
bb0:
readonly a$2 = Call mutable compute$3(frozen props$1.a)
readonly b$4 = Call mutable compute$3(frozen props$1.b)
Const readonly a$2 = Call mutable compute$3(frozen props$1.a)
Const readonly b$4 = Call mutable compute$3(frozen props$1.b)
Call mutable foo$5(mutable a$2, mutable b$4)
readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Const readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
Return frozen $7
```
@@ -39,8 +39,8 @@ bb0:
```javascript
function Component$0(props$1) {
a$2 = compute$3(props$1.a);
b$4 = compute$3(props$1.b);
const a$2 = compute$3(props$1.a);
const b$4 = compute$3(props$1.b);
foo$5(a$2, b$4);
return <Foo$6 a={a$2} b={b$4}></Foo$6>;
}
@@ -17,12 +17,12 @@ function Component(props) {
```
bb0:
readonly x$2 = Object { }
readonly y$3 = Array []
readonly x$2.y = readonly y$3
readonly child$4 = JSX <frozen Component$0 data={frozen y$3} ></frozen Component$0>
Const readonly x$2 = Object { }
Const readonly y$3 = Array []
Reassign readonly x$2.y = readonly y$3
Const readonly child$4 = JSX <frozen Component$0 data={frozen y$3} ></frozen Component$0>
Call mutable x$2.y.push(frozen props$1.p0)
readonly $5 = JSX <frozen Component$0 data={frozen x$2} >{frozen child$4}</frozen Component$0>
Const readonly $5 = JSX <frozen Component$0 data={frozen x$2} >{frozen child$4}</frozen Component$0>
Return frozen $5
```
@@ -30,10 +30,10 @@ bb0:
```javascript
function Component$0(props$1) {
x$2 = {};
y$3 = [];
const x$2 = {};
const y$3 = [];
x$2 = y$3;
child$4 = <Component$0 data={y$3}></Component$0>;
const child$4 = <Component$0 data={y$3}></Component$0>;
x$2.y.push(props$1.p0);
return <Component$0 data={x$2}>{child$4}</Component$0>;
}
@@ -23,17 +23,17 @@ function Component(props) {
```
bb0:
readonly x$2 = Array []
Let readonly x$2 = Array []
Call mutable x$2.push(frozen props$1.p0)
readonly y$3 = readonly x$2
Let readonly y$3 = readonly x$2
If (frozen props$1.p1) then:bb2 else:bb1
bb2:
readonly x$2 = Array []
Reassign readonly x$2 = Array []
Goto bb1
bb1:
readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
Let readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
Call mutable y$3.push(frozen props$1.p2)
readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
Const readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
Return frozen $5
```
@@ -41,15 +41,16 @@ bb1:
```javascript
function Component$0(props$1) {
x$2 = [];
let x$2 = [];
x$2.push(props$1.p0);
y$3 = x$2;
let y$3 = x$2;
if (props$1.p1) {
x$2 = [];
("<<TODO: handle complex control flow in codegen>>");
}
_$4 = <Component$0 x={x$2}></Component$0>;
let _$4 = <Component$0 x={x$2}></Component$0>;
y$3.push(props$1.p2);
return <Component$0 x={x$2} y={y$3}></Component$0>;
}
@@ -21,13 +21,13 @@ function Component(props) {
```
bb0:
readonly x$2 = Array []
Let readonly x$2 = Array []
Call mutable x$2.push(frozen props$1.p0)
readonly y$3 = readonly x$2
readonly x$2 = Array []
readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
Let readonly y$3 = readonly x$2
Reassign readonly x$2 = Array []
Let readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
Call mutable y$3.push(frozen props$1.p1)
readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
Const readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
Return frozen $5
```
@@ -35,11 +35,12 @@ bb0:
```javascript
function Component$0(props$1) {
x$2 = [];
let x$2 = [];
x$2.push(props$1.p0);
y$3 = x$2;
let y$3 = x$2;
x$2 = [];
_$4 = <Component$0 x={x$2}></Component$0>;
let _$4 = <Component$0 x={x$2}></Component$0>;
y$3.push(props$1.p1);
return <Component$0 x={x$2} y={y$3}></Component$0>;
}
@@ -17,13 +17,13 @@ function foo(x, y) {
bb0:
If (frozen x$1) then:bb2 else:bb1
bb2:
readonly $3 = false
readonly $4 = Call mutable foo$0(mutable $3, frozen y$2)
Const readonly $3 = false
Const readonly $4 = Call mutable foo$0(mutable $3, frozen y$2)
Return frozen $4
bb1:
readonly $5 = 10
frozen $6 = Binary frozen y$2 * readonly $5
readonly $7 = Array [frozen $6]
Const readonly $5 = 10
Const frozen $6 = Binary frozen y$2 * readonly $5
Const readonly $7 = Array [frozen $6]
Return frozen $7
```
@@ -32,27 +32,27 @@ function Component(props) {
```
bb0:
readonly x$2 = Array []
readonly y$3 = undefined
readonly $4 = false
readonly $5 = true
readonly $6 = 1
Let readonly x$2 = Array []
Let readonly y$3 = undefined
Const readonly $4 = false
Const readonly $5 = true
Const readonly $6 = 1
Switch (frozen props$1.p0)
Case readonly $6: bb1
Case readonly $5: bb6
Default: bb1
Case readonly $4: bb2
bb1:
readonly child$7 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
Const readonly child$7 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
Call mutable y$3.push(frozen props$1.p4)
readonly $8 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$7}</frozen Component$0>
Const readonly $8 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$7}</frozen Component$0>
Return frozen $8
bb6:
Call mutable x$2.push(frozen props$1.p2)
readonly y$3 = Array []
Reassign readonly y$3 = Array []
Goto bb1
bb2:
readonly y$3 = readonly x$2
Reassign readonly y$3 = readonly x$2
Goto bb1
```
@@ -60,8 +60,8 @@ bb2:
```javascript
function Component$0(props$1) {
x$2 = [];
y$3 = undefined;
let x$2 = [];
let y$3 = undefined;
switch (props$1.p0) {
case 1:
break;
@@ -81,7 +81,7 @@ function Component$0(props$1) {
}
}
child$7 = <Component$0 data={x$2}></Component$0>;
const child$7 = <Component$0 data={x$2}></Component$0>;
y$3.push(props$1.p4);
return <Component$0 data={y$3}>{child$7}</Component$0>;
}
@@ -28,10 +28,10 @@ function Component(props) {
```
bb0:
readonly x$2 = Array []
readonly y$3 = undefined
readonly $4 = false
readonly $5 = true
Let readonly x$2 = Array []
Let readonly y$3 = undefined
Const readonly $4 = false
Const readonly $5 = true
Switch (frozen props$1.p0)
Case readonly $5: bb4
Case readonly $4: bb2
@@ -39,15 +39,15 @@ bb0:
bb4:
Call mutable x$2.push(frozen props$1.p2)
Call mutable x$2.push(frozen props$1.p3)
readonly y$3 = Array []
Reassign readonly y$3 = Array []
Goto bb2
bb2:
readonly y$3 = readonly x$2
Reassign readonly y$3 = readonly x$2
Goto bb1
bb1:
readonly child$6 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
Const readonly child$6 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
Call mutable y$3.push(frozen props$1.p4)
readonly $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
Const readonly $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
Return frozen $7
```
@@ -55,8 +55,8 @@ bb1:
```javascript
function Component$0(props$1) {
x$2 = [];
y$3 = undefined;
let x$2 = [];
let y$3 = undefined;
switch (props$1.p0) {
case true: {
x$2.push(props$1.p2);
@@ -71,7 +71,7 @@ function Component$0(props$1) {
}
}
child$6 = <Component$0 data={x$2}></Component$0>;
const child$6 = <Component$0 data={x$2}></Component$0>;
y$3.push(props$1.p4);
return <Component$0 data={y$3}>{child$6}</Component$0>;
}