@samitouri / QOS-React / commits / f5f9143381

[new-architecture] Reassignment-safe frozenness inference

NOTE: this improves the equivalent of "ref kind inference" in the new architecture. I'd appreciate review here on the algorithm in particular, but in general my plan is to try to implement this on the current architecture. The previous InferMutability reference kind inference didn't properly handle capturing or reassignment combined with control flow. This is a new version (i'll clean up to delete InferMutability entirely) that is less ambitious but fully accurate (i hope, hence WIP): * Annotates all references of frozen variables as frozen. This includes following reassignment, so if you do `const x = props.x; foo(x);` we know that `x` is frozen because it derived from a frozen value. This even works conditionally, so if `x` is conditionally assigned to some value derived from eg props, and you later use `x`, that will be marked as frozen even if it could have other values at runtime (since it must conservatively assume a frozen value flowed in at runtime). * Annotates references that may mutate as mutable. * Annotates references that are not frozen, but not mutated _at this reference site_, as readonly. It's possible that a readonly usage is followed by a mutable usage, since we don't yet know the "lifetime" of the mutability. The notable difference from the previous attempt is that we do not attempt to find the point at which a formerly-mutable values becomes readonly (and therefore eligible for caching). That requires pointer analysis, let's discuss offline.

Joseph Savona committed Oct 5, 2022 at 13:56 UTC f5f91433812c0be771294860102f51fd09d0534c
36 files changed +1554 -3344
compiler/forget/src/HIR/BuildDefUseGraph.ts new
+644
@@ -0,0 +1,644 @@
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import { assertExhaustive } from "../Common/utils";
9 +import { invariant } from "../CompilerError";
10 +import {
11 + BasicBlock,
12 + BlockId,
13 + Capability,
14 + HIRFunction,
15 + IdentifierId,
16 + Instruction,
17 + InstructionValue,
18 + Place,
19 + Terminal,
20 +} from "./HIR";
21 +import { mapTerminalSuccessors } from "./HIRBuilder";
22 +import { printMixedHIR, printPlace } from "./PrintHIR";
23 +
24 +const HOOKS: Map<string, Hook> = new Map([
25 + ["useState", { kind: "State", capability: Capability.Frozen }],
26 + ["useRef", { kind: "Ref", capability: Capability.Frozen }],
27 +]);
28 +
29 +type HookKind = { kind: "State" } | { kind: "Ref" } | { kind: "Custom" };
30 +type Hook = HookKind & { capability: Capability };
31 +
32 +/**
33 + * For every usage of a value in the given function, infers whether that usage
34 + * is frozen, readonly, or mutable:
35 + * - frozen: the value is known to be "owned" by React and is therefore permanently
36 + * and transitively immutable.
37 + * - readonly: the value is not frozen, but this usage of the value does not modify it.
38 + * the value may be mutated by a subsequent reference. Examples include referencing
39 + * the operands of a binary expression, or referencing the items/properties of an
40 + * array or object literal.
41 + * - mutable: the value is not frozen and this usage *may* modify it. Examples include
42 + * passing a value to as a function argument or assigning into an object.
43 + *
44 + * Note that the inference follows variable assignment, so assigning a frozen value
45 + * to a different value will infer usages of the other variable as frozen as well.
46 + *
47 + * The inference assumes that the code follows the rules of React:
48 + * - React function arguments are frozen (component props, hook arguments).
49 + * - Hook arguments are frozen at the point the hook is invoked.
50 + * - React function return values are frozen at the point of being returned,
51 + * thus the return value of a hook call is frozen.
52 + * - JSX represents invocation of a React function (the component) and
53 + * therefore all values passed to JSX become frozen at the point the JSX
54 + * is created.
55 + *
56 + * ## Algorithm
57 + *
58 + * The algorithm creates a "use-use" graph in which each usage of a variable links to
59 + * the previous (incoming) and subsequent (outgoing) usages of that variable. The primary
60 + * purpose of this graph is to perform inference of usages that are frozen vs not, including
61 + * accounting for control-flow and reassignment, and to update the input *in place* to
62 + * annotate `Place` with the appropriate capability. The set of vertexs is returned for
63 + * debugging purposes.
64 + *
65 + * - First create a mapping of the first and last usages of each top-level identifier
66 + * in each block, in isolation (ie without considering control-flow paths between
67 + * blocks).
68 + * - Then iterate over the blocks in control-flow order and link the last usage of
69 + * identifiers in predecssor blocks with the first usage in successor blocks.
70 + * - Then find all vertices corresponding to frozen usage of a value, and propagate
71 + * that "frozenness" forward to all subsequent usages of that value.
72 + */
73 +export default function buildDefUseGraph(fn: HIRFunction): Array<Vertex> {
74 + const graph = new UseGraph();
75 +
76 + const blockResults: Map<BlockId, BlockResult> = new Map();
77 + for (const [blockId, block] of fn.body.blocks) {
78 + const blockResult = buildInputsOutputsForBlock(graph, block);
79 + blockResults.set(blockId, blockResult);
80 + }
81 +
82 + const preambleBuilder = new BlockResultBuilder(graph);
83 + for (const param of fn.params) {
84 + const place: Place = {
85 + kind: "Identifier",
86 + memberPath: null,
87 + value: param,
88 + path: null as any, // TODO
89 + capability: Capability.Frozen,
90 + };
91 + preambleBuilder.init(place, null, true);
92 + }
93 + const preambleResult = preambleBuilder.build();
94 +
95 + // Iterate over the CFG linking outputs of predecssor blocks to the inputs
96 + // of successor blocks, stopping once all links have been established.
97 + const queue: Array<{
98 + blockId: BlockId;
99 + prevResult: BlockResult;
100 + }> = [{ blockId: fn.body.entry, prevResult: preambleResult }];
101 + while (queue.length !== 0) {
102 + const { blockId, prevResult } = queue.shift()!;
103 +
104 + // Link the previous block's outputs to the next block's inputs
105 + const blockResult = blockResults.get(blockId)!;
106 + const hasChange = linkPreviousNextBlock(graph, prevResult, blockResult);
107 +
108 + // If there were changes to this block's outgoing edges, update any
109 + // successor blocks
110 + if (hasChange || blockId === fn.body.entry) {
111 + const block = fn.body.blocks.get(blockId)!;
112 + // TODO: add a forEachSuccessor helper, this maps the terminal unnecessarily
113 + const _ = mapTerminalSuccessors(
114 + block.terminal,
115 + (blockId, isFallthrough) => {
116 + if (!isFallthrough) {
117 + queue.push({ blockId, prevResult: blockResult });
118 + }
119 + return blockId;
120 + }
121 + );
122 + }
123 + }
124 + const vertices = graph.build();
125 + for (const vertex of vertices) {
126 + invariant(
127 + vertex.place === null || vertex.place.capability !== Capability.Unknown,
128 + "Expected all vertices to have a capability inferred"
129 + );
130 +
131 + // Vertices derived from a frozen value are also frozen
132 + if (
133 + vertex.place !== null &&
134 + vertex.place.capability === Capability.Frozen
135 + ) {
136 + flowFrozennessForwards(vertex, 0);
137 + }
138 + // Join nodes are created before we know if they will be consumed,
139 + // prune join nodes without any outgoing edges to aid visualization.
140 + // note that this is not required for correctness.
141 + if (vertex.place === null && vertex.outgoing.size === 0) {
142 + for (const incoming of vertex.incoming) {
143 + incoming.outgoing.delete(vertex);
144 + }
145 + vertex.incoming.clear();
146 + }
147 + }
148 + return vertices;
149 +}
150 +
151 +/**
152 + * Once a value is known to be frozen, all usages forward of that point must be frozen too.
153 + */
154 +function flowFrozennessForwards(vertex: Vertex, epoch: number) {
155 + if (vertex.epoch === epoch) {
156 + return;
157 + }
158 + vertex.epoch = epoch;
159 + if (vertex.place !== null) {
160 + vertex.place.capability = Capability.Frozen;
161 + }
162 + for (const outgoing of vertex.outgoing) {
163 + flowFrozennessForwards(outgoing, epoch);
164 + }
165 +}
166 +
167 +/**
168 + * Link the last usages from a predecessor block to the first usages in a successor block,
169 + * and propagate any values used in the predecessor but _unused_ in the successor.
170 + */
171 +function linkPreviousNextBlock(
172 + graph: UseGraph,
173 + prevBlock: BlockResult,
174 + nextBlock: BlockResult
175 +): boolean {
176 + // are there any changes to the *outgoing* edges of `nextBlock`?
177 + let hasChanges = false;
178 +
179 + // for each first usage of next block, link it to last usage from prev block.
180 + for (const [id, nextVertex] of nextBlock.firstUsage) {
181 + if (nextVertex.isReassignment) {
182 + // nextVertex was a full reassignment, do not attach an edge.
183 + continue;
184 + }
185 + const prevVertex = prevBlock.lastUsage.get(id);
186 + if (prevVertex != null && prevVertex !== nextVertex) {
187 + // Note: don't update hasChanges here bc these do not affect the *outgoing* edges
188 + prevVertex.outgoing.add(nextVertex);
189 + nextVertex.incoming.add(prevVertex);
190 + }
191 + }
192 + // for each last usage in the prev block that was not already linked in the above
193 + // loop, add an outgoing edge to pass-through the data. the value may be used by
194 + // a later block.
195 + for (const [id, prevVertex] of prevBlock.lastUsage) {
196 + if (nextBlock.firstUsage.has(id)) {
197 + // already handled in the above loop
198 + continue;
199 + }
200 + const nextVertex = nextBlock.lastUsage.get(id);
201 + if (nextVertex == null) {
202 + // First time propagating a value for this id: use the prev vertex from
203 + // the predecessor as the output of the successor
204 + hasChanges = true;
205 + nextBlock.lastUsage.set(id, prevVertex);
206 + } else if (nextVertex === prevVertex) {
207 + // already propagated
208 + continue;
209 + } else {
210 + let joinVertex;
211 + if (nextVertex.place === null) {
212 + // A join vertex was already created, link the successor value to it
213 + joinVertex = nextVertex;
214 + } else {
215 + // A normal vertex was propagated through on the previous visit, but
216 + // now there is a different value that needs to be propagated through.
217 + // swap the node for a "join" vertex, adding the previous node as an
218 + // input to that node.
219 + joinVertex = graph.join();
220 + nextVertex.outgoing.add(joinVertex);
221 + joinVertex.incoming.add(nextVertex);
222 + nextBlock.lastUsage.set(id, joinVertex);
223 + }
224 + // the incoming node may itself be a join vertex, add its inputs to
225 + // avoid linking join vertices to other join vertices.
226 + if (prevVertex.place === null) {
227 + for (const prev of prevVertex.incoming) {
228 + hasChanges =
229 + hasChanges ||
230 + !joinVertex.incoming.has(prev) ||
231 + !prev.outgoing.has(joinVertex);
232 + joinVertex.incoming.add(prev);
233 + prev.outgoing.add(joinVertex);
234 + }
235 + } else {
236 + hasChanges =
237 + hasChanges ||
238 + !joinVertex.incoming.has(prevVertex) ||
239 + !prevVertex.outgoing.has(joinVertex);
240 + joinVertex.incoming.add(prevVertex);
241 + prevVertex.outgoing.add(joinVertex);
242 + }
243 + }
244 + }
245 + return hasChanges;
246 +}
247 +
248 +/**
249 + * Iterates over a single basic block and constructs a mapping of the first and last usages
250 + * of each Place referenced in that block.
251 + */
252 +function buildInputsOutputsForBlock(
253 + graph: UseGraph,
254 + block: BasicBlock
255 +): BlockResult {
256 + const builder = new BlockResultBuilder(graph);
257 +
258 + for (const instr of block.instructions) {
259 + const instrValue = instr.value;
260 + let valueCapability = Capability.Readonly;
261 + switch (instrValue.kind) {
262 + case "BinaryExpression": {
263 + valueCapability = Capability.Frozen;
264 + builder.reference(instrValue.left, instrValue, Capability.Readonly);
265 + builder.reference(instrValue.right, instrValue, Capability.Readonly);
266 + break;
267 + }
268 + case "ArrayExpression": {
269 + for (const element of instrValue.elements) {
270 + builder.reference(element, instrValue, Capability.Readonly);
271 + }
272 + break;
273 + }
274 + case "NewExpression": {
275 + builder.reference(instrValue.callee, instrValue, Capability.Mutable);
276 + for (const arg of instrValue.args) {
277 + builder.reference(arg, instrValue, Capability.Mutable);
278 + }
279 + break;
280 + }
281 + case "CallExpression": {
282 + let capability = Capability.Mutable;
283 + const hook = parseHookCall(instrValue.callee);
284 + if (hook !== null) {
285 + capability = hook.capability;
286 + valueCapability = hook.capability;
287 + }
288 + builder.reference(instrValue.callee, instrValue, capability);
289 + for (const arg of instrValue.args) {
290 + builder.reference(arg, instrValue, capability);
291 + }
292 + break;
293 + }
294 + case "ObjectExpression": {
295 + // Object construction captures but does not modify the key/property values
296 + if (instrValue.properties !== null) {
297 + for (const [_key, value] of Object.entries(instrValue.properties)) {
298 + builder.reference(value, instrValue, Capability.Readonly);
299 + }
300 + }
301 + break;
302 + }
303 + case "UnaryExpression": {
304 + valueCapability = Capability.Frozen; // TODO check that value must be a primitive, or make conditional based on the operator
305 + builder.reference(instrValue.value, instrValue, Capability.Readonly);
306 + break;
307 + }
308 + case "OtherStatement": {
309 + // TODO: handle other statement kinds
310 + break;
311 + }
312 + case "JsxExpression": {
313 + builder.reference(instrValue.tag, instrValue, Capability.Frozen);
314 + for (const [_prop, value] of Object.entries(instrValue.props)) {
315 + builder.reference(value, instrValue, Capability.Frozen);
316 + }
317 + if (instrValue.children !== null) {
318 + for (const child of instrValue.children) {
319 + builder.reference(child, instrValue, Capability.Frozen);
320 + }
321 + }
322 + break;
323 + }
324 + case "JSXText":
325 + case "Primitive": {
326 + valueCapability = Capability.Readonly;
327 + break;
328 + }
329 + case "Identifier": {
330 + builder.reference(instrValue, instrValue, Capability.Readonly);
331 + valueCapability = instrValue.capability;
332 + if (instr.place !== null && instr.place.memberPath === null) {
333 + builder.assign(instr.place, instr, instrValue);
334 + instr.place.capability = valueCapability;
335 + continue;
336 + }
337 + break;
338 + }
339 + default: {
340 + assertExhaustive(instrValue, "Unexpected instruction kind");
341 + }
342 + }
343 + if (instr.place !== null) {
344 + if (instr.place.memberPath == null) {
345 + builder.init(instr.place, instr, true);
346 + instr.place.capability = valueCapability;
347 + } else {
348 + builder.reference(instr.place, instr, valueCapability);
349 + }
350 + }
351 + }
352 + switch (block.terminal.kind) {
353 + case "throw": {
354 + builder.reference(
355 + block.terminal.value,
356 + block.terminal,
357 + Capability.Frozen
358 + );
359 + break;
360 + }
361 + case "return": {
362 + if (block.terminal.value !== null) {
363 + builder.reference(
364 + block.terminal.value,
365 + block.terminal,
366 + Capability.Frozen
367 + );
368 + }
369 + break;
370 + }
371 + case "if": {
372 + builder.reference(
373 + block.terminal.test,
374 + block.terminal,
375 + Capability.Readonly
376 + );
377 + break;
378 + }
379 + case "switch": {
380 + builder.reference(
381 + block.terminal.test,
382 + block.terminal,
383 + Capability.Readonly
384 + );
385 + for (const case_ of block.terminal.cases) {
386 + if (case_.test !== null) {
387 + builder.reference(case_.test, block.terminal, Capability.Readonly);
388 + }
389 + }
390 + break;
391 + }
392 + case "goto": {
393 + break;
394 + }
395 + default: {
396 + assertExhaustive(
397 + block.terminal,
398 + `Unexpected terminal kind '${(block.terminal as any as Terminal).kind}'`
399 + );
400 + }
401 + }
402 +
403 + return builder.build();
404 +}
405 +
406 +function parseHookCall(place: Place): Hook | null {
407 + if (place.memberPath !== null) {
408 + // Hook calls must be statically resolved
409 + return null;
410 + }
411 + const name = place.value.name;
412 + if (name === null || !name.match(/^_?use/)) {
413 + return null;
414 + }
415 + const hook = HOOKS.get(name);
416 + if (hook != null) {
417 + return hook;
418 + }
419 + return { kind: "Custom", capability: Capability.Frozen };
420 +}
421 +
422 +type BlockResult = {
423 + firstUsage: Map<IdentifierId, Vertex>;
424 + lastUsage: Map<IdentifierId, Vertex>;
425 +};
426 +
427 +class BlockResultBuilder {
428 + #firstUsage: Map<IdentifierId, Vertex> = new Map();
429 + #lastUsage: Map<IdentifierId, Vertex> = new Map();
430 + #graph: UseGraph;
431 +
432 + constructor(graph: UseGraph) {
433 + this.#graph = graph;
434 + }
435 +
436 + build(): BlockResult {
437 + return {
438 + firstUsage: this.#firstUsage,
439 + lastUsage: this.#lastUsage,
440 + };
441 + }
442 +
443 + /**
444 + * Represents assignment of a value to a Place. Unlike with `reference()`,
445 + * this does *not* establish an edge between this usage of the place and
446 + * previous usages, because the value is not the same.
447 + */
448 + init(
449 + place: Place,
450 + instr: Instruction | InstructionValue | Terminal | null,
451 + isReassignment: boolean
452 + ): Vertex {
453 + const id = place.value.id;
454 + const vertex = this.#graph.init(place, instr, isReassignment);
455 + if (!this.#firstUsage.has(id)) {
456 + this.#firstUsage.set(id, vertex);
457 + }
458 + this.#lastUsage.set(id, vertex);
459 + return vertex;
460 + }
461 +
462 + /**
463 + * Represents assigning a (new) value to @param target via the given @param instr,
464 + * with @param value as the value being assigned.
465 + *
466 + * This breaks the use chain, such that this and subsequent usages of @param target
467 + * are not associated to previous usages. This replicates SSA semantics, conceptually
468 + * @param target is a new place now.
469 + */
470 + assign(target: Place, instr: Instruction, value: Place) {
471 + const targetVertex = this.init(target, instr, true);
472 + const valueVertex = this.#graph.get(value)!;
473 + targetVertex.incoming.add(valueVertex);
474 + valueVertex.outgoing.add(targetVertex);
475 + }
476 +
477 + /**
478 + * Represents a reference (usage of) a Place. This establishes an edge
479 + * with this usage and the previous usage
480 + */
481 + reference(
482 + place: Place,
483 + instr: Instruction | InstructionValue | Terminal,
484 + capability: Capability
485 + ) {
486 + const id = place.value.id;
487 + place.capability = capability;
488 + const prevVertex = this.#lastUsage.get(id);
489 + const vertex = this.init(place, instr, false);
490 +
491 + if (prevVertex != null) {
492 + prevVertex.outgoing.add(vertex);
493 + vertex.incoming?.add(prevVertex);
494 + }
495 + }
496 +}
497 +
498 +class IdGenerator {
499 + #value: number = 0;
500 +
501 + next(): number {
502 + return this.#value++;
503 + }
504 +}
505 +
506 +class UseGraph {
507 + #idGenerator: IdGenerator = new IdGenerator();
508 + #verticesByPlace: Map<Place, Vertex> = new Map();
509 + #vertices: Array<Vertex> = [];
510 +
511 + get(place: Place): Vertex | null {
512 + return this.#verticesByPlace.get(place) ?? null;
513 + }
514 +
515 + init(
516 + place: Place,
517 + instr: Instruction | InstructionValue | Terminal | null,
518 + isReassignment: boolean
519 + ): Vertex {
520 + let vertex = this.#verticesByPlace.get(place);
521 + if (vertex == null) {
522 + vertex = new Vertex(place, instr, this.#idGenerator, isReassignment);
523 + this.#verticesByPlace.set(place, vertex);
524 + this.#vertices.push(vertex);
525 + }
526 + return vertex;
527 + }
528 +
529 + join(): Vertex {
530 + const vertex = new Vertex(null, null, this.#idGenerator, false);
531 + this.#vertices.push(vertex);
532 + return vertex;
533 + }
534 +
535 + build(): Array<Vertex> {
536 + return this.#vertices;
537 + }
538 +}
539 +
540 +/**
541 + * Represents a distinct usage of a `Place` within a program. Note that
542 + * vertices are only created for top-level identifiers, not for points
543 + * within an object. So both `x` and `x.y` create vertices for `x`,
544 + * though this is enforced by the _construction_ of vertices in UseGraph,
545 + * not the implementation of Vertex itself.
546 + */
547 +class Vertex {
548 + /**
549 + * the set of vertices where *this* place was previously referenced
550 + */
551 + incoming: Set<Vertex> = new Set();
552 +
553 + /**
554 + * the set of vertices where *this* place is subseqently referenced
555 + */
556 + outgoing: Set<Vertex> = new Set();
557 +
558 + /**
559 + * The place that is using the value.
560 + */
561 + place: Place | null;
562 +
563 + /**
564 + * The instruction where the reference occurs (for debugging)
565 + */
566 + instr: Instruction | InstructionValue | Terminal | null;
567 +
568 + /**
569 + * Does this vertex represent an assignment? If yes, incoming
570 + * represents the set of values that are *assigned* to this vertex,
571 + * and not previous usages.
572 + */
573 + isReassignment: boolean;
574 +
575 + /**
576 + * Unique identifier for this vertex (for debugging)
577 + */
578 + id: string;
579 +
580 + /**
581 + * The last epoch in which this vertex was visited. This is used during
582 + * data-flow analysis post construction of the graph to ensure termination
583 + * by avoiding revisiting the same nodes in a given pass.
584 + */
585 + epoch: number | null = null;
586 +
587 + constructor(
588 + place: Place | null,
589 + instr: Instruction | InstructionValue | Terminal | null,
590 + idGenerator: IdGenerator,
591 + isReassignment: boolean
592 + ) {
593 + this.place = place;
594 + this.instr = instr;
595 + this.id = `v${idGenerator.next()}`;
596 + this.isReassignment = isReassignment;
597 + }
598 +}
599 +
600 +/**
601 + * Prints the graph into GraphViz DOT format.
602 + * https://graphviz.org/doc/info/lang.html
603 + */
604 +export function printGraph(vertices: Array<Vertex>): string {
605 + const output = [];
606 +
607 + for (const vertex of vertices) {
608 + if (
609 + vertex.place === null &&
610 + vertex.incoming.size === 0 &&
611 + vertex.outgoing.size === 0
612 + ) {
613 + continue;
614 + }
615 + const vertexId = vertex.id;
616 + output.push(
617 + `${vertexId} [ label="${vertexId} (${
618 + vertex.place ? printPlace(vertex.place) : "<join>"
619 + } @ ${
620 + vertex.instr
621 + ? printMixedHIR(vertex.instr).replaceAll('"', '\\"')
622 + : "<no-instr>"
623 + }) ${vertex.isReassignment ? "<assign>" : "<update>"}", shape="box" ]`
624 + );
625 + for (const outgoing of vertex.outgoing) {
626 + const outgoingId = outgoing.id;
627 + output.push(`${vertexId} -> ${outgoingId}`);
628 + }
629 + }
630 + const lines = output.map((line) => " " + line);
631 + lines.unshift("digraph BuildDefUseGraph {");
632 + lines.push("}");
633 + return lines.join("\n");
634 +}
635 +
636 +function mapToJson(map: Map<IdentifierId, Vertex>): {
637 + [key: string]: string;
638 +} {
639 + const result: { [key: string]: string } = {};
640 + for (const [id, vertex] of map) {
641 + result[id] = vertex.id;
642 + }
643 + return result;
644 +}
compiler/forget/src/HIR/BuildHIR.ts
+2 -2
@@ -489,8 +489,8 @@ function lowerStatement(
489 .get("consequent")
490 .forEach((consequent) => lowerStatement(builder, consequent));
491 /**
492 - * always generate a fallthrough, this may be dead code if there was
493 - * an explicit break
492 + * always generate a fallthrough to the next block, this may be dead code
493 + * if there was an explicit break, but if so it will be pruned later.
494 */
495 return {
496 kind: "goto",
compiler/forget/src/HIR/HIRBuilder.ts
+1 -1
@@ -369,7 +369,7 @@ function getTargetIfIndirection(block: BasicBlock): number | null {
369 /**
370 * Maps a terminal node's block assignments using the provided function.
371 */
372 -function mapTerminalSuccessors(
372 +export function mapTerminalSuccessors(
373 terminal: Terminal,
374 fn: (block: BlockId, isFallthrough: boolean) => BlockId
375 ): Terminal {
compiler/forget/src/__tests__/fixtures/hir-svg/call.svg deleted
-286
@@ -1,286 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="2349pt" height="723pt"
8 - viewBox="0.00 0.00 2349.17 722.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 718.8)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-718.8 2345.17,-718.8 2345.17,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="414.41,-714.8 207.57,-714.8 207.57,-678.8 414.41,-678.8 414.41,-714.8"/>
16 -<text text-anchor="middle" x="310.99" y="-692.6" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="693.2,-714.8 432.79,-714.8 432.79,-678.8 693.2,-678.8 693.2,-714.8"/>
22 -<text text-anchor="middle" x="562.99" y="-692.6" font-family="Times,serif" font-size="14.00">v1 (mutable a$2 @ mutable a$2 = Array [])</text>
23 -</g>
24 -<!-- v2 -->
25 -<g id="node3" class="node">
26 -<title>v2</title>
27 -<polygon fill="none" stroke="black" points="760.34,-641.8 365.64,-641.8 365.64,-605.8 760.34,-605.8 760.34,-641.8"/>
28 -<text text-anchor="middle" x="562.99" y="-619.6" font-family="Times,serif" font-size="14.00">v2 (mutable a$2 @ Call mutable foo$4(mutable a$2, mutable b$3))</text>
29 -</g>
30 -<!-- v1&#45;&gt;v2 -->
31 -<g id="edge1" class="edge">
32 -<title>v1&#45;&gt;v2</title>
33 -<path fill="none" stroke="black" d="M562.99,-678.61C562.99,-670.59 562.99,-660.85 562.99,-651.87"/>
34 -<polygon fill="black" stroke="black" points="566.49,-651.83 562.99,-641.83 559.49,-651.83 566.49,-651.83"/>
35 -</g>
36 -<!-- v4 -->
37 -<g id="node5" class="node">
38 -<title>v4</title>
39 -<polygon fill="none" stroke="black" points="905.63,-553 510.36,-553 510.36,-517 905.63,-517 905.63,-553"/>
40 -<text text-anchor="middle" x="707.99" y="-530.8" font-family="Times,serif" font-size="14.00">v4 (mutable b$3 @ Call mutable foo$4(mutable a$2, mutable b$3))</text>
41 -</g>
42 -<!-- v2&#45;&gt;v4 -->
43 -<g id="edge7" class="edge">
44 -<title>v2&#45;&gt;v4</title>
45 -<path fill="none" stroke="black" d="M631,-605.77C643.25,-601.05 655.46,-595.14 665.99,-587.8 676.03,-580.81 684.94,-570.76 691.93,-561.38"/>
46 -<polygon fill="black" stroke="black" points="694.9,-563.24 697.8,-553.05 689.18,-559.21 694.9,-563.24"/>
47 -<text text-anchor="middle" x="704.59" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
48 -</g>
49 -<!-- v7 -->
50 -<g id="node8" class="node">
51 -<title>v7</title>
52 -<polygon fill="none" stroke="black" points="683.7,-464.2 280.29,-464.2 280.29,-428.2 683.7,-428.2 683.7,-464.2"/>
53 -<text text-anchor="middle" x="481.99" y="-442" font-family="Times,serif" font-size="14.00">v7 (mutable a$2 @ JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
54 -</g>
55 -<!-- v2&#45;&gt;v7 -->
56 -<g id="edge4" class="edge">
57 -<title>v2&#45;&gt;v7</title>
58 -<path fill="none" stroke="black" d="M542.74,-605.64C528.77,-592.65 510.97,-573.56 500.99,-553 488.94,-528.19 484.48,-496.75 482.85,-474.62"/>
59 -<polygon fill="black" stroke="black" points="486.34,-474.35 482.26,-464.57 479.35,-474.76 486.34,-474.35"/>
60 -</g>
61 -<!-- v3 -->
62 -<g id="node4" class="node">
63 -<title>v3</title>
64 -<polygon fill="none" stroke="black" points="1056.06,-641.8 777.93,-641.8 777.93,-605.8 1056.06,-605.8 1056.06,-641.8"/>
65 -<text text-anchor="middle" x="916.99" y="-619.6" font-family="Times,serif" font-size="14.00">v3 (mutable b$3 @ mutable b$3 = Object { &#160;})</text>
66 -</g>
67 -<!-- v3&#45;&gt;v4 -->
68 -<g id="edge2" class="edge">
69 -<title>v3&#45;&gt;v4</title>
70 -<path fill="none" stroke="black" d="M875.7,-605.65C842.07,-591.68 794.44,-571.9 758.53,-556.99"/>
71 -<polygon fill="black" stroke="black" points="759.78,-553.72 749.2,-553.11 757.09,-560.18 759.78,-553.72"/>
72 -</g>
73 -<!-- v4&#45;&gt;v2 -->
74 -<g id="edge5" class="edge">
75 -<title>v4&#45;&gt;v2</title>
76 -<path fill="none" stroke="black" d="M660.57,-553.07C648.55,-558.16 635.9,-564.23 624.8,-571 611.94,-578.85 598.98,-589.24 588.26,-598.67"/>
77 -<polygon fill="black" stroke="black" points="585.63,-596.32 580.55,-605.62 590.32,-601.52 585.63,-596.32"/>
78 -<text text-anchor="middle" x="645.59" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
79 -</g>
80 -<!-- v4&#45;&gt;v7 -->
81 -<g id="edge11" class="edge">
82 -<title>v4&#45;&gt;v7</title>
83 -<path fill="none" stroke="black" d="M663.61,-516.95C626.99,-502.89 574.9,-482.88 535.89,-467.9"/>
84 -<polygon fill="black" stroke="black" points="536.86,-464.52 526.27,-464.21 534.35,-471.06 536.86,-464.52"/>
85 -<text text-anchor="middle" x="636.59" y="-486.4" font-family="Times,serif" font-size="14.00">capture</text>
86 -</g>
87 -<!-- v8 -->
88 -<g id="node9" class="node">
89 -<title>v8</title>
90 -<polygon fill="none" stroke="black" points="871.82,-375.4 552.17,-375.4 552.17,-339.4 871.82,-339.4 871.82,-375.4"/>
91 -<text text-anchor="middle" x="711.99" y="-353.2" font-family="Times,serif" font-size="14.00">v8 (mutable b$3 @ Call mutable foo$4(mutable b$3))</text>
92 -</g>
93 -<!-- v4&#45;&gt;v8 -->
94 -<g id="edge6" class="edge">
95 -<title>v4&#45;&gt;v8</title>
96 -<path fill="none" stroke="black" d="M708.38,-516.84C709.08,-486.42 710.53,-422.78 711.36,-386.08"/>
97 -<polygon fill="black" stroke="black" points="714.87,-385.7 711.6,-375.63 707.87,-385.54 714.87,-385.7"/>
98 -</g>
99 -<!-- v5 -->
100 -<g id="node6" class="node">
101 -<title>v5</title>
102 -<polygon fill="none" stroke="black" points="1443.29,-714.8 1036.7,-714.8 1036.7,-678.8 1443.29,-678.8 1443.29,-714.8"/>
103 -<text text-anchor="middle" x="1239.99" y="-692.6" font-family="Times,serif" font-size="14.00">v5 (mutable foo$4 @ Call mutable foo$4(mutable a$2, mutable b$3))</text>
104 -</g>
105 -<!-- v6 -->
106 -<g id="node7" class="node">
107 -<title>v6</title>
108 -<polygon fill="none" stroke="black" points="1405.48,-641.8 1074.51,-641.8 1074.51,-605.8 1405.48,-605.8 1405.48,-641.8"/>
109 -<text text-anchor="middle" x="1239.99" y="-619.6" font-family="Times,serif" font-size="14.00">v6 (mutable foo$4 @ Call mutable foo$4(mutable b$3))</text>
110 -</g>
111 -<!-- v5&#45;&gt;v6 -->
112 -<g id="edge3" class="edge">
113 -<title>v5&#45;&gt;v6</title>
114 -<path fill="none" stroke="black" d="M1239.99,-678.61C1239.99,-670.59 1239.99,-660.85 1239.99,-651.87"/>
115 -<polygon fill="black" stroke="black" points="1243.49,-651.83 1239.99,-641.83 1236.49,-651.83 1243.49,-651.83"/>
116 -</g>
117 -<!-- v7&#45;&gt;v8 -->
118 -<g id="edge14" class="edge">
119 -<title>v7&#45;&gt;v8</title>
120 -<path fill="none" stroke="black" d="M527.16,-428.15C564.5,-414.06 617.66,-394 657.39,-379.01"/>
121 -<polygon fill="black" stroke="black" points="658.81,-382.21 666.93,-375.41 656.34,-375.66 658.81,-382.21"/>
122 -<text text-anchor="middle" x="638.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
123 -</g>
124 -<!-- v11 -->
125 -<g id="node12" class="node">
126 -<title>v11</title>
127 -<polygon fill="none" stroke="black" points="495.98,-375.4 0.01,-375.4 0.01,-339.4 495.98,-339.4 495.98,-375.4"/>
128 -<text text-anchor="middle" x="247.99" y="-353.2" font-family="Times,serif" font-size="14.00">v11 (mutable _$5 @ mutable _$5 = JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
129 -</g>
130 -<!-- v7&#45;&gt;v11 -->
131 -<g id="edge9" class="edge">
132 -<title>v7&#45;&gt;v11</title>
133 -<path fill="none" stroke="black" d="M420.32,-428.14C402.58,-422.83 383.29,-416.65 365.8,-410.2 341.33,-401.17 314.68,-389.61 292.93,-379.7"/>
134 -<polygon fill="black" stroke="black" points="294.17,-376.41 283.62,-375.42 291.25,-382.78 294.17,-376.41"/>
135 -<text text-anchor="middle" x="386.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
136 -</g>
137 -<!-- v12 -->
138 -<g id="node13" class="node">
139 -<title>v12</title>
140 -<polygon fill="none" stroke="black" points="720.78,-286.6 197.21,-286.6 197.21,-250.6 720.78,-250.6 720.78,-286.6"/>
141 -<text text-anchor="middle" x="458.99" y="-264.4" font-family="Times,serif" font-size="14.00">v12 (readonly a$2 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
142 -</g>
143 -<!-- v7&#45;&gt;v12 -->
144 -<g id="edge10" class="edge">
145 -<title>v7&#45;&gt;v12</title>
146 -<path fill="none" stroke="black" d="M490.97,-428.14C500.86,-407.05 514.23,-370.19 504.99,-339.4 500.15,-323.25 490.23,-307.38 480.83,-294.86"/>
147 -<polygon fill="black" stroke="black" points="483.41,-292.48 474.48,-286.77 477.9,-296.8 483.41,-292.48"/>
148 -</g>
149 -<!-- v8&#45;&gt;v12 -->
150 -<g id="edge19" class="edge">
151 -<title>v8&#45;&gt;v12</title>
152 -<path fill="none" stroke="black" d="M662.31,-339.35C620.97,-325.17 562.01,-304.94 518.22,-289.92"/>
153 -<polygon fill="black" stroke="black" points="519.16,-286.54 508.56,-286.61 516.88,-293.16 519.16,-286.54"/>
154 -<text text-anchor="middle" x="629.59" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
155 -</g>
156 -<!-- v13 -->
157 -<g id="node14" class="node">
158 -<title>v13</title>
159 -<polygon fill="none" stroke="black" points="1042.07,-197.8 517.92,-197.8 517.92,-161.8 1042.07,-161.8 1042.07,-197.8"/>
160 -<text text-anchor="middle" x="779.99" y="-175.6" font-family="Times,serif" font-size="14.00">v13 (readonly b$3 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
161 -</g>
162 -<!-- v8&#45;&gt;v13 -->
163 -<g id="edge13" class="edge">
164 -<title>v8&#45;&gt;v13</title>
165 -<path fill="none" stroke="black" d="M718.64,-339.24C730.52,-308.56 755.49,-244.08 769.64,-207.54"/>
166 -<polygon fill="black" stroke="black" points="772.97,-208.62 773.32,-198.03 766.45,-206.09 772.97,-208.62"/>
167 -</g>
168 -<!-- v9 -->
169 -<g id="node10" class="node">
170 -<title>v9</title>
171 -<polygon fill="none" stroke="black" points="1727.93,-714.8 1514.06,-714.8 1514.06,-678.8 1727.93,-678.8 1727.93,-714.8"/>
172 -<text text-anchor="middle" x="1620.99" y="-692.6" font-family="Times,serif" font-size="14.00">v9 (frozen $6 @ frozen $6 = &quot;div&quot;)</text>
173 -</g>
174 -<!-- v10 -->
175 -<g id="node11" class="node">
176 -<title>v10</title>
177 -<polygon fill="none" stroke="black" points="1818.64,-641.8 1423.34,-641.8 1423.34,-605.8 1818.64,-605.8 1818.64,-641.8"/>
178 -<text text-anchor="middle" x="1620.99" y="-619.6" font-family="Times,serif" font-size="14.00">v10 (frozen $6 @ JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
179 -</g>
180 -<!-- v9&#45;&gt;v10 -->
181 -<g id="edge8" class="edge">
182 -<title>v9&#45;&gt;v10</title>
183 -<path fill="none" stroke="black" d="M1620.99,-678.61C1620.99,-670.59 1620.99,-660.85 1620.99,-651.87"/>
184 -<polygon fill="black" stroke="black" points="1624.49,-651.83 1620.99,-641.83 1617.49,-651.83 1624.49,-651.83"/>
185 -</g>
186 -<!-- v11&#45;&gt;v7 -->
187 -<g id="edge12" class="edge">
188 -<title>v11&#45;&gt;v7</title>
189 -<path fill="none" stroke="black" d="M352.89,-375.42C371.32,-380.11 390.02,-386.01 406.99,-393.4 423.69,-400.67 440.54,-411.88 454.02,-422.01"/>
190 -<polygon fill="black" stroke="black" points="451.9,-424.79 461.95,-428.13 456.18,-419.25 451.9,-424.79"/>
191 -<text text-anchor="middle" x="456.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
192 -</g>
193 -<!-- v11&#45;&gt;v12 -->
194 -<g id="edge20" class="edge">
195 -<title>v11&#45;&gt;v12</title>
196 -<path fill="none" stroke="black" d="M289.43,-339.35C323.47,-325.35 371.84,-305.45 408.21,-290.49"/>
197 -<polygon fill="black" stroke="black" points="409.74,-293.65 417.65,-286.61 407.07,-287.17 409.74,-293.65"/>
198 -<text text-anchor="middle" x="393.59" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
199 -</g>
200 -<!-- v12&#45;&gt;v13 -->
201 -<g id="edge22" class="edge">
202 -<title>v12&#45;&gt;v13</title>
203 -<path fill="none" stroke="black" d="M522.03,-250.55C575.25,-236.16 651.49,-215.55 707.28,-200.46"/>
204 -<polygon fill="black" stroke="black" points="708.36,-203.8 717.1,-197.81 706.53,-197.04 708.36,-203.8"/>
205 -<text text-anchor="middle" x="669.59" y="-220" font-family="Times,serif" font-size="14.00">capture</text>
206 -</g>
207 -<!-- v16 -->
208 -<g id="node17" class="node">
209 -<title>v16</title>
210 -<polygon fill="none" stroke="black" points="1003.49,-109 430.5,-109 430.5,-73 1003.49,-73 1003.49,-109"/>
211 -<text text-anchor="middle" x="716.99" y="-86.8" font-family="Times,serif" font-size="14.00">v16 (frozen $8 @ frozen $8 = JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
212 -</g>
213 -<!-- v12&#45;&gt;v16 -->
214 -<g id="edge17" class="edge">
215 -<title>v12&#45;&gt;v16</title>
216 -<path fill="none" stroke="black" d="M408.55,-250.41C400.93,-245.74 393.97,-239.9 388.99,-232.6 362.47,-193.71 349.48,-161.96 380.99,-127 386.97,-120.37 409.13,-114.91 439.42,-110.44"/>
217 -<polygon fill="black" stroke="black" points="440.11,-113.88 449.53,-109.03 439.14,-106.95 440.11,-113.88"/>
218 -<text text-anchor="middle" x="389.59" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
219 -</g>
220 -<!-- v17 -->
221 -<g id="node18" class="node">
222 -<title>v17</title>
223 -<polygon fill="none" stroke="black" points="825.82,-36 608.17,-36 608.17,0 825.82,0 825.82,-36"/>
224 -<text text-anchor="middle" x="716.99" y="-13.8" font-family="Times,serif" font-size="14.00">v17 (frozen $8 @ Return frozen $8)</text>
225 -</g>
226 -<!-- v12&#45;&gt;v17 -->
227 -<g id="edge24" class="edge">
228 -<title>v12&#45;&gt;v17</title>
229 -<path fill="none" stroke="black" d="M447.62,-250.49C424.6,-213.55 378.28,-125.44 421.99,-73 444.64,-45.83 526.33,-32.29 598.02,-25.57"/>
230 -<polygon fill="black" stroke="black" points="598.42,-29.04 608.07,-24.66 597.79,-22.07 598.42,-29.04"/>
231 -<text text-anchor="middle" x="425.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
232 -</g>
233 -<!-- v13&#45;&gt;v16 -->
234 -<g id="edge18" class="edge">
235 -<title>v13&#45;&gt;v16</title>
236 -<path fill="none" stroke="black" d="M735.6,-161.61C728.52,-156.9 722.11,-151.04 717.8,-143.8 713.47,-136.52 712.21,-127.58 712.36,-119.19"/>
237 -<polygon fill="black" stroke="black" points="715.86,-119.27 713.17,-109.02 708.89,-118.71 715.86,-119.27"/>
238 -<text text-anchor="middle" x="738.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
239 -</g>
240 -<!-- v13&#45;&gt;v17 -->
241 -<g id="edge25" class="edge">
242 -<title>v13&#45;&gt;v17</title>
243 -<path fill="none" stroke="black" d="M908.55,-161.75C981.4,-146.71 1050.9,-119.67 1011.99,-73 989.35,-45.83 907.65,-32.29 835.96,-25.57"/>
244 -<polygon fill="black" stroke="black" points="836.19,-22.07 825.92,-24.66 835.56,-29.04 836.19,-22.07"/>
245 -<text text-anchor="middle" x="1044.59" y="-86.8" font-family="Times,serif" font-size="14.00">capture</text>
246 -</g>
247 -<!-- v14 -->
248 -<g id="node15" class="node">
249 -<title>v14</title>
250 -<polygon fill="none" stroke="black" points="2199.43,-714.8 1978.56,-714.8 1978.56,-678.8 2199.43,-678.8 2199.43,-714.8"/>
251 -<text text-anchor="middle" x="2088.99" y="-692.6" font-family="Times,serif" font-size="14.00">v14 (frozen $7 @ frozen $7 = &quot;div&quot;)</text>
252 -</g>
253 -<!-- v15 -->
254 -<g id="node16" class="node">
255 -<title>v15</title>
256 -<polygon fill="none" stroke="black" points="2341.34,-641.8 1836.65,-641.8 1836.65,-605.8 2341.34,-605.8 2341.34,-641.8"/>
257 -<text text-anchor="middle" x="2088.99" y="-619.6" font-family="Times,serif" font-size="14.00">v15 (frozen $7 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
258 -</g>
259 -<!-- v14&#45;&gt;v15 -->
260 -<g id="edge15" class="edge">
261 -<title>v14&#45;&gt;v15</title>
262 -<path fill="none" stroke="black" d="M2088.99,-678.61C2088.99,-670.59 2088.99,-660.85 2088.99,-651.87"/>
263 -<polygon fill="black" stroke="black" points="2092.49,-651.83 2088.99,-641.83 2085.49,-651.83 2092.49,-651.83"/>
264 -</g>
265 -<!-- v16&#45;&gt;v12 -->
266 -<g id="edge21" class="edge">
267 -<title>v16&#45;&gt;v12</title>
268 -<path fill="none" stroke="black" d="M612.2,-109.04C552.84,-120.96 486.75,-138.85 467.8,-161.8 449.88,-183.49 450.2,-216.92 453.38,-240.39"/>
269 -<polygon fill="black" stroke="black" points="449.94,-241.07 454.98,-250.39 456.85,-239.96 449.94,-241.07"/>
270 -<text text-anchor="middle" x="488.59" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
271 -</g>
272 -<!-- v16&#45;&gt;v13 -->
273 -<g id="edge23" class="edge">
274 -<title>v16&#45;&gt;v13</title>
275 -<path fill="none" stroke="black" d="M741.59,-109.08C747.86,-114.29 754.18,-120.41 758.99,-127 764.42,-134.44 768.71,-143.47 771.96,-151.91"/>
276 -<polygon fill="black" stroke="black" points="768.68,-153.13 775.3,-161.4 775.28,-150.8 768.68,-153.13"/>
277 -<text text-anchor="middle" x="789.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
278 -</g>
279 -<!-- v16&#45;&gt;v17 -->
280 -<g id="edge16" class="edge">
281 -<title>v16&#45;&gt;v17</title>
282 -<path fill="none" stroke="black" d="M716.99,-72.81C716.99,-64.79 716.99,-55.05 716.99,-46.07"/>
283 -<polygon fill="black" stroke="black" points="720.49,-46.03 716.99,-36.03 713.49,-46.03 720.49,-46.03"/>
284 -</g>
285 -</g>
286 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/component.svg
+565 -580
@@ -3,737 +3,722 @@
3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 <!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="9655pt" height="833pt"
8 - viewBox="0.00 0.00 9655.44 833.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 829)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-829 9651.44,-829 9651.44,4 -4,4"/>
6 +<!-- Title: BuildDefUseGraph Pages: 1 -->
7 +<svg width="13468pt" height="482pt"
8 + viewBox="0.00 0.00 13467.86 481.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 477.6)">
10 +<title>BuildDefUseGraph</title>
11 +<polygon fill="white" stroke="none" points="-4,4 -4,-477.6 13463.86,-477.6 13463.86,4 -4,4"/>
12 <!-- v0 -->
13 <g id="node1" class="node">
14 <title>v0</title>
15 -<polygon fill="none" stroke="black" points="277.85,-822.2 71.01,-822.2 71.01,-786.2 277.85,-786.2 277.85,-822.2"/>
16 -<text text-anchor="middle" x="174.43" y="-800" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
15 +<polygon fill="none" stroke="black" points="611.86,-396 256.43,-396 256.43,-360 611.86,-360 611.86,-396"/>
16 +<text text-anchor="middle" x="434.14" y="-373.8" font-family="Times,serif" font-size="14.00">v0 (frozen props$1.items @ frozen props$1.items) &lt;update&gt;</text>
17 </g>
18 <!-- v1 -->
19 <g id="node2" class="node">
20 <title>v1</title>
21 -<polygon fill="none" stroke="black" points="324.03,-746.4 24.82,-746.4 24.82,-710.4 324.03,-710.4 324.03,-746.4"/>
22 -<text text-anchor="middle" x="174.43" y="-724.2" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.items @ frozen props$1.items)</text>
21 +<polygon fill="none" stroke="black" points="428.91,-324 11.38,-324 11.38,-288 428.91,-288 428.91,-324"/>
22 +<text text-anchor="middle" x="220.14" y="-301.8" font-family="Times,serif" font-size="14.00">v1 (frozen items$2 @ frozen items$2 = frozen props$1.items) &lt;assign&gt;</text>
23 </g>
24 <!-- v0&#45;&gt;v1 -->
25 <g id="edge1" class="edge">
26 <title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M174.43,-786.08C174.43,-777.33 174.43,-766.46 174.43,-756.59"/>
28 -<polygon fill="black" stroke="black" points="177.93,-756.42 174.43,-746.42 170.93,-756.42 177.93,-756.42"/>
29 -</g>
30 -<!-- v4 -->
31 -<g id="node5" class="node">
32 -<title>v4</title>
33 -<polygon fill="none" stroke="black" points="348.78,-657.6 0.07,-657.6 0.07,-621.6 348.78,-621.6 348.78,-657.6"/>
34 -<text text-anchor="middle" x="174.43" y="-635.4" font-family="Times,serif" font-size="14.00">v4 (frozen props$1.maxItems @ frozen props$1.maxItems)</text>
35 -</g>
36 -<!-- v1&#45;&gt;v4 -->
37 -<g id="edge3" class="edge">
38 -<title>v1&#45;&gt;v4</title>
39 -<path fill="none" stroke="black" d="M174.43,-710.25C174.43,-698.12 174.43,-681.62 174.43,-667.72"/>
40 -<polygon fill="black" stroke="black" points="177.93,-667.71 174.43,-657.71 170.93,-667.71 177.93,-667.71"/>
27 +<path fill="none" stroke="black" d="M382.07,-359.97C351.91,-350.1 313.76,-337.62 282.07,-327.25"/>
28 +<polygon fill="black" stroke="black" points="283.05,-323.89 272.45,-324.11 280.87,-330.55 283.05,-323.89"/>
29 </g>
30 <!-- v2 -->
31 <g id="node3" class="node">
32 <title>v2</title>
45 -<polygon fill="none" stroke="black" points="700.9,-822.2 337.96,-822.2 337.96,-786.2 700.9,-786.2 700.9,-822.2"/>
46 -<text text-anchor="middle" x="519.43" y="-800" font-family="Times,serif" font-size="14.00">v2 (frozen items$2 @ frozen items$2 = frozen props$1.items)</text>
33 +<polygon fill="none" stroke="black" points="863.11,-324 457.18,-324 457.18,-288 863.11,-288 863.11,-324"/>
34 +<text text-anchor="middle" x="660.14" y="-301.8" font-family="Times,serif" font-size="14.00">v2 (frozen props$1.maxItems @ frozen props$1.maxItems) &lt;update&gt;</text>
35 </g>
48 -<!-- v3 -->
36 +<!-- v0&#45;&gt;v2 -->
37 +<g id="edge2" class="edge">
38 +<title>v0&#45;&gt;v2</title>
39 +<path fill="none" stroke="black" d="M489.14,-359.97C521.13,-350.06 561.63,-337.51 595.18,-327.12"/>
40 +<polygon fill="black" stroke="black" points="596.38,-330.41 604.9,-324.11 594.31,-323.73 596.38,-330.41"/>
41 +</g>
42 +<!-- v12 -->
43 <g id="node4" class="node">
44 +<title>v12</title>
45 +<polygon fill="none" stroke="black" points="418.43,-252 -0.14,-252 -0.14,-216 418.43,-216 418.43,-252"/>
46 +<text text-anchor="middle" x="209.14" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (frozen items$2 @ If (frozen items$2) then:bb3 else:bb2) &lt;update&gt;</text>
47 +</g>
48 +<!-- v1&#45;&gt;v12 -->
49 +<g id="edge3" class="edge">
50 +<title>v1&#45;&gt;v12</title>
51 +<path fill="none" stroke="black" d="M217.42,-287.7C216.21,-279.98 214.76,-270.71 213.4,-262.11"/>
52 +<polygon fill="black" stroke="black" points="216.84,-261.44 211.83,-252.1 209.93,-262.53 216.84,-261.44"/>
53 +</g>
54 +<!-- v3 -->
55 +<g id="node5" class="node">
56 <title>v3</title>
51 -<polygon fill="none" stroke="black" points="696.61,-746.4 342.25,-746.4 342.25,-710.4 696.61,-710.4 696.61,-746.4"/>
52 -<text text-anchor="middle" x="519.43" y="-724.2" font-family="Times,serif" font-size="14.00">v3 (frozen items$2 @ If (frozen items$2) then:bb3 else:bb2)</text>
57 +<polygon fill="none" stroke="black" points="928.03,-252 436.25,-252 436.25,-216 928.03,-216 928.03,-252"/>
58 +<text text-anchor="middle" x="682.14" y="-229.8" font-family="Times,serif" font-size="14.00">v3 (frozen maxItems$3 @ frozen maxItems$3 = frozen props$1.maxItems) &lt;assign&gt;</text>
59 </g>
60 <!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
61 +<g id="edge4" class="edge">
62 <title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M519.43,-786.08C519.43,-777.33 519.43,-766.46 519.43,-756.59"/>
58 -<polygon fill="black" stroke="black" points="522.93,-756.42 519.43,-746.42 515.93,-756.42 522.93,-756.42"/>
59 -</g>
60 -<!-- v3&#45;&gt;v3 -->
61 -<g id="edge11" class="edge">
62 -<title>v3&#45;&gt;v3</title>
63 -<path fill="none" stroke="black" d="M696.7,-733.23C707.97,-732.09 714.77,-730.49 714.77,-728.4 714.77,-727.03 711.84,-725.87 706.64,-724.91"/>
64 -<polygon fill="black" stroke="black" points="707.07,-721.44 696.7,-723.57 706.14,-728.37 707.07,-721.44"/>
63 +<path fill="none" stroke="black" d="M665.58,-287.7C668.03,-279.9 670.98,-270.51 673.71,-261.83"/>
64 +<polygon fill="black" stroke="black" points="677.11,-262.69 676.77,-252.1 670.43,-260.59 677.11,-262.69"/>
65 </g>
66 -<!-- v5 -->
66 +<!-- v10 -->
67 <g id="node6" class="node">
68 -<title>v5</title>
69 -<polygon fill="none" stroke="black" points="1199.03,-822.2 761.83,-822.2 761.83,-786.2 1199.03,-786.2 1199.03,-822.2"/>
70 -<text text-anchor="middle" x="980.43" y="-800" font-family="Times,serif" font-size="14.00">v5 (frozen maxItems$3 @ frozen maxItems$3 = frozen props$1.maxItems)</text>
68 +<title>v10</title>
69 +<polygon fill="none" stroke="black" points="966.39,-180 397.9,-180 397.9,-144 966.39,-144 966.39,-180"/>
70 +<text text-anchor="middle" x="682.14" y="-157.8" font-family="Times,serif" font-size="14.00">v10 (frozen maxItems$3 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
71 </g>
72 -<!-- v6 -->
73 -<g id="node7" class="node">
74 -<title>v6</title>
75 -<polygon fill="none" stroke="black" points="1228.22,-746.4 732.63,-746.4 732.63,-710.4 1228.22,-710.4 1228.22,-746.4"/>
76 -<text text-anchor="middle" x="980.43" y="-724.2" font-family="Times,serif" font-size="14.00">v6 (frozen maxItems$3 @ Call mutable Math$8.max(frozen $9, frozen maxItems$3))</text>
72 +<!-- v3&#45;&gt;v10 -->
73 +<g id="edge5" class="edge">
74 +<title>v3&#45;&gt;v10</title>
75 +<path fill="none" stroke="black" d="M682.14,-215.7C682.14,-207.98 682.14,-198.71 682.14,-190.11"/>
76 +<polygon fill="black" stroke="black" points="685.64,-190.1 682.14,-180.1 678.64,-190.1 685.64,-190.1"/>
77 </g>
78 -<!-- v5&#45;&gt;v6 -->
79 -<g id="edge4" class="edge">
80 -<title>v5&#45;&gt;v6</title>
81 -<path fill="none" stroke="black" d="M980.43,-786.08C980.43,-777.33 980.43,-766.46 980.43,-756.59"/>
82 -<polygon fill="black" stroke="black" points="983.93,-756.42 980.43,-746.42 976.93,-756.42 983.93,-756.42"/>
78 +<!-- v4 -->
79 +<g id="node7" class="node">
80 +<title>v4</title>
81 +<polygon fill="none" stroke="black" points="1837.62,-470.8 1366.67,-470.8 1366.67,-434.8 1837.62,-434.8 1837.62,-470.8"/>
82 +<text text-anchor="middle" x="1602.14" y="-448.6" font-family="Times,serif" font-size="14.00">v4 (readonly renderedItems$4 @ readonly renderedItems$4 = Array []) &lt;assign&gt;</text>
83 </g>
84 -<!-- v7 -->
84 +<!-- v18 -->
85 <g id="node8" class="node">
86 -<title>v7</title>
87 -<polygon fill="none" stroke="black" points="1649.84,-822.2 1241.01,-822.2 1241.01,-786.2 1649.84,-786.2 1649.84,-822.2"/>
88 -<text text-anchor="middle" x="1445.43" y="-800" font-family="Times,serif" font-size="14.00">v7 (mutable renderedItems$4 @ mutable renderedItems$4 = Array [])</text>
86 +<title>v18</title>
87 +<polygon fill="none" stroke="black" points="1884.55,-180 1387.73,-180 1387.73,-144 1884.55,-144 1884.55,-180"/>
88 +<text text-anchor="middle" x="1636.14" y="-157.8" font-family="Times,serif" font-size="14.00">v18 (readonly renderedItems$4.length @ readonly renderedItems$4.length) &lt;update&gt;</text>
89 </g>
90 -<!-- v8 -->
90 +<!-- v4&#45;&gt;v18 -->
91 +<g id="edge6" class="edge">
92 +<title>v4&#45;&gt;v18</title>
93 +<path fill="none" stroke="black" d="M1674.19,-434.78C1697.1,-426.34 1720.93,-413.97 1738.14,-396 1761.68,-371.43 1758.28,-357.51 1764.14,-324 1772.44,-276.62 1785.38,-254.94 1757.14,-216 1747.07,-202.11 1732.55,-191.81 1717.04,-184.19"/>
94 +<polygon fill="black" stroke="black" points="1718.38,-180.95 1707.83,-180.01 1715.48,-187.33 1718.38,-180.95"/>
95 +</g>
96 +<!-- v49 -->
97 <g id="node9" class="node">
92 -<title>v8</title>
93 -<polygon fill="none" stroke="black" points="1633.73,-568.8 1201.13,-568.8 1201.13,-532.8 1633.73,-532.8 1633.73,-568.8"/>
94 -<text text-anchor="middle" x="1417.43" y="-546.6" font-family="Times,serif" font-size="14.00">v8 (readonly renderedItems$4.length @ readonly renderedItems$4.length)</text>
98 +<title>v49</title>
99 +<polygon fill="none" stroke="black" points="1700.95,-396 1123.34,-396 1123.34,-360 1700.95,-360 1700.95,-396"/>
100 +<text text-anchor="middle" x="1412.14" y="-373.8" font-family="Times,serif" font-size="14.00">v49 (mutable renderedItems$4.push @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
101 </g>
96 -<!-- v7&#45;&gt;v8 -->
97 -<g id="edge5" class="edge">
98 -<title>v7&#45;&gt;v8</title>
99 -<path fill="none" stroke="black" d="M1423.34,-786.01C1411.3,-775.65 1396.95,-761.56 1387.43,-746.4 1365.27,-711.12 1364.18,-698.71 1357.43,-657.6 1354.83,-641.81 1351.87,-636.6 1357.43,-621.6 1363.87,-604.23 1376.78,-588.28 1388.98,-576.02"/>
100 -<polygon fill="black" stroke="black" points="1391.63,-578.33 1396.42,-568.89 1386.78,-573.28 1391.63,-578.33"/>
102 +<!-- v4&#45;&gt;v49 -->
103 +<g id="edge7" class="edge">
104 +<title>v4&#45;&gt;v49</title>
105 +<path fill="none" stroke="black" d="M1557.6,-434.73C1530.3,-424.27 1495.17,-410.81 1466.28,-399.74"/>
106 +<polygon fill="black" stroke="black" points="1467.33,-396.4 1456.74,-396.09 1464.83,-402.93 1467.33,-396.4"/>
107 </g>
102 -<!-- v9 -->
108 +<!-- v62 -->
109 <g id="node10" class="node">
104 -<title>v9</title>
105 -<polygon fill="none" stroke="black" points="1910.13,-746.4 1396.73,-746.4 1396.73,-710.4 1910.13,-710.4 1910.13,-746.4"/>
106 -<text text-anchor="middle" x="1653.43" y="-724.2" font-family="Times,serif" font-size="14.00">v9 (mutable renderedItems$4.push @ Call mutable renderedItems$4.push(mutable $15))</text>
110 +<title>v62</title>
111 +<polygon fill="none" stroke="black" points="1747.88,-252 1524.41,-252 1524.41,-216 1747.88,-216 1747.88,-252"/>
112 +<text text-anchor="middle" x="1636.14" y="-229.8" font-family="Times,serif" font-size="14.00">v62 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
113 </g>
108 -<!-- v7&#45;&gt;v9 -->
109 -<g id="edge6" class="edge">
110 -<title>v7&#45;&gt;v9</title>
111 -<path fill="none" stroke="black" d="M1493.41,-786.18C1523.85,-775.37 1563.42,-761.33 1595.6,-749.92"/>
112 -<polygon fill="black" stroke="black" points="1597.07,-753.11 1605.33,-746.47 1594.73,-746.51 1597.07,-753.11"/>
114 +<!-- v4&#45;&gt;v62 -->
115 +<g id="edge8" class="edge">
116 +<title>v4&#45;&gt;v62</title>
117 +<path fill="none" stroke="black" d="M1650.1,-434.7C1670.49,-425.62 1693.37,-412.81 1710.14,-396 1735.56,-370.53 1738.68,-358.97 1747.14,-324 1750.91,-308.45 1755.68,-301.53 1747.14,-288 1738.51,-274.31 1725.27,-264.09 1710.89,-256.47"/>
118 +<polygon fill="black" stroke="black" points="1712.35,-253.29 1701.83,-252.05 1709.29,-259.58 1712.35,-253.29"/>
119 </g>
114 -<!-- v27 -->
115 -<g id="node28" class="node">
116 -<title>v27</title>
117 -<polygon fill="none" stroke="black" points="1643.79,-480 1191.06,-480 1191.06,-444 1643.79,-444 1643.79,-480"/>
118 -<text text-anchor="middle" x="1417.43" y="-457.8" font-family="Times,serif" font-size="14.00">v27 (frozen count$17 @ frozen count$17 = readonly renderedItems$4.length)</text>
120 +<!-- v71 -->
121 +<g id="node11" class="node">
122 +<title>v71</title>
123 +<polygon fill="none" stroke="black" points="1169.88,-252 946.41,-252 946.41,-216 1169.88,-216 1169.88,-252"/>
124 +<text text-anchor="middle" x="1058.14" y="-229.8" font-family="Times,serif" font-size="14.00">v71 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
125 </g>
120 -<!-- v8&#45;&gt;v27 -->
121 -<g id="edge19" class="edge">
122 -<title>v8&#45;&gt;v27</title>
123 -<path fill="none" stroke="black" d="M1423.38,-532.56C1425.04,-526.96 1426.6,-520.68 1427.43,-514.8 1428.46,-507.41 1428.46,-505.39 1427.43,-498 1427.07,-495.43 1426.56,-492.78 1425.97,-490.14"/>
124 -<polygon fill="black" stroke="black" points="1429.3,-489.03 1423.38,-480.24 1422.53,-490.8 1429.3,-489.03"/>
125 -<text text-anchor="middle" x="1449.02" y="-502.2" font-family="Times,serif" font-size="14.00">capture</text>
126 +<!-- v4&#45;&gt;v71 -->
127 +<g id="edge9" class="edge">
128 +<title>v4&#45;&gt;v71</title>
129 +<path fill="none" stroke="black" d="M1366.72,-441.69C1264.44,-433.9 1158.03,-420.16 1114.14,-396 1078.15,-376.18 1069.81,-362.75 1056.14,-324 1049.17,-304.23 1050.15,-280.43 1052.61,-262.42"/>
130 +<polygon fill="black" stroke="black" points="1056.1,-262.72 1054.23,-252.3 1049.19,-261.62 1056.1,-262.72"/>
131 </g>
127 -<!-- v28 -->
128 -<g id="node29" class="node">
129 -<title>v28</title>
130 -<polygon fill="none" stroke="black" points="1393.81,-391.2 871.05,-391.2 871.05,-355.2 1393.81,-355.2 1393.81,-391.2"/>
131 -<text text-anchor="middle" x="1132.43" y="-369" font-family="Times,serif" font-size="14.00">v28 (frozen count$17 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;)</text>
132 +<!-- v19 -->
133 +<g id="node31" class="node">
134 +<title>v19</title>
135 +<polygon fill="none" stroke="black" points="1538.76,-108 1005.53,-108 1005.53,-72 1538.76,-72 1538.76,-108"/>
136 +<text text-anchor="middle" x="1272.14" y="-85.8" font-family="Times,serif" font-size="14.00">v19 (readonly count$17 @ readonly count$17 = readonly renderedItems$4.length) &lt;assign&gt;</text>
137 </g>
133 -<!-- v8&#45;&gt;v28 -->
134 -<g id="edge28" class="edge">
135 -<title>v8&#45;&gt;v28</title>
136 -<path fill="none" stroke="black" d="M1293.18,-532.74C1229.67,-521.32 1161.54,-503.96 1141.23,-480 1123.04,-458.54 1123.41,-425.06 1126.68,-401.53"/>
137 -<polygon fill="black" stroke="black" points="1130.16,-401.92 1128.32,-391.49 1123.25,-400.79 1130.16,-401.92"/>
138 -<text text-anchor="middle" x="1162.02" y="-457.8" font-family="Times,serif" font-size="14.00">capture</text>
138 +<!-- v18&#45;&gt;v19 -->
139 +<g id="edge21" class="edge">
140 +<title>v18&#45;&gt;v19</title>
141 +<path fill="none" stroke="black" d="M1547.57,-143.97C1494.17,-133.7 1426.07,-120.6 1370.94,-110"/>
142 +<polygon fill="black" stroke="black" points="1371.29,-106.5 1360.8,-108.05 1369.96,-113.38 1371.29,-106.5"/>
143 </g>
140 -<!-- v29 -->
141 -<g id="node30" class="node">
142 -<title>v29</title>
143 -<polygon fill="none" stroke="black" points="2223.27,-302.4 1369.59,-302.4 1369.59,-266.4 2223.27,-266.4 2223.27,-302.4"/>
144 -<text text-anchor="middle" x="1796.43" y="-280.2" font-family="Times,serif" font-size="14.00">v29 (readonly renderedItems$4 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
144 +<!-- v34 -->
145 +<g id="node32" class="node">
146 +<title>v34</title>
147 +<polygon fill="none" stroke="black" points="2441.14,-108 1557.15,-108 1557.15,-72 2441.14,-72 2441.14,-108"/>
148 +<text text-anchor="middle" x="1999.14" y="-85.8" font-family="Times,serif" font-size="14.00">v34 (frozen renderedItems$4 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
149 </g>
146 -<!-- v8&#45;&gt;v29 -->
147 -<g id="edge20" class="edge">
148 -<title>v8&#45;&gt;v29</title>
149 -<path fill="none" stroke="black" d="M1526.57,-532.73C1568.62,-522.38 1615.39,-505.95 1652.43,-480 1716.13,-435.36 1762.99,-353.55 1784.06,-311.65"/>
150 -<polygon fill="black" stroke="black" points="1787.23,-313.14 1788.52,-302.62 1780.95,-310.04 1787.23,-313.14"/>
150 +<!-- v18&#45;&gt;v34 -->
151 +<g id="edge22" class="edge">
152 +<title>v18&#45;&gt;v34</title>
153 +<path fill="none" stroke="black" d="M1724.48,-143.97C1777.72,-133.7 1845.64,-120.6 1900.62,-110"/>
154 +<polygon fill="black" stroke="black" points="1901.57,-113.38 1910.73,-108.05 1900.25,-106.51 1901.57,-113.38"/>
155 </g>
152 -<!-- v53 -->
153 -<g id="node54" class="node">
154 -<title>v53</title>
155 -<polygon fill="none" stroke="black" points="1940.21,-657.6 1366.64,-657.6 1366.64,-621.6 1940.21,-621.6 1940.21,-657.6"/>
156 -<text text-anchor="middle" x="1653.43" y="-635.4" font-family="Times,serif" font-size="14.00">v53 (mutable renderedItems$4.length @ Binary mutable renderedItems$4.length &gt;= frozen max$7)</text>
156 +<!-- v51 -->
157 +<g id="node59" class="node">
158 +<title>v51</title>
159 +<polygon fill="none" stroke="black" points="1738.03,-324 1086.26,-324 1086.26,-288 1738.03,-288 1738.03,-324"/>
160 +<text text-anchor="middle" x="1412.14" y="-301.8" font-family="Times,serif" font-size="14.00">v51 (readonly renderedItems$4.length @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
161 </g>
158 -<!-- v9&#45;&gt;v53 -->
159 -<g id="edge56" class="edge">
160 -<title>v9&#45;&gt;v53</title>
161 -<path fill="none" stroke="black" d="M1647.92,-710.25C1646.6,-698.12 1646.33,-681.62 1647.12,-667.72"/>
162 -<polygon fill="black" stroke="black" points="1650.61,-667.96 1647.93,-657.71 1643.63,-667.4 1650.61,-667.96"/>
162 +<!-- v49&#45;&gt;v51 -->
163 +<g id="edge43" class="edge">
164 +<title>v49&#45;&gt;v51</title>
165 +<path fill="none" stroke="black" d="M1412.14,-359.7C1412.14,-351.98 1412.14,-342.71 1412.14,-334.11"/>
166 +<polygon fill="black" stroke="black" points="1415.64,-334.1 1412.14,-324.1 1408.64,-334.1 1415.64,-334.1"/>
167 </g>
164 -<!-- v10 -->
165 -<g id="node11" class="node">
166 -<title>v10</title>
167 -<polygon fill="none" stroke="black" points="2152.23,-822.2 1772.62,-822.2 1772.62,-786.2 2152.23,-786.2 2152.23,-822.2"/>
168 -<text text-anchor="middle" x="1962.43" y="-800" font-family="Times,serif" font-size="14.00">v10 (mutable seen$5 @ mutable seen$5 = New mutable Set$6())</text>
168 +<!-- v62&#45;&gt;v18 -->
169 +<g id="edge54" class="edge">
170 +<title>v62&#45;&gt;v18</title>
171 +<path fill="none" stroke="black" d="M1636.14,-215.7C1636.14,-207.98 1636.14,-198.71 1636.14,-190.11"/>
172 +<polygon fill="black" stroke="black" points="1639.64,-190.1 1636.14,-180.1 1632.64,-190.1 1639.64,-190.1"/>
173 </g>
170 -<!-- v11 -->
171 -<g id="node12" class="node">
172 -<title>v11</title>
173 -<polygon fill="none" stroke="black" points="2381.05,-657.6 1961.81,-657.6 1961.81,-621.6 2381.05,-621.6 2381.05,-657.6"/>
174 -<text text-anchor="middle" x="2171.43" y="-635.4" font-family="Times,serif" font-size="14.00">v11 (mutable seen$5.has @ Call mutable seen$5.has(mutable item$10))</text>
174 +<!-- v71&#45;&gt;v49 -->
175 +<g id="edge55" class="edge">
176 +<title>v71&#45;&gt;v49</title>
177 +<path fill="none" stroke="black" d="M1056.54,-252.13C1055.67,-272.34 1057.65,-305.52 1077.14,-324 1093.53,-339.54 1130.17,-350.52 1173.46,-358.28"/>
178 +<polygon fill="black" stroke="black" points="1172.94,-361.75 1183.38,-359.99 1174.12,-354.85 1172.94,-361.75"/>
179 </g>
176 -<!-- v10&#45;&gt;v11 -->
177 -<g id="edge7" class="edge">
178 -<title>v10&#45;&gt;v11</title>
179 -<path fill="none" stroke="black" d="M1955.54,-785.98C1948.72,-765.84 1941.41,-732.47 1957.43,-710.4 1974.21,-687.27 1998.87,-671.66 2025.53,-661.16"/>
180 -<polygon fill="black" stroke="black" points="2026.87,-664.4 2035.04,-657.65 2024.44,-657.83 2026.87,-664.4"/>
180 +<!-- v5 -->
181 +<g id="node12" class="node">
182 +<title>v5</title>
183 +<polygon fill="none" stroke="black" points="2228.7,-470.8 1909.59,-470.8 1909.59,-434.8 2228.7,-434.8 2228.7,-470.8"/>
184 +<text text-anchor="middle" x="2069.14" y="-448.6" font-family="Times,serif" font-size="14.00">v5 (mutable Set$6 @ New mutable Set$6()) &lt;update&gt;</text>
185 </g>
182 -<!-- v12 -->
186 +<!-- v6 -->
187 <g id="node13" class="node">
184 -<title>v12</title>
185 -<polygon fill="none" stroke="black" points="2388.65,-746.4 1966.2,-746.4 1966.2,-710.4 2388.65,-710.4 2388.65,-746.4"/>
186 -<text text-anchor="middle" x="2177.43" y="-724.2" font-family="Times,serif" font-size="14.00">v12 (mutable seen$5.add @ Call mutable seen$5.add(mutable item$10))</text>
188 +<title>v6</title>
189 +<polygon fill="none" stroke="black" points="2708.5,-470.8 2273.78,-470.8 2273.78,-434.8 2708.5,-434.8 2708.5,-470.8"/>
190 +<text text-anchor="middle" x="2491.14" y="-448.6" font-family="Times,serif" font-size="14.00">v6 (readonly seen$5 @ readonly seen$5 = New mutable Set$6()) &lt;assign&gt;</text>
191 </g>
188 -<!-- v10&#45;&gt;v12 -->
189 -<g id="edge8" class="edge">
190 -<title>v10&#45;&gt;v12</title>
191 -<path fill="none" stroke="black" d="M2012.02,-786.18C2043.63,-775.33 2084.75,-761.21 2118.08,-749.77"/>
192 -<polygon fill="black" stroke="black" points="2119.39,-753.02 2127.71,-746.47 2117.12,-746.4 2119.39,-753.02"/>
192 +<!-- v39 -->
193 +<g id="node14" class="node">
194 +<title>v39</title>
195 +<polygon fill="none" stroke="black" points="2724.53,-396 2257.76,-396 2257.76,-360 2724.53,-360 2724.53,-396"/>
196 +<text text-anchor="middle" x="2491.14" y="-373.8" font-family="Times,serif" font-size="14.00">v39 (mutable seen$5.has @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
197 </g>
194 -<!-- v11&#45;&gt;v11 -->
195 -<g id="edge45" class="edge">
196 -<title>v11&#45;&gt;v11</title>
197 -<path fill="none" stroke="black" d="M2381.1,-645.14C2392.48,-643.79 2399.24,-641.94 2399.24,-639.6 2399.24,-638.06 2396.33,-636.74 2391.11,-635.63"/>
198 -<polygon fill="black" stroke="black" points="2391.53,-632.15 2381.1,-634.06 2390.44,-639.07 2391.53,-632.15"/>
198 +<!-- v6&#45;&gt;v39 -->
199 +<g id="edge10" class="edge">
200 +<title>v6&#45;&gt;v39</title>
201 +<path fill="none" stroke="black" d="M2491.14,-434.55C2491.14,-426.12 2491.14,-415.77 2491.14,-406.3"/>
202 +<polygon fill="black" stroke="black" points="2494.64,-406.13 2491.14,-396.13 2487.64,-406.13 2494.64,-406.13"/>
203 </g>
200 -<!-- v12&#45;&gt;v11 -->
201 -<g id="edge49" class="edge">
202 -<title>v12&#45;&gt;v11</title>
203 -<path fill="none" stroke="black" d="M2176.24,-710.25C2175.4,-698.12 2174.26,-681.62 2173.3,-667.72"/>
204 -<polygon fill="black" stroke="black" points="2176.79,-667.45 2172.61,-657.71 2169.81,-667.93 2176.79,-667.45"/>
204 +<!-- v56 -->
205 +<g id="node15" class="node">
206 +<title>v56</title>
207 +<polygon fill="none" stroke="black" points="2341.88,-324 2118.41,-324 2118.41,-288 2341.88,-288 2341.88,-324"/>
208 +<text text-anchor="middle" x="2230.14" y="-301.8" font-family="Times,serif" font-size="14.00">v56 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
209 </g>
206 -<!-- v12&#45;&gt;v12 -->
207 -<g id="edge50" class="edge">
208 -<title>v12&#45;&gt;v12</title>
209 -<path fill="none" stroke="black" d="M2388.85,-732.93C2400.11,-731.82 2406.79,-730.31 2406.79,-728.4 2406.79,-727.18 2404.05,-726.12 2399.12,-725.23"/>
210 -<polygon fill="black" stroke="black" points="2399.22,-721.71 2388.85,-723.87 2398.31,-728.65 2399.22,-721.71"/>
210 +<!-- v6&#45;&gt;v56 -->
211 +<g id="edge11" class="edge">
212 +<title>v6&#45;&gt;v56</title>
213 +<path fill="none" stroke="black" d="M2362.33,-434.79C2313.65,-425.81 2265.93,-413.06 2249.14,-396 2233.34,-379.94 2229.25,-354.16 2228.72,-334.47"/>
214 +<polygon fill="black" stroke="black" points="2232.22,-334.26 2228.75,-324.26 2225.22,-334.25 2232.22,-334.26"/>
215 </g>
212 -<!-- v13 -->
213 -<g id="node14" class="node">
214 -<title>v13</title>
215 -<polygon fill="none" stroke="black" points="2486.38,-822.2 2216.48,-822.2 2216.48,-786.2 2486.38,-786.2 2486.38,-822.2"/>
216 -<text text-anchor="middle" x="2351.43" y="-800" font-family="Times,serif" font-size="14.00">v13 (mutable Set$6 @ New mutable Set$6())</text>
216 +<!-- v59 -->
217 +<g id="node16" class="node">
218 +<title>v59</title>
219 +<polygon fill="none" stroke="black" points="2613.88,-180 2390.41,-180 2390.41,-144 2613.88,-144 2613.88,-180"/>
220 +<text text-anchor="middle" x="2502.14" y="-157.8" font-family="Times,serif" font-size="14.00">v59 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
221 </g>
218 -<!-- v14 -->
219 -<g id="node15" class="node">
220 -<title>v14</title>
221 -<polygon fill="none" stroke="black" points="2747.54,-822.2 2549.31,-822.2 2549.31,-786.2 2747.54,-786.2 2747.54,-822.2"/>
222 -<text text-anchor="middle" x="2648.43" y="-800" font-family="Times,serif" font-size="14.00">v14 (frozen $9 @ frozen $9 = 0)</text>
222 +<!-- v6&#45;&gt;v59 -->
223 +<g id="edge12" class="edge">
224 +<title>v6&#45;&gt;v59</title>
225 +<path fill="none" stroke="black" d="M2630.68,-434.76C2676.42,-426.1 2719.15,-413.59 2733.14,-396 2800.81,-310.95 2639.3,-223.25 2552.63,-184.09"/>
226 +<polygon fill="black" stroke="black" points="2554.03,-180.89 2543.47,-180.01 2551.18,-187.28 2554.03,-180.89"/>
227 </g>
224 -<!-- v15 -->
225 -<g id="node16" class="node">
226 -<title>v15</title>
227 -<polygon fill="none" stroke="black" points="2872.01,-746.4 2424.84,-746.4 2424.84,-710.4 2872.01,-710.4 2872.01,-746.4"/>
228 -<text text-anchor="middle" x="2648.43" y="-724.2" font-family="Times,serif" font-size="14.00">v15 (frozen $9 @ Call mutable Math$8.max(frozen $9, frozen maxItems$3))</text>
228 +<!-- v39&#45;&gt;v56 -->
229 +<g id="edge33" class="edge">
230 +<title>v39&#45;&gt;v56</title>
231 +<path fill="none" stroke="black" d="M2427.63,-359.97C2390.21,-349.93 2342.71,-337.19 2303.67,-326.72"/>
232 +<polygon fill="black" stroke="black" points="2304.51,-323.32 2293.94,-324.11 2302.69,-330.08 2304.51,-323.32"/>
233 </g>
230 -<!-- v14&#45;&gt;v15 -->
231 -<g id="edge9" class="edge">
232 -<title>v14&#45;&gt;v15</title>
233 -<path fill="none" stroke="black" d="M2648.43,-786.08C2648.43,-777.33 2648.43,-766.46 2648.43,-756.59"/>
234 -<polygon fill="black" stroke="black" points="2651.93,-756.42 2648.43,-746.42 2644.93,-756.42 2651.93,-756.42"/>
234 +<!-- v39&#45;&gt;v59 -->
235 +<g id="edge34" class="edge">
236 +<title>v39&#45;&gt;v59</title>
237 +<path fill="none" stroke="black" d="M2488.15,-359.85C2486.52,-322.83 2490.75,-235.18 2496.04,-190.39"/>
238 +<polygon fill="black" stroke="black" points="2499.55,-190.6 2497.37,-180.23 2492.6,-189.69 2499.55,-190.6"/>
239 </g>
236 -<!-- v16 -->
240 +<!-- v43 -->
241 +<g id="node52" class="node">
242 +<title>v43</title>
243 +<polygon fill="none" stroke="black" points="2465.13,-252 1995.16,-252 1995.16,-216 2465.13,-216 2465.13,-252"/>
244 +<text text-anchor="middle" x="2230.14" y="-229.8" font-family="Times,serif" font-size="14.00">v43 (mutable seen$5.add @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
245 +</g>
246 +<!-- v56&#45;&gt;v43 -->
247 +<g id="edge50" class="edge">
248 +<title>v56&#45;&gt;v43</title>
249 +<path fill="none" stroke="black" d="M2224.23,-287.7C2223.43,-279.98 2223.21,-270.71 2223.55,-262.11"/>
250 +<polygon fill="black" stroke="black" points="2227.04,-262.32 2224.25,-252.1 2220.06,-261.84 2227.04,-262.32"/>
251 +</g>
252 +<!-- v59&#45;&gt;v39 -->
253 +<g id="edge53" class="edge">
254 +<title>v59&#45;&gt;v39</title>
255 +<path fill="none" stroke="black" d="M2505.14,-180.23C2506.77,-217.32 2502.53,-304.98 2497.23,-349.71"/>
256 +<polygon fill="black" stroke="black" points="2493.73,-349.48 2495.9,-359.85 2500.67,-350.39 2493.73,-349.48"/>
257 +</g>
258 +<!-- v7 -->
259 <g id="node17" class="node">
238 -<title>v16</title>
239 -<polygon fill="none" stroke="black" points="3407.37,-822.2 2843.49,-822.2 2843.49,-786.2 3407.37,-786.2 3407.37,-822.2"/>
240 -<text text-anchor="middle" x="3125.43" y="-800" font-family="Times,serif" font-size="14.00">v16 (frozen max$7 @ frozen max$7 = Call mutable Math$8.max(frozen $9, frozen maxItems$3))</text>
260 +<title>v7</title>
261 +<polygon fill="none" stroke="black" points="3174.01,-470.8 2902.28,-470.8 2902.28,-434.8 3174.01,-434.8 3174.01,-470.8"/>
262 +<text text-anchor="middle" x="3038.14" y="-448.6" font-family="Times,serif" font-size="14.00">v7 (readonly $9 @ readonly $9 = 0) &lt;assign&gt;</text>
263 </g>
242 -<!-- v17 -->
264 +<!-- v9 -->
265 <g id="node18" class="node">
244 -<title>v17</title>
245 -<polygon fill="none" stroke="black" points="3360.41,-746.4 2890.45,-746.4 2890.45,-710.4 3360.41,-710.4 3360.41,-746.4"/>
246 -<text text-anchor="middle" x="3125.43" y="-724.2" font-family="Times,serif" font-size="14.00">v17 (frozen max$7 @ Binary mutable renderedItems$4.length &gt;= frozen max$7)</text>
247 -</g>
248 -<!-- v16&#45;&gt;v17 -->
249 -<g id="edge10" class="edge">
250 -<title>v16&#45;&gt;v17</title>
251 -<path fill="none" stroke="black" d="M3125.43,-786.08C3125.43,-777.33 3125.43,-766.46 3125.43,-756.59"/>
252 -<polygon fill="black" stroke="black" points="3128.93,-756.42 3125.43,-746.42 3121.93,-756.42 3128.93,-756.42"/>
266 +<title>v9</title>
267 +<polygon fill="none" stroke="black" points="3296.03,-396 2780.26,-396 2780.26,-360 3296.03,-360 3296.03,-396"/>
268 +<text text-anchor="middle" x="3038.14" y="-373.8" font-family="Times,serif" font-size="14.00">v9 (mutable $9 @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
269 </g>
254 -<!-- v17&#45;&gt;v17 -->
255 -<g id="edge61" class="edge">
256 -<title>v17&#45;&gt;v17</title>
257 -<path fill="none" stroke="black" d="M3360.67,-732.73C3371.86,-731.65 3378.42,-730.2 3378.42,-728.4 3378.42,-727.25 3375.72,-726.24 3370.85,-725.38"/>
258 -<polygon fill="black" stroke="black" points="3371.04,-721.87 3360.67,-724.07 3370.14,-728.82 3371.04,-721.87"/>
270 +<!-- v7&#45;&gt;v9 -->
271 +<g id="edge13" class="edge">
272 +<title>v7&#45;&gt;v9</title>
273 +<path fill="none" stroke="black" d="M3038.14,-434.55C3038.14,-426.12 3038.14,-415.77 3038.14,-406.3"/>
274 +<polygon fill="black" stroke="black" points="3041.64,-406.13 3038.14,-396.13 3034.64,-406.13 3041.64,-406.13"/>
275 </g>
260 -<!-- v18 -->
276 +<!-- v8 -->
277 <g id="node19" class="node">
262 -<title>v18</title>
263 -<polygon fill="none" stroke="black" points="3939.51,-822.2 3425.34,-822.2 3425.34,-786.2 3939.51,-786.2 3939.51,-822.2"/>
264 -<text text-anchor="middle" x="3682.43" y="-800" font-family="Times,serif" font-size="14.00">v18 (mutable Math$8.max @ Call mutable Math$8.max(frozen $9, frozen maxItems$3))</text>
278 +<title>v8</title>
279 +<polygon fill="none" stroke="black" points="3764.68,-470.8 3191.6,-470.8 3191.6,-434.8 3764.68,-434.8 3764.68,-470.8"/>
280 +<text text-anchor="middle" x="3478.14" y="-448.6" font-family="Times,serif" font-size="14.00">v8 (mutable Math$8.max @ Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;update&gt;</text>
281 </g>
266 -<!-- v19 -->
282 +<!-- v11 -->
283 <g id="node20" class="node">
268 -<title>v19</title>
269 -<polygon fill="none" stroke="black" points="4183.82,-822.2 3957.03,-822.2 3957.03,-786.2 4183.82,-786.2 4183.82,-822.2"/>
270 -<text text-anchor="middle" x="4070.43" y="-800" font-family="Times,serif" font-size="14.00">v19 (frozen $11 @ frozen $11 = null)</text>
284 +<title>v11</title>
285 +<polygon fill="none" stroke="black" points="4437.18,-470.8 3783.11,-470.8 3783.11,-434.8 4437.18,-434.8 4437.18,-470.8"/>
286 +<text text-anchor="middle" x="4110.14" y="-448.6" font-family="Times,serif" font-size="14.00">v11 (readonly max$7 @ readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)) &lt;assign&gt;</text>
287 </g>
272 -<!-- v20 -->
288 +<!-- v52 -->
289 <g id="node21" class="node">
274 -<title>v20</title>
275 -<polygon fill="none" stroke="black" points="4245.02,-746.4 3895.83,-746.4 3895.83,-710.4 4245.02,-710.4 4245.02,-746.4"/>
276 -<text text-anchor="middle" x="4070.43" y="-724.2" font-family="Times,serif" font-size="14.00">v20 (frozen $11 @ Binary mutable item$10 == frozen $11)</text>
290 +<title>v52</title>
291 +<polygon fill="none" stroke="black" points="4212.57,-396 3655.72,-396 3655.72,-360 4212.57,-360 4212.57,-396"/>
292 +<text text-anchor="middle" x="3934.14" y="-373.8" font-family="Times,serif" font-size="14.00">v52 (readonly max$7 @ Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;update&gt;</text>
293 </g>
278 -<!-- v19&#45;&gt;v20 -->
279 -<g id="edge12" class="edge">
280 -<title>v19&#45;&gt;v20</title>
281 -<path fill="none" stroke="black" d="M4070.43,-786.08C4070.43,-777.33 4070.43,-766.46 4070.43,-756.59"/>
282 -<polygon fill="black" stroke="black" points="4073.93,-756.42 4070.43,-746.42 4066.93,-756.42 4073.93,-756.42"/>
294 +<!-- v11&#45;&gt;v52 -->
295 +<g id="edge14" class="edge">
296 +<title>v11&#45;&gt;v52</title>
297 +<path fill="none" stroke="black" d="M4068.88,-434.73C4043.81,-424.36 4011.62,-411.05 3984.99,-400.03"/>
298 +<polygon fill="black" stroke="black" points="3986.03,-396.68 3975.45,-396.09 3983.36,-403.14 3986.03,-396.68"/>
299 </g>
284 -<!-- v21 -->
300 +<!-- v72 -->
301 <g id="node22" class="node">
286 -<title>v21</title>
287 -<polygon fill="none" stroke="black" points="4632.67,-822.2 4208.19,-822.2 4208.19,-786.2 4632.67,-786.2 4632.67,-822.2"/>
288 -<text text-anchor="middle" x="4420.43" y="-800" font-family="Times,serif" font-size="14.00">v21 (frozen $12 @ frozen $12 = Binary mutable item$10 == frozen $11)</text>
289 -</g>
290 -<!-- v22 -->
291 -<g id="node23" class="node">
292 -<title>v22</title>
293 -<polygon fill="none" stroke="black" points="4577.95,-746.4 4262.91,-746.4 4262.91,-710.4 4577.95,-710.4 4577.95,-746.4"/>
294 -<text text-anchor="middle" x="4420.43" y="-724.2" font-family="Times,serif" font-size="14.00">v22 (frozen $12 @ If (frozen $12) then:bb8 else:bb9)</text>
302 +<title>v72</title>
303 +<polygon fill="none" stroke="black" points="4045.88,-324 3822.41,-324 3822.41,-288 4045.88,-288 4045.88,-324"/>
304 +<text text-anchor="middle" x="3934.14" y="-301.8" font-family="Times,serif" font-size="14.00">v72 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
305 </g>
296 -<!-- v21&#45;&gt;v22 -->
297 -<g id="edge13" class="edge">
298 -<title>v21&#45;&gt;v22</title>
299 -<path fill="none" stroke="black" d="M4420.43,-786.08C4420.43,-777.33 4420.43,-766.46 4420.43,-756.59"/>
300 -<polygon fill="black" stroke="black" points="4423.93,-756.42 4420.43,-746.42 4416.93,-756.42 4423.93,-756.42"/>
301 -</g>
302 -<!-- v22&#45;&gt;v22 -->
303 -<g id="edge16" class="edge">
304 -<title>v22&#45;&gt;v22</title>
305 -<path fill="none" stroke="black" d="M4578.11,-733.4C4589.18,-732.26 4595.94,-730.59 4595.94,-728.4 4595.94,-727 4593.17,-725.81 4588.26,-724.84"/>
306 -<polygon fill="black" stroke="black" points="4588.5,-721.33 4578.11,-723.4 4587.52,-728.27 4588.5,-721.33"/>
307 -</g>
308 -<!-- v26 -->
309 -<g id="node27" class="node">
310 -<title>v26</title>
311 -<polygon fill="none" stroke="black" points="4489.3,-657.6 4223.56,-657.6 4223.56,-621.6 4489.3,-621.6 4489.3,-657.6"/>
312 -<text text-anchor="middle" x="4356.43" y="-635.4" font-family="Times,serif" font-size="14.00">v26 (frozen $13 @ frozen $13 = frozen $12)</text>
306 +<!-- v11&#45;&gt;v72 -->
307 +<g id="edge15" class="edge">
308 +<title>v11&#45;&gt;v72</title>
309 +<path fill="none" stroke="black" d="M4172.41,-434.7C4191.38,-426.26 4210.11,-413.9 4221.14,-396 4229.54,-382.38 4231.38,-372.3 4221.14,-360 4199.75,-334.29 4124.11,-321.01 4055.85,-314.16"/>
310 +<polygon fill="black" stroke="black" points="4056.13,-310.68 4045.84,-313.2 4055.46,-317.64 4056.13,-310.68"/>
311 </g>
314 -<!-- v22&#45;&gt;v26 -->
315 -<g id="edge42" class="edge">
316 -<title>v22&#45;&gt;v26</title>
317 -<path fill="none" stroke="black" d="M4371.44,-710.23C4364.18,-705.56 4357.67,-699.71 4353.23,-692.4 4348.78,-685.06 4348.09,-676.01 4348.97,-667.54"/>
318 -<polygon fill="black" stroke="black" points="4352.42,-668.1 4350.68,-657.65 4345.52,-666.9 4352.42,-668.1"/>
319 -<text text-anchor="middle" x="4374.02" y="-679.8" font-family="Times,serif" font-size="14.00">capture</text>
312 +<!-- v52&#45;&gt;v72 -->
313 +<g id="edge47" class="edge">
314 +<title>v52&#45;&gt;v72</title>
315 +<path fill="none" stroke="black" d="M3928.23,-359.7C3927.43,-351.98 3927.21,-342.71 3927.55,-334.11"/>
316 +<polygon fill="black" stroke="black" points="3931.04,-334.32 3928.25,-324.1 3924.06,-333.84 3931.04,-334.32"/>
317 </g>
321 -<!-- v46 -->
322 -<g id="node47" class="node">
323 -<title>v46</title>
324 -<polygon fill="none" stroke="black" points="4670.95,-568.8 4355.91,-568.8 4355.91,-532.8 4670.95,-532.8 4670.95,-568.8"/>
325 -<text text-anchor="middle" x="4513.43" y="-546.6" font-family="Times,serif" font-size="14.00">v46 (frozen $13 @ If (frozen $13) then:bb1 else:bb4)</text>
318 +<!-- v72&#45;&gt;v52 -->
319 +<g id="edge56" class="edge">
320 +<title>v72&#45;&gt;v52</title>
321 +<path fill="none" stroke="black" d="M3940.04,-324.1C3940.84,-331.79 3941.08,-341.05 3940.75,-349.67"/>
322 +<polygon fill="black" stroke="black" points="3937.25,-349.48 3940.06,-359.7 3944.24,-349.96 3937.25,-349.48"/>
323 </g>
327 -<!-- v22&#45;&gt;v46 -->
328 -<g id="edge48" class="edge">
329 -<title>v22&#45;&gt;v46</title>
330 -<path fill="none" stroke="black" d="M4448.1,-710.14C4465.49,-697.73 4486.78,-679.4 4498.43,-657.6 4511.43,-633.27 4514.39,-601.52 4514.58,-579.17"/>
331 -<polygon fill="black" stroke="black" points="4518.08,-578.99 4514.49,-569.03 4511.08,-579.06 4518.08,-578.99"/>
332 -<text text-anchor="middle" x="4531.02" y="-635.4" font-family="Times,serif" font-size="14.00">capture</text>
324 +<!-- v13 -->
325 +<g id="node23" class="node">
326 +<title>v13</title>
327 +<polygon fill="none" stroke="black" points="4762.79,-470.8 4455.5,-470.8 4455.5,-434.8 4762.79,-434.8 4762.79,-470.8"/>
328 +<text text-anchor="middle" x="4609.14" y="-448.6" font-family="Times,serif" font-size="14.00">v13 (readonly $11 @ readonly $11 = null) &lt;assign&gt;</text>
329 </g>
334 -<!-- v23 -->
330 +<!-- v15 -->
331 <g id="node24" class="node">
336 -<title>v23</title>
337 -<polygon fill="none" stroke="black" points="5492.25,-657.6 5108.61,-657.6 5108.61,-621.6 5492.25,-621.6 5492.25,-657.6"/>
338 -<text text-anchor="middle" x="5300.43" y="-635.4" font-family="Times,serif" font-size="14.00">v23 (mutable item$10 @ Binary mutable item$10 == frozen $11)</text>
332 +<title>v15</title>
333 +<polygon fill="none" stroke="black" points="4820.46,-396 4397.83,-396 4397.83,-360 4820.46,-360 4820.46,-396"/>
334 +<text text-anchor="middle" x="4609.14" y="-373.8" font-family="Times,serif" font-size="14.00">v15 (readonly $11 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
335 </g>
340 -<!-- v24 -->
341 -<g id="node25" class="node">
342 -<title>v24</title>
343 -<polygon fill="none" stroke="black" points="5093.89,-568.8 4688.96,-568.8 4688.96,-532.8 5093.89,-532.8 5093.89,-568.8"/>
344 -<text text-anchor="middle" x="4891.43" y="-546.6" font-family="Times,serif" font-size="14.00">v24 (mutable item$10 @ Call mutable seen$5.has(mutable item$10))</text>
336 +<!-- v13&#45;&gt;v15 -->
337 +<g id="edge16" class="edge">
338 +<title>v13&#45;&gt;v15</title>
339 +<path fill="none" stroke="black" d="M4609.14,-434.55C4609.14,-426.12 4609.14,-415.77 4609.14,-406.3"/>
340 +<polygon fill="black" stroke="black" points="4612.64,-406.13 4609.14,-396.13 4605.64,-406.13 4612.64,-406.13"/>
341 </g>
346 -<!-- v23&#45;&gt;v24 -->
347 -<g id="edge14" class="edge">
348 -<title>v23&#45;&gt;v24</title>
349 -<path fill="none" stroke="black" d="M5220.11,-621.55C5151.45,-606.98 5052.74,-586.04 4981.44,-570.9"/>
350 -<polygon fill="black" stroke="black" points="4982.07,-567.46 4971.56,-568.81 4980.62,-574.31 4982.07,-567.46"/>
342 +<!-- v14 -->
343 +<g id="node25" class="node">
344 +<title>v14</title>
345 +<polygon fill="none" stroke="black" points="5535.61,-470.8 5100.68,-470.8 5100.68,-434.8 5535.61,-434.8 5535.61,-470.8"/>
346 +<text text-anchor="middle" x="5318.14" y="-448.6" font-family="Times,serif" font-size="14.00">v14 (frozen item$10 @ Binary frozen item$10 == readonly $11) &lt;update&gt;</text>
347 </g>
352 -<!-- v25 -->
348 +<!-- v40 -->
349 <g id="node26" class="node">
354 -<title>v25</title>
355 -<polygon fill="none" stroke="black" points="5535.45,-568.8 5129.41,-568.8 5129.41,-532.8 5535.45,-532.8 5535.45,-568.8"/>
356 -<text text-anchor="middle" x="5332.43" y="-546.6" font-family="Times,serif" font-size="14.00">v25 (mutable item$10 @ Call mutable seen$5.add(mutable item$10))</text>
357 -</g>
358 -<!-- v23&#45;&gt;v25 -->
359 -<g id="edge15" class="edge">
360 -<title>v23&#45;&gt;v25</title>
361 -<path fill="none" stroke="black" d="M5306.75,-621.45C5311.26,-609.21 5317.42,-592.49 5322.58,-578.51"/>
362 -<polygon fill="black" stroke="black" points="5325.94,-579.51 5326.12,-568.91 5319.38,-577.09 5325.94,-579.51"/>
350 +<title>v40</title>
351 +<polygon fill="none" stroke="black" points="5281.53,-396 4838.76,-396 4838.76,-360 5281.53,-360 5281.53,-396"/>
352 +<text text-anchor="middle" x="5060.14" y="-373.8" font-family="Times,serif" font-size="14.00">v40 (frozen item$10 @ Call mutable seen$5.has(frozen item$10)) &lt;update&gt;</text>
353 </g>
364 -<!-- v24&#45;&gt;v24 -->
365 -<g id="edge46" class="edge">
366 -<title>v24&#45;&gt;v24</title>
367 -<path fill="none" stroke="black" d="M5093.82,-556.38C5105.01,-555.02 5111.66,-553.16 5111.66,-550.8 5111.66,-549.29 5108.93,-547.98 5104.03,-546.88"/>
368 -<polygon fill="black" stroke="black" points="5104.25,-543.37 5093.82,-545.22 5103.13,-550.28 5104.25,-543.37"/>
354 +<!-- v14&#45;&gt;v40 -->
355 +<g id="edge17" class="edge">
356 +<title>v14&#45;&gt;v40</title>
357 +<path fill="none" stroke="black" d="M5257.65,-434.73C5219.54,-423.98 5170.19,-410.05 5130.35,-398.81"/>
358 +<polygon fill="black" stroke="black" points="5131.28,-395.43 5120.7,-396.09 5129.37,-402.17 5131.28,-395.43"/>
359 </g>
370 -<!-- v47 -->
371 -<g id="node48" class="node">
372 -<title>v47</title>
373 -<polygon fill="none" stroke="black" points="5059.5,-657.6 4595.35,-657.6 4595.35,-621.6 5059.5,-621.6 5059.5,-657.6"/>
374 -<text text-anchor="middle" x="4827.43" y="-635.4" font-family="Times,serif" font-size="14.00">v47 (mutable $13 @ mutable $13 = Call mutable seen$5.has(mutable item$10))</text>
360 +<!-- v57 -->
361 +<g id="node27" class="node">
362 +<title>v57</title>
363 +<polygon fill="none" stroke="black" points="5429.88,-324 5206.41,-324 5206.41,-288 5429.88,-288 5429.88,-324"/>
364 +<text text-anchor="middle" x="5318.14" y="-301.8" font-family="Times,serif" font-size="14.00">v57 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
365 </g>
376 -<!-- v24&#45;&gt;v47 -->
377 -<g id="edge44" class="edge">
378 -<title>v24&#45;&gt;v47</title>
379 -<path fill="none" stroke="black" d="M4886.36,-569.2C4882.73,-579.8 4877.12,-593.25 4869.43,-603.6 4866.54,-607.49 4863.13,-611.22 4859.53,-614.7"/>
380 -<polygon fill="black" stroke="black" points="4857.08,-612.19 4851.95,-621.47 4861.74,-617.41 4857.08,-612.19"/>
381 -<text text-anchor="middle" x="4900.02" y="-591" font-family="Times,serif" font-size="14.00">capture</text>
366 +<!-- v14&#45;&gt;v57 -->
367 +<g id="edge18" class="edge">
368 +<title>v14&#45;&gt;v57</title>
369 +<path fill="none" stroke="black" d="M5313.59,-434.62C5310.98,-409.8 5310.7,-363.66 5312.74,-334.19"/>
370 +<polygon fill="black" stroke="black" points="5316.23,-334.42 5313.59,-324.16 5309.25,-333.82 5316.23,-334.42"/>
371 </g>
383 -<!-- v48 -->
384 -<g id="node49" class="node">
385 -<title>v48</title>
386 -<polygon fill="none" stroke="black" points="5559.86,-480 5104.99,-480 5104.99,-444 5559.86,-444 5559.86,-480"/>
387 -<text text-anchor="middle" x="5332.43" y="-457.8" font-family="Times,serif" font-size="14.00">v48 (mutable item$10 @ JSX &lt;frozen $14&gt;{mutable item$10}&lt;/frozen $14&gt;)</text>
372 +<!-- v40&#45;&gt;v57 -->
373 +<g id="edge35" class="edge">
374 +<title>v40&#45;&gt;v57</title>
375 +<path fill="none" stroke="black" d="M5122.93,-359.97C5159.76,-349.97 5206.47,-337.3 5244.97,-326.85"/>
376 +<polygon fill="black" stroke="black" points="5246.34,-330.11 5255.08,-324.11 5244.51,-323.35 5246.34,-330.11"/>
377 </g>
389 -<!-- v25&#45;&gt;v48 -->
390 -<g id="edge51" class="edge">
391 -<title>v25&#45;&gt;v48</title>
392 -<path fill="none" stroke="black" d="M5332.43,-532.65C5332.43,-520.52 5332.43,-504.02 5332.43,-490.12"/>
393 -<polygon fill="black" stroke="black" points="5335.93,-490.11 5332.43,-480.11 5328.93,-490.11 5335.93,-490.11"/>
378 +<!-- v57&#45;&gt;v14 -->
379 +<g id="edge52" class="edge">
380 +<title>v57&#45;&gt;v14</title>
381 +<path fill="none" stroke="black" d="M5322.7,-324.16C5325.31,-348.96 5325.59,-395.1 5323.55,-424.58"/>
382 +<polygon fill="black" stroke="black" points="5320.06,-424.36 5322.7,-434.62 5327.04,-424.95 5320.06,-424.36"/>
383 </g>
395 -<!-- v26&#45;&gt;v22 -->
396 -<g id="edge17" class="edge">
397 -<title>v26&#45;&gt;v22</title>
398 -<path fill="none" stroke="black" d="M4380.95,-657.73C4387.22,-662.95 4393.56,-669.05 4398.43,-675.6 4403.95,-683.04 4408.41,-692.08 4411.82,-700.51"/>
399 -<polygon fill="black" stroke="black" points="4408.59,-701.85 4415.36,-710 4415.14,-699.41 4408.59,-701.85"/>
400 -<text text-anchor="middle" x="4429.02" y="-679.8" font-family="Times,serif" font-size="14.00">capture</text>
384 +<!-- v44 -->
385 +<g id="node53" class="node">
386 +<title>v44</title>
387 +<polygon fill="none" stroke="black" points="5415.08,-252 4971.21,-252 4971.21,-216 5415.08,-216 5415.08,-252"/>
388 +<text text-anchor="middle" x="5193.14" y="-229.8" font-family="Times,serif" font-size="14.00">v44 (frozen item$10 @ Call mutable seen$5.add(frozen item$10)) &lt;update&gt;</text>
389 </g>
402 -<!-- v26&#45;&gt;v46 -->
403 -<g id="edge41" class="edge">
404 -<title>v26&#45;&gt;v46</title>
405 -<path fill="none" stroke="black" d="M4387.45,-621.45C4412.07,-607.84 4446.67,-588.71 4473.38,-573.94"/>
406 -<polygon fill="black" stroke="black" points="4475.42,-576.81 4482.47,-568.91 4472.03,-570.69 4475.42,-576.81"/>
390 +<!-- v57&#45;&gt;v44 -->
391 +<g id="edge51" class="edge">
392 +<title>v57&#45;&gt;v44</title>
393 +<path fill="none" stroke="black" d="M5287.57,-287.88C5271.07,-278.64 5250.52,-267.13 5232.81,-257.21"/>
394 +<polygon fill="black" stroke="black" points="5234.28,-254.02 5223.84,-252.19 5230.85,-260.13 5234.28,-254.02"/>
395 </g>
408 -<!-- v27&#45;&gt;v8 -->
409 -<g id="edge21" class="edge">
410 -<title>v27&#45;&gt;v8</title>
411 -<path fill="none" stroke="black" d="M1394.88,-480.12C1389.76,-485.25 1385.01,-491.32 1382.23,-498 1379.37,-504.89 1379.37,-507.91 1382.23,-514.8 1383.71,-518.35 1385.74,-521.73 1388.09,-524.88"/>
412 -<polygon fill="black" stroke="black" points="1385.67,-527.44 1394.88,-532.68 1390.95,-522.84 1385.67,-527.44"/>
413 -<text text-anchor="middle" x="1403.02" y="-502.2" font-family="Times,serif" font-size="14.00">capture</text>
396 +<!-- v16 -->
397 +<g id="node28" class="node">
398 +<title>v16</title>
399 +<polygon fill="none" stroke="black" points="6035.56,-470.8 5552.73,-470.8 5552.73,-434.8 6035.56,-434.8 6035.56,-470.8"/>
400 +<text text-anchor="middle" x="5794.14" y="-448.6" font-family="Times,serif" font-size="14.00">v16 (frozen $12 @ frozen $12 = Binary frozen item$10 == readonly $11) &lt;assign&gt;</text>
401 </g>
415 -<!-- v27&#45;&gt;v28 -->
416 -<g id="edge18" class="edge">
417 -<title>v27&#45;&gt;v28</title>
418 -<path fill="none" stroke="black" d="M1361.46,-443.95C1314.5,-429.65 1247.36,-409.2 1197.91,-394.14"/>
419 -<polygon fill="black" stroke="black" points="1198.85,-390.77 1188.27,-391.21 1196.81,-397.47 1198.85,-390.77"/>
402 +<!-- v17 -->
403 +<g id="node29" class="node">
404 +<title>v17</title>
405 +<polygon fill="none" stroke="black" points="5979.77,-396 5608.52,-396 5608.52,-360 5979.77,-360 5979.77,-396"/>
406 +<text text-anchor="middle" x="5794.14" y="-373.8" font-family="Times,serif" font-size="14.00">v17 (frozen $12 @ If (frozen $12) then:bb8 else:bb9) &lt;update&gt;</text>
407 </g>
421 -<!-- v28&#45;&gt;v29 -->
422 -<g id="edge37" class="edge">
423 -<title>v28&#45;&gt;v29</title>
424 -<path fill="none" stroke="black" d="M1262.82,-355.15C1376.22,-340.33 1540.12,-318.9 1656.3,-303.72"/>
425 -<polygon fill="black" stroke="black" points="1656.87,-307.17 1666.33,-302.41 1655.96,-300.23 1656.87,-307.17"/>
426 -<text text-anchor="middle" x="1545.02" y="-324.6" font-family="Times,serif" font-size="14.00">capture</text>
408 +<!-- v16&#45;&gt;v17 -->
409 +<g id="edge19" class="edge">
410 +<title>v16&#45;&gt;v17</title>
411 +<path fill="none" stroke="black" d="M5794.14,-434.55C5794.14,-426.12 5794.14,-415.77 5794.14,-406.3"/>
412 +<polygon fill="black" stroke="black" points="5797.64,-406.13 5794.14,-396.13 5790.64,-406.13 5797.64,-406.13"/>
413 </g>
414 <!-- v38 -->
429 -<g id="node39" class="node">
415 +<g id="node30" class="node">
416 <title>v38</title>
431 -<polygon fill="none" stroke="black" points="1351.85,-302.4 785,-302.4 785,-266.4 1351.85,-266.4 1351.85,-302.4"/>
432 -<text text-anchor="middle" x="1068.43" y="-280.2" font-family="Times,serif" font-size="14.00">v38 (frozen $22 @ frozen $22 = JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;)</text>
433 -</g>
434 -<!-- v28&#45;&gt;v38 -->
435 -<g id="edge27" class="edge">
436 -<title>v28&#45;&gt;v38</title>
437 -<path fill="none" stroke="black" d="M1127.36,-354.8C1123.73,-344.2 1118.12,-330.75 1110.43,-320.4 1107.54,-316.51 1104.13,-312.78 1100.53,-309.3"/>
438 -<polygon fill="black" stroke="black" points="1102.74,-306.59 1092.95,-302.53 1098.08,-311.81 1102.74,-306.59"/>
439 -<text text-anchor="middle" x="1141.02" y="-324.6" font-family="Times,serif" font-size="14.00">capture</text>
417 +<polygon fill="none" stroke="black" points="5953.8,-324 5634.48,-324 5634.48,-288 5953.8,-288 5953.8,-324"/>
418 +<text text-anchor="middle" x="5794.14" y="-301.8" font-family="Times,serif" font-size="14.00">v38 (frozen $13 @ frozen $13 = frozen $12) &lt;assign&gt;</text>
419 </g>
441 -<!-- v39 -->
442 -<g id="node40" class="node">
443 -<title>v39</title>
444 -<polygon fill="none" stroke="black" points="1947.97,-124.8 1180.88,-124.8 1180.88,-88.8 1947.97,-88.8 1947.97,-124.8"/>
445 -<text text-anchor="middle" x="1564.43" y="-102.6" font-family="Times,serif" font-size="14.00">v39 (frozen $22 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
420 +<!-- v17&#45;&gt;v38 -->
421 +<g id="edge20" class="edge">
422 +<title>v17&#45;&gt;v38</title>
423 +<path fill="none" stroke="black" d="M5794.14,-359.7C5794.14,-351.98 5794.14,-342.71 5794.14,-334.11"/>
424 +<polygon fill="black" stroke="black" points="5797.64,-334.1 5794.14,-324.1 5790.64,-334.1 5797.64,-334.1"/>
425 </g>
447 -<!-- v28&#45;&gt;v39 -->
448 -<g id="edge35" class="edge">
449 -<title>v28&#45;&gt;v39</title>
450 -<path fill="none" stroke="black" d="M932.29,-355.16C863.24,-344.8 797.79,-328.36 776.43,-302.4 766.26,-290.05 767.29,-279.53 776.43,-266.4 866.87,-136.5 955.81,-176.68 1110.43,-142.8 1141.04,-136.09 1173.07,-130.62 1205.33,-126.17"/>
451 -<polygon fill="black" stroke="black" points="1205.9,-129.62 1215.35,-124.82 1204.97,-122.69 1205.9,-129.62"/>
452 -<text text-anchor="middle" x="825.02" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
426 +<!-- v42 -->
427 +<g id="node50" class="node">
428 +<title>v42</title>
429 +<polygon fill="none" stroke="black" points="6197.77,-252 5826.52,-252 5826.52,-216 6197.77,-216 6197.77,-252"/>
430 +<text text-anchor="middle" x="6012.14" y="-229.8" font-family="Times,serif" font-size="14.00">v42 (frozen $13 @ If (frozen $13) then:bb1 else:bb4) &lt;update&gt;</text>
431 </g>
454 -<!-- v44 -->
455 -<g id="node45" class="node">
456 -<title>v44</title>
457 -<polygon fill="none" stroke="black" points="2153.62,-213.6 1311.24,-213.6 1311.24,-177.6 2153.62,-177.6 2153.62,-213.6"/>
458 -<text text-anchor="middle" x="1732.43" y="-191.4" font-family="Times,serif" font-size="14.00">v44 (frozen $25 @ frozen $25 = JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
432 +<!-- v38&#45;&gt;v42 -->
433 +<g id="edge32" class="edge">
434 +<title>v38&#45;&gt;v42</title>
435 +<path fill="none" stroke="black" d="M5847.19,-287.97C5877.92,-278.1 5916.78,-265.62 5949.06,-255.25"/>
436 +<polygon fill="black" stroke="black" points="5950.4,-258.5 5958.86,-252.11 5948.26,-251.84 5950.4,-258.5"/>
437 </g>
460 -<!-- v29&#45;&gt;v44 -->
461 -<g id="edge34" class="edge">
462 -<title>v29&#45;&gt;v44</title>
463 -<path fill="none" stroke="black" d="M1751.34,-266.33C1744.14,-261.61 1737.62,-255.71 1733.23,-248.4 1728.88,-241.13 1727.62,-232.2 1727.76,-223.81"/>
464 -<polygon fill="black" stroke="black" points="1731.27,-223.89 1728.58,-213.64 1724.29,-223.33 1731.27,-223.89"/>
465 -<text text-anchor="middle" x="1754.02" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
438 +<!-- v25 -->
439 +<g id="node33" class="node">
440 +<title>v25</title>
441 +<polygon fill="none" stroke="black" points="1561.63,-36 982.66,-36 982.66,0 1561.63,0 1561.63,-36"/>
442 +<text text-anchor="middle" x="1272.14" y="-13.8" font-family="Times,serif" font-size="14.00">v25 (frozen count$17 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
443 </g>
467 -<!-- v45 -->
468 -<g id="node46" class="node">
469 -<title>v45</title>
470 -<polygon fill="none" stroke="black" points="1680.25,-36 1448.6,-36 1448.6,0 1680.25,0 1680.25,-36"/>
471 -<text text-anchor="middle" x="1564.43" y="-13.8" font-family="Times,serif" font-size="14.00">v45 (frozen $25 @ Return frozen $25)</text>
444 +<!-- v19&#45;&gt;v25 -->
445 +<g id="edge23" class="edge">
446 +<title>v19&#45;&gt;v25</title>
447 +<path fill="none" stroke="black" d="M1272.14,-71.7C1272.14,-63.98 1272.14,-54.71 1272.14,-46.11"/>
448 +<polygon fill="black" stroke="black" points="1275.64,-46.1 1272.14,-36.1 1268.64,-46.1 1275.64,-46.1"/>
449 </g>
473 -<!-- v29&#45;&gt;v45 -->
474 -<g id="edge40" class="edge">
475 -<title>v29&#45;&gt;v45</title>
476 -<path fill="none" stroke="black" d="M1517.08,-266.38C1445.47,-255.99 1369.71,-239.54 1302.43,-213.6 1236.8,-188.29 1204.38,-186.94 1171.43,-124.8 1163.93,-110.66 1161.15,-101.06 1171.43,-88.8 1205.13,-48.58 1336.52,-31.52 1438.2,-24.29"/>
477 -<polygon fill="black" stroke="black" points="1438.52,-27.78 1448.26,-23.6 1438.04,-20.79 1438.52,-27.78"/>
478 -<text text-anchor="middle" x="1216.02" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
450 +<!-- v20 -->
451 +<g id="node34" class="node">
452 +<title>v20</title>
453 +<polygon fill="none" stroke="black" points="6560.83,-470.8 6245.46,-470.8 6245.46,-434.8 6560.83,-434.8 6560.83,-470.8"/>
454 +<text text-anchor="middle" x="6403.14" y="-448.6" font-family="Times,serif" font-size="14.00">v20 (readonly $18 @ readonly $18 = &quot;div&quot;) &lt;assign&gt;</text>
455 </g>
456 <!-- v30 -->
481 -<g id="node31" class="node">
457 +<g id="node35" class="node">
458 <title>v30</title>
483 -<polygon fill="none" stroke="black" points="5114.86,-822.2 4879.99,-822.2 4879.99,-786.2 5114.86,-786.2 5114.86,-822.2"/>
484 -<text text-anchor="middle" x="4997.43" y="-800" font-family="Times,serif" font-size="14.00">v30 (frozen $18 @ frozen $18 = &quot;div&quot;)</text>
459 +<polygon fill="none" stroke="black" points="6808.57,-396 5997.72,-396 5997.72,-360 6808.57,-360 6808.57,-396"/>
460 +<text text-anchor="middle" x="6403.14" y="-373.8" font-family="Times,serif" font-size="14.00">v30 (frozen $18 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
461 +</g>
462 +<!-- v20&#45;&gt;v30 -->
463 +<g id="edge24" class="edge">
464 +<title>v20&#45;&gt;v30</title>
465 +<path fill="none" stroke="black" d="M6403.14,-434.55C6403.14,-426.12 6403.14,-415.77 6403.14,-406.3"/>
466 +<polygon fill="black" stroke="black" points="6406.64,-406.13 6403.14,-396.13 6399.64,-406.13 6406.64,-406.13"/>
467 +</g>
468 +<!-- v21 -->
469 +<g id="node36" class="node">
470 +<title>v21</title>
471 +<polygon fill="none" stroke="black" points="7348.27,-473.4 7116.02,-473.4 7116.02,-432.2 7348.27,-432.2 7348.27,-473.4"/>
472 +<text text-anchor="middle" x="7232.14" y="-457" font-family="Times,serif" font-size="14.00">v21 (readonly $19 @ readonly $19 = &quot;</text>
473 +<text text-anchor="middle" x="7232.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
474 </g>
475 <!-- v31 -->
487 -<g id="node32" class="node">
476 +<g id="node37" class="node">
477 <title>v31</title>
489 -<polygon fill="none" stroke="black" points="5380.97,-746.4 4613.88,-746.4 4613.88,-710.4 5380.97,-710.4 5380.97,-746.4"/>
490 -<text text-anchor="middle" x="4997.43" y="-724.2" font-family="Times,serif" font-size="14.00">v31 (frozen $18 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
478 +<polygon fill="none" stroke="black" points="7637.57,-396 6826.72,-396 6826.72,-360 7637.57,-360 7637.57,-396"/>
479 +<text text-anchor="middle" x="7232.14" y="-373.8" font-family="Times,serif" font-size="14.00">v31 (frozen $19 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
480 </g>
492 -<!-- v30&#45;&gt;v31 -->
493 -<g id="edge22" class="edge">
494 -<title>v30&#45;&gt;v31</title>
495 -<path fill="none" stroke="black" d="M4997.43,-786.08C4997.43,-777.33 4997.43,-766.46 4997.43,-756.59"/>
496 -<polygon fill="black" stroke="black" points="5000.93,-756.42 4997.43,-746.42 4993.93,-756.42 5000.93,-756.42"/>
481 +<!-- v21&#45;&gt;v31 -->
482 +<g id="edge25" class="edge">
483 +<title>v21&#45;&gt;v31</title>
484 +<path fill="none" stroke="black" d="M7232.14,-431.91C7232.14,-424.09 7232.14,-414.99 7232.14,-406.56"/>
485 +<polygon fill="black" stroke="black" points="7235.64,-406.39 7232.14,-396.39 7228.64,-406.39 7235.64,-406.39"/>
486 +</g>
487 +<!-- v22 -->
488 +<g id="node38" class="node">
489 +<title>v22</title>
490 +<polygon fill="none" stroke="black" points="8084.94,-470.8 7773.35,-470.8 7773.35,-434.8 8084.94,-434.8 8084.94,-470.8"/>
491 +<text text-anchor="middle" x="7929.14" y="-448.6" font-family="Times,serif" font-size="14.00">v22 (readonly $20 @ readonly $20 = &quot;h1&quot;) &lt;assign&gt;</text>
492 +</g>
493 +<!-- v24 -->
494 +<g id="node39" class="node">
495 +<title>v24</title>
496 +<polygon fill="none" stroke="black" points="8203.03,-396 7655.26,-396 7655.26,-360 8203.03,-360 8203.03,-396"/>
497 +<text text-anchor="middle" x="7929.14" y="-373.8" font-family="Times,serif" font-size="14.00">v24 (frozen $20 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
498 +</g>
499 +<!-- v22&#45;&gt;v24 -->
500 +<g id="edge26" class="edge">
501 +<title>v22&#45;&gt;v24</title>
502 +<path fill="none" stroke="black" d="M7929.14,-434.55C7929.14,-426.12 7929.14,-415.77 7929.14,-406.3"/>
503 +<polygon fill="black" stroke="black" points="7932.64,-406.13 7929.14,-396.13 7925.64,-406.13 7932.64,-406.13"/>
504 +</g>
505 +<!-- v23 -->
506 +<g id="node40" class="node">
507 +<title>v23</title>
508 +<polygon fill="none" stroke="black" points="8661.04,-470.8 8329.25,-470.8 8329.25,-434.8 8661.04,-434.8 8661.04,-470.8"/>
509 +<text text-anchor="middle" x="8495.14" y="-448.6" font-family="Times,serif" font-size="14.00">v23 (readonly $21 @ readonly $21 = &quot; Items&quot;) &lt;assign&gt;</text>
510 +</g>
511 +<!-- v26 -->
512 +<g id="node41" class="node">
513 +<title>v26</title>
514 +<polygon fill="none" stroke="black" points="8769.03,-396 8221.26,-396 8221.26,-360 8769.03,-360 8769.03,-396"/>
515 +<text text-anchor="middle" x="8495.14" y="-373.8" font-family="Times,serif" font-size="14.00">v26 (frozen $21 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;update&gt;</text>
516 +</g>
517 +<!-- v23&#45;&gt;v26 -->
518 +<g id="edge27" class="edge">
519 +<title>v23&#45;&gt;v26</title>
520 +<path fill="none" stroke="black" d="M8495.14,-434.55C8495.14,-426.12 8495.14,-415.77 8495.14,-406.3"/>
521 +<polygon fill="black" stroke="black" points="8498.64,-406.13 8495.14,-396.13 8491.64,-406.13 8498.64,-406.13"/>
522 +</g>
523 +<!-- v27 -->
524 +<g id="node42" class="node">
525 +<title>v27</title>
526 +<polygon fill="none" stroke="black" points="9515.81,-470.8 8868.48,-470.8 8868.48,-434.8 9515.81,-434.8 9515.81,-470.8"/>
527 +<text text-anchor="middle" x="9192.14" y="-448.6" font-family="Times,serif" font-size="14.00">v27 (readonly $22 @ readonly $22 = JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;) &lt;assign&gt;</text>
528 </g>
529 <!-- v32 -->
499 -<g id="node33" class="node">
530 +<g id="node43" class="node">
531 <title>v32</title>
501 -<polygon fill="none" stroke="black" points="5886.6,-824.8 5680.26,-824.8 5680.26,-783.6 5886.6,-783.6 5886.6,-824.8"/>
502 -<text text-anchor="middle" x="5783.43" y="-808.4" font-family="Times,serif" font-size="14.00">v32 (frozen $19 @ frozen $19 = &quot;</text>
503 -<text text-anchor="middle" x="5783.43" y="-791.6" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;)</text>
532 +<polygon fill="none" stroke="black" points="9597.57,-396 8786.72,-396 8786.72,-360 9597.57,-360 9597.57,-396"/>
533 +<text text-anchor="middle" x="9192.14" y="-373.8" font-family="Times,serif" font-size="14.00">v32 (frozen $22 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
534 +</g>
535 +<!-- v27&#45;&gt;v32 -->
536 +<g id="edge28" class="edge">
537 +<title>v27&#45;&gt;v32</title>
538 +<path fill="none" stroke="black" d="M9192.14,-434.55C9192.14,-426.12 9192.14,-415.77 9192.14,-406.3"/>
539 +<polygon fill="black" stroke="black" points="9195.64,-406.13 9192.14,-396.13 9188.64,-406.13 9195.64,-406.13"/>
540 +</g>
541 +<!-- v28 -->
542 +<g id="node44" class="node">
543 +<title>v28</title>
544 +<polygon fill="none" stroke="black" points="10137.27,-473.4 9905.02,-473.4 9905.02,-432.2 10137.27,-432.2 10137.27,-473.4"/>
545 +<text text-anchor="middle" x="10021.14" y="-457" font-family="Times,serif" font-size="14.00">v28 (readonly $23 @ readonly $23 = &quot;</text>
546 +<text text-anchor="middle" x="10021.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
547 </g>
548 <!-- v33 -->
506 -<g id="node34" class="node">
549 +<g id="node45" class="node">
550 <title>v33</title>
508 -<polygon fill="none" stroke="black" points="6166.97,-746.4 5399.88,-746.4 5399.88,-710.4 6166.97,-710.4 6166.97,-746.4"/>
509 -<text text-anchor="middle" x="5783.43" y="-724.2" font-family="Times,serif" font-size="14.00">v33 (frozen $19 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
551 +<polygon fill="none" stroke="black" points="10426.57,-396 9615.72,-396 9615.72,-360 10426.57,-360 10426.57,-396"/>
552 +<text text-anchor="middle" x="10021.14" y="-373.8" font-family="Times,serif" font-size="14.00">v33 (frozen $23 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
553 </g>
511 -<!-- v32&#45;&gt;v33 -->
512 -<g id="edge23" class="edge">
513 -<title>v32&#45;&gt;v33</title>
514 -<path fill="none" stroke="black" d="M5783.43,-783.42C5783.43,-775.29 5783.43,-765.73 5783.43,-756.93"/>
515 -<polygon fill="black" stroke="black" points="5786.93,-756.72 5783.43,-746.72 5779.93,-756.72 5786.93,-756.72"/>
554 +<!-- v28&#45;&gt;v33 -->
555 +<g id="edge29" class="edge">
556 +<title>v28&#45;&gt;v33</title>
557 +<path fill="none" stroke="black" d="M10021.14,-431.91C10021.14,-424.09 10021.14,-414.99 10021.14,-406.56"/>
558 +<polygon fill="black" stroke="black" points="10024.64,-406.39 10021.14,-396.39 10017.64,-406.39 10024.64,-406.39"/>
559 </g>
517 -<!-- v34 -->
518 -<g id="node35" class="node">
519 -<title>v34</title>
520 -<polygon fill="none" stroke="black" points="6545.47,-822.2 6315.38,-822.2 6315.38,-786.2 6545.47,-786.2 6545.47,-822.2"/>
521 -<text text-anchor="middle" x="6430.43" y="-800" font-family="Times,serif" font-size="14.00">v34 (frozen $20 @ frozen $20 = &quot;h1&quot;)</text>
560 +<!-- v29 -->
561 +<g id="node46" class="node">
562 +<title>v29</title>
563 +<polygon fill="none" stroke="black" points="10966.27,-473.4 10734.02,-473.4 10734.02,-432.2 10966.27,-432.2 10966.27,-473.4"/>
564 +<text text-anchor="middle" x="10850.14" y="-457" font-family="Times,serif" font-size="14.00">v29 (readonly $24 @ readonly $24 = &quot;</text>
565 +<text text-anchor="middle" x="10850.14" y="-440.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&quot;) &lt;assign&gt;</text>
566 </g>
567 <!-- v35 -->
524 -<g id="node36" class="node">
568 +<g id="node47" class="node">
569 <title>v35</title>
526 -<polygon fill="none" stroke="black" points="6676.2,-746.4 6184.65,-746.4 6184.65,-710.4 6676.2,-710.4 6676.2,-746.4"/>
527 -<text text-anchor="middle" x="6430.43" y="-724.2" font-family="Times,serif" font-size="14.00">v35 (frozen $20 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;)</text>
570 +<polygon fill="none" stroke="black" points="11255.57,-396 10444.72,-396 10444.72,-360 11255.57,-360 11255.57,-396"/>
571 +<text text-anchor="middle" x="10850.14" y="-373.8" font-family="Times,serif" font-size="14.00">v35 (frozen $24 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;update&gt;</text>
572 </g>
529 -<!-- v34&#45;&gt;v35 -->
530 -<g id="edge24" class="edge">
531 -<title>v34&#45;&gt;v35</title>
532 -<path fill="none" stroke="black" d="M6430.43,-786.08C6430.43,-777.33 6430.43,-766.46 6430.43,-756.59"/>
533 -<polygon fill="black" stroke="black" points="6433.93,-756.42 6430.43,-746.42 6426.93,-756.42 6433.93,-756.42"/>
573 +<!-- v29&#45;&gt;v35 -->
574 +<g id="edge30" class="edge">
575 +<title>v29&#45;&gt;v35</title>
576 +<path fill="none" stroke="black" d="M10850.14,-431.91C10850.14,-424.09 10850.14,-414.99 10850.14,-406.56"/>
577 +<polygon fill="black" stroke="black" points="10853.64,-406.39 10850.14,-396.39 10846.64,-406.39 10853.64,-406.39"/>
578 </g>
579 <!-- v36 -->
536 -<g id="node37" class="node">
580 +<g id="node48" class="node">
581 <title>v36</title>
538 -<polygon fill="none" stroke="black" points="7065.08,-822.2 6813.78,-822.2 6813.78,-786.2 7065.08,-786.2 7065.08,-822.2"/>
539 -<text text-anchor="middle" x="6939.43" y="-800" font-family="Times,serif" font-size="14.00">v36 (frozen $21 @ frozen $21 = &quot; Items&quot;)</text>
582 +<polygon fill="none" stroke="black" points="11894.35,-470.8 10983.94,-470.8 10983.94,-434.8 11894.35,-434.8 11894.35,-470.8"/>
583 +<text text-anchor="middle" x="11439.14" y="-448.6" font-family="Times,serif" font-size="14.00">v36 (readonly $25 @ readonly $25 = JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}&lt;/frozen $18&gt;) &lt;assign&gt;</text>
584 </g>
585 <!-- v37 -->
542 -<g id="node38" class="node">
586 +<g id="node49" class="node">
587 <title>v37</title>
544 -<polygon fill="none" stroke="black" points="7185.2,-746.4 6693.65,-746.4 6693.65,-710.4 7185.2,-710.4 7185.2,-746.4"/>
545 -<text text-anchor="middle" x="6939.43" y="-724.2" font-family="Times,serif" font-size="14.00">v37 (frozen $21 @ JSX &lt;frozen $20&gt;{frozen count$17}{frozen $21}&lt;/frozen $20&gt;)</text>
588 +<polygon fill="none" stroke="black" points="11583.58,-396 11294.71,-396 11294.71,-360 11583.58,-360 11583.58,-396"/>
589 +<text text-anchor="middle" x="11439.14" y="-373.8" font-family="Times,serif" font-size="14.00">v37 (frozen $25 @ Return frozen $25) &lt;update&gt;</text>
590 </g>
591 <!-- v36&#45;&gt;v37 -->
548 -<g id="edge25" class="edge">
592 +<g id="edge31" class="edge">
593 <title>v36&#45;&gt;v37</title>
550 -<path fill="none" stroke="black" d="M6939.43,-786.08C6939.43,-777.33 6939.43,-766.46 6939.43,-756.59"/>
551 -<polygon fill="black" stroke="black" points="6942.93,-756.42 6939.43,-746.42 6935.93,-756.42 6942.93,-756.42"/>
552 -</g>
553 -<!-- v38&#45;&gt;v28 -->
554 -<g id="edge29" class="edge">
555 -<title>v38&#45;&gt;v28</title>
556 -<path fill="none" stroke="black" d="M1062.68,-302.45C1060.14,-313.17 1058.97,-326.88 1065.23,-337.2 1067.94,-341.65 1071.41,-345.57 1075.35,-349"/>
557 -<polygon fill="black" stroke="black" points="1073.33,-351.86 1083.44,-355.03 1077.51,-346.25 1073.33,-351.86"/>
558 -<text text-anchor="middle" x="1086.02" y="-324.6" font-family="Times,serif" font-size="14.00">capture</text>
559 -</g>
560 -<!-- v38&#45;&gt;v39 -->
561 -<g id="edge26" class="edge">
562 -<title>v38&#45;&gt;v39</title>
563 -<path fill="none" stroke="black" d="M1070.43,-266.04C1074.97,-235.39 1089.11,-172.17 1130.43,-142.8 1140.02,-135.98 1170.61,-130.41 1211.43,-125.88"/>
564 -<polygon fill="black" stroke="black" points="1211.86,-129.36 1221.43,-124.81 1211.12,-122.4 1211.86,-129.36"/>
565 -</g>
566 -<!-- v39&#45;&gt;v44 -->
567 -<g id="edge33" class="edge">
568 -<title>v39&#45;&gt;v44</title>
569 -<path fill="none" stroke="black" d="M1590.55,-124.88C1607.27,-135.49 1629.63,-149.06 1650.23,-159.6 1659.65,-164.42 1669.89,-169.15 1679.83,-173.51"/>
570 -<polygon fill="black" stroke="black" points="1678.67,-176.82 1689.24,-177.55 1681.44,-170.39 1678.67,-176.82"/>
571 -<text text-anchor="middle" x="1671.02" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
572 -</g>
573 -<!-- v39&#45;&gt;v45 -->
574 -<g id="edge39" class="edge">
575 -<title>v39&#45;&gt;v45</title>
576 -<path fill="none" stroke="black" d="M1564.43,-88.65C1564.43,-76.52 1564.43,-60.02 1564.43,-46.12"/>
577 -<polygon fill="black" stroke="black" points="1567.93,-46.11 1564.43,-36.11 1560.93,-46.11 1567.93,-46.11"/>
578 -<text text-anchor="middle" x="1585.02" y="-58.2" font-family="Times,serif" font-size="14.00">capture</text>
579 -</g>
580 -<!-- v40 -->
581 -<g id="node41" class="node">
582 -<title>v40</title>
583 -<polygon fill="none" stroke="black" points="7689.6,-824.8 7483.26,-824.8 7483.26,-783.6 7689.6,-783.6 7689.6,-824.8"/>
584 -<text text-anchor="middle" x="7586.43" y="-808.4" font-family="Times,serif" font-size="14.00">v40 (frozen $23 @ frozen $23 = &quot;</text>
585 -<text text-anchor="middle" x="7586.43" y="-791.6" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;)</text>
594 +<path fill="none" stroke="black" d="M11439.14,-434.55C11439.14,-426.12 11439.14,-415.77 11439.14,-406.3"/>
595 +<polygon fill="black" stroke="black" points="11442.64,-406.13 11439.14,-396.13 11435.64,-406.13 11442.64,-406.13"/>
596 </g>
597 <!-- v41 -->
588 -<g id="node42" class="node">
598 +<g id="node51" class="node">
599 <title>v41</title>
590 -<polygon fill="none" stroke="black" points="7969.97,-746.4 7202.88,-746.4 7202.88,-710.4 7969.97,-710.4 7969.97,-746.4"/>
591 -<text text-anchor="middle" x="7586.43" y="-724.2" font-family="Times,serif" font-size="14.00">v41 (frozen $23 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
592 -</g>
593 -<!-- v40&#45;&gt;v41 -->
594 -<g id="edge30" class="edge">
595 -<title>v40&#45;&gt;v41</title>
596 -<path fill="none" stroke="black" d="M7586.43,-783.42C7586.43,-775.29 7586.43,-765.73 7586.43,-756.93"/>
597 -<polygon fill="black" stroke="black" points="7589.93,-756.72 7586.43,-746.72 7582.93,-756.72 7589.93,-756.72"/>
598 -</g>
599 -<!-- v42 -->
600 -<g id="node43" class="node">
601 -<title>v42</title>
602 -<polygon fill="none" stroke="black" points="8475.6,-824.8 8269.26,-824.8 8269.26,-783.6 8475.6,-783.6 8475.6,-824.8"/>
603 -<text text-anchor="middle" x="8372.43" y="-808.4" font-family="Times,serif" font-size="14.00">v42 (frozen $24 @ frozen $24 = &quot;</text>
604 -<text text-anchor="middle" x="8372.43" y="-791.6" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&quot;)</text>
605 -</g>
606 -<!-- v43 -->
607 -<g id="node44" class="node">
608 -<title>v43</title>
609 -<polygon fill="none" stroke="black" points="8755.97,-746.4 7988.88,-746.4 7988.88,-710.4 8755.97,-710.4 8755.97,-746.4"/>
610 -<text text-anchor="middle" x="8372.43" y="-724.2" font-family="Times,serif" font-size="14.00">v43 (frozen $24 @ JSX &lt;frozen $18&gt;{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}&lt;/frozen $18&gt;)</text>
600 +<polygon fill="none" stroke="black" points="6488.43,-324 5971.86,-324 5971.86,-288 6488.43,-288 6488.43,-324"/>
601 +<text text-anchor="middle" x="6230.14" y="-301.8" font-family="Times,serif" font-size="14.00">v41 (readonly $13 @ readonly $13 = Call mutable seen$5.has(frozen item$10)) &lt;assign&gt;</text>
602 </g>
612 -<!-- v42&#45;&gt;v43 -->
613 -<g id="edge31" class="edge">
614 -<title>v42&#45;&gt;v43</title>
615 -<path fill="none" stroke="black" d="M8372.43,-783.42C8372.43,-775.29 8372.43,-765.73 8372.43,-756.93"/>
616 -<polygon fill="black" stroke="black" points="8375.93,-756.72 8372.43,-746.72 8368.93,-756.72 8375.93,-756.72"/>
603 +<!-- v41&#45;&gt;v42 -->
604 +<g id="edge36" class="edge">
605 +<title>v41&#45;&gt;v42</title>
606 +<path fill="none" stroke="black" d="M6177.09,-287.97C6146.37,-278.1 6107.51,-265.62 6075.22,-255.25"/>
607 +<polygon fill="black" stroke="black" points="6076.02,-251.84 6065.43,-252.11 6073.88,-258.5 6076.02,-251.84"/>
608 </g>
618 -<!-- v44&#45;&gt;v29 -->
609 +<!-- v43&#45;&gt;v56 -->
610 <g id="edge38" class="edge">
620 -<title>v44&#45;&gt;v29</title>
621 -<path fill="none" stroke="black" d="M1756.95,-213.73C1763.22,-218.95 1769.56,-225.05 1774.43,-231.6 1779.95,-239.04 1784.41,-248.08 1787.82,-256.51"/>
622 -<polygon fill="black" stroke="black" points="1784.59,-257.85 1791.36,-266 1791.14,-255.41 1784.59,-257.85"/>
623 -<text text-anchor="middle" x="1805.02" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
624 -</g>
625 -<!-- v44&#45;&gt;v39 -->
626 -<g id="edge36" class="edge">
627 -<title>v44&#45;&gt;v39</title>
628 -<path fill="none" stroke="black" d="M1722.74,-177.3C1715.51,-165.91 1704.62,-151.54 1691.43,-142.8 1682.9,-137.15 1673.48,-132.41 1663.74,-128.43"/>
629 -<polygon fill="black" stroke="black" points="1664.91,-125.13 1654.32,-124.84 1662.41,-131.67 1664.91,-125.13"/>
630 -<text text-anchor="middle" x="1730.02" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
611 +<title>v43&#45;&gt;v56</title>
612 +<path fill="none" stroke="black" d="M2236.04,-252.1C2236.84,-259.79 2237.08,-269.05 2236.75,-277.67"/>
613 +<polygon fill="black" stroke="black" points="2233.25,-277.48 2236.06,-287.7 2240.24,-277.96 2233.25,-277.48"/>
614 </g>
632 -<!-- v44&#45;&gt;v45 -->
633 -<g id="edge32" class="edge">
634 -<title>v44&#45;&gt;v45</title>
635 -<path fill="none" stroke="black" d="M1853.45,-177.57C1925.57,-162.32 1996.17,-135.03 1957.43,-88.8 1923.72,-48.58 1792.34,-31.52 1690.65,-24.29"/>
636 -<polygon fill="black" stroke="black" points="1690.82,-20.79 1680.6,-23.6 1690.34,-27.78 1690.82,-20.79"/>
615 +<!-- v43&#45;&gt;v59 -->
616 +<g id="edge37" class="edge">
617 +<title>v43&#45;&gt;v59</title>
618 +<path fill="none" stroke="black" d="M2296.33,-215.97C2335.41,-205.91 2385.04,-193.14 2425.77,-182.65"/>
619 +<polygon fill="black" stroke="black" points="2426.84,-185.99 2435.66,-180.11 2425.1,-179.21 2426.84,-185.99"/>
620 </g>
638 -<!-- v47&#45;&gt;v24 -->
639 -<g id="edge47" class="edge">
640 -<title>v47&#45;&gt;v24</title>
641 -<path fill="none" stroke="black" d="M4821.68,-621.55C4819.14,-610.83 4817.97,-597.12 4824.23,-586.8 4826.94,-582.35 4830.41,-578.43 4834.35,-575"/>
642 -<polygon fill="black" stroke="black" points="4836.51,-577.75 4842.44,-568.97 4832.33,-572.14 4836.51,-577.75"/>
643 -<text text-anchor="middle" x="4845.02" y="-591" font-family="Times,serif" font-size="14.00">capture</text>
621 +<!-- v47 -->
622 +<g id="node54" class="node">
623 +<title>v47</title>
624 +<polygon fill="none" stroke="black" points="5564.5,-180 5071.79,-180 5071.79,-144 5564.5,-144 5564.5,-180"/>
625 +<text text-anchor="middle" x="5318.14" y="-157.8" font-family="Times,serif" font-size="14.00">v47 (frozen item$10 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
626 </g>
645 -<!-- v47&#45;&gt;v46 -->
646 -<g id="edge43" class="edge">
647 -<title>v47&#45;&gt;v46</title>
648 -<path fill="none" stroke="black" d="M4765.77,-621.55C4713.81,-607.19 4639.44,-586.63 4584.89,-571.56"/>
649 -<polygon fill="black" stroke="black" points="4585.52,-568.1 4574.95,-568.81 4583.65,-574.84 4585.52,-568.1"/>
627 +<!-- v44&#45;&gt;v47 -->
628 +<g id="edge39" class="edge">
629 +<title>v44&#45;&gt;v47</title>
630 +<path fill="none" stroke="black" d="M5223.72,-215.88C5240.22,-206.64 5260.77,-195.13 5278.48,-185.21"/>
631 +<polygon fill="black" stroke="black" points="5280.43,-188.13 5287.45,-180.19 5277.01,-182.02 5280.43,-188.13"/>
632 </g>
651 -<!-- v51 -->
652 -<g id="node52" class="node">
653 -<title>v51</title>
654 -<polygon fill="none" stroke="black" points="5525.47,-391.2 5011.38,-391.2 5011.38,-355.2 5525.47,-355.2 5525.47,-391.2"/>
655 -<text text-anchor="middle" x="5268.43" y="-369" font-family="Times,serif" font-size="14.00">v51 (mutable $15 @ mutable $15 = JSX &lt;frozen $14&gt;{mutable item$10}&lt;/frozen $14&gt;)</text>
633 +<!-- v47&#45;&gt;v57 -->
634 +<g id="edge41" class="edge">
635 +<title>v47&#45;&gt;v57</title>
636 +<path fill="none" stroke="black" d="M5379.55,-180.05C5396.98,-188.03 5413.98,-199.55 5424.14,-216 5432.56,-229.61 5432.56,-238.39 5424.14,-252 5415.8,-265.5 5402.87,-275.67 5388.87,-283.3"/>
637 +<polygon fill="black" stroke="black" points="5386.93,-280.35 5379.55,-287.95 5390.06,-286.62 5386.93,-280.35"/>
638 </g>
657 -<!-- v48&#45;&gt;v51 -->
658 -<g id="edge54" class="edge">
659 -<title>v48&#45;&gt;v51</title>
660 -<path fill="none" stroke="black" d="M5287.34,-443.93C5280.14,-439.21 5273.62,-433.31 5269.23,-426 5264.88,-418.73 5263.62,-409.8 5263.76,-401.41"/>
661 -<polygon fill="black" stroke="black" points="5267.27,-401.49 5264.58,-391.24 5260.29,-400.93 5267.27,-401.49"/>
662 -<text text-anchor="middle" x="5290.02" y="-413.4" font-family="Times,serif" font-size="14.00">capture</text>
639 +<!-- v45 -->
640 +<g id="node55" class="node">
641 +<title>v45</title>
642 +<polygon fill="none" stroke="black" points="12227.83,-470.8 11912.46,-470.8 11912.46,-434.8 12227.83,-434.8 12227.83,-470.8"/>
643 +<text text-anchor="middle" x="12070.14" y="-448.6" font-family="Times,serif" font-size="14.00">v45 (readonly $14 @ readonly $14 = &quot;div&quot;) &lt;assign&gt;</text>
644 </g>
664 -<!-- v52 -->
665 -<g id="node53" class="node">
666 -<title>v52</title>
667 -<polygon fill="none" stroke="black" points="5690.11,-302.4 5272.75,-302.4 5272.75,-266.4 5690.11,-266.4 5690.11,-302.4"/>
668 -<text text-anchor="middle" x="5481.43" y="-280.2" font-family="Times,serif" font-size="14.00">v52 (mutable $15 @ Call mutable renderedItems$4.push(mutable $15))</text>
645 +<!-- v46 -->
646 +<g id="node56" class="node">
647 +<title>v46</title>
648 +<polygon fill="none" stroke="black" points="12304.12,-396 11836.17,-396 11836.17,-360 12304.12,-360 12304.12,-396"/>
649 +<text text-anchor="middle" x="12070.14" y="-373.8" font-family="Times,serif" font-size="14.00">v46 (frozen $14 @ JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;update&gt;</text>
650 </g>
670 -<!-- v48&#45;&gt;v52 -->
671 -<g id="edge57" class="edge">
672 -<title>v48&#45;&gt;v52</title>
673 -<path fill="none" stroke="black" d="M5456.86,-443.92C5487.04,-433.59 5515.91,-417.19 5534.43,-391.2 5552.96,-365.19 5529.45,-331.77 5508.12,-309.52"/>
674 -<polygon fill="black" stroke="black" points="5510.58,-307.02 5501.03,-302.42 5505.63,-311.97 5510.58,-307.02"/>
675 -<text text-anchor="middle" x="5562.02" y="-369" font-family="Times,serif" font-size="14.00">capture</text>
651 +<!-- v45&#45;&gt;v46 -->
652 +<g id="edge40" class="edge">
653 +<title>v45&#45;&gt;v46</title>
654 +<path fill="none" stroke="black" d="M12070.14,-434.55C12070.14,-426.12 12070.14,-415.77 12070.14,-406.3"/>
655 +<polygon fill="black" stroke="black" points="12073.64,-406.13 12070.14,-396.13 12066.64,-406.13 12073.64,-406.13"/>
656 </g>
677 -<!-- v49 -->
678 -<g id="node50" class="node">
679 -<title>v49</title>
680 -<polygon fill="none" stroke="black" points="9101.86,-822.2 8866.99,-822.2 8866.99,-786.2 9101.86,-786.2 9101.86,-822.2"/>
681 -<text text-anchor="middle" x="8984.43" y="-800" font-family="Times,serif" font-size="14.00">v49 (frozen $14 @ frozen $14 = &quot;div&quot;)</text>
657 +<!-- v48 -->
658 +<g id="node57" class="node">
659 +<title>v48</title>
660 +<polygon fill="none" stroke="black" points="12842.9,-470.8 12275.39,-470.8 12275.39,-434.8 12842.9,-434.8 12842.9,-470.8"/>
661 +<text text-anchor="middle" x="12559.14" y="-448.6" font-family="Times,serif" font-size="14.00">v48 (readonly $15 @ readonly $15 = JSX &lt;frozen $14&gt;{frozen item$10}&lt;/frozen $14&gt;) &lt;assign&gt;</text>
662 </g>
663 <!-- v50 -->
684 -<g id="node51" class="node">
664 +<g id="node58" class="node">
665 <title>v50</title>
686 -<polygon fill="none" stroke="black" points="9194.64,-746.4 8774.22,-746.4 8774.22,-710.4 9194.64,-710.4 9194.64,-746.4"/>
687 -<text text-anchor="middle" x="8984.43" y="-724.2" font-family="Times,serif" font-size="14.00">v50 (frozen $14 @ JSX &lt;frozen $14&gt;{mutable item$10}&lt;/frozen $14&gt;)</text>
666 +<polygon fill="none" stroke="black" points="12796.43,-396 12321.86,-396 12321.86,-360 12796.43,-360 12796.43,-396"/>
667 +<text text-anchor="middle" x="12559.14" y="-373.8" font-family="Times,serif" font-size="14.00">v50 (mutable $15 @ Call mutable renderedItems$4.push(mutable $15)) &lt;update&gt;</text>
668 </g>
689 -<!-- v49&#45;&gt;v50 -->
690 -<g id="edge52" class="edge">
691 -<title>v49&#45;&gt;v50</title>
692 -<path fill="none" stroke="black" d="M8984.43,-786.08C8984.43,-777.33 8984.43,-766.46 8984.43,-756.59"/>
693 -<polygon fill="black" stroke="black" points="8987.93,-756.42 8984.43,-746.42 8980.93,-756.42 8987.93,-756.42"/>
669 +<!-- v48&#45;&gt;v50 -->
670 +<g id="edge42" class="edge">
671 +<title>v48&#45;&gt;v50</title>
672 +<path fill="none" stroke="black" d="M12559.14,-434.55C12559.14,-426.12 12559.14,-415.77 12559.14,-406.3"/>
673 +<polygon fill="black" stroke="black" points="12562.64,-406.13 12559.14,-396.13 12555.64,-406.13 12562.64,-406.13"/>
674 </g>
695 -<!-- v51&#45;&gt;v48 -->
696 -<g id="edge55" class="edge">
697 -<title>v51&#45;&gt;v48</title>
698 -<path fill="none" stroke="black" d="M5292.95,-391.33C5299.22,-396.55 5305.56,-402.65 5310.43,-409.2 5315.95,-416.64 5320.41,-425.68 5323.82,-434.11"/>
699 -<polygon fill="black" stroke="black" points="5320.59,-435.45 5327.36,-443.6 5327.14,-433.01 5320.59,-435.45"/>
700 -<text text-anchor="middle" x="5341.02" y="-413.4" font-family="Times,serif" font-size="14.00">capture</text>
675 +<!-- v51&#45;&gt;v18 -->
676 +<g id="edge44" class="edge">
677 +<title>v51&#45;&gt;v18</title>
678 +<path fill="none" stroke="black" d="M1428.73,-287.84C1448.1,-268.51 1481.76,-237.06 1515.14,-216 1534.99,-203.48 1558.31,-192.5 1579.14,-183.83"/>
679 +<polygon fill="black" stroke="black" points="1580.58,-187.03 1588.52,-180.01 1577.94,-180.54 1580.58,-187.03"/>
680 </g>
702 -<!-- v51&#45;&gt;v52 -->
703 -<g id="edge53" class="edge">
704 -<title>v51&#45;&gt;v52</title>
705 -<path fill="none" stroke="black" d="M5310.26,-355.15C5344.62,-341.15 5393.45,-321.25 5430.16,-306.29"/>
706 -<polygon fill="black" stroke="black" points="5431.76,-309.42 5439.7,-302.41 5429.11,-302.94 5431.76,-309.42"/>
707 -</g>
708 -<!-- v53&#45;&gt;v8 -->
709 -<g id="edge59" class="edge">
710 -<title>v53&#45;&gt;v8</title>
711 -<path fill="none" stroke="black" d="M1607.08,-621.55C1568.68,-607.43 1513.99,-587.31 1473.19,-572.31"/>
712 -<polygon fill="black" stroke="black" points="1474.26,-568.97 1463.67,-568.81 1471.84,-575.54 1474.26,-568.97"/>
713 -</g>
714 -<!-- v53&#45;&gt;v9 -->
715 -<g id="edge60" class="edge">
716 -<title>v53&#45;&gt;v9</title>
717 -<path fill="none" stroke="black" d="M1658.93,-657.71C1660.25,-669.83 1660.53,-686.34 1659.74,-700.24"/>
718 -<polygon fill="black" stroke="black" points="1656.25,-700 1658.93,-710.25 1663.22,-700.56 1656.25,-700"/>
681 +<!-- v51&#45;&gt;v62 -->
682 +<g id="edge45" class="edge">
683 +<title>v51&#45;&gt;v62</title>
684 +<path fill="none" stroke="black" d="M1466.65,-287.97C1498.36,-278.06 1538.5,-265.51 1571.76,-255.12"/>
685 +<polygon fill="black" stroke="black" points="1572.89,-258.43 1581.39,-252.11 1570.8,-251.75 1572.89,-258.43"/>
686 +</g>
687 +<!-- v51&#45;&gt;v71 -->
688 +<g id="edge46" class="edge">
689 +<title>v51&#45;&gt;v71</title>
690 +<path fill="none" stroke="black" d="M1326,-287.97C1274.07,-277.7 1207.84,-264.6 1154.23,-254"/>
691 +<polygon fill="black" stroke="black" points="1154.86,-250.56 1144.37,-252.05 1153.5,-257.42 1154.86,-250.56"/>
692 +</g>
693 +<!-- v53 -->
694 +<g id="node60" class="node">
695 +<title>v53</title>
696 +<polygon fill="none" stroke="black" points="13460.07,-470.8 12860.22,-470.8 12860.22,-434.8 13460.07,-434.8 13460.07,-470.8"/>
697 +<text text-anchor="middle" x="13160.14" y="-448.6" font-family="Times,serif" font-size="14.00">v53 (frozen $16 @ frozen $16 = Binary readonly renderedItems$4.length &gt;= readonly max$7) &lt;assign&gt;</text>
698 </g>
699 <!-- v54 -->
721 -<g id="node55" class="node">
700 +<g id="node61" class="node">
701 <title>v54</title>
723 -<polygon fill="none" stroke="black" points="9647.45,-822.2 9119.4,-822.2 9119.4,-786.2 9647.45,-786.2 9647.45,-822.2"/>
724 -<text text-anchor="middle" x="9383.43" y="-800" font-family="Times,serif" font-size="14.00">v54 (frozen $16 @ frozen $16 = Binary mutable renderedItems$4.length &gt;= frozen max$7)</text>
702 +<polygon fill="none" stroke="black" points="13345.77,-396 12974.52,-396 12974.52,-360 13345.77,-360 13345.77,-396"/>
703 +<text text-anchor="middle" x="13160.14" y="-373.8" font-family="Times,serif" font-size="14.00">v54 (frozen $16 @ If (frozen $16) then:bb2 else:bb1) &lt;update&gt;</text>
704 +</g>
705 +<!-- v53&#45;&gt;v54 -->
706 +<g id="edge48" class="edge">
707 +<title>v53&#45;&gt;v54</title>
708 +<path fill="none" stroke="black" d="M13160.14,-434.55C13160.14,-426.12 13160.14,-415.77 13160.14,-406.3"/>
709 +<polygon fill="black" stroke="black" points="13163.64,-406.13 13160.14,-396.13 13156.64,-406.13 13163.64,-406.13"/>
710 </g>
711 <!-- v55 -->
727 -<g id="node56" class="node">
712 +<g id="node62" class="node">
713 <title>v55</title>
729 -<polygon fill="none" stroke="black" points="9540.95,-746.4 9225.91,-746.4 9225.91,-710.4 9540.95,-710.4 9540.95,-746.4"/>
730 -<text text-anchor="middle" x="9383.43" y="-724.2" font-family="Times,serif" font-size="14.00">v55 (frozen $16 @ If (frozen $16) then:bb2 else:bb1)</text>
731 -</g>
732 -<!-- v54&#45;&gt;v55 -->
733 -<g id="edge58" class="edge">
734 -<title>v54&#45;&gt;v55</title>
735 -<path fill="none" stroke="black" d="M9383.43,-786.08C9383.43,-777.33 9383.43,-766.46 9383.43,-756.59"/>
736 -<polygon fill="black" stroke="black" points="9386.93,-756.42 9383.43,-746.42 9379.93,-756.42 9386.93,-756.42"/>
714 +<polygon fill="none" stroke="black" points="567.86,-470.8 300.43,-470.8 300.43,-434.8 567.86,-434.8 567.86,-470.8"/>
715 +<text text-anchor="middle" x="434.14" y="-448.6" font-family="Times,serif" font-size="14.00">v55 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
716 +</g>
717 +<!-- v55&#45;&gt;v0 -->
718 +<g id="edge49" class="edge">
719 +<title>v55&#45;&gt;v0</title>
720 +<path fill="none" stroke="black" d="M434.14,-434.55C434.14,-426.12 434.14,-415.77 434.14,-406.3"/>
721 +<polygon fill="black" stroke="black" points="437.64,-406.13 434.14,-396.13 430.64,-406.13 437.64,-406.13"/>
722 </g>
723 </g>
724 </svg>
compiler/forget/src/__tests__/fixtures/hir-svg/conditional-break.svg deleted
-145
@@ -1,145 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="1038pt" height="332pt"
8 - viewBox="0.00 0.00 1037.91 332.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-328 1033.91,-328 1033.91,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="377.1,-324 170.26,-324 170.26,-288 377.1,-288 377.1,-324"/>
16 -<text text-anchor="middle" x="273.68" y="-301.8" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="466.46,-252 80.89,-252 80.89,-216 466.46,-216 466.46,-252"/>
22 -<text text-anchor="middle" x="273.68" y="-229.8" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.a @ Call mutable a$2.push(frozen props$1.a))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M273.68,-287.7C273.68,-279.98 273.68,-270.71 273.68,-262.11"/>
28 -<polygon fill="black" stroke="black" points="277.18,-262.1 273.68,-252.1 270.18,-262.1 277.18,-262.1"/>
29 -</g>
30 -<!-- v6 -->
31 -<g id="node7" class="node">
32 -<title>v6</title>
33 -<polygon fill="none" stroke="black" points="462.42,-180 84.94,-180 84.94,-144 462.42,-144 462.42,-180"/>
34 -<text text-anchor="middle" x="273.68" y="-157.8" font-family="Times,serif" font-size="14.00">v6 (frozen props$1.b @ If (frozen props$1.b) then:bb1 else:bb2)</text>
35 -</g>
36 -<!-- v1&#45;&gt;v6 -->
37 -<g id="edge5" class="edge">
38 -<title>v1&#45;&gt;v6</title>
39 -<path fill="none" stroke="black" d="M273.68,-215.7C273.68,-207.98 273.68,-198.71 273.68,-190.11"/>
40 -<polygon fill="black" stroke="black" points="277.18,-190.1 273.68,-180.1 270.18,-190.1 277.18,-190.1"/>
41 -</g>
42 -<!-- v2 -->
43 -<g id="node3" class="node">
44 -<title>v2</title>
45 -<polygon fill="none" stroke="black" points="826.88,-324 566.47,-324 566.47,-288 826.88,-288 826.88,-324"/>
46 -<text text-anchor="middle" x="696.68" y="-301.8" font-family="Times,serif" font-size="14.00">v2 (mutable a$2 @ mutable a$2 = Array [])</text>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="892.14,-252 501.21,-252 501.21,-216 892.14,-216 892.14,-252"/>
52 -<text text-anchor="middle" x="696.68" y="-229.8" font-family="Times,serif" font-size="14.00">v3 (mutable a$2.push @ Call mutable a$2.push(frozen props$1.a))</text>
53 -</g>
54 -<!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
56 -<title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M696.68,-287.7C696.68,-279.98 696.68,-270.71 696.68,-262.11"/>
58 -<polygon fill="black" stroke="black" points="700.18,-262.1 696.68,-252.1 693.18,-262.1 700.18,-262.1"/>
59 -</g>
60 -<!-- v4 -->
61 -<g id="node5" class="node">
62 -<title>v4</title>
63 -<polygon fill="none" stroke="black" points="983.43,-108 591.93,-108 591.93,-72 983.43,-72 983.43,-108"/>
64 -<text text-anchor="middle" x="787.68" y="-85.8" font-family="Times,serif" font-size="14.00">v4 (mutable a$2.push @ Call mutable a$2.push(frozen props$1.d))</text>
65 -</g>
66 -<!-- v3&#45;&gt;v4 -->
67 -<g id="edge3" class="edge">
68 -<title>v3&#45;&gt;v4</title>
69 -<path fill="none" stroke="black" d="M652.61,-215.98C637.12,-207.62 621.42,-195.85 612.68,-180 604.95,-165.99 603.14,-156.85 612.68,-144 622.7,-130.49 636.08,-120.3 650.99,-112.64"/>
70 -<polygon fill="black" stroke="black" points="652.89,-115.61 660.45,-108.19 649.91,-109.28 652.89,-115.61"/>
71 -</g>
72 -<!-- v5 -->
73 -<g id="node6" class="node">
74 -<title>v5</title>
75 -<polygon fill="none" stroke="black" points="1012.14,-180 621.21,-180 621.21,-144 1012.14,-144 1012.14,-180"/>
76 -<text text-anchor="middle" x="816.68" y="-157.8" font-family="Times,serif" font-size="14.00">v5 (mutable a$2.push @ Call mutable a$2.push(frozen props$1.c))</text>
77 -</g>
78 -<!-- v3&#45;&gt;v5 -->
79 -<g id="edge4" class="edge">
80 -<title>v3&#45;&gt;v5</title>
81 -<path fill="none" stroke="black" d="M726.03,-215.88C741.72,-206.72 761.23,-195.34 778.13,-185.48"/>
82 -<polygon fill="black" stroke="black" points="780.34,-188.25 787.21,-180.19 776.81,-182.21 780.34,-188.25"/>
83 -</g>
84 -<!-- v9 -->
85 -<g id="node10" class="node">
86 -<title>v9</title>
87 -<polygon fill="none" stroke="black" points="899.43,-36 675.93,-36 675.93,0 899.43,0 899.43,-36"/>
88 -<text text-anchor="middle" x="787.68" y="-13.8" font-family="Times,serif" font-size="14.00">v9 (frozen a$2 @ Return frozen a$2)</text>
89 -</g>
90 -<!-- v4&#45;&gt;v9 -->
91 -<g id="edge8" class="edge">
92 -<title>v4&#45;&gt;v9</title>
93 -<path fill="none" stroke="black" d="M787.68,-71.7C787.68,-63.98 787.68,-54.71 787.68,-46.11"/>
94 -<polygon fill="black" stroke="black" points="791.18,-46.1 787.68,-36.1 784.18,-46.1 791.18,-46.1"/>
95 -</g>
96 -<!-- v5&#45;&gt;v4 -->
97 -<g id="edge9" class="edge">
98 -<title>v5&#45;&gt;v4</title>
99 -<path fill="none" stroke="black" d="M809.51,-143.7C806.24,-135.81 802.3,-126.3 798.68,-117.55"/>
100 -<polygon fill="black" stroke="black" points="801.82,-116 794.76,-108.1 795.36,-118.68 801.82,-116"/>
101 -</g>
102 -<!-- v5&#45;&gt;v5 -->
103 -<g id="edge10" class="edge">
104 -<title>v5&#45;&gt;v5</title>
105 -<path fill="none" stroke="black" d="M1012.04,-171.17C1023.23,-168.96 1029.91,-165.9 1029.91,-162 1029.91,-159.44 1027.03,-157.24 1021.89,-155.41"/>
106 -<polygon fill="black" stroke="black" points="1022.6,-151.98 1012.04,-152.83 1020.83,-158.75 1022.6,-151.98"/>
107 -</g>
108 -<!-- v7 -->
109 -<g id="node8" class="node">
110 -<title>v7</title>
111 -<polygon fill="none" stroke="black" points="387.53,-36 -0.18,-36 -0.18,0 387.53,0 387.53,-36"/>
112 -<text text-anchor="middle" x="193.68" y="-13.8" font-family="Times,serif" font-size="14.00">v7 (frozen props$1.d @ Call mutable a$2.push(frozen props$1.d))</text>
113 -</g>
114 -<!-- v6&#45;&gt;v7 -->
115 -<g id="edge6" class="edge">
116 -<title>v6&#45;&gt;v7</title>
117 -<path fill="none" stroke="black" d="M149.89,-143.99C131.03,-135.97 113.83,-124.47 101.68,-108 92.17,-95.13 93.67,-85.85 101.68,-72 109.25,-58.9 121.42,-48.76 134.46,-41.02"/>
118 -<polygon fill="black" stroke="black" points="136.49,-43.9 143.58,-36.03 133.13,-37.75 136.49,-43.9"/>
119 -</g>
120 -<!-- v8 -->
121 -<g id="node9" class="node">
122 -<title>v8</title>
123 -<polygon fill="none" stroke="black" points="496.46,-108 110.89,-108 110.89,-72 496.46,-72 496.46,-108"/>
124 -<text text-anchor="middle" x="303.68" y="-85.8" font-family="Times,serif" font-size="14.00">v8 (frozen props$1.c @ Call mutable a$2.push(frozen props$1.c))</text>
125 -</g>
126 -<!-- v6&#45;&gt;v8 -->
127 -<g id="edge7" class="edge">
128 -<title>v6&#45;&gt;v8</title>
129 -<path fill="none" stroke="black" d="M281.09,-143.7C284.47,-135.81 288.55,-126.3 292.3,-117.55"/>
130 -<polygon fill="black" stroke="black" points="295.63,-118.67 296.35,-108.1 289.19,-115.92 295.63,-118.67"/>
131 -</g>
132 -<!-- v8&#45;&gt;v7 -->
133 -<g id="edge11" class="edge">
134 -<title>v8&#45;&gt;v7</title>
135 -<path fill="none" stroke="black" d="M276.77,-71.88C262.52,-62.81 244.83,-51.55 229.44,-41.76"/>
136 -<polygon fill="black" stroke="black" points="231.01,-38.61 220.69,-36.19 227.25,-44.51 231.01,-38.61"/>
137 -</g>
138 -<!-- v8&#45;&gt;v8 -->
139 -<g id="edge12" class="edge">
140 -<title>v8&#45;&gt;v8</title>
141 -<path fill="none" stroke="black" d="M496.59,-99.23C507.84,-97.01 514.57,-93.94 514.57,-90 514.57,-87.42 511.67,-85.2 506.5,-83.36"/>
142 -<polygon fill="black" stroke="black" points="507.15,-79.91 496.59,-80.77 505.38,-86.69 507.15,-79.91"/>
143 -</g>
144 -</g>
145 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/conditional-on-mutable.svg deleted
-13
@@ -1,13 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="8pt" height="8pt"
8 - viewBox="0.00 0.00 8.00 8.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-4 4,-4 4,4 -4,4"/>
12 -</g>
13 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/constructor.svg deleted
-286
@@ -1,286 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="2365pt" height="723pt"
8 - viewBox="0.00 0.00 2365.17 722.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 718.8)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-718.8 2361.17,-718.8 2361.17,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="418.41,-714.8 211.57,-714.8 211.57,-678.8 418.41,-678.8 418.41,-714.8"/>
16 -<text text-anchor="middle" x="314.99" y="-692.6" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="697.2,-714.8 436.79,-714.8 436.79,-678.8 697.2,-678.8 697.2,-714.8"/>
22 -<text text-anchor="middle" x="566.99" y="-692.6" font-family="Times,serif" font-size="14.00">v1 (mutable a$2 @ mutable a$2 = Array [])</text>
23 -</g>
24 -<!-- v2 -->
25 -<g id="node3" class="node">
26 -<title>v2</title>
27 -<polygon fill="none" stroke="black" points="767.07,-641.8 366.92,-641.8 366.92,-605.8 767.07,-605.8 767.07,-641.8"/>
28 -<text text-anchor="middle" x="566.99" y="-619.6" font-family="Times,serif" font-size="14.00">v2 (mutable a$2 @ New mutable Foo$4(mutable a$2, mutable b$3))</text>
29 -</g>
30 -<!-- v1&#45;&gt;v2 -->
31 -<g id="edge1" class="edge">
32 -<title>v1&#45;&gt;v2</title>
33 -<path fill="none" stroke="black" d="M566.99,-678.61C566.99,-670.59 566.99,-660.85 566.99,-651.87"/>
34 -<polygon fill="black" stroke="black" points="570.49,-651.83 566.99,-641.83 563.49,-651.83 570.49,-651.83"/>
35 -</g>
36 -<!-- v4 -->
37 -<g id="node5" class="node">
38 -<title>v4</title>
39 -<polygon fill="none" stroke="black" points="914.86,-553 513.13,-553 513.13,-517 914.86,-517 914.86,-553"/>
40 -<text text-anchor="middle" x="713.99" y="-530.8" font-family="Times,serif" font-size="14.00">v4 (mutable b$3 @ New mutable Foo$4(mutable a$2, mutable b$3))</text>
41 -</g>
42 -<!-- v2&#45;&gt;v4 -->
43 -<g id="edge7" class="edge">
44 -<title>v2&#45;&gt;v4</title>
45 -<path fill="none" stroke="black" d="M635.59,-605.75C647.97,-601.03 660.31,-595.13 670.99,-587.8 681.18,-580.81 690.28,-570.77 697.46,-561.38"/>
46 -<polygon fill="black" stroke="black" points="700.46,-563.21 703.48,-553.06 694.79,-559.1 700.46,-563.21"/>
47 -<text text-anchor="middle" x="709.59" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
48 -</g>
49 -<!-- v7 -->
50 -<g id="node8" class="node">
51 -<title>v7</title>
52 -<polygon fill="none" stroke="black" points="686.7,-464.2 283.29,-464.2 283.29,-428.2 686.7,-428.2 686.7,-464.2"/>
53 -<text text-anchor="middle" x="484.99" y="-442" font-family="Times,serif" font-size="14.00">v7 (mutable a$2 @ JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
54 -</g>
55 -<!-- v2&#45;&gt;v7 -->
56 -<g id="edge4" class="edge">
57 -<title>v2&#45;&gt;v7</title>
58 -<path fill="none" stroke="black" d="M546.41,-605.71C532.21,-592.74 514.13,-573.67 503.99,-553 491.78,-528.09 487.34,-496.43 485.77,-474.26"/>
59 -<polygon fill="black" stroke="black" points="489.26,-474 485.21,-464.21 482.27,-474.39 489.26,-474"/>
60 -</g>
61 -<!-- v3 -->
62 -<g id="node4" class="node">
63 -<title>v3</title>
64 -<polygon fill="none" stroke="black" points="1063.06,-641.8 784.93,-641.8 784.93,-605.8 1063.06,-605.8 1063.06,-641.8"/>
65 -<text text-anchor="middle" x="923.99" y="-619.6" font-family="Times,serif" font-size="14.00">v3 (mutable b$3 @ mutable b$3 = Object { &#160;})</text>
66 -</g>
67 -<!-- v3&#45;&gt;v4 -->
68 -<g id="edge2" class="edge">
69 -<title>v3&#45;&gt;v4</title>
70 -<path fill="none" stroke="black" d="M882.75,-605.75C848.87,-591.75 800.73,-571.85 764.54,-556.89"/>
71 -<polygon fill="black" stroke="black" points="765.72,-553.59 755.14,-553.01 763.04,-560.06 765.72,-553.59"/>
72 -</g>
73 -<!-- v4&#45;&gt;v2 -->
74 -<g id="edge5" class="edge">
75 -<title>v4&#45;&gt;v2</title>
76 -<path fill="none" stroke="black" d="M666.03,-553.07C653.86,-558.16 641.06,-564.22 629.8,-571 616.64,-578.92 603.34,-589.44 592.39,-598.94"/>
77 -<polygon fill="black" stroke="black" points="590.02,-596.36 584.87,-605.62 594.67,-601.6 590.02,-596.36"/>
78 -<text text-anchor="middle" x="650.59" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
79 -</g>
80 -<!-- v4&#45;&gt;v7 -->
81 -<g id="edge11" class="edge">
82 -<title>v4&#45;&gt;v7</title>
83 -<path fill="none" stroke="black" d="M669.02,-516.95C631.84,-502.86 578.91,-482.8 539.36,-467.81"/>
84 -<polygon fill="black" stroke="black" points="540.45,-464.48 529.86,-464.21 537.97,-471.02 540.45,-464.48"/>
85 -<text text-anchor="middle" x="641.59" y="-486.4" font-family="Times,serif" font-size="14.00">capture</text>
86 -</g>
87 -<!-- v8 -->
88 -<g id="node9" class="node">
89 -<title>v8</title>
90 -<polygon fill="none" stroke="black" points="877.54,-375.4 552.44,-375.4 552.44,-339.4 877.54,-339.4 877.54,-375.4"/>
91 -<text text-anchor="middle" x="714.99" y="-353.2" font-family="Times,serif" font-size="14.00">v8 (mutable b$3 @ New mutable Foo$4(mutable b$3))</text>
92 -</g>
93 -<!-- v4&#45;&gt;v8 -->
94 -<g id="edge6" class="edge">
95 -<title>v4&#45;&gt;v8</title>
96 -<path fill="none" stroke="black" d="M714.09,-516.84C714.26,-486.42 714.63,-422.78 714.84,-386.08"/>
97 -<polygon fill="black" stroke="black" points="718.34,-385.65 714.89,-375.63 711.34,-385.61 718.34,-385.65"/>
98 -</g>
99 -<!-- v5 -->
100 -<g id="node6" class="node">
101 -<title>v5</title>
102 -<polygon fill="none" stroke="black" points="1459.14,-714.8 1042.84,-714.8 1042.84,-678.8 1459.14,-678.8 1459.14,-714.8"/>
103 -<text text-anchor="middle" x="1250.99" y="-692.6" font-family="Times,serif" font-size="14.00">v5 (mutable Foo$4 @ New mutable Foo$4(mutable a$2, mutable b$3))</text>
104 -</g>
105 -<!-- v6 -->
106 -<g id="node7" class="node">
107 -<title>v6</title>
108 -<polygon fill="none" stroke="black" points="1421.33,-641.8 1080.65,-641.8 1080.65,-605.8 1421.33,-605.8 1421.33,-641.8"/>
109 -<text text-anchor="middle" x="1250.99" y="-619.6" font-family="Times,serif" font-size="14.00">v6 (mutable Foo$4 @ New mutable Foo$4(mutable b$3))</text>
110 -</g>
111 -<!-- v5&#45;&gt;v6 -->
112 -<g id="edge3" class="edge">
113 -<title>v5&#45;&gt;v6</title>
114 -<path fill="none" stroke="black" d="M1250.99,-678.61C1250.99,-670.59 1250.99,-660.85 1250.99,-651.87"/>
115 -<polygon fill="black" stroke="black" points="1254.49,-651.83 1250.99,-641.83 1247.49,-651.83 1254.49,-651.83"/>
116 -</g>
117 -<!-- v7&#45;&gt;v8 -->
118 -<g id="edge14" class="edge">
119 -<title>v7&#45;&gt;v8</title>
120 -<path fill="none" stroke="black" d="M530.16,-428.15C567.5,-414.06 620.66,-394 660.39,-379.01"/>
121 -<polygon fill="black" stroke="black" points="661.81,-382.21 669.93,-375.41 659.34,-375.66 661.81,-382.21"/>
122 -<text text-anchor="middle" x="641.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
123 -</g>
124 -<!-- v11 -->
125 -<g id="node12" class="node">
126 -<title>v11</title>
127 -<polygon fill="none" stroke="black" points="495.98,-375.4 0.01,-375.4 0.01,-339.4 495.98,-339.4 495.98,-375.4"/>
128 -<text text-anchor="middle" x="247.99" y="-353.2" font-family="Times,serif" font-size="14.00">v11 (mutable _$5 @ mutable _$5 = JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
129 -</g>
130 -<!-- v7&#45;&gt;v11 -->
131 -<g id="edge9" class="edge">
132 -<title>v7&#45;&gt;v11</title>
133 -<path fill="none" stroke="black" d="M421.4,-428.17C403.28,-422.88 383.63,-416.71 365.8,-410.2 341.3,-401.26 314.65,-389.7 292.9,-379.77"/>
134 -<polygon fill="black" stroke="black" points="294.14,-376.49 283.6,-375.49 291.21,-382.85 294.14,-376.49"/>
135 -<text text-anchor="middle" x="386.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
136 -</g>
137 -<!-- v12 -->
138 -<g id="node13" class="node">
139 -<title>v12</title>
140 -<polygon fill="none" stroke="black" points="724.78,-286.6 201.21,-286.6 201.21,-250.6 724.78,-250.6 724.78,-286.6"/>
141 -<text text-anchor="middle" x="462.99" y="-264.4" font-family="Times,serif" font-size="14.00">v12 (readonly a$2 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
142 -</g>
143 -<!-- v7&#45;&gt;v12 -->
144 -<g id="edge10" class="edge">
145 -<title>v7&#45;&gt;v12</title>
146 -<path fill="none" stroke="black" d="M492.97,-428.14C501.75,-407.06 513.54,-370.2 504.99,-339.4 500.57,-323.46 491.41,-307.51 482.78,-294.89"/>
147 -<polygon fill="black" stroke="black" points="485.61,-292.83 476.95,-286.72 479.91,-296.89 485.61,-292.83"/>
148 -</g>
149 -<!-- v8&#45;&gt;v12 -->
150 -<g id="edge19" class="edge">
151 -<title>v8&#45;&gt;v12</title>
152 -<path fill="none" stroke="black" d="M665.51,-339.35C624.33,-325.17 565.61,-304.94 521.99,-289.92"/>
153 -<polygon fill="black" stroke="black" points="522.96,-286.55 512.37,-286.61 520.68,-293.17 522.96,-286.55"/>
154 -<text text-anchor="middle" x="632.59" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
155 -</g>
156 -<!-- v13 -->
157 -<g id="node14" class="node">
158 -<title>v13</title>
159 -<polygon fill="none" stroke="black" points="1046.07,-197.8 521.92,-197.8 521.92,-161.8 1046.07,-161.8 1046.07,-197.8"/>
160 -<text text-anchor="middle" x="783.99" y="-175.6" font-family="Times,serif" font-size="14.00">v13 (readonly b$3 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
161 -</g>
162 -<!-- v8&#45;&gt;v13 -->
163 -<g id="edge13" class="edge">
164 -<title>v8&#45;&gt;v13</title>
165 -<path fill="none" stroke="black" d="M721.73,-339.24C733.79,-308.56 759.13,-244.08 773.49,-207.54"/>
166 -<polygon fill="black" stroke="black" points="776.82,-208.61 777.22,-198.03 770.31,-206.05 776.82,-208.61"/>
167 -</g>
168 -<!-- v9 -->
169 -<g id="node10" class="node">
170 -<title>v9</title>
171 -<polygon fill="none" stroke="black" points="1743.93,-714.8 1530.06,-714.8 1530.06,-678.8 1743.93,-678.8 1743.93,-714.8"/>
172 -<text text-anchor="middle" x="1636.99" y="-692.6" font-family="Times,serif" font-size="14.00">v9 (frozen $6 @ frozen $6 = &quot;div&quot;)</text>
173 -</g>
174 -<!-- v10 -->
175 -<g id="node11" class="node">
176 -<title>v10</title>
177 -<polygon fill="none" stroke="black" points="1834.64,-641.8 1439.34,-641.8 1439.34,-605.8 1834.64,-605.8 1834.64,-641.8"/>
178 -<text text-anchor="middle" x="1636.99" y="-619.6" font-family="Times,serif" font-size="14.00">v10 (frozen $6 @ JSX &lt;frozen $6 a={mutable a$2} &gt;&lt;/frozen $6&gt;)</text>
179 -</g>
180 -<!-- v9&#45;&gt;v10 -->
181 -<g id="edge8" class="edge">
182 -<title>v9&#45;&gt;v10</title>
183 -<path fill="none" stroke="black" d="M1636.99,-678.61C1636.99,-670.59 1636.99,-660.85 1636.99,-651.87"/>
184 -<polygon fill="black" stroke="black" points="1640.49,-651.83 1636.99,-641.83 1633.49,-651.83 1640.49,-651.83"/>
185 -</g>
186 -<!-- v11&#45;&gt;v7 -->
187 -<g id="edge12" class="edge">
188 -<title>v11&#45;&gt;v7</title>
189 -<path fill="none" stroke="black" d="M351.94,-375.47C370.65,-380.16 389.69,-386.06 406.99,-393.4 424.22,-400.71 441.72,-411.92 455.77,-422.04"/>
190 -<polygon fill="black" stroke="black" points="453.92,-425.03 464.04,-428.16 458.08,-419.4 453.92,-425.03"/>
191 -<text text-anchor="middle" x="457.59" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
192 -</g>
193 -<!-- v11&#45;&gt;v12 -->
194 -<g id="edge20" class="edge">
195 -<title>v11&#45;&gt;v12</title>
196 -<path fill="none" stroke="black" d="M290.21,-339.35C324.9,-325.35 374.19,-305.45 411.25,-290.49"/>
197 -<polygon fill="black" stroke="black" points="412.91,-293.6 420.87,-286.61 410.29,-287.1 412.91,-293.6"/>
198 -<text text-anchor="middle" x="395.59" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
199 -</g>
200 -<!-- v12&#45;&gt;v13 -->
201 -<g id="edge22" class="edge">
202 -<title>v12&#45;&gt;v13</title>
203 -<path fill="none" stroke="black" d="M526.03,-250.55C579.25,-236.16 655.49,-215.55 711.28,-200.46"/>
204 -<polygon fill="black" stroke="black" points="712.36,-203.8 721.1,-197.81 710.53,-197.04 712.36,-203.8"/>
205 -<text text-anchor="middle" x="673.59" y="-220" font-family="Times,serif" font-size="14.00">capture</text>
206 -</g>
207 -<!-- v16 -->
208 -<g id="node17" class="node">
209 -<title>v16</title>
210 -<polygon fill="none" stroke="black" points="1007.49,-109 434.5,-109 434.5,-73 1007.49,-73 1007.49,-109"/>
211 -<text text-anchor="middle" x="720.99" y="-86.8" font-family="Times,serif" font-size="14.00">v16 (frozen $8 @ frozen $8 = JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
212 -</g>
213 -<!-- v12&#45;&gt;v16 -->
214 -<g id="edge17" class="edge">
215 -<title>v12&#45;&gt;v16</title>
216 -<path fill="none" stroke="black" d="M412.55,-250.41C404.93,-245.74 397.97,-239.9 392.99,-232.6 366.47,-193.71 353.48,-161.96 384.99,-127 390.97,-120.37 413.13,-114.91 443.42,-110.44"/>
217 -<polygon fill="black" stroke="black" points="444.11,-113.88 453.53,-109.03 443.14,-106.95 444.11,-113.88"/>
218 -<text text-anchor="middle" x="393.59" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
219 -</g>
220 -<!-- v17 -->
221 -<g id="node18" class="node">
222 -<title>v17</title>
223 -<polygon fill="none" stroke="black" points="829.82,-36 612.17,-36 612.17,0 829.82,0 829.82,-36"/>
224 -<text text-anchor="middle" x="720.99" y="-13.8" font-family="Times,serif" font-size="14.00">v17 (frozen $8 @ Return frozen $8)</text>
225 -</g>
226 -<!-- v12&#45;&gt;v17 -->
227 -<g id="edge24" class="edge">
228 -<title>v12&#45;&gt;v17</title>
229 -<path fill="none" stroke="black" d="M451.62,-250.49C428.6,-213.55 382.28,-125.44 425.99,-73 448.64,-45.83 530.33,-32.29 602.02,-25.57"/>
230 -<polygon fill="black" stroke="black" points="602.42,-29.04 612.07,-24.66 601.79,-22.07 602.42,-29.04"/>
231 -<text text-anchor="middle" x="429.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
232 -</g>
233 -<!-- v13&#45;&gt;v16 -->
234 -<g id="edge18" class="edge">
235 -<title>v13&#45;&gt;v16</title>
236 -<path fill="none" stroke="black" d="M739.6,-161.61C732.52,-156.9 726.11,-151.04 721.8,-143.8 717.47,-136.52 716.21,-127.58 716.36,-119.19"/>
237 -<polygon fill="black" stroke="black" points="719.86,-119.27 717.17,-109.02 712.89,-118.71 719.86,-119.27"/>
238 -<text text-anchor="middle" x="742.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
239 -</g>
240 -<!-- v13&#45;&gt;v17 -->
241 -<g id="edge25" class="edge">
242 -<title>v13&#45;&gt;v17</title>
243 -<path fill="none" stroke="black" d="M912.55,-161.75C985.4,-146.71 1054.9,-119.67 1015.99,-73 993.35,-45.83 911.65,-32.29 839.96,-25.57"/>
244 -<polygon fill="black" stroke="black" points="840.19,-22.07 829.92,-24.66 839.56,-29.04 840.19,-22.07"/>
245 -<text text-anchor="middle" x="1048.59" y="-86.8" font-family="Times,serif" font-size="14.00">capture</text>
246 -</g>
247 -<!-- v14 -->
248 -<g id="node15" class="node">
249 -<title>v14</title>
250 -<polygon fill="none" stroke="black" points="2215.43,-714.8 1994.56,-714.8 1994.56,-678.8 2215.43,-678.8 2215.43,-714.8"/>
251 -<text text-anchor="middle" x="2104.99" y="-692.6" font-family="Times,serif" font-size="14.00">v14 (frozen $7 @ frozen $7 = &quot;div&quot;)</text>
252 -</g>
253 -<!-- v15 -->
254 -<g id="node16" class="node">
255 -<title>v15</title>
256 -<polygon fill="none" stroke="black" points="2357.34,-641.8 1852.65,-641.8 1852.65,-605.8 2357.34,-605.8 2357.34,-641.8"/>
257 -<text text-anchor="middle" x="2104.99" y="-619.6" font-family="Times,serif" font-size="14.00">v15 (frozen $7 @ JSX &lt;frozen $7 a={readonly a$2} b={readonly b$3} &gt;&lt;/frozen $7&gt;)</text>
258 -</g>
259 -<!-- v14&#45;&gt;v15 -->
260 -<g id="edge15" class="edge">
261 -<title>v14&#45;&gt;v15</title>
262 -<path fill="none" stroke="black" d="M2104.99,-678.61C2104.99,-670.59 2104.99,-660.85 2104.99,-651.87"/>
263 -<polygon fill="black" stroke="black" points="2108.49,-651.83 2104.99,-641.83 2101.49,-651.83 2108.49,-651.83"/>
264 -</g>
265 -<!-- v16&#45;&gt;v12 -->
266 -<g id="edge21" class="edge">
267 -<title>v16&#45;&gt;v12</title>
268 -<path fill="none" stroke="black" d="M616.2,-109.04C556.84,-120.96 490.75,-138.85 471.8,-161.8 453.88,-183.49 454.2,-216.92 457.38,-240.39"/>
269 -<polygon fill="black" stroke="black" points="453.94,-241.07 458.98,-250.39 460.85,-239.96 453.94,-241.07"/>
270 -<text text-anchor="middle" x="492.59" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
271 -</g>
272 -<!-- v16&#45;&gt;v13 -->
273 -<g id="edge23" class="edge">
274 -<title>v16&#45;&gt;v13</title>
275 -<path fill="none" stroke="black" d="M745.59,-109.08C751.86,-114.29 758.18,-120.41 762.99,-127 768.42,-134.44 772.71,-143.47 775.96,-151.91"/>
276 -<polygon fill="black" stroke="black" points="772.68,-153.13 779.3,-161.4 779.28,-150.8 772.68,-153.13"/>
277 -<text text-anchor="middle" x="793.59" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
278 -</g>
279 -<!-- v16&#45;&gt;v17 -->
280 -<g id="edge16" class="edge">
281 -<title>v16&#45;&gt;v17</title>
282 -<path fill="none" stroke="black" d="M720.99,-72.81C720.99,-64.79 720.99,-55.05 720.99,-46.07"/>
283 -<polygon fill="black" stroke="black" points="724.49,-46.03 720.99,-36.03 717.49,-46.03 724.49,-46.03"/>
284 -</g>
285 -</g>
286 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/hook-call.svg deleted
-184
@@ -1,184 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="5481pt" height="266pt"
8 - viewBox="0.00 0.00 5480.57 265.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 261.6)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-261.6 5476.57,-261.6 5476.57,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="245.38,-254.8 38.53,-254.8 38.53,-218.8 245.38,-218.8 245.38,-254.8"/>
16 -<text text-anchor="middle" x="141.95" y="-232.6" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="506.54,-254.8 263.36,-254.8 263.36,-218.8 506.54,-218.8 506.54,-254.8"/>
22 -<text text-anchor="middle" x="384.95" y="-232.6" font-family="Times,serif" font-size="14.00">v1 (frozen x$2 @ frozen x$2 = Array [])</text>
23 -</g>
24 -<!-- v2 -->
25 -<g id="node3" class="node">
26 -<title>v2</title>
27 -<polygon fill="none" stroke="black" points="549.05,-180 220.86,-180 220.86,-144 549.05,-144 549.05,-180"/>
28 -<text text-anchor="middle" x="384.95" y="-157.8" font-family="Times,serif" font-size="14.00">v2 (frozen x$2 @ Call frozen useFreeze$4(frozen x$2))</text>
29 -</g>
30 -<!-- v1&#45;&gt;v2 -->
31 -<g id="edge1" class="edge">
32 -<title>v1&#45;&gt;v2</title>
33 -<path fill="none" stroke="black" d="M384.95,-218.55C384.95,-210.12 384.95,-199.77 384.95,-190.3"/>
34 -<polygon fill="black" stroke="black" points="388.45,-190.13 384.95,-180.13 381.45,-190.13 388.45,-190.13"/>
35 -</g>
36 -<!-- v6 -->
37 -<g id="node7" class="node">
38 -<title>v6</title>
39 -<polygon fill="none" stroke="black" points="568.84,-108 201.07,-108 201.07,-72 568.84,-72 568.84,-108"/>
40 -<text text-anchor="middle" x="384.95" y="-85.8" font-family="Times,serif" font-size="14.00">v6 (frozen x$2 @ Call mutable foo$5(frozen y$3, frozen x$2))</text>
41 -</g>
42 -<!-- v2&#45;&gt;v6 -->
43 -<g id="edge3" class="edge">
44 -<title>v2&#45;&gt;v6</title>
45 -<path fill="none" stroke="black" d="M384.95,-143.7C384.95,-135.98 384.95,-126.71 384.95,-118.11"/>
46 -<polygon fill="black" stroke="black" points="388.45,-118.1 384.95,-108.1 381.45,-118.1 388.45,-118.1"/>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="1173.7,-254.8 770.21,-254.8 770.21,-218.8 1173.7,-218.8 1173.7,-254.8"/>
52 -<text text-anchor="middle" x="971.95" y="-232.6" font-family="Times,serif" font-size="14.00">v3 (frozen y$3 @ frozen y$3 = Call frozen useFreeze$4(frozen x$2))</text>
53 -</g>
54 -<!-- v4 -->
55 -<g id="node5" class="node">
56 -<title>v4</title>
57 -<polygon fill="none" stroke="black" points="1155.84,-180 788.07,-180 788.07,-144 1155.84,-144 1155.84,-180"/>
58 -<text text-anchor="middle" x="971.95" y="-157.8" font-family="Times,serif" font-size="14.00">v4 (frozen y$3 @ Call mutable foo$5(frozen y$3, frozen x$2))</text>
59 -</g>
60 -<!-- v3&#45;&gt;v4 -->
61 -<g id="edge2" class="edge">
62 -<title>v3&#45;&gt;v4</title>
63 -<path fill="none" stroke="black" d="M971.95,-218.55C971.95,-210.12 971.95,-199.77 971.95,-190.3"/>
64 -<polygon fill="black" stroke="black" points="975.45,-190.13 971.95,-180.13 968.45,-190.13 975.45,-190.13"/>
65 -</g>
66 -<!-- v8 -->
67 -<g id="node9" class="node">
68 -<title>v8</title>
69 -<polygon fill="none" stroke="black" points="1356.86,-108 587.05,-108 587.05,-72 1356.86,-72 1356.86,-108"/>
70 -<text text-anchor="middle" x="971.95" y="-85.8" font-family="Times,serif" font-size="14.00">v8 (frozen y$3 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
71 -</g>
72 -<!-- v4&#45;&gt;v8 -->
73 -<g id="edge4" class="edge">
74 -<title>v4&#45;&gt;v8</title>
75 -<path fill="none" stroke="black" d="M971.95,-143.7C971.95,-135.98 971.95,-126.71 971.95,-118.11"/>
76 -<polygon fill="black" stroke="black" points="975.45,-118.1 971.95,-108.1 968.45,-118.1 975.45,-118.1"/>
77 -</g>
78 -<!-- v5 -->
79 -<g id="node6" class="node">
80 -<title>v5</title>
81 -<polygon fill="none" stroke="black" points="1569.51,-254.8 1192.39,-254.8 1192.39,-218.8 1569.51,-218.8 1569.51,-254.8"/>
82 -<text text-anchor="middle" x="1380.95" y="-232.6" font-family="Times,serif" font-size="14.00">v5 (frozen useFreeze$4 @ Call frozen useFreeze$4(frozen x$2))</text>
83 -</g>
84 -<!-- v9 -->
85 -<g id="node10" class="node">
86 -<title>v9</title>
87 -<polygon fill="none" stroke="black" points="769.86,-36 0.05,-36 0.05,0 769.86,0 769.86,-36"/>
88 -<text text-anchor="middle" x="384.95" y="-13.8" font-family="Times,serif" font-size="14.00">v9 (frozen x$2 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
89 -</g>
90 -<!-- v6&#45;&gt;v9 -->
91 -<g id="edge5" class="edge">
92 -<title>v6&#45;&gt;v9</title>
93 -<path fill="none" stroke="black" d="M384.95,-71.7C384.95,-63.98 384.95,-54.71 384.95,-46.11"/>
94 -<polygon fill="black" stroke="black" points="388.45,-46.1 384.95,-36.1 381.45,-46.1 388.45,-46.1"/>
95 -</g>
96 -<!-- v7 -->
97 -<g id="node8" class="node">
98 -<title>v7</title>
99 -<polygon fill="none" stroke="black" points="1976.35,-254.8 1587.56,-254.8 1587.56,-218.8 1976.35,-218.8 1976.35,-254.8"/>
100 -<text text-anchor="middle" x="1781.95" y="-232.6" font-family="Times,serif" font-size="14.00">v7 (mutable foo$5 @ Call mutable foo$5(frozen y$3, frozen x$2))</text>
101 -</g>
102 -<!-- v10 -->
103 -<g id="node11" class="node">
104 -<title>v10</title>
105 -<polygon fill="none" stroke="black" points="2187.12,-257.4 1994.79,-257.4 1994.79,-216.2 2187.12,-216.2 2187.12,-257.4"/>
106 -<text text-anchor="middle" x="2090.95" y="-241" font-family="Times,serif" font-size="14.00">v10 (frozen $6 @ frozen $6 = &quot;</text>
107 -<text text-anchor="middle" x="2090.95" y="-224.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;)</text>
108 -</g>
109 -<!-- v11 -->
110 -<g id="node12" class="node">
111 -<title>v11</title>
112 -<polygon fill="none" stroke="black" points="2475.86,-180 1706.05,-180 1706.05,-144 2475.86,-144 2475.86,-180"/>
113 -<text text-anchor="middle" x="2090.95" y="-157.8" font-family="Times,serif" font-size="14.00">v11 (frozen $6 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
114 -</g>
115 -<!-- v10&#45;&gt;v11 -->
116 -<g id="edge6" class="edge">
117 -<title>v10&#45;&gt;v11</title>
118 -<path fill="none" stroke="black" d="M2090.95,-215.91C2090.95,-208.09 2090.95,-198.99 2090.95,-190.56"/>
119 -<polygon fill="black" stroke="black" points="2094.45,-190.39 2090.95,-180.39 2087.45,-190.39 2094.45,-190.39"/>
120 -</g>
121 -<!-- v12 -->
122 -<g id="node13" class="node">
123 -<title>v12</title>
124 -<polygon fill="none" stroke="black" points="2975.12,-257.4 2782.79,-257.4 2782.79,-216.2 2975.12,-216.2 2975.12,-257.4"/>
125 -<text text-anchor="middle" x="2878.95" y="-241" font-family="Times,serif" font-size="14.00">v12 (frozen $7 @ frozen $7 = &quot;</text>
126 -<text text-anchor="middle" x="2878.95" y="-224.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&#160;&#160;&quot;)</text>
127 -</g>
128 -<!-- v13 -->
129 -<g id="node14" class="node">
130 -<title>v13</title>
131 -<polygon fill="none" stroke="black" points="3263.86,-180 2494.05,-180 2494.05,-144 3263.86,-144 3263.86,-180"/>
132 -<text text-anchor="middle" x="2878.95" y="-157.8" font-family="Times,serif" font-size="14.00">v13 (frozen $7 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
133 -</g>
134 -<!-- v12&#45;&gt;v13 -->
135 -<g id="edge7" class="edge">
136 -<title>v12&#45;&gt;v13</title>
137 -<path fill="none" stroke="black" d="M2878.95,-215.91C2878.95,-208.09 2878.95,-198.99 2878.95,-190.56"/>
138 -<polygon fill="black" stroke="black" points="2882.45,-190.39 2878.95,-180.39 2875.45,-190.39 2882.45,-190.39"/>
139 -</g>
140 -<!-- v14 -->
141 -<g id="node15" class="node">
142 -<title>v14</title>
143 -<polygon fill="none" stroke="black" points="3763.12,-257.4 3570.79,-257.4 3570.79,-216.2 3763.12,-216.2 3763.12,-257.4"/>
144 -<text text-anchor="middle" x="3666.95" y="-241" font-family="Times,serif" font-size="14.00">v14 (frozen $8 @ frozen $8 = &quot;</text>
145 -<text text-anchor="middle" x="3666.95" y="-224.2" font-family="Times,serif" font-size="14.00"> &#160;&#160;&#160;&quot;)</text>
146 -</g>
147 -<!-- v15 -->
148 -<g id="node16" class="node">
149 -<title>v15</title>
150 -<polygon fill="none" stroke="black" points="4051.86,-180 3282.05,-180 3282.05,-144 4051.86,-144 4051.86,-180"/>
151 -<text text-anchor="middle" x="3666.95" y="-157.8" font-family="Times,serif" font-size="14.00">v15 (frozen $8 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
152 -</g>
153 -<!-- v14&#45;&gt;v15 -->
154 -<g id="edge8" class="edge">
155 -<title>v14&#45;&gt;v15</title>
156 -<path fill="none" stroke="black" d="M3666.95,-215.91C3666.95,-208.09 3666.95,-198.99 3666.95,-190.56"/>
157 -<polygon fill="black" stroke="black" points="3670.45,-190.39 3666.95,-180.39 3663.45,-190.39 3670.45,-190.39"/>
158 -</g>
159 -<!-- v16 -->
160 -<g id="node17" class="node">
161 -<title>v16</title>
162 -<polygon fill="none" stroke="black" points="4619.01,-254.8 3780.9,-254.8 3780.9,-218.8 4619.01,-218.8 4619.01,-254.8"/>
163 -<text text-anchor="middle" x="4199.95" y="-232.6" font-family="Times,serif" font-size="14.00">v16 (frozen $9 @ frozen $9 = JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
164 -</g>
165 -<!-- v17 -->
166 -<g id="node18" class="node">
167 -<title>v17</title>
168 -<polygon fill="none" stroke="black" points="4308.78,-180 4091.13,-180 4091.13,-144 4308.78,-144 4308.78,-180"/>
169 -<text text-anchor="middle" x="4199.95" y="-157.8" font-family="Times,serif" font-size="14.00">v17 (frozen $9 @ Return frozen $9)</text>
170 -</g>
171 -<!-- v16&#45;&gt;v17 -->
172 -<g id="edge9" class="edge">
173 -<title>v16&#45;&gt;v17</title>
174 -<path fill="none" stroke="black" d="M4199.95,-218.55C4199.95,-210.12 4199.95,-199.77 4199.95,-190.3"/>
175 -<polygon fill="black" stroke="black" points="4203.45,-190.13 4199.95,-180.13 4196.45,-190.13 4203.45,-190.13"/>
176 -</g>
177 -<!-- v18 -->
178 -<g id="node19" class="node">
179 -<title>v18</title>
180 -<polygon fill="none" stroke="black" points="5472.69,-254.8 4637.21,-254.8 4637.21,-218.8 5472.69,-218.8 5472.69,-254.8"/>
181 -<text text-anchor="middle" x="5054.95" y="-232.6" font-family="Times,serif" font-size="14.00">v18 (frozen Component$0 @ JSX &lt;frozen Component$0&gt;{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}&lt;/frozen Component$0&gt;)</text>
182 -</g>
183 -</g>
184 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/independent-across-if.svg deleted
-241
@@ -1,241 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="2398pt" height="456pt"
8 - viewBox="0.00 0.00 2397.55 456.40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 452.4)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-452.4 2393.55,-452.4 2393.55,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="303.12,-448.4 96.28,-448.4 96.28,-412.4 303.12,-412.4 303.12,-448.4"/>
16 -<text text-anchor="middle" x="199.7" y="-426.2" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="398.53,-375.4 0.87,-375.4 0.87,-339.4 398.53,-339.4 398.53,-375.4"/>
22 -<text text-anchor="middle" x="199.7" y="-353.2" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.a @ Call mutable compute$3(frozen props$1.a))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M199.7,-412.21C199.7,-404.19 199.7,-394.45 199.7,-385.47"/>
28 -<polygon fill="black" stroke="black" points="203.2,-385.43 199.7,-375.43 196.2,-385.43 203.2,-385.43"/>
29 -</g>
30 -<!-- v7 -->
31 -<g id="node8" class="node">
32 -<title>v7</title>
33 -<polygon fill="none" stroke="black" points="399.6,-302.4 -0.2,-302.4 -0.2,-266.4 399.6,-266.4 399.6,-302.4"/>
34 -<text text-anchor="middle" x="199.7" y="-280.2" font-family="Times,serif" font-size="14.00">v7 (frozen props$1.b @ Call mutable compute$3(frozen props$1.b))</text>
35 -</g>
36 -<!-- v1&#45;&gt;v7 -->
37 -<g id="edge5" class="edge">
38 -<title>v1&#45;&gt;v7</title>
39 -<path fill="none" stroke="black" d="M199.7,-339.21C199.7,-331.19 199.7,-321.45 199.7,-312.47"/>
40 -<polygon fill="black" stroke="black" points="203.2,-312.43 199.7,-302.43 196.2,-312.43 203.2,-312.43"/>
41 -</g>
42 -<!-- v2 -->
43 -<g id="node3" class="node">
44 -<title>v2</title>
45 -<polygon fill="none" stroke="black" points="974.97,-448.4 518.43,-448.4 518.43,-412.4 974.97,-412.4 974.97,-448.4"/>
46 -<text text-anchor="middle" x="746.7" y="-426.2" font-family="Times,serif" font-size="14.00">v2 (mutable a$2 @ mutable a$2 = Call mutable compute$3(frozen props$1.a))</text>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="754.39,-375.4 417.01,-375.4 417.01,-339.4 754.39,-339.4 754.39,-375.4"/>
52 -<text text-anchor="middle" x="585.7" y="-353.2" font-family="Times,serif" font-size="14.00">v3 (mutable a$2 @ Call mutable mutate$5(mutable a$2))</text>
53 -</g>
54 -<!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
56 -<title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M708.14,-412.39C685.8,-402.54 657.48,-390.06 633.71,-379.57"/>
58 -<polygon fill="black" stroke="black" points="635.07,-376.35 624.51,-375.51 632.24,-382.75 635.07,-376.35"/>
59 -</g>
60 -<!-- v4 -->
61 -<g id="node5" class="node">
62 -<title>v4</title>
63 -<polygon fill="none" stroke="black" points="1030.06,-302.4 469.34,-302.4 469.34,-266.4 1030.06,-266.4 1030.06,-302.4"/>
64 -<text text-anchor="middle" x="749.7" y="-280.2" font-family="Times,serif" font-size="14.00">v4 (readonly a$2 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
65 -</g>
66 -<!-- v2&#45;&gt;v4 -->
67 -<g id="edge3" class="edge">
68 -<title>v2&#45;&gt;v4</title>
69 -<path fill="none" stroke="black" d="M761.52,-412.21C769.17,-402.19 777.71,-388.9 781.7,-375.4 786.24,-360.06 785.93,-354.83 781.7,-339.4 779.01,-329.57 774.01,-319.72 768.75,-311.17"/>
70 -<polygon fill="black" stroke="black" points="771.67,-309.24 763.27,-302.79 765.82,-313.07 771.67,-309.24"/>
71 -</g>
72 -<!-- v3&#45;&gt;v3 -->
73 -<g id="edge10" class="edge">
74 -<title>v3&#45;&gt;v3</title>
75 -<path fill="none" stroke="black" d="M754.48,-362.28C765.57,-361.15 772.29,-359.52 772.29,-357.4 772.29,-356.04 769.54,-354.88 764.64,-353.93"/>
76 -<polygon fill="black" stroke="black" points="764.86,-350.43 754.48,-352.52 763.9,-357.36 764.86,-350.43"/>
77 -</g>
78 -<!-- v3&#45;&gt;v4 -->
79 -<g id="edge11" class="edge">
80 -<title>v3&#45;&gt;v4</title>
81 -<path fill="none" stroke="black" d="M624.98,-339.39C647.74,-329.54 676.58,-317.06 700.8,-306.57"/>
82 -<polygon fill="black" stroke="black" points="702.38,-309.7 710.17,-302.51 699.6,-303.27 702.38,-309.7"/>
83 -</g>
84 -<!-- v14 -->
85 -<g id="node15" class="node">
86 -<title>v14</title>
87 -<polygon fill="none" stroke="black" points="1121.77,-213.6 505.63,-213.6 505.63,-177.6 1121.77,-177.6 1121.77,-213.6"/>
88 -<text text-anchor="middle" x="813.7" y="-191.4" font-family="Times,serif" font-size="14.00">v14 (frozen $7 @ frozen $7 = JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
89 -</g>
90 -<!-- v4&#45;&gt;v14 -->
91 -<g id="edge15" class="edge">
92 -<title>v4&#45;&gt;v14</title>
93 -<path fill="none" stroke="black" d="M745.85,-266.36C744.38,-255.64 744.31,-241.94 750.51,-231.6 753.18,-227.14 756.64,-223.21 760.57,-219.75"/>
94 -<polygon fill="black" stroke="black" points="762.75,-222.5 768.61,-213.67 758.53,-216.91 762.75,-222.5"/>
95 -<text text-anchor="middle" x="771.3" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
96 -</g>
97 -<!-- v15 -->
98 -<g id="node16" class="node">
99 -<title>v15</title>
100 -<polygon fill="none" stroke="black" points="878.52,-36 660.88,-36 660.88,0 878.52,0 878.52,-36"/>
101 -<text text-anchor="middle" x="769.7" y="-13.8" font-family="Times,serif" font-size="14.00">v15 (frozen $7 @ Return frozen $7)</text>
102 -</g>
103 -<!-- v4&#45;&gt;v15 -->
104 -<g id="edge19" class="edge">
105 -<title>v4&#45;&gt;v15</title>
106 -<path fill="none" stroke="black" d="M582.36,-266.4C519.37,-252.13 468.91,-225.88 496.7,-177.6 539.03,-104.06 629.99,-61.46 695.29,-39.28"/>
107 -<polygon fill="black" stroke="black" points="696.74,-42.49 705.13,-36.02 694.54,-35.84 696.74,-42.49"/>
108 -<text text-anchor="middle" x="542.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
109 -</g>
110 -<!-- v5 -->
111 -<g id="node6" class="node">
112 -<title>v5</title>
113 -<polygon fill="none" stroke="black" points="1406.76,-448.4 992.64,-448.4 992.64,-412.4 1406.76,-412.4 1406.76,-448.4"/>
114 -<text text-anchor="middle" x="1199.7" y="-426.2" font-family="Times,serif" font-size="14.00">v5 (mutable compute$3 @ Call mutable compute$3(frozen props$1.a))</text>
115 -</g>
116 -<!-- v6 -->
117 -<g id="node7" class="node">
118 -<title>v6</title>
119 -<polygon fill="none" stroke="black" points="1407.54,-375.4 991.86,-375.4 991.86,-339.4 1407.54,-339.4 1407.54,-375.4"/>
120 -<text text-anchor="middle" x="1199.7" y="-353.2" font-family="Times,serif" font-size="14.00">v6 (mutable compute$3 @ Call mutable compute$3(frozen props$1.b))</text>
121 -</g>
122 -<!-- v5&#45;&gt;v6 -->
123 -<g id="edge4" class="edge">
124 -<title>v5&#45;&gt;v6</title>
125 -<path fill="none" stroke="black" d="M1199.7,-412.21C1199.7,-404.19 1199.7,-394.45 1199.7,-385.47"/>
126 -<polygon fill="black" stroke="black" points="1203.2,-385.43 1199.7,-375.43 1196.2,-385.43 1203.2,-385.43"/>
127 -</g>
128 -<!-- v11 -->
129 -<g id="node12" class="node">
130 -<title>v11</title>
131 -<polygon fill="none" stroke="black" points="390.87,-213.6 8.53,-213.6 8.53,-177.6 390.87,-177.6 390.87,-213.6"/>
132 -<text text-anchor="middle" x="199.7" y="-191.4" font-family="Times,serif" font-size="14.00">v11 (frozen props$1.c @ If (frozen props$1.c) then:bb2 else:bb1)</text>
133 -</g>
134 -<!-- v7&#45;&gt;v11 -->
135 -<g id="edge8" class="edge">
136 -<title>v7&#45;&gt;v11</title>
137 -<path fill="none" stroke="black" d="M199.7,-266.25C199.7,-254.12 199.7,-237.62 199.7,-223.72"/>
138 -<polygon fill="black" stroke="black" points="203.2,-223.71 199.7,-213.71 196.2,-223.71 203.2,-223.71"/>
139 -</g>
140 -<!-- v8 -->
141 -<g id="node9" class="node">
142 -<title>v8</title>
143 -<polygon fill="none" stroke="black" points="1540.83,-302.4 1082.57,-302.4 1082.57,-266.4 1540.83,-266.4 1540.83,-302.4"/>
144 -<text text-anchor="middle" x="1311.7" y="-280.2" font-family="Times,serif" font-size="14.00">v8 (mutable b$4 @ mutable b$4 = Call mutable compute$3(frozen props$1.b))</text>
145 -</g>
146 -<!-- v9 -->
147 -<g id="node10" class="node">
148 -<title>v9</title>
149 -<polygon fill="none" stroke="black" points="1515.96,-213.6 1177.44,-213.6 1177.44,-177.6 1515.96,-177.6 1515.96,-213.6"/>
150 -<text text-anchor="middle" x="1346.7" y="-191.4" font-family="Times,serif" font-size="14.00">v9 (mutable b$4 @ Call mutable mutate$5(mutable b$4))</text>
151 -</g>
152 -<!-- v8&#45;&gt;v9 -->
153 -<g id="edge6" class="edge">
154 -<title>v8&#45;&gt;v9</title>
155 -<path fill="none" stroke="black" d="M1318.62,-266.25C1323.55,-254.01 1330.29,-237.29 1335.93,-223.31"/>
156 -<polygon fill="black" stroke="black" points="1339.31,-224.3 1339.8,-213.71 1332.81,-221.68 1339.31,-224.3"/>
157 -</g>
158 -<!-- v10 -->
159 -<g id="node11" class="node">
160 -<title>v10</title>
161 -<polygon fill="none" stroke="black" points="1365.85,-124.8 797.55,-124.8 797.55,-88.8 1365.85,-88.8 1365.85,-124.8"/>
162 -<text text-anchor="middle" x="1081.7" y="-102.6" font-family="Times,serif" font-size="14.00">v10 (readonly b$4 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
163 -</g>
164 -<!-- v8&#45;&gt;v10 -->
165 -<g id="edge7" class="edge">
166 -<title>v8&#45;&gt;v10</title>
167 -<path fill="none" stroke="black" d="M1264.36,-266.31C1235.01,-254.32 1197.54,-236.37 1168.7,-213.6 1139.74,-190.73 1113.92,-156.71 1098.08,-133.46"/>
168 -<polygon fill="black" stroke="black" points="1100.97,-131.5 1092.51,-125.13 1095.15,-135.39 1100.97,-131.5"/>
169 -</g>
170 -<!-- v9&#45;&gt;v9 -->
171 -<g id="edge12" class="edge">
172 -<title>v9&#45;&gt;v9</title>
173 -<path fill="none" stroke="black" d="M1516.19,-201.54C1527.33,-200.16 1534.08,-198.18 1534.08,-195.6 1534.08,-193.95 1531.31,-192.54 1526.39,-191.38"/>
174 -<polygon fill="black" stroke="black" points="1526.63,-187.87 1516.19,-189.66 1525.47,-194.77 1526.63,-187.87"/>
175 -</g>
176 -<!-- v9&#45;&gt;v10 -->
177 -<g id="edge13" class="edge">
178 -<title>v9&#45;&gt;v10</title>
179 -<path fill="none" stroke="black" d="M1294.66,-177.55C1251.18,-163.31 1189.09,-142.97 1143.16,-127.93"/>
180 -<polygon fill="black" stroke="black" points="1144.21,-124.59 1133.62,-124.81 1142.03,-131.25 1144.21,-124.59"/>
181 -</g>
182 -<!-- v10&#45;&gt;v14 -->
183 -<g id="edge16" class="edge">
184 -<title>v10&#45;&gt;v14</title>
185 -<path fill="none" stroke="black" d="M1029.19,-124.81C985.25,-139.04 922.46,-159.37 875.99,-174.43"/>
186 -<polygon fill="black" stroke="black" points="874.76,-171.14 866.33,-177.55 876.92,-177.8 874.76,-171.14"/>
187 -<text text-anchor="middle" x="993.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
188 -</g>
189 -<!-- v10&#45;&gt;v15 -->
190 -<g id="edge20" class="edge">
191 -<title>v10&#45;&gt;v15</title>
192 -<path fill="none" stroke="black" d="M1020.43,-88.75C968.81,-74.39 894.91,-53.83 840.71,-38.76"/>
193 -<polygon fill="black" stroke="black" points="841.4,-35.31 830.83,-36.01 839.52,-42.06 841.4,-35.31"/>
194 -<text text-anchor="middle" x="974.3" y="-58.2" font-family="Times,serif" font-size="14.00">capture</text>
195 -</g>
196 -<!-- v12 -->
197 -<g id="node13" class="node">
198 -<title>v12</title>
199 -<polygon fill="none" stroke="black" points="1801.77,-448.4 1425.63,-448.4 1425.63,-412.4 1801.77,-412.4 1801.77,-448.4"/>
200 -<text text-anchor="middle" x="1613.7" y="-426.2" font-family="Times,serif" font-size="14.00">v12 (mutable mutate$5 @ Call mutable mutate$5(mutable a$2))</text>
201 -</g>
202 -<!-- v13 -->
203 -<g id="node14" class="node">
204 -<title>v13</title>
205 -<polygon fill="none" stroke="black" points="1802.06,-375.4 1425.34,-375.4 1425.34,-339.4 1802.06,-339.4 1802.06,-375.4"/>
206 -<text text-anchor="middle" x="1613.7" y="-353.2" font-family="Times,serif" font-size="14.00">v13 (mutable mutate$5 @ Call mutable mutate$5(mutable b$4))</text>
207 -</g>
208 -<!-- v12&#45;&gt;v13 -->
209 -<g id="edge9" class="edge">
210 -<title>v12&#45;&gt;v13</title>
211 -<path fill="none" stroke="black" d="M1613.7,-412.21C1613.7,-404.19 1613.7,-394.45 1613.7,-385.47"/>
212 -<polygon fill="black" stroke="black" points="1617.2,-385.43 1613.7,-375.43 1610.2,-385.43 1617.2,-385.43"/>
213 -</g>
214 -<!-- v14&#45;&gt;v4 -->
215 -<g id="edge17" class="edge">
216 -<title>v14&#45;&gt;v4</title>
217 -<path fill="none" stroke="black" d="M808.63,-214C805,-224.6 799.39,-238.05 791.7,-248.4 788.81,-252.29 785.4,-256.02 781.8,-259.5"/>
218 -<polygon fill="black" stroke="black" points="779.35,-256.99 774.23,-266.27 784.02,-262.21 779.35,-256.99"/>
219 -<text text-anchor="middle" x="822.3" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
220 -</g>
221 -<!-- v14&#45;&gt;v10 -->
222 -<g id="edge18" class="edge">
223 -<title>v14&#45;&gt;v10</title>
224 -<path fill="none" stroke="black" d="M830.23,-177.42C842.46,-165.78 860.11,-151.07 878.51,-142.8 892.1,-136.69 906.64,-131.64 921.47,-127.47"/>
225 -<polygon fill="black" stroke="black" points="922.49,-130.82 931.25,-124.86 920.69,-124.06 922.49,-130.82"/>
226 -<text text-anchor="middle" x="899.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
227 -</g>
228 -<!-- v14&#45;&gt;v15 -->
229 -<g id="edge14" class="edge">
230 -<title>v14&#45;&gt;v15</title>
231 -<path fill="none" stroke="black" d="M806.62,-177.36C801.1,-163.38 793.58,-143.08 788.7,-124.8 781.66,-98.42 776.46,-67.64 773.3,-46.11"/>
232 -<polygon fill="black" stroke="black" points="776.74,-45.46 771.87,-36.05 769.81,-46.44 776.74,-45.46"/>
233 -</g>
234 -<!-- v16 -->
235 -<g id="node17" class="node">
236 -<title>v16</title>
237 -<polygon fill="none" stroke="black" points="2389.4,-448.4 1820,-448.4 1820,-412.4 2389.4,-412.4 2389.4,-448.4"/>
238 -<text text-anchor="middle" x="2104.7" y="-426.2" font-family="Times,serif" font-size="14.00">v16 (frozen Foo$6 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
239 -</g>
240 -</g>
241 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/independent.svg deleted
-13
@@ -1,13 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="8pt" height="8pt"
8 - viewBox="0.00 0.00 8.00 8.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-4 4,-4 4,4 -4,4"/>
12 -</g>
13 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/interdependent-across-if.svg deleted
-243
@@ -1,243 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="3121pt" height="472pt"
8 - viewBox="0.00 0.00 3120.55 472.20" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 468.2)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-468.2 3116.55,-468.2 3116.55,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="303.12,-464.2 96.28,-464.2 96.28,-428.2 303.12,-428.2 303.12,-464.2"/>
16 -<text text-anchor="middle" x="199.7" y="-442" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="398.53,-391.2 0.87,-391.2 0.87,-355.2 398.53,-355.2 398.53,-391.2"/>
22 -<text text-anchor="middle" x="199.7" y="-369" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.a @ Call mutable compute$3(frozen props$1.a))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M199.7,-428.01C199.7,-419.99 199.7,-410.25 199.7,-401.27"/>
28 -<polygon fill="black" stroke="black" points="203.2,-401.23 199.7,-391.23 196.2,-401.23 203.2,-401.23"/>
29 -</g>
30 -<!-- v7 -->
31 -<g id="node8" class="node">
32 -<title>v7</title>
33 -<polygon fill="none" stroke="black" points="399.6,-302.4 -0.2,-302.4 -0.2,-266.4 399.6,-266.4 399.6,-302.4"/>
34 -<text text-anchor="middle" x="199.7" y="-280.2" font-family="Times,serif" font-size="14.00">v7 (frozen props$1.b @ Call mutable compute$3(frozen props$1.b))</text>
35 -</g>
36 -<!-- v1&#45;&gt;v7 -->
37 -<g id="edge5" class="edge">
38 -<title>v1&#45;&gt;v7</title>
39 -<path fill="none" stroke="black" d="M199.7,-355.05C199.7,-342.92 199.7,-326.42 199.7,-312.52"/>
40 -<polygon fill="black" stroke="black" points="203.2,-312.51 199.7,-302.51 196.2,-312.51 203.2,-312.51"/>
41 -</g>
42 -<!-- v2 -->
43 -<g id="node3" class="node">
44 -<title>v2</title>
45 -<polygon fill="none" stroke="black" points="981.97,-464.2 525.43,-464.2 525.43,-428.2 981.97,-428.2 981.97,-464.2"/>
46 -<text text-anchor="middle" x="753.7" y="-442" font-family="Times,serif" font-size="14.00">v2 (mutable a$2 @ mutable a$2 = Call mutable compute$3(frozen props$1.a))</text>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="1140.05,-391.2 745.35,-391.2 745.35,-355.2 1140.05,-355.2 1140.05,-391.2"/>
52 -<text text-anchor="middle" x="942.7" y="-369" font-family="Times,serif" font-size="14.00">v3 (mutable a$2 @ Call mutable foo$5(mutable a$2, mutable b$4))</text>
53 -</g>
54 -<!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
56 -<title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M798.97,-428.19C825.54,-418.21 859.32,-405.52 887.45,-394.96"/>
58 -<polygon fill="black" stroke="black" points="889.01,-398.11 897.14,-391.31 886.55,-391.55 889.01,-398.11"/>
59 -</g>
60 -<!-- v4 -->
61 -<g id="node5" class="node">
62 -<title>v4</title>
63 -<polygon fill="none" stroke="black" points="978.06,-302.4 417.34,-302.4 417.34,-266.4 978.06,-266.4 978.06,-302.4"/>
64 -<text text-anchor="middle" x="697.7" y="-280.2" font-family="Times,serif" font-size="14.00">v4 (readonly a$2 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
65 -</g>
66 -<!-- v2&#45;&gt;v4 -->
67 -<g id="edge3" class="edge">
68 -<title>v2&#45;&gt;v4</title>
69 -<path fill="none" stroke="black" d="M747.71,-428.1C737.99,-400.37 718.72,-345.39 707.15,-312.35"/>
70 -<polygon fill="black" stroke="black" points="710.43,-311.14 703.82,-302.86 703.82,-313.46 710.43,-311.14"/>
71 -</g>
72 -<!-- v3&#45;&gt;v3 -->
73 -<g id="edge9" class="edge">
74 -<title>v3&#45;&gt;v3</title>
75 -<path fill="none" stroke="black" d="M1140.14,-377.82C1151.25,-376.7 1157.87,-375.16 1157.87,-373.2 1157.87,-371.94 1155.16,-370.86 1150.28,-369.95"/>
76 -<polygon fill="black" stroke="black" points="1150.52,-366.45 1140.14,-368.58 1149.59,-373.39 1150.52,-366.45"/>
77 -</g>
78 -<!-- v3&#45;&gt;v4 -->
79 -<g id="edge10" class="edge">
80 -<title>v3&#45;&gt;v4</title>
81 -<path fill="none" stroke="black" d="M894.59,-355.15C854.64,-341 797.7,-320.83 755.33,-305.82"/>
82 -<polygon fill="black" stroke="black" points="756.3,-302.45 745.7,-302.41 753.96,-309.04 756.3,-302.45"/>
83 -</g>
84 -<!-- v9 -->
85 -<g id="node10" class="node">
86 -<title>v9</title>
87 -<polygon fill="none" stroke="black" points="1391.33,-302.4 996.07,-302.4 996.07,-266.4 1391.33,-266.4 1391.33,-302.4"/>
88 -<text text-anchor="middle" x="1193.7" y="-280.2" font-family="Times,serif" font-size="14.00">v9 (mutable b$4 @ Call mutable foo$5(mutable a$2, mutable b$4))</text>
89 -</g>
90 -<!-- v3&#45;&gt;v9 -->
91 -<g id="edge14" class="edge">
92 -<title>v3&#45;&gt;v9</title>
93 -<path fill="none" stroke="black" d="M1057.39,-355.2C1076.9,-350.52 1096.67,-344.62 1114.7,-337.2 1132.16,-330.01 1149.89,-318.82 1164.12,-308.67"/>
94 -<polygon fill="black" stroke="black" points="1166.49,-311.27 1172.49,-302.53 1162.35,-305.62 1166.49,-311.27"/>
95 -<text text-anchor="middle" x="1165.3" y="-324.6" font-family="Times,serif" font-size="14.00">capture</text>
96 -</g>
97 -<!-- v13 -->
98 -<g id="node14" class="node">
99 -<title>v13</title>
100 -<polygon fill="none" stroke="black" points="1165.77,-213.6 549.63,-213.6 549.63,-177.6 1165.77,-177.6 1165.77,-213.6"/>
101 -<text text-anchor="middle" x="857.7" y="-191.4" font-family="Times,serif" font-size="14.00">v13 (frozen $7 @ frozen $7 = JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
102 -</g>
103 -<!-- v4&#45;&gt;v13 -->
104 -<g id="edge16" class="edge">
105 -<title>v4&#45;&gt;v13</title>
106 -<path fill="none" stroke="black" d="M718.8,-266.35C732.89,-255.5 752.13,-241.64 770.51,-231.6 779.73,-226.56 789.83,-221.84 799.78,-217.6"/>
107 -<polygon fill="black" stroke="black" points="801.34,-220.74 809.25,-213.69 798.67,-214.28 801.34,-220.74"/>
108 -<text text-anchor="middle" x="791.3" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
109 -</g>
110 -<!-- v14 -->
111 -<g id="node15" class="node">
112 -<title>v14</title>
113 -<polygon fill="none" stroke="black" points="922.52,-36 704.88,-36 704.88,0 922.52,0 922.52,-36"/>
114 -<text text-anchor="middle" x="813.7" y="-13.8" font-family="Times,serif" font-size="14.00">v14 (frozen $7 @ Return frozen $7)</text>
115 -</g>
116 -<!-- v4&#45;&gt;v14 -->
117 -<g id="edge20" class="edge">
118 -<title>v4&#45;&gt;v14</title>
119 -<path fill="none" stroke="black" d="M627.9,-266.4C575.21,-249.79 515.9,-220.69 540.7,-177.6 583.03,-104.06 673.99,-61.46 739.29,-39.28"/>
120 -<polygon fill="black" stroke="black" points="740.74,-42.49 749.13,-36.02 738.54,-35.84 740.74,-42.49"/>
121 -<text text-anchor="middle" x="586.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
122 -</g>
123 -<!-- v5 -->
124 -<g id="node6" class="node">
125 -<title>v5</title>
126 -<polygon fill="none" stroke="black" points="2092.76,-464.2 1678.64,-464.2 1678.64,-428.2 2092.76,-428.2 2092.76,-464.2"/>
127 -<text text-anchor="middle" x="1885.7" y="-442" font-family="Times,serif" font-size="14.00">v5 (mutable compute$3 @ Call mutable compute$3(frozen props$1.a))</text>
128 -</g>
129 -<!-- v6 -->
130 -<g id="node7" class="node">
131 -<title>v6</title>
132 -<polygon fill="none" stroke="black" points="2093.54,-391.2 1677.86,-391.2 1677.86,-355.2 2093.54,-355.2 2093.54,-391.2"/>
133 -<text text-anchor="middle" x="1885.7" y="-369" font-family="Times,serif" font-size="14.00">v6 (mutable compute$3 @ Call mutable compute$3(frozen props$1.b))</text>
134 -</g>
135 -<!-- v5&#45;&gt;v6 -->
136 -<g id="edge4" class="edge">
137 -<title>v5&#45;&gt;v6</title>
138 -<path fill="none" stroke="black" d="M1885.7,-428.01C1885.7,-419.99 1885.7,-410.25 1885.7,-401.27"/>
139 -<polygon fill="black" stroke="black" points="1889.2,-401.23 1885.7,-391.23 1882.2,-401.23 1889.2,-401.23"/>
140 -</g>
141 -<!-- v11 -->
142 -<g id="node12" class="node">
143 -<title>v11</title>
144 -<polygon fill="none" stroke="black" points="390.87,-213.6 8.53,-213.6 8.53,-177.6 390.87,-177.6 390.87,-213.6"/>
145 -<text text-anchor="middle" x="199.7" y="-191.4" font-family="Times,serif" font-size="14.00">v11 (frozen props$1.c @ If (frozen props$1.c) then:bb2 else:bb1)</text>
146 -</g>
147 -<!-- v7&#45;&gt;v11 -->
148 -<g id="edge8" class="edge">
149 -<title>v7&#45;&gt;v11</title>
150 -<path fill="none" stroke="black" d="M199.7,-266.25C199.7,-254.12 199.7,-237.62 199.7,-223.72"/>
151 -<polygon fill="black" stroke="black" points="203.2,-223.71 199.7,-213.71 196.2,-223.71 203.2,-223.71"/>
152 -</g>
153 -<!-- v8 -->
154 -<g id="node9" class="node">
155 -<title>v8</title>
156 -<polygon fill="none" stroke="black" points="1659.83,-391.2 1201.57,-391.2 1201.57,-355.2 1659.83,-355.2 1659.83,-391.2"/>
157 -<text text-anchor="middle" x="1430.7" y="-369" font-family="Times,serif" font-size="14.00">v8 (mutable b$4 @ mutable b$4 = Call mutable compute$3(frozen props$1.b))</text>
158 -</g>
159 -<!-- v8&#45;&gt;v9 -->
160 -<g id="edge6" class="edge">
161 -<title>v8&#45;&gt;v9</title>
162 -<path fill="none" stroke="black" d="M1384.16,-355.15C1345.6,-341.03 1290.67,-320.91 1249.7,-305.91"/>
163 -<polygon fill="black" stroke="black" points="1250.73,-302.56 1240.13,-302.41 1248.32,-309.13 1250.73,-302.56"/>
164 -</g>
165 -<!-- v10 -->
166 -<g id="node11" class="node">
167 -<title>v10</title>
168 -<polygon fill="none" stroke="black" points="1409.85,-124.8 841.55,-124.8 841.55,-88.8 1409.85,-88.8 1409.85,-124.8"/>
169 -<text text-anchor="middle" x="1125.7" y="-102.6" font-family="Times,serif" font-size="14.00">v10 (readonly b$4 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
170 -</g>
171 -<!-- v8&#45;&gt;v10 -->
172 -<g id="edge7" class="edge">
173 -<title>v8&#45;&gt;v10</title>
174 -<path fill="none" stroke="black" d="M1433.29,-355.18C1435.76,-332.81 1436.8,-293.21 1418.7,-266.4 1368.73,-192.38 1272.45,-149.95 1203.9,-127.93"/>
175 -<polygon fill="black" stroke="black" points="1204.58,-124.48 1194,-124.83 1202.49,-131.16 1204.58,-124.48"/>
176 -</g>
177 -<!-- v9&#45;&gt;v3 -->
178 -<g id="edge11" class="edge">
179 -<title>v9&#45;&gt;v3</title>
180 -<path fill="none" stroke="black" d="M1130.97,-302.46C1112.36,-307.85 1092.01,-314.06 1073.51,-320.4 1046.38,-329.7 1016.62,-341.36 992.35,-351.27"/>
181 -<polygon fill="black" stroke="black" points="990.91,-348.08 982.99,-355.11 993.57,-354.55 990.91,-348.08"/>
182 -<text text-anchor="middle" x="1094.3" y="-324.6" font-family="Times,serif" font-size="14.00">capture</text>
183 -</g>
184 -<!-- v9&#45;&gt;v9 -->
185 -<g id="edge12" class="edge">
186 -<title>v9&#45;&gt;v9</title>
187 -<path fill="none" stroke="black" d="M1391.51,-290.02C1402.63,-288.66 1409.27,-286.78 1409.27,-284.4 1409.27,-282.87 1406.55,-281.55 1401.66,-280.45"/>
188 -<polygon fill="black" stroke="black" points="1401.94,-276.95 1391.51,-278.78 1400.81,-283.85 1401.94,-276.95"/>
189 -</g>
190 -<!-- v9&#45;&gt;v10 -->
191 -<g id="edge13" class="edge">
192 -<title>v9&#45;&gt;v10</title>
193 -<path fill="none" stroke="black" d="M1192.89,-266.27C1191.38,-244.8 1187.05,-207.23 1174.7,-177.6 1168.04,-161.61 1157.23,-145.66 1147.46,-133.05"/>
194 -<polygon fill="black" stroke="black" points="1149.91,-130.5 1140.92,-124.89 1144.44,-134.88 1149.91,-130.5"/>
195 -</g>
196 -<!-- v10&#45;&gt;v13 -->
197 -<g id="edge17" class="edge">
198 -<title>v10&#45;&gt;v13</title>
199 -<path fill="none" stroke="black" d="M1066.84,-124.87C1048.14,-130.43 1027.41,-136.73 1008.51,-142.8 977.62,-152.71 943.41,-164.4 915.39,-174.17"/>
200 -<polygon fill="black" stroke="black" points="914.04,-170.93 905.76,-177.54 916.35,-177.54 914.04,-170.93"/>
201 -<text text-anchor="middle" x="1029.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
202 -</g>
203 -<!-- v10&#45;&gt;v14 -->
204 -<g id="edge21" class="edge">
205 -<title>v10&#45;&gt;v14</title>
206 -<path fill="none" stroke="black" d="M1064.43,-88.75C1012.81,-74.39 938.91,-53.83 884.71,-38.76"/>
207 -<polygon fill="black" stroke="black" points="885.4,-35.31 874.83,-36.01 883.52,-42.06 885.4,-35.31"/>
208 -<text text-anchor="middle" x="1018.3" y="-58.2" font-family="Times,serif" font-size="14.00">capture</text>
209 -</g>
210 -<!-- v12 -->
211 -<g id="node13" class="node">
212 -<title>v12</title>
213 -<polygon fill="none" stroke="black" points="2524.5,-464.2 2110.9,-464.2 2110.9,-428.2 2524.5,-428.2 2524.5,-464.2"/>
214 -<text text-anchor="middle" x="2317.7" y="-442" font-family="Times,serif" font-size="14.00">v12 (mutable foo$5 @ Call mutable foo$5(mutable a$2, mutable b$4))</text>
215 -</g>
216 -<!-- v13&#45;&gt;v4 -->
217 -<g id="edge18" class="edge">
218 -<title>v13&#45;&gt;v4</title>
219 -<path fill="none" stroke="black" d="M846.29,-213.75C837.94,-225.07 825.66,-239.43 811.7,-248.4 802.99,-254 793.33,-258.75 783.43,-262.76"/>
220 -<polygon fill="black" stroke="black" points="781.98,-259.56 773.88,-266.39 784.47,-266.11 781.98,-259.56"/>
221 -<text text-anchor="middle" x="851.3" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
222 -</g>
223 -<!-- v13&#45;&gt;v10 -->
224 -<g id="edge19" class="edge">
225 -<title>v13&#45;&gt;v10</title>
226 -<path fill="none" stroke="black" d="M991.97,-177.56C1011.72,-172.93 1031.52,-167.06 1049.7,-159.6 1066.83,-152.57 1084.03,-141.29 1097.73,-131.04"/>
227 -<polygon fill="black" stroke="black" points="1099.98,-133.72 1105.77,-124.84 1095.71,-128.17 1099.98,-133.72"/>
228 -<text text-anchor="middle" x="1102.3" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
229 -</g>
230 -<!-- v13&#45;&gt;v14 -->
231 -<g id="edge15" class="edge">
232 -<title>v13&#45;&gt;v14</title>
233 -<path fill="none" stroke="black" d="M850.62,-177.36C845.1,-163.38 837.58,-143.08 832.7,-124.8 825.66,-98.42 820.46,-67.64 817.3,-46.11"/>
234 -<polygon fill="black" stroke="black" points="820.74,-45.46 815.87,-36.05 813.81,-46.44 820.74,-45.46"/>
235 -</g>
236 -<!-- v15 -->
237 -<g id="node16" class="node">
238 -<title>v15</title>
239 -<polygon fill="none" stroke="black" points="3112.4,-464.2 2543,-464.2 2543,-428.2 3112.4,-428.2 3112.4,-464.2"/>
240 -<text text-anchor="middle" x="2827.7" y="-442" font-family="Times,serif" font-size="14.00">v15 (frozen Foo$6 @ JSX &lt;frozen Foo$6 a={readonly a$2} b={readonly b$4} &gt;&lt;/frozen Foo$6&gt;)</text>
241 -</g>
242 -</g>
243 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/interdependent.svg deleted
-13
@@ -1,13 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="8pt" height="8pt"
8 - viewBox="0.00 0.00 8.00 8.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 4)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-4 4,-4 4,4 -4,4"/>
12 -</g>
13 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/property-assignment.svg deleted
-255
@@ -1,255 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="1847pt" height="707pt"
8 - viewBox="0.00 0.00 1847.27 707.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 703)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-703 1843.27,-703 1843.27,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="392.28,-699 185.44,-699 185.44,-663 392.28,-663 392.28,-699"/>
16 -<text text-anchor="middle" x="288.86" y="-676.8" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="495,-626 82.72,-626 82.72,-590 495,-590 495,-626"/>
22 -<text text-anchor="middle" x="288.86" y="-603.8" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.p0 @ Call mutable x$2.y.push(frozen props$1.p0))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M288.86,-662.81C288.86,-654.79 288.86,-645.05 288.86,-636.07"/>
28 -<polygon fill="black" stroke="black" points="292.36,-636.03 288.86,-626.03 285.36,-636.03 292.36,-636.03"/>
29 -</g>
30 -<!-- v2 -->
31 -<g id="node3" class="node">
32 -<title>v2</title>
33 -<polygon fill="none" stroke="black" points="1085.92,-699 807.8,-699 807.8,-663 1085.92,-663 1085.92,-699"/>
34 -<text text-anchor="middle" x="946.86" y="-676.8" font-family="Times,serif" font-size="14.00">v2 (mutable x$2 @ mutable x$2 = Object { &#160;})</text>
35 -</g>
36 -<!-- v3 -->
37 -<g id="node4" class="node">
38 -<title>v3</title>
39 -<polygon fill="none" stroke="black" points="1100.76,-626 792.96,-626 792.96,-590 1100.76,-590 1100.76,-626"/>
40 -<text text-anchor="middle" x="946.86" y="-603.8" font-family="Times,serif" font-size="14.00">v3 (mutable x$2.y @ mutable x$2.y = mutable y$3)</text>
41 -</g>
42 -<!-- v2&#45;&gt;v3 -->
43 -<g id="edge2" class="edge">
44 -<title>v2&#45;&gt;v3</title>
45 -<path fill="none" stroke="black" d="M946.86,-662.81C946.86,-654.79 946.86,-645.05 946.86,-636.07"/>
46 -<polygon fill="black" stroke="black" points="950.36,-636.03 946.86,-626.03 943.36,-636.03 950.36,-636.03"/>
47 -</g>
48 -<!-- v5 -->
49 -<g id="node6" class="node">
50 -<title>v5</title>
51 -<polygon fill="none" stroke="black" points="910.77,-537.2 708.95,-537.2 708.95,-501.2 910.77,-501.2 910.77,-537.2"/>
52 -<text text-anchor="middle" x="809.86" y="-515" font-family="Times,serif" font-size="14.00">v5 (mutable y$3 @ mutable y$3)</text>
53 -</g>
54 -<!-- v3&#45;&gt;v5 -->
55 -<g id="edge7" class="edge">
56 -<title>v3&#45;&gt;v5</title>
57 -<path fill="none" stroke="black" d="M846.19,-589.85C837.08,-585.2 828.67,-579.35 821.66,-572 815.45,-565.47 812.25,-556.38 810.69,-547.63"/>
58 -<polygon fill="black" stroke="black" points="814.16,-547.21 809.51,-537.69 807.21,-548.03 814.16,-547.21"/>
59 -<text text-anchor="middle" x="842.45" y="-559.4" font-family="Times,serif" font-size="14.00">capture</text>
60 -</g>
61 -<!-- v6 -->
62 -<g id="node7" class="node">
63 -<title>v6</title>
64 -<polygon fill="none" stroke="black" points="1451.18,-375.4 1030.53,-375.4 1030.53,-339.4 1451.18,-339.4 1451.18,-375.4"/>
65 -<text text-anchor="middle" x="1240.86" y="-353.2" font-family="Times,serif" font-size="14.00">v6 (mutable x$2.y.push @ Call mutable x$2.y.push(frozen props$1.p0))</text>
66 -</g>
67 -<!-- v3&#45;&gt;v6 -->
68 -<g id="edge4" class="edge">
69 -<title>v3&#45;&gt;v6</title>
70 -<path fill="none" stroke="black" d="M967.07,-589.91C1018.36,-546.54 1153.72,-432.08 1212.71,-382.2"/>
71 -<polygon fill="black" stroke="black" points="1215.13,-384.74 1220.51,-375.61 1210.61,-379.39 1215.13,-384.74"/>
72 -</g>
73 -<!-- v7 -->
74 -<g id="node8" class="node">
75 -<title>v7</title>
76 -<polygon fill="none" stroke="black" points="1086.4,-464.2 533.31,-464.2 533.31,-428.2 1086.4,-428.2 1086.4,-464.2"/>
77 -<text text-anchor="middle" x="809.86" y="-442" font-family="Times,serif" font-size="14.00">v7 (mutable y$3 @ JSX &lt;frozen Component$0 data={mutable y$3} &gt;&lt;/frozen Component$0&gt;)</text>
78 -</g>
79 -<!-- v3&#45;&gt;v7 -->
80 -<g id="edge11" class="edge">
81 -<title>v3&#45;&gt;v7</title>
82 -<path fill="none" stroke="black" d="M946.74,-589.66C945.71,-566.94 940.77,-526.95 919.86,-501.2 908.53,-487.26 892.71,-476.64 876.6,-468.67"/>
83 -<polygon fill="black" stroke="black" points="877.65,-465.3 867.1,-464.27 874.71,-471.65 877.65,-465.3"/>
84 -<text text-anchor="middle" x="958.45" y="-515" font-family="Times,serif" font-size="14.00">capture</text>
85 -</g>
86 -<!-- v4 -->
87 -<g id="node5" class="node">
88 -<title>v4</title>
89 -<polygon fill="none" stroke="black" points="775.14,-626 512.58,-626 512.58,-590 775.14,-590 775.14,-626"/>
90 -<text text-anchor="middle" x="643.86" y="-603.8" font-family="Times,serif" font-size="14.00">v4 (mutable y$3 @ mutable y$3 = Array [])</text>
91 -</g>
92 -<!-- v4&#45;&gt;v5 -->
93 -<g id="edge3" class="edge">
94 -<title>v4&#45;&gt;v5</title>
95 -<path fill="none" stroke="black" d="M676.65,-589.85C702.91,-576.12 739.91,-556.77 768.26,-541.95"/>
96 -<polygon fill="black" stroke="black" points="769.89,-545.05 777.13,-537.31 766.65,-538.85 769.89,-545.05"/>
97 -</g>
98 -<!-- v5&#45;&gt;v3 -->
99 -<g id="edge5" class="edge">
100 -<title>v5&#45;&gt;v3</title>
101 -<path fill="none" stroke="black" d="M836.87,-537.31C858.15,-550.8 888.01,-569.71 911.24,-584.43"/>
102 -<polygon fill="black" stroke="black" points="909.47,-587.46 919.79,-589.85 913.22,-581.54 909.47,-587.46"/>
103 -<text text-anchor="middle" x="911.45" y="-559.4" font-family="Times,serif" font-size="14.00">capture</text>
104 -</g>
105 -<!-- v5&#45;&gt;v7 -->
106 -<g id="edge6" class="edge">
107 -<title>v5&#45;&gt;v7</title>
108 -<path fill="none" stroke="black" d="M809.86,-501.01C809.86,-492.99 809.86,-483.25 809.86,-474.27"/>
109 -<polygon fill="black" stroke="black" points="813.36,-474.23 809.86,-464.23 806.36,-474.23 813.36,-474.23"/>
110 -</g>
111 -<!-- v12 -->
112 -<g id="node13" class="node">
113 -<title>v12</title>
114 -<polygon fill="none" stroke="black" points="1381.58,-302.4 706.14,-302.4 706.14,-266.4 1381.58,-266.4 1381.58,-302.4"/>
115 -<text text-anchor="middle" x="1043.86" y="-280.2" font-family="Times,serif" font-size="14.00">v12 (readonly x$2 @ JSX &lt;frozen Component$0 data={readonly x$2} &gt;{readonly child$4}&lt;/frozen Component$0&gt;)</text>
116 -</g>
117 -<!-- v6&#45;&gt;v12 -->
118 -<g id="edge13" class="edge">
119 -<title>v6&#45;&gt;v12</title>
120 -<path fill="none" stroke="black" d="M1193.67,-339.39C1165.85,-329.37 1130.46,-316.61 1101.06,-306.02"/>
121 -<polygon fill="black" stroke="black" points="1101.94,-302.61 1091.34,-302.51 1099.56,-309.2 1101.94,-302.61"/>
122 -</g>
123 -<!-- v7&#45;&gt;v6 -->
124 -<g id="edge14" class="edge">
125 -<title>v7&#45;&gt;v6</title>
126 -<path fill="none" stroke="black" d="M895.31,-428.15C923.8,-422.45 955.7,-416.07 984.86,-410.2 1038.61,-399.39 1098.7,-387.23 1147.15,-377.41"/>
127 -<polygon fill="black" stroke="black" points="1147.88,-380.84 1156.99,-375.42 1146.49,-373.98 1147.88,-380.84"/>
128 -<text text-anchor="middle" x="1083.45" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
129 -</g>
130 -<!-- v8 -->
131 -<g id="node9" class="node">
132 -<title>v8</title>
133 -<polygon fill="none" stroke="black" points="934.38,-375.4 255.33,-375.4 255.33,-339.4 934.38,-339.4 934.38,-375.4"/>
134 -<text text-anchor="middle" x="594.86" y="-353.2" font-family="Times,serif" font-size="14.00">v8 (mutable child$4 @ mutable child$4 = JSX &lt;frozen Component$0 data={mutable y$3} &gt;&lt;/frozen Component$0&gt;)</text>
135 -</g>
136 -<!-- v7&#45;&gt;v8 -->
137 -<g id="edge9" class="edge">
138 -<title>v7&#45;&gt;v8</title>
139 -<path fill="none" stroke="black" d="M783.65,-428.02C765.92,-416.97 741.67,-402.94 718.86,-393.4 705.44,-387.79 690.85,-382.77 676.54,-378.4"/>
140 -<polygon fill="black" stroke="black" points="677.27,-374.97 666.69,-375.49 675.28,-381.68 677.27,-374.97"/>
141 -<text text-anchor="middle" x="773.45" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
142 -</g>
143 -<!-- v9 -->
144 -<g id="node10" class="node">
145 -<title>v9</title>
146 -<polygon fill="none" stroke="black" points="689.57,-124.8 0.14,-124.8 0.14,-88.8 689.57,-88.8 689.57,-124.8"/>
147 -<text text-anchor="middle" x="344.86" y="-102.6" font-family="Times,serif" font-size="14.00">v9 (readonly child$4 @ JSX &lt;frozen Component$0 data={readonly x$2} &gt;{readonly child$4}&lt;/frozen Component$0&gt;)</text>
148 -</g>
149 -<!-- v7&#45;&gt;v9 -->
150 -<g id="edge20" class="edge">
151 -<title>v7&#45;&gt;v9</title>
152 -<path fill="none" stroke="black" d="M538.41,-428.17C386.29,-414.81 226.86,-392.65 226.86,-358.4 226.86,-358.4 226.86,-358.4 226.86,-194.6 226.86,-163.98 252.95,-142.97 280.6,-129.29"/>
153 -<polygon fill="black" stroke="black" points="282.4,-132.31 290,-124.93 279.46,-125.96 282.4,-132.31"/>
154 -<text text-anchor="middle" x="247.45" y="-280.2" font-family="Times,serif" font-size="14.00">capture</text>
155 -</g>
156 -<!-- v7&#45;&gt;v12 -->
157 -<g id="edge18" class="edge">
158 -<title>v7&#45;&gt;v12</title>
159 -<path fill="none" stroke="black" d="M849.74,-428.2C877.37,-415.54 914.34,-396.8 943.86,-375.4 962.38,-361.97 963.78,-354.84 980.66,-339.4 991.81,-329.21 1004.39,-318.33 1015.39,-309.03"/>
160 -<polygon fill="black" stroke="black" points="1017.67,-311.68 1023.06,-302.57 1013.16,-306.33 1017.67,-311.68"/>
161 -<text text-anchor="middle" x="1001.45" y="-353.2" font-family="Times,serif" font-size="14.00">capture</text>
162 -</g>
163 -<!-- v8&#45;&gt;v7 -->
164 -<g id="edge12" class="edge">
165 -<title>v8&#45;&gt;v7</title>
166 -<path fill="none" stroke="black" d="M616.48,-375.44C631.72,-386.72 653,-401.06 673.66,-410.2 686.91,-416.06 701.32,-421.08 715.66,-425.34"/>
167 -<polygon fill="black" stroke="black" points="714.98,-428.79 725.56,-428.17 716.9,-422.06 714.98,-428.79"/>
168 -<text text-anchor="middle" x="694.45" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
169 -</g>
170 -<!-- v8&#45;&gt;v9 -->
171 -<g id="edge8" class="edge">
172 -<title>v8&#45;&gt;v9</title>
173 -<path fill="none" stroke="black" d="M577.67,-339.31C534.23,-296.11 419.9,-182.42 369.41,-132.22"/>
174 -<polygon fill="black" stroke="black" points="371.72,-129.58 362.16,-125.01 366.78,-134.54 371.72,-129.58"/>
175 -</g>
176 -<!-- v13 -->
177 -<g id="node14" class="node">
178 -<title>v13</title>
179 -<polygon fill="none" stroke="black" points="1469.5,-213.6 746.22,-213.6 746.22,-177.6 1469.5,-177.6 1469.5,-213.6"/>
180 -<text text-anchor="middle" x="1107.86" y="-191.4" font-family="Times,serif" font-size="14.00">v13 (frozen $5 @ frozen $5 = JSX &lt;frozen Component$0 data={readonly x$2} &gt;{readonly child$4}&lt;/frozen Component$0&gt;)</text>
181 -</g>
182 -<!-- v9&#45;&gt;v13 -->
183 -<g id="edge17" class="edge">
184 -<title>v9&#45;&gt;v13</title>
185 -<path fill="none" stroke="black" d="M580.57,-124.82C640.13,-129.87 703.91,-135.91 762.86,-142.8 840.96,-151.92 928.59,-165.12 995.98,-175.9"/>
186 -<polygon fill="black" stroke="black" points="995.77,-179.42 1006.19,-177.55 996.88,-172.5 995.77,-179.42"/>
187 -<text text-anchor="middle" x="907.45" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
188 -</g>
189 -<!-- v14 -->
190 -<g id="node15" class="node">
191 -<title>v14</title>
192 -<polygon fill="none" stroke="black" points="826.68,-36 609.03,-36 609.03,0 826.68,0 826.68,-36"/>
193 -<text text-anchor="middle" x="717.86" y="-13.8" font-family="Times,serif" font-size="14.00">v14 (frozen $5 @ Return frozen $5)</text>
194 -</g>
195 -<!-- v9&#45;&gt;v14 -->
196 -<g id="edge23" class="edge">
197 -<title>v9&#45;&gt;v14</title>
198 -<path fill="none" stroke="black" d="M418.11,-88.75C480.46,-74.24 570.01,-53.41 634.97,-38.29"/>
199 -<polygon fill="black" stroke="black" points="635.83,-41.68 644.78,-36.01 634.24,-34.86 635.83,-41.68"/>
200 -<text text-anchor="middle" x="585.45" y="-58.2" font-family="Times,serif" font-size="14.00">capture</text>
201 -</g>
202 -<!-- v10 -->
203 -<g id="node11" class="node">
204 -<title>v10</title>
205 -<polygon fill="none" stroke="black" points="1783.39,-699 1174.33,-699 1174.33,-663 1783.39,-663 1783.39,-699"/>
206 -<text text-anchor="middle" x="1478.86" y="-676.8" font-family="Times,serif" font-size="14.00">v10 (frozen Component$0 @ JSX &lt;frozen Component$0 data={mutable y$3} &gt;&lt;/frozen Component$0&gt;)</text>
207 -</g>
208 -<!-- v11 -->
209 -<g id="node12" class="node">
210 -<title>v11</title>
211 -<polygon fill="none" stroke="black" points="1839.18,-626 1118.53,-626 1118.53,-590 1839.18,-590 1839.18,-626"/>
212 -<text text-anchor="middle" x="1478.86" y="-603.8" font-family="Times,serif" font-size="14.00">v11 (frozen Component$0 @ JSX &lt;frozen Component$0 data={readonly x$2} &gt;{readonly child$4}&lt;/frozen Component$0&gt;)</text>
213 -</g>
214 -<!-- v10&#45;&gt;v11 -->
215 -<g id="edge10" class="edge">
216 -<title>v10&#45;&gt;v11</title>
217 -<path fill="none" stroke="black" d="M1478.86,-662.81C1478.86,-654.79 1478.86,-645.05 1478.86,-636.07"/>
218 -<polygon fill="black" stroke="black" points="1482.36,-636.03 1478.86,-626.03 1475.36,-636.03 1482.36,-636.03"/>
219 -</g>
220 -<!-- v12&#45;&gt;v13 -->
221 -<g id="edge16" class="edge">
222 -<title>v12&#45;&gt;v13</title>
223 -<path fill="none" stroke="black" d="M1040.01,-266.36C1038.53,-255.64 1038.47,-241.94 1044.66,-231.6 1047.34,-227.14 1050.8,-223.21 1054.73,-219.75"/>
224 -<polygon fill="black" stroke="black" points="1056.91,-222.5 1062.77,-213.67 1052.68,-216.91 1056.91,-222.5"/>
225 -<text text-anchor="middle" x="1065.45" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
226 -</g>
227 -<!-- v12&#45;&gt;v14 -->
228 -<g id="edge22" class="edge">
229 -<title>v12&#45;&gt;v14</title>
230 -<path fill="none" stroke="black" d="M912.44,-266.33C841.56,-254.69 763.32,-237.11 736.86,-213.6 689.95,-171.93 700.88,-88.98 710.57,-46.09"/>
231 -<polygon fill="black" stroke="black" points="714.04,-46.64 712.98,-36.1 707.23,-45 714.04,-46.64"/>
232 -<text text-anchor="middle" x="727.45" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
233 -</g>
234 -<!-- v13&#45;&gt;v9 -->
235 -<g id="edge21" class="edge">
236 -<title>v13&#45;&gt;v9</title>
237 -<path fill="none" stroke="black" d="M1060.74,-177.56C1025.69,-165.67 976.41,-150.58 931.86,-142.8 857.39,-129.79 776.88,-121.38 700.07,-116"/>
238 -<polygon fill="black" stroke="black" points="699.96,-112.48 689.75,-115.29 699.48,-119.47 699.96,-112.48"/>
239 -<text text-anchor="middle" x="1021.45" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
240 -</g>
241 -<!-- v13&#45;&gt;v12 -->
242 -<g id="edge19" class="edge">
243 -<title>v13&#45;&gt;v12</title>
244 -<path fill="none" stroke="black" d="M1102.79,-214C1099.16,-224.6 1093.55,-238.05 1085.86,-248.4 1082.97,-252.29 1079.56,-256.02 1075.96,-259.5"/>
245 -<polygon fill="black" stroke="black" points="1073.51,-256.99 1068.38,-266.27 1078.17,-262.21 1073.51,-256.99"/>
246 -<text text-anchor="middle" x="1116.45" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
247 -</g>
248 -<!-- v13&#45;&gt;v14 -->
249 -<g id="edge15" class="edge">
250 -<title>v13&#45;&gt;v14</title>
251 -<path fill="none" stroke="black" d="M1090.62,-177.46C1078.8,-166.44 1062.33,-152.42 1045.86,-142.8 963.82,-94.9 859.9,-59.39 791.27,-38.97"/>
252 -<polygon fill="black" stroke="black" points="791.99,-35.53 781.41,-36.07 790.01,-42.25 791.99,-35.53"/>
253 -</g>
254 -</g>
255 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/reassignment-conditional.svg deleted
-298
@@ -1,298 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="1555pt" height="796pt"
8 - viewBox="0.00 0.00 1555.03 795.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 791.8)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-791.8 1551.03,-791.8 1551.03,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="304.49,-787.8 97.65,-787.8 97.65,-751.8 304.49,-751.8 304.49,-787.8"/>
16 -<text text-anchor="middle" x="201.07" y="-765.6" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="402.21,-714.8 -0.07,-714.8 -0.07,-678.8 402.21,-678.8 402.21,-714.8"/>
22 -<text text-anchor="middle" x="201.07" y="-692.6" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.p0 @ Call mutable x$2.push(frozen props$1.p0))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M201.07,-751.61C201.07,-743.59 201.07,-733.85 201.07,-724.87"/>
28 -<polygon fill="black" stroke="black" points="204.57,-724.83 201.07,-714.83 197.57,-724.83 204.57,-724.83"/>
29 -</g>
30 -<!-- v5 -->
31 -<g id="node6" class="node">
32 -<title>v5</title>
33 -<polygon fill="none" stroke="black" points="396.81,-641.8 5.33,-641.8 5.33,-605.8 396.81,-605.8 396.81,-641.8"/>
34 -<text text-anchor="middle" x="201.07" y="-619.6" font-family="Times,serif" font-size="14.00">v5 (frozen props$1.p1 @ If (frozen props$1.p1) then:bb2 else:bb1)</text>
35 -</g>
36 -<!-- v1&#45;&gt;v5 -->
37 -<g id="edge4" class="edge">
38 -<title>v1&#45;&gt;v5</title>
39 -<path fill="none" stroke="black" d="M201.07,-678.61C201.07,-670.59 201.07,-660.85 201.07,-651.87"/>
40 -<polygon fill="black" stroke="black" points="204.57,-651.83 201.07,-641.83 197.57,-651.83 204.57,-651.83"/>
41 -</g>
42 -<!-- v2 -->
43 -<g id="node3" class="node">
44 -<title>v2</title>
45 -<polygon fill="none" stroke="black" points="758.35,-787.8 495.79,-787.8 495.79,-751.8 758.35,-751.8 758.35,-787.8"/>
46 -<text text-anchor="middle" x="627.07" y="-765.6" font-family="Times,serif" font-size="14.00">v2 (mutable x$2 @ mutable x$2 = Array [])</text>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="826.9,-714.8 427.25,-714.8 427.25,-678.8 826.9,-678.8 826.9,-714.8"/>
52 -<text text-anchor="middle" x="627.07" y="-692.6" font-family="Times,serif" font-size="14.00">v3 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p0))</text>
53 -</g>
54 -<!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
56 -<title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M627.07,-751.61C627.07,-743.59 627.07,-733.85 627.07,-724.87"/>
58 -<polygon fill="black" stroke="black" points="630.57,-724.83 627.07,-714.83 623.57,-724.83 630.57,-724.83"/>
59 -</g>
60 -<!-- v4 -->
61 -<g id="node5" class="node">
62 -<title>v4</title>
63 -<polygon fill="none" stroke="black" points="727.98,-641.8 526.16,-641.8 526.16,-605.8 727.98,-605.8 727.98,-641.8"/>
64 -<text text-anchor="middle" x="627.07" y="-619.6" font-family="Times,serif" font-size="14.00">v4 (mutable x$2 @ mutable x$2)</text>
65 -</g>
66 -<!-- v3&#45;&gt;v4 -->
67 -<g id="edge3" class="edge">
68 -<title>v3&#45;&gt;v4</title>
69 -<path fill="none" stroke="black" d="M627.07,-678.61C627.07,-670.59 627.07,-660.85 627.07,-651.87"/>
70 -<polygon fill="black" stroke="black" points="630.57,-651.83 627.07,-641.83 623.57,-651.83 630.57,-651.83"/>
71 -</g>
72 -<!-- v6 -->
73 -<g id="node7" class="node">
74 -<title>v6</title>
75 -<polygon fill="none" stroke="black" points="706.47,-553 419.67,-553 419.67,-517 706.47,-517 706.47,-553"/>
76 -<text text-anchor="middle" x="563.07" y="-530.8" font-family="Times,serif" font-size="14.00">v6 (mutable y$3 @ mutable y$3 = mutable x$2)</text>
77 -</g>
78 -<!-- v4&#45;&gt;v6 -->
79 -<g id="edge6" class="edge">
80 -<title>v4&#45;&gt;v6</title>
81 -<path fill="none" stroke="black" d="M622,-605.4C618.37,-594.8 612.76,-581.35 605.07,-571 602.18,-567.11 598.77,-563.38 595.17,-559.9"/>
82 -<polygon fill="black" stroke="black" points="597.39,-557.19 587.6,-553.13 592.72,-562.41 597.39,-557.19"/>
83 -<text text-anchor="middle" x="635.67" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
84 -</g>
85 -<!-- v8 -->
86 -<g id="node9" class="node">
87 -<title>v8</title>
88 -<polygon fill="none" stroke="black" points="1127.3,-464.2 590.84,-464.2 590.84,-428.2 1127.3,-428.2 1127.3,-464.2"/>
89 -<text text-anchor="middle" x="859.07" y="-442" font-family="Times,serif" font-size="14.00">v8 (mutable x$2 @ JSX &lt;frozen Component$0 x={mutable x$2} &gt;&lt;/frozen Component$0&gt;)</text>
90 -</g>
91 -<!-- v4&#45;&gt;v8 -->
92 -<g id="edge7" class="edge">
93 -<title>v4&#45;&gt;v8</title>
94 -<path fill="none" stroke="black" d="M728.02,-618.2C827.25,-611.32 968.69,-594.35 1003.07,-553 1033.07,-516.92 977.35,-486.54 926.73,-467.72"/>
95 -<polygon fill="black" stroke="black" points="927.63,-464.32 917.04,-464.23 925.26,-470.91 927.63,-464.32"/>
96 -</g>
97 -<!-- v9 -->
98 -<g id="node10" class="node">
99 -<title>v9</title>
100 -<polygon fill="none" stroke="black" points="402.21,-553 -0.07,-553 -0.07,-517 402.21,-517 402.21,-553"/>
101 -<text text-anchor="middle" x="201.07" y="-530.8" font-family="Times,serif" font-size="14.00">v9 (frozen props$1.p2 @ Call mutable y$3.push(frozen props$1.p2))</text>
102 -</g>
103 -<!-- v5&#45;&gt;v9 -->
104 -<g id="edge9" class="edge">
105 -<title>v5&#45;&gt;v9</title>
106 -<path fill="none" stroke="black" d="M201.07,-605.65C201.07,-593.52 201.07,-577.02 201.07,-563.12"/>
107 -<polygon fill="black" stroke="black" points="204.57,-563.11 201.07,-553.11 197.57,-563.11 204.57,-563.11"/>
108 -</g>
109 -<!-- v6&#45;&gt;v4 -->
110 -<g id="edge8" class="edge">
111 -<title>v6&#45;&gt;v4</title>
112 -<path fill="none" stroke="black" d="M557.32,-553.05C554.78,-563.77 553.62,-577.48 559.88,-587.8 562.58,-592.25 566.05,-596.17 570,-599.6"/>
113 -<polygon fill="black" stroke="black" points="567.97,-602.46 578.08,-605.63 572.16,-596.85 567.97,-602.46"/>
114 -<text text-anchor="middle" x="580.67" y="-575.2" font-family="Times,serif" font-size="14.00">capture</text>
115 -</g>
116 -<!-- v7 -->
117 -<g id="node8" class="node">
118 -<title>v7</title>
119 -<polygon fill="none" stroke="black" points="762.9,-375.4 363.25,-375.4 363.25,-339.4 762.9,-339.4 762.9,-375.4"/>
120 -<text text-anchor="middle" x="563.07" y="-353.2" font-family="Times,serif" font-size="14.00">v7 (mutable y$3.push @ Call mutable y$3.push(frozen props$1.p2))</text>
121 -</g>
122 -<!-- v6&#45;&gt;v7 -->
123 -<g id="edge5" class="edge">
124 -<title>v6&#45;&gt;v7</title>
125 -<path fill="none" stroke="black" d="M563.07,-516.84C563.07,-486.42 563.07,-422.78 563.07,-386.08"/>
126 -<polygon fill="black" stroke="black" points="566.57,-385.63 563.07,-375.63 559.57,-385.63 566.57,-385.63"/>
127 -</g>
128 -<!-- v6&#45;&gt;v8 -->
129 -<g id="edge14" class="edge">
130 -<title>v6&#45;&gt;v8</title>
131 -<path fill="none" stroke="black" d="M621.2,-516.95C670.07,-502.62 739.99,-482.12 791.38,-467.05"/>
132 -<polygon fill="black" stroke="black" points="792.47,-470.38 801.08,-464.21 790.5,-463.66 792.47,-470.38"/>
133 -<text text-anchor="middle" x="758.67" y="-486.4" font-family="Times,serif" font-size="14.00">capture</text>
134 -</g>
135 -<!-- v14 -->
136 -<g id="node15" class="node">
137 -<title>v14</title>
138 -<polygon fill="none" stroke="black" points="1160.38,-286.6 503.76,-286.6 503.76,-250.6 1160.38,-250.6 1160.38,-286.6"/>
139 -<text text-anchor="middle" x="832.07" y="-264.4" font-family="Times,serif" font-size="14.00">v14 (readonly x$2 @ JSX &lt;frozen Component$0 x={readonly x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
140 -</g>
141 -<!-- v7&#45;&gt;v14 -->
142 -<g id="edge21" class="edge">
143 -<title>v7&#45;&gt;v14</title>
144 -<path fill="none" stroke="black" d="M615.9,-339.35C660.04,-325.11 723.06,-304.77 769.68,-289.73"/>
145 -<polygon fill="black" stroke="black" points="770.92,-293.01 779.37,-286.61 768.78,-286.35 770.92,-293.01"/>
146 -<text text-anchor="middle" x="742.67" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
147 -</g>
148 -<!-- v15 -->
149 -<g id="node16" class="node">
150 -<title>v15</title>
151 -<polygon fill="none" stroke="black" points="796.38,-197.8 139.76,-197.8 139.76,-161.8 796.38,-161.8 796.38,-197.8"/>
152 -<text text-anchor="middle" x="468.07" y="-175.6" font-family="Times,serif" font-size="14.00">v15 (readonly y$3 @ JSX &lt;frozen Component$0 x={readonly x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
153 -</g>
154 -<!-- v7&#45;&gt;v15 -->
155 -<g id="edge16" class="edge">
156 -<title>v7&#45;&gt;v15</title>
157 -<path fill="none" stroke="black" d="M541.3,-339.39C526.18,-326.47 506.74,-307.41 495.07,-286.6 481.29,-262.02 474.41,-230.31 471.06,-208.03"/>
158 -<polygon fill="black" stroke="black" points="474.5,-207.37 469.69,-197.93 467.57,-208.31 474.5,-207.37"/>
159 -</g>
160 -<!-- v8&#45;&gt;v7 -->
161 -<g id="edge17" class="edge">
162 -<title>v8&#45;&gt;v7</title>
163 -<path fill="none" stroke="black" d="M798.55,-428.19C778.58,-422.53 756.26,-416.15 735.88,-410.2 700.46,-399.86 661.04,-388.07 628.81,-378.35"/>
164 -<polygon fill="black" stroke="black" points="629.63,-374.94 619.04,-375.4 627.61,-381.64 629.63,-374.94"/>
165 -<text text-anchor="middle" x="756.67" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
166 -</g>
167 -<!-- v11 -->
168 -<g id="node12" class="node">
169 -<title>v11</title>
170 -<polygon fill="none" stroke="black" points="1447.29,-375.4 818.85,-375.4 818.85,-339.4 1447.29,-339.4 1447.29,-375.4"/>
171 -<text text-anchor="middle" x="1133.07" y="-353.2" font-family="Times,serif" font-size="14.00">v11 (mutable _$4 @ mutable _$4 = JSX &lt;frozen Component$0 x={mutable x$2} &gt;&lt;/frozen Component$0&gt;)</text>
172 -</g>
173 -<!-- v8&#45;&gt;v11 -->
174 -<g id="edge11" class="edge">
175 -<title>v8&#45;&gt;v11</title>
176 -<path fill="none" stroke="black" d="M912.88,-428.15C957.93,-413.88 1022.31,-393.49 1069.82,-378.44"/>
177 -<polygon fill="black" stroke="black" points="1070.91,-381.76 1079.39,-375.41 1068.8,-375.09 1070.91,-381.76"/>
178 -<text text-anchor="middle" x="1041.67" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
179 -</g>
180 -<!-- v8&#45;&gt;v14 -->
181 -<g id="edge13" class="edge">
182 -<title>v8&#45;&gt;v14</title>
183 -<path fill="none" stroke="black" d="M842.34,-427.93C830.79,-414.73 816.41,-395.45 810.07,-375.4 801.69,-348.87 810.4,-317.58 819.21,-295.94"/>
184 -<polygon fill="black" stroke="black" points="822.44,-297.3 823.21,-286.73 816.02,-294.51 822.44,-297.3"/>
185 -</g>
186 -<!-- v10 -->
187 -<g id="node11" class="node">
188 -<title>v10</title>
189 -<polygon fill="none" stroke="black" points="993.85,-553 724.29,-553 724.29,-517 993.85,-517 993.85,-553"/>
190 -<text text-anchor="middle" x="859.07" y="-530.8" font-family="Times,serif" font-size="14.00">v10 (mutable x$2 @ mutable x$2 = Array [])</text>
191 -</g>
192 -<!-- v10&#45;&gt;v8 -->
193 -<g id="edge10" class="edge">
194 -<title>v10&#45;&gt;v8</title>
195 -<path fill="none" stroke="black" d="M859.07,-516.85C859.07,-504.72 859.07,-488.22 859.07,-474.32"/>
196 -<polygon fill="black" stroke="black" points="862.57,-474.31 859.07,-464.31 855.57,-474.31 862.57,-474.31"/>
197 -</g>
198 -<!-- v11&#45;&gt;v8 -->
199 -<g id="edge15" class="edge">
200 -<title>v11&#45;&gt;v8</title>
201 -<path fill="none" stroke="black" d="M981.38,-375.44C962.62,-380.07 944.03,-385.94 926.88,-393.4 911.42,-400.12 896.32,-411.1 884.3,-421.22"/>
202 -<polygon fill="black" stroke="black" points="881.73,-418.81 876.51,-428.03 886.34,-424.08 881.73,-418.81"/>
203 -<text text-anchor="middle" x="947.67" y="-397.6" font-family="Times,serif" font-size="14.00">capture</text>
204 -</g>
205 -<!-- v11&#45;&gt;v14 -->
206 -<g id="edge22" class="edge">
207 -<title>v11&#45;&gt;v14</title>
208 -<path fill="none" stroke="black" d="M1073.96,-339.35C1024.26,-325.02 953.16,-304.52 900.9,-289.45"/>
209 -<polygon fill="black" stroke="black" points="901.62,-286.01 891.04,-286.61 899.68,-292.74 901.62,-286.01"/>
210 -<text text-anchor="middle" x="1030.67" y="-308.8" font-family="Times,serif" font-size="14.00">capture</text>
211 -</g>
212 -<!-- v12 -->
213 -<g id="node13" class="node">
214 -<title>v12</title>
215 -<polygon fill="none" stroke="black" points="1492.28,-787.8 899.86,-787.8 899.86,-751.8 1492.28,-751.8 1492.28,-787.8"/>
216 -<text text-anchor="middle" x="1196.07" y="-765.6" font-family="Times,serif" font-size="14.00">v12 (frozen Component$0 @ JSX &lt;frozen Component$0 x={mutable x$2} &gt;&lt;/frozen Component$0&gt;)</text>
217 -</g>
218 -<!-- v13 -->
219 -<g id="node14" class="node">
220 -<title>v13</title>
221 -<polygon fill="none" stroke="black" points="1546.98,-714.8 845.16,-714.8 845.16,-678.8 1546.98,-678.8 1546.98,-714.8"/>
222 -<text text-anchor="middle" x="1196.07" y="-692.6" font-family="Times,serif" font-size="14.00">v13 (frozen Component$0 @ JSX &lt;frozen Component$0 x={readonly x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
223 -</g>
224 -<!-- v12&#45;&gt;v13 -->
225 -<g id="edge12" class="edge">
226 -<title>v12&#45;&gt;v13</title>
227 -<path fill="none" stroke="black" d="M1196.07,-751.61C1196.07,-743.59 1196.07,-733.85 1196.07,-724.87"/>
228 -<polygon fill="black" stroke="black" points="1199.57,-724.83 1196.07,-714.83 1192.57,-724.83 1199.57,-724.83"/>
229 -</g>
230 -<!-- v14&#45;&gt;v15 -->
231 -<g id="edge24" class="edge">
232 -<title>v14&#45;&gt;v15</title>
233 -<path fill="none" stroke="black" d="M760.59,-250.55C699.86,-236.07 612.71,-215.29 549.35,-200.18"/>
234 -<polygon fill="black" stroke="black" points="549.93,-196.72 539.39,-197.81 548.3,-203.53 549.93,-196.72"/>
235 -<text text-anchor="middle" x="703.67" y="-220" font-family="Times,serif" font-size="14.00">capture</text>
236 -</g>
237 -<!-- v16 -->
238 -<g id="node17" class="node">
239 -<title>v16</title>
240 -<polygon fill="none" stroke="black" points="1039.3,-109 334.84,-109 334.84,-73 1039.3,-73 1039.3,-109"/>
241 -<text text-anchor="middle" x="687.07" y="-86.8" font-family="Times,serif" font-size="14.00">v16 (frozen $5 @ frozen $5 = JSX &lt;frozen Component$0 x={readonly x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
242 -</g>
243 -<!-- v14&#45;&gt;v16 -->
244 -<g id="edge19" class="edge">
245 -<title>v14&#45;&gt;v16</title>
246 -<path fill="none" stroke="black" d="M831.65,-250.5C830.28,-228.04 824.97,-188.34 805.07,-161.8 789.2,-140.63 764.86,-124.68 742.39,-113.41"/>
247 -<polygon fill="black" stroke="black" points="743.77,-110.19 733.24,-109.02 740.74,-116.5 743.77,-110.19"/>
248 -<text text-anchor="middle" x="843.67" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
249 -</g>
250 -<!-- v17 -->
251 -<g id="node18" class="node">
252 -<title>v17</title>
253 -<polygon fill="none" stroke="black" points="795.9,-36 578.25,-36 578.25,0 795.9,0 795.9,-36"/>
254 -<text text-anchor="middle" x="687.07" y="-13.8" font-family="Times,serif" font-size="14.00">v17 (frozen $5 @ Return frozen $5)</text>
255 -</g>
256 -<!-- v14&#45;&gt;v17 -->
257 -<g id="edge26" class="edge">
258 -<title>v14&#45;&gt;v17</title>
259 -<path fill="none" stroke="black" d="M878.63,-250.59C959.39,-218.6 1111.08,-146.13 1048.07,-73 1017.14,-37.1 899.15,-24.72 806.37,-20.62"/>
260 -<polygon fill="black" stroke="black" points="806.47,-17.13 796.34,-20.21 806.18,-24.12 806.47,-17.13"/>
261 -<text text-anchor="middle" x="1079.67" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
262 -</g>
263 -<!-- v15&#45;&gt;v16 -->
264 -<g id="edge20" class="edge">
265 -<title>v15&#45;&gt;v16</title>
266 -<path fill="none" stroke="black" d="M523.5,-161.78C539.92,-156.4 557.84,-150.18 574.07,-143.8 597.24,-134.7 622.47,-123.28 643.2,-113.49"/>
267 -<polygon fill="black" stroke="black" points="644.86,-116.57 652.38,-109.11 641.85,-110.25 644.86,-116.57"/>
268 -<text text-anchor="middle" x="632.67" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
269 -</g>
270 -<!-- v15&#45;&gt;v17 -->
271 -<g id="edge27" class="edge">
272 -<title>v15&#45;&gt;v17</title>
273 -<path fill="none" stroke="black" d="M385,-161.74C320.54,-144.83 247.88,-115.3 284.88,-73 303.45,-51.77 456.22,-35.97 567.99,-27.11"/>
274 -<polygon fill="black" stroke="black" points="568.3,-30.6 577.99,-26.33 567.75,-23.62 568.3,-30.6"/>
275 -<text text-anchor="middle" x="305.67" y="-86.8" font-family="Times,serif" font-size="14.00">capture</text>
276 -</g>
277 -<!-- v16&#45;&gt;v14 -->
278 -<g id="edge23" class="edge">
279 -<title>v16&#45;&gt;v14</title>
280 -<path fill="none" stroke="black" d="M794.14,-109.13C823.25,-119.38 851.33,-135.73 868.07,-161.8 884.08,-186.74 868.17,-219.58 852.74,-242.01"/>
281 -<polygon fill="black" stroke="black" points="849.72,-240.2 846.69,-250.35 855.39,-244.31 849.72,-240.2"/>
282 -<text text-anchor="middle" x="895.67" y="-175.6" font-family="Times,serif" font-size="14.00">capture</text>
283 -</g>
284 -<!-- v16&#45;&gt;v15 -->
285 -<g id="edge25" class="edge">
286 -<title>v16&#45;&gt;v15</title>
287 -<path fill="none" stroke="black" d="M577.03,-109.03C560.43,-113.66 543.86,-119.55 528.88,-127 515.09,-133.86 501.82,-144.52 491.22,-154.38"/>
288 -<polygon fill="black" stroke="black" points="488.75,-151.9 484,-161.36 493.62,-156.93 488.75,-151.9"/>
289 -<text text-anchor="middle" x="549.67" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
290 -</g>
291 -<!-- v16&#45;&gt;v17 -->
292 -<g id="edge18" class="edge">
293 -<title>v16&#45;&gt;v17</title>
294 -<path fill="none" stroke="black" d="M687.07,-72.81C687.07,-64.79 687.07,-55.05 687.07,-46.07"/>
295 -<polygon fill="black" stroke="black" points="690.57,-46.03 687.07,-36.03 683.57,-46.03 690.57,-46.03"/>
296 -</g>
297 -</g>
298 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/reassignment.svg deleted
-252
@@ -1,252 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="1965pt" height="691pt"
8 - viewBox="0.00 0.00 1965.36 691.20" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 687.2)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-687.2 1961.36,-687.2 1961.36,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="735.44,-683.2 528.6,-683.2 528.6,-647.2 735.44,-647.2 735.44,-683.2"/>
16 -<text text-anchor="middle" x="632.02" y="-661" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="833.16,-610.2 430.88,-610.2 430.88,-574.2 833.16,-574.2 833.16,-610.2"/>
22 -<text text-anchor="middle" x="632.02" y="-588" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.p0 @ Call mutable x$2.push(frozen props$1.p0))</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M632.02,-647.01C632.02,-638.99 632.02,-629.25 632.02,-620.27"/>
28 -<polygon fill="black" stroke="black" points="635.52,-620.23 632.02,-610.23 628.52,-620.23 635.52,-620.23"/>
29 -</g>
30 -<!-- v5 -->
31 -<g id="node6" class="node">
32 -<title>v5</title>
33 -<polygon fill="none" stroke="black" points="833.16,-537.2 430.88,-537.2 430.88,-501.2 833.16,-501.2 833.16,-537.2"/>
34 -<text text-anchor="middle" x="632.02" y="-515" font-family="Times,serif" font-size="14.00">v5 (frozen props$1.p1 @ Call mutable y$3.push(frozen props$1.p1))</text>
35 -</g>
36 -<!-- v1&#45;&gt;v5 -->
37 -<g id="edge4" class="edge">
38 -<title>v1&#45;&gt;v5</title>
39 -<path fill="none" stroke="black" d="M632.02,-574.01C632.02,-565.99 632.02,-556.25 632.02,-547.27"/>
40 -<polygon fill="black" stroke="black" points="635.52,-547.23 632.02,-537.23 628.52,-547.23 635.52,-547.23"/>
41 -</g>
42 -<!-- v2 -->
43 -<g id="node3" class="node">
44 -<title>v2</title>
45 -<polygon fill="none" stroke="black" points="1182.3,-683.2 919.74,-683.2 919.74,-647.2 1182.3,-647.2 1182.3,-683.2"/>
46 -<text text-anchor="middle" x="1051.02" y="-661" font-family="Times,serif" font-size="14.00">v2 (mutable x$2 @ mutable x$2 = Array [])</text>
47 -</g>
48 -<!-- v3 -->
49 -<g id="node4" class="node">
50 -<title>v3</title>
51 -<polygon fill="none" stroke="black" points="1250.84,-610.2 851.19,-610.2 851.19,-574.2 1250.84,-574.2 1250.84,-610.2"/>
52 -<text text-anchor="middle" x="1051.02" y="-588" font-family="Times,serif" font-size="14.00">v3 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p0))</text>
53 -</g>
54 -<!-- v2&#45;&gt;v3 -->
55 -<g id="edge2" class="edge">
56 -<title>v2&#45;&gt;v3</title>
57 -<path fill="none" stroke="black" d="M1051.02,-647.01C1051.02,-638.99 1051.02,-629.25 1051.02,-620.27"/>
58 -<polygon fill="black" stroke="black" points="1054.52,-620.23 1051.02,-610.23 1047.52,-620.23 1054.52,-620.23"/>
59 -</g>
60 -<!-- v4 -->
61 -<g id="node5" class="node">
62 -<title>v4</title>
63 -<polygon fill="none" stroke="black" points="1151.93,-537.2 950.11,-537.2 950.11,-501.2 1151.93,-501.2 1151.93,-537.2"/>
64 -<text text-anchor="middle" x="1051.02" y="-515" font-family="Times,serif" font-size="14.00">v4 (mutable x$2 @ mutable x$2)</text>
65 -</g>
66 -<!-- v3&#45;&gt;v4 -->
67 -<g id="edge3" class="edge">
68 -<title>v3&#45;&gt;v4</title>
69 -<path fill="none" stroke="black" d="M1051.02,-574.01C1051.02,-565.99 1051.02,-556.25 1051.02,-547.27"/>
70 -<polygon fill="black" stroke="black" points="1054.52,-547.23 1051.02,-537.23 1047.52,-547.23 1054.52,-547.23"/>
71 -</g>
72 -<!-- v6 -->
73 -<g id="node7" class="node">
74 -<title>v6</title>
75 -<polygon fill="none" stroke="black" points="1194.42,-448.4 907.62,-448.4 907.62,-412.4 1194.42,-412.4 1194.42,-448.4"/>
76 -<text text-anchor="middle" x="1051.02" y="-426.2" font-family="Times,serif" font-size="14.00">v6 (mutable y$3 @ mutable y$3 = mutable x$2)</text>
77 -</g>
78 -<!-- v4&#45;&gt;v6 -->
79 -<g id="edge6" class="edge">
80 -<title>v4&#45;&gt;v6</title>
81 -<path fill="none" stroke="black" d="M1031.32,-501.05C1026.66,-495.84 1022.32,-489.74 1019.83,-483.2 1017.17,-476.22 1017.17,-473.38 1019.83,-466.4 1021.15,-462.92 1022.99,-459.58 1025.13,-456.42"/>
82 -<polygon fill="black" stroke="black" points="1027.89,-458.57 1031.32,-448.55 1022.39,-454.25 1027.89,-458.57"/>
83 -<text text-anchor="middle" x="1040.62" y="-470.6" font-family="Times,serif" font-size="14.00">capture</text>
84 -</g>
85 -<!-- v6&#45;&gt;v4 -->
86 -<g id="edge7" class="edge">
87 -<title>v6&#45;&gt;v4</title>
88 -<path fill="none" stroke="black" d="M1056.97,-448.64C1058.63,-454.24 1060.2,-460.52 1061.02,-466.4 1062.05,-473.79 1062.05,-475.81 1061.02,-483.2 1060.66,-485.77 1060.16,-488.42 1059.57,-491.06"/>
89 -<polygon fill="black" stroke="black" points="1056.12,-490.4 1056.97,-500.96 1062.89,-492.17 1056.12,-490.4"/>
90 -<text text-anchor="middle" x="1082.62" y="-470.6" font-family="Times,serif" font-size="14.00">capture</text>
91 -</g>
92 -<!-- v7 -->
93 -<g id="node8" class="node">
94 -<title>v7</title>
95 -<polygon fill="none" stroke="black" points="1250.84,-375.4 851.19,-375.4 851.19,-339.4 1250.84,-339.4 1250.84,-375.4"/>
96 -<text text-anchor="middle" x="1051.02" y="-353.2" font-family="Times,serif" font-size="14.00">v7 (mutable y$3.push @ Call mutable y$3.push(frozen props$1.p1))</text>
97 -</g>
98 -<!-- v6&#45;&gt;v7 -->
99 -<g id="edge5" class="edge">
100 -<title>v6&#45;&gt;v7</title>
101 -<path fill="none" stroke="black" d="M1051.02,-412.21C1051.02,-404.19 1051.02,-394.45 1051.02,-385.47"/>
102 -<polygon fill="black" stroke="black" points="1054.52,-385.43 1051.02,-375.43 1047.52,-385.43 1054.52,-385.43"/>
103 -</g>
104 -<!-- v14 -->
105 -<g id="node15" class="node">
106 -<title>v14</title>
107 -<polygon fill="none" stroke="black" points="1372.6,-302.4 729.44,-302.4 729.44,-266.4 1372.6,-266.4 1372.6,-302.4"/>
108 -<text text-anchor="middle" x="1051.02" y="-280.2" font-family="Times,serif" font-size="14.00">v14 (readonly y$3 @ JSX &lt;frozen Component$0 x={frozen x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
109 -</g>
110 -<!-- v7&#45;&gt;v14 -->
111 -<g id="edge13" class="edge">
112 -<title>v7&#45;&gt;v14</title>
113 -<path fill="none" stroke="black" d="M1051.02,-339.21C1051.02,-331.19 1051.02,-321.45 1051.02,-312.47"/>
114 -<polygon fill="black" stroke="black" points="1054.52,-312.43 1051.02,-302.43 1047.52,-312.43 1054.52,-312.43"/>
115 -</g>
116 -<!-- v8 -->
117 -<g id="node9" class="node">
118 -<title>v8</title>
119 -<polygon fill="none" stroke="black" points="380.61,-375.4 137.43,-375.4 137.43,-339.4 380.61,-339.4 380.61,-375.4"/>
120 -<text text-anchor="middle" x="259.02" y="-353.2" font-family="Times,serif" font-size="14.00">v8 (frozen x$2 @ frozen x$2 = Array [])</text>
121 -</g>
122 -<!-- v9 -->
123 -<g id="node10" class="node">
124 -<title>v9</title>
125 -<polygon fill="none" stroke="black" points="518.06,-302.4 -0.02,-302.4 -0.02,-266.4 518.06,-266.4 518.06,-302.4"/>
126 -<text text-anchor="middle" x="259.02" y="-280.2" font-family="Times,serif" font-size="14.00">v9 (frozen x$2 @ JSX &lt;frozen Component$0 x={frozen x$2} &gt;&lt;/frozen Component$0&gt;)</text>
127 -</g>
128 -<!-- v8&#45;&gt;v9 -->
129 -<g id="edge8" class="edge">
130 -<title>v8&#45;&gt;v9</title>
131 -<path fill="none" stroke="black" d="M259.02,-339.21C259.02,-331.19 259.02,-321.45 259.02,-312.47"/>
132 -<polygon fill="black" stroke="black" points="262.52,-312.43 259.02,-302.43 255.52,-312.43 262.52,-312.43"/>
133 -</g>
134 -<!-- v10 -->
135 -<g id="node11" class="node">
136 -<title>v10</title>
137 -<polygon fill="none" stroke="black" points="623.2,-213.6 22.83,-213.6 22.83,-177.6 623.2,-177.6 623.2,-213.6"/>
138 -<text text-anchor="middle" x="323.02" y="-191.4" font-family="Times,serif" font-size="14.00">v10 (frozen _$4 @ frozen _$4 = JSX &lt;frozen Component$0 x={frozen x$2} &gt;&lt;/frozen Component$0&gt;)</text>
139 -</g>
140 -<!-- v9&#45;&gt;v10 -->
141 -<g id="edge9" class="edge">
142 -<title>v9&#45;&gt;v10</title>
143 -<path fill="none" stroke="black" d="M255.17,-266.36C253.7,-255.64 253.63,-241.94 259.83,-231.6 262.5,-227.14 265.96,-223.21 269.89,-219.75"/>
144 -<polygon fill="black" stroke="black" points="272.07,-222.5 277.93,-213.67 267.84,-216.91 272.07,-222.5"/>
145 -<text text-anchor="middle" x="280.62" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
146 -</g>
147 -<!-- v13 -->
148 -<g id="node14" class="node">
149 -<title>v13</title>
150 -<polygon fill="none" stroke="black" points="1015.37,-124.8 384.67,-124.8 384.67,-88.8 1015.37,-88.8 1015.37,-124.8"/>
151 -<text text-anchor="middle" x="700.02" y="-102.6" font-family="Times,serif" font-size="14.00">v13 (frozen x$2 @ JSX &lt;frozen Component$0 x={frozen x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
152 -</g>
153 -<!-- v9&#45;&gt;v13 -->
154 -<g id="edge11" class="edge">
155 -<title>v9&#45;&gt;v13</title>
156 -<path fill="none" stroke="black" d="M120.57,-266.36C43.83,-251.39 -28.3,-224.44 14.02,-177.6 39.59,-149.29 209.75,-131.87 374.18,-121.51"/>
157 -<polygon fill="black" stroke="black" points="374.73,-124.99 384.49,-120.87 374.3,-118 374.73,-124.99"/>
158 -</g>
159 -<!-- v10&#45;&gt;v9 -->
160 -<g id="edge12" class="edge">
161 -<title>v10&#45;&gt;v9</title>
162 -<path fill="none" stroke="black" d="M317.95,-214C314.32,-224.6 308.71,-238.05 301.02,-248.4 298.13,-252.29 294.72,-256.02 291.12,-259.5"/>
163 -<polygon fill="black" stroke="black" points="288.67,-256.99 283.55,-266.27 293.33,-262.21 288.67,-256.99"/>
164 -<text text-anchor="middle" x="331.62" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
165 -</g>
166 -<!-- v10&#45;&gt;v13 -->
167 -<g id="edge17" class="edge">
168 -<title>v10&#45;&gt;v13</title>
169 -<path fill="none" stroke="black" d="M397.05,-177.55C460.08,-163.04 550.58,-142.21 616.25,-127.09"/>
170 -<polygon fill="black" stroke="black" points="617.2,-130.46 626.16,-124.81 615.62,-123.64 617.2,-130.46"/>
171 -<text text-anchor="middle" x="566.62" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
172 -</g>
173 -<!-- v11 -->
174 -<g id="node12" class="node">
175 -<title>v11</title>
176 -<polygon fill="none" stroke="black" points="1904.89,-683.2 1321.15,-683.2 1321.15,-647.2 1904.89,-647.2 1904.89,-683.2"/>
177 -<text text-anchor="middle" x="1613.02" y="-661" font-family="Times,serif" font-size="14.00">v11 (frozen Component$0 @ JSX &lt;frozen Component$0 x={frozen x$2} &gt;&lt;/frozen Component$0&gt;)</text>
178 -</g>
179 -<!-- v12 -->
180 -<g id="node13" class="node">
181 -<title>v12</title>
182 -<polygon fill="none" stroke="black" points="1957.2,-610.2 1268.84,-610.2 1268.84,-574.2 1957.2,-574.2 1957.2,-610.2"/>
183 -<text text-anchor="middle" x="1613.02" y="-588" font-family="Times,serif" font-size="14.00">v12 (frozen Component$0 @ JSX &lt;frozen Component$0 x={frozen x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
184 -</g>
185 -<!-- v11&#45;&gt;v12 -->
186 -<g id="edge10" class="edge">
187 -<title>v11&#45;&gt;v12</title>
188 -<path fill="none" stroke="black" d="M1613.02,-647.01C1613.02,-638.99 1613.02,-629.25 1613.02,-620.27"/>
189 -<polygon fill="black" stroke="black" points="1616.52,-620.23 1613.02,-610.23 1609.52,-620.23 1616.52,-620.23"/>
190 -</g>
191 -<!-- v15 -->
192 -<g id="node16" class="node">
193 -<title>v15</title>
194 -<polygon fill="none" stroke="black" points="1332.52,-213.6 641.52,-213.6 641.52,-177.6 1332.52,-177.6 1332.52,-213.6"/>
195 -<text text-anchor="middle" x="987.02" y="-191.4" font-family="Times,serif" font-size="14.00">v15 (frozen $5 @ frozen $5 = JSX &lt;frozen Component$0 x={frozen x$2} y={readonly y$3} &gt;&lt;/frozen Component$0&gt;)</text>
196 -</g>
197 -<!-- v13&#45;&gt;v15 -->
198 -<g id="edge15" class="edge">
199 -<title>v13&#45;&gt;v15</title>
200 -<path fill="none" stroke="black" d="M754.75,-124.9C787.52,-135.09 830.02,-148.21 867.83,-159.6 884.31,-164.56 902.11,-169.84 918.79,-174.74"/>
201 -<polygon fill="black" stroke="black" points="917.89,-178.12 928.47,-177.58 919.86,-171.41 917.89,-178.12"/>
202 -<text text-anchor="middle" x="888.62" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
203 -</g>
204 -<!-- v16 -->
205 -<g id="node17" class="node">
206 -<title>v16</title>
207 -<polygon fill="none" stroke="black" points="1151.84,-36 934.19,-36 934.19,0 1151.84,0 1151.84,-36"/>
208 -<text text-anchor="middle" x="1043.02" y="-13.8" font-family="Times,serif" font-size="14.00">v16 (frozen $5 @ Return frozen $5)</text>
209 -</g>
210 -<!-- v13&#45;&gt;v16 -->
211 -<g id="edge20" class="edge">
212 -<title>v13&#45;&gt;v16</title>
213 -<path fill="none" stroke="black" d="M767.38,-88.75C824.48,-74.3 906.38,-53.58 966.06,-38.47"/>
214 -<polygon fill="black" stroke="black" points="966.98,-41.85 975.82,-36.01 965.26,-35.07 966.98,-41.85"/>
215 -<text text-anchor="middle" x="923.62" y="-58.2" font-family="Times,serif" font-size="14.00">capture</text>
216 -</g>
217 -<!-- v14&#45;&gt;v15 -->
218 -<g id="edge16" class="edge">
219 -<title>v14&#45;&gt;v15</title>
220 -<path fill="none" stroke="black" d="M1005.93,-266.33C998.73,-261.61 992.21,-255.71 987.83,-248.4 983.47,-241.13 982.21,-232.2 982.36,-223.81"/>
221 -<polygon fill="black" stroke="black" points="985.86,-223.89 983.17,-213.64 978.88,-223.33 985.86,-223.89"/>
222 -<text text-anchor="middle" x="1008.62" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
223 -</g>
224 -<!-- v14&#45;&gt;v16 -->
225 -<g id="edge21" class="edge">
226 -<title>v14&#45;&gt;v16</title>
227 -<path fill="none" stroke="black" d="M1191.41,-266.37C1255.94,-255.37 1322.48,-238.38 1342.02,-213.6 1409.86,-127.56 1241.15,-67.5 1130.43,-38.61"/>
228 -<polygon fill="black" stroke="black" points="1131.12,-35.17 1120.57,-36.08 1129.38,-41.95 1131.12,-35.17"/>
229 -<text text-anchor="middle" x="1375.62" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
230 -</g>
231 -<!-- v15&#45;&gt;v13 -->
232 -<g id="edge18" class="edge">
233 -<title>v15&#45;&gt;v13</title>
234 -<path fill="none" stroke="black" d="M966.53,-177.48C951.53,-165.87 930.19,-151.16 909.02,-142.8 893.21,-136.56 876.31,-131.43 859.22,-127.22"/>
235 -<polygon fill="black" stroke="black" points="859.67,-123.73 849.14,-124.84 858.07,-130.54 859.67,-123.73"/>
236 -<text text-anchor="middle" x="961.62" y="-147" font-family="Times,serif" font-size="14.00">capture</text>
237 -</g>
238 -<!-- v15&#45;&gt;v14 -->
239 -<g id="edge19" class="edge">
240 -<title>v15&#45;&gt;v14</title>
241 -<path fill="none" stroke="black" d="M1011.55,-213.73C1017.81,-218.95 1024.15,-225.05 1029.02,-231.6 1034.55,-239.04 1039,-248.08 1042.41,-256.51"/>
242 -<polygon fill="black" stroke="black" points="1039.18,-257.85 1045.95,-266 1045.74,-255.41 1039.18,-257.85"/>
243 -<text text-anchor="middle" x="1059.62" y="-235.8" font-family="Times,serif" font-size="14.00">capture</text>
244 -</g>
245 -<!-- v15&#45;&gt;v16 -->
246 -<g id="edge14" class="edge">
247 -<title>v15&#45;&gt;v16</title>
248 -<path fill="none" stroke="black" d="M998.02,-177.5C1006.37,-163.77 1017.48,-143.73 1024.02,-124.8 1032.93,-99 1037.86,-68.14 1040.45,-46.42"/>
249 -<polygon fill="black" stroke="black" points="1043.95,-46.59 1041.57,-36.27 1037,-45.83 1043.95,-46.59"/>
250 -</g>
251 -</g>
252 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/simple.svg deleted
-157
@@ -1,157 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3 - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 -<!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 - -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="3054pt" height="116pt"
8 - viewBox="0.00 0.00 3053.93 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-112 3049.93,-112 3049.93,4 -4,4"/>
12 -<!-- v0 -->
13 -<g id="node1" class="node">
14 -<title>v0</title>
15 -<polygon fill="none" stroke="black" points="245.32,-108 62.7,-108 62.7,-72 245.32,-72 245.32,-108"/>
16 -<text text-anchor="middle" x="154.01" y="-85.8" font-family="Times,serif" font-size="14.00">v0 (frozen x$1 @ &lt;no&#45;instr&gt;)</text>
17 -</g>
18 -<!-- v1 -->
19 -<g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="308.03,-36 -0.01,-36 -0.01,0 308.03,0 308.03,-36"/>
22 -<text text-anchor="middle" x="154.01" y="-13.8" font-family="Times,serif" font-size="14.00">v1 (frozen x$1 @ If (frozen x$1) then:bb2 else:bb1)</text>
23 -</g>
24 -<!-- v0&#45;&gt;v1 -->
25 -<g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M154.01,-71.7C154.01,-63.98 154.01,-54.71 154.01,-46.11"/>
28 -<polygon fill="black" stroke="black" points="157.51,-46.1 154.01,-36.1 150.51,-46.1 157.51,-46.1"/>
29 -</g>
30 -<!-- v2 -->
31 -<g id="node3" class="node">
32 -<title>v2</title>
33 -<polygon fill="none" stroke="black" points="769.32,-108 586.7,-108 586.7,-72 769.32,-72 769.32,-108"/>
34 -<text text-anchor="middle" x="678.01" y="-85.8" font-family="Times,serif" font-size="14.00">v2 (frozen y$2 @ &lt;no&#45;instr&gt;)</text>
35 -</g>
36 -<!-- v3 -->
37 -<g id="node4" class="node">
38 -<title>v3</title>
39 -<polygon fill="none" stroke="black" points="686.4,-36 325.62,-36 325.62,0 686.4,0 686.4,-36"/>
40 -<text text-anchor="middle" x="506.01" y="-13.8" font-family="Times,serif" font-size="14.00">v3 (frozen y$2 @ Call mutable foo$0(frozen $3, frozen y$2))</text>
41 -</g>
42 -<!-- v2&#45;&gt;v3 -->
43 -<g id="edge2" class="edge">
44 -<title>v2&#45;&gt;v3</title>
45 -<path fill="none" stroke="black" d="M635.93,-71.88C612.21,-62.22 582.39,-50.09 557.31,-39.88"/>
46 -<polygon fill="black" stroke="black" points="558.53,-36.6 547.95,-36.07 555.89,-43.08 558.53,-36.6"/>
47 -</g>
48 -<!-- v4 -->
49 -<g id="node5" class="node">
50 -<title>v4</title>
51 -<polygon fill="none" stroke="black" points="996.08,-36 703.93,-36 703.93,0 996.08,0 996.08,-36"/>
52 -<text text-anchor="middle" x="850.01" y="-13.8" font-family="Times,serif" font-size="14.00">v4 (frozen y$2 @ Binary frozen y$2 * frozen $5)</text>
53 -</g>
54 -<!-- v2&#45;&gt;v4 -->
55 -<g id="edge3" class="edge">
56 -<title>v2&#45;&gt;v4</title>
57 -<path fill="none" stroke="black" d="M720.08,-71.88C743.81,-62.22 773.62,-50.09 798.71,-39.88"/>
58 -<polygon fill="black" stroke="black" points="800.13,-43.08 808.07,-36.07 797.49,-36.6 800.13,-43.08"/>
59 -</g>
60 -<!-- v5 -->
61 -<g id="node6" class="node">
62 -<title>v5</title>
63 -<polygon fill="none" stroke="black" points="1296.05,-108 1085.96,-108 1085.96,-72 1296.05,-72 1296.05,-108"/>
64 -<text text-anchor="middle" x="1191.01" y="-85.8" font-family="Times,serif" font-size="14.00">v5 (frozen $3 @ frozen $3 = false)</text>
65 -</g>
66 -<!-- v6 -->
67 -<g id="node7" class="node">
68 -<title>v6</title>
69 -<polygon fill="none" stroke="black" points="1367.9,-36 1014.12,-36 1014.12,0 1367.9,0 1367.9,-36"/>
70 -<text text-anchor="middle" x="1191.01" y="-13.8" font-family="Times,serif" font-size="14.00">v6 (frozen $3 @ Call mutable foo$0(frozen $3, frozen y$2))</text>
71 -</g>
72 -<!-- v5&#45;&gt;v6 -->
73 -<g id="edge4" class="edge">
74 -<title>v5&#45;&gt;v6</title>
75 -<path fill="none" stroke="black" d="M1191.01,-71.7C1191.01,-63.98 1191.01,-54.71 1191.01,-46.11"/>
76 -<polygon fill="black" stroke="black" points="1194.51,-46.1 1191.01,-36.1 1187.51,-46.1 1194.51,-46.1"/>
77 -</g>
78 -<!-- v7 -->
79 -<g id="node8" class="node">
80 -<title>v7</title>
81 -<polygon fill="none" stroke="black" points="1736.04,-108 1313.97,-108 1313.97,-72 1736.04,-72 1736.04,-108"/>
82 -<text text-anchor="middle" x="1525.01" y="-85.8" font-family="Times,serif" font-size="14.00">v7 (frozen $4 @ frozen $4 = Call mutable foo$0(frozen $3, frozen y$2))</text>
83 -</g>
84 -<!-- v8 -->
85 -<g id="node9" class="node">
86 -<title>v8</title>
87 -<polygon fill="none" stroke="black" points="1630.33,-36 1419.68,-36 1419.68,0 1630.33,0 1630.33,-36"/>
88 -<text text-anchor="middle" x="1525.01" y="-13.8" font-family="Times,serif" font-size="14.00">v8 (frozen $4 @ Return frozen $4)</text>
89 -</g>
90 -<!-- v7&#45;&gt;v8 -->
91 -<g id="edge5" class="edge">
92 -<title>v7&#45;&gt;v8</title>
93 -<path fill="none" stroke="black" d="M1525.01,-71.7C1525.01,-63.98 1525.01,-54.71 1525.01,-46.11"/>
94 -<polygon fill="black" stroke="black" points="1528.51,-46.1 1525.01,-36.1 1521.51,-46.1 1528.51,-46.1"/>
95 -</g>
96 -<!-- v9 -->
97 -<g id="node10" class="node">
98 -<title>v9</title>
99 -<polygon fill="none" stroke="black" points="2135.9,-108 1754.12,-108 1754.12,-72 2135.9,-72 2135.9,-108"/>
100 -<text text-anchor="middle" x="1945.01" y="-85.8" font-family="Times,serif" font-size="14.00">v9 (mutable foo$0 @ Call mutable foo$0(frozen $3, frozen y$2))</text>
101 -</g>
102 -<!-- v10 -->
103 -<g id="node11" class="node">
104 -<title>v10</title>
105 -<polygon fill="none" stroke="black" points="2359.63,-108 2154.39,-108 2154.39,-72 2359.63,-72 2359.63,-108"/>
106 -<text text-anchor="middle" x="2257.01" y="-85.8" font-family="Times,serif" font-size="14.00">v10 (frozen $5 @ frozen $5 = 10)</text>
107 -</g>
108 -<!-- v11 -->
109 -<g id="node12" class="node">
110 -<title>v11</title>
111 -<polygon fill="none" stroke="black" points="2403.08,-36 2110.93,-36 2110.93,0 2403.08,0 2403.08,-36"/>
112 -<text text-anchor="middle" x="2257.01" y="-13.8" font-family="Times,serif" font-size="14.00">v11 (frozen $5 @ Binary frozen y$2 * frozen $5)</text>
113 -</g>
114 -<!-- v10&#45;&gt;v11 -->
115 -<g id="edge6" class="edge">
116 -<title>v10&#45;&gt;v11</title>
117 -<path fill="none" stroke="black" d="M2257.01,-71.7C2257.01,-63.98 2257.01,-54.71 2257.01,-46.11"/>
118 -<polygon fill="black" stroke="black" points="2260.51,-46.1 2257.01,-36.1 2253.51,-46.1 2260.51,-46.1"/>
119 -</g>
120 -<!-- v12 -->
121 -<g id="node13" class="node">
122 -<title>v12</title>
123 -<polygon fill="none" stroke="black" points="2738.23,-108 2377.79,-108 2377.79,-72 2738.23,-72 2738.23,-108"/>
124 -<text text-anchor="middle" x="2558.01" y="-85.8" font-family="Times,serif" font-size="14.00">v12 (frozen $6 @ frozen $6 = Binary frozen y$2 * frozen $5)</text>
125 -</g>
126 -<!-- v13 -->
127 -<g id="node14" class="node">
128 -<title>v13</title>
129 -<polygon fill="none" stroke="black" points="2668.7,-36 2447.32,-36 2447.32,0 2668.7,0 2668.7,-36"/>
130 -<text text-anchor="middle" x="2558.01" y="-13.8" font-family="Times,serif" font-size="14.00">v13 (frozen $6 @ Array [frozen $6])</text>
131 -</g>
132 -<!-- v12&#45;&gt;v13 -->
133 -<g id="edge7" class="edge">
134 -<title>v12&#45;&gt;v13</title>
135 -<path fill="none" stroke="black" d="M2558.01,-71.7C2558.01,-63.98 2558.01,-54.71 2558.01,-46.11"/>
136 -<polygon fill="black" stroke="black" points="2561.51,-46.1 2558.01,-36.1 2554.51,-46.1 2561.51,-46.1"/>
137 -</g>
138 -<!-- v14 -->
139 -<g id="node15" class="node">
140 -<title>v14</title>
141 -<polygon fill="none" stroke="black" points="3045.85,-108 2756.17,-108 2756.17,-72 3045.85,-72 3045.85,-108"/>
142 -<text text-anchor="middle" x="2901.01" y="-85.8" font-family="Times,serif" font-size="14.00">v14 (frozen $7 @ frozen $7 = Array [frozen $6])</text>
143 -</g>
144 -<!-- v15 -->
145 -<g id="node16" class="node">
146 -<title>v15</title>
147 -<polygon fill="none" stroke="black" points="3009.83,-36 2792.18,-36 2792.18,0 3009.83,0 3009.83,-36"/>
148 -<text text-anchor="middle" x="2901.01" y="-13.8" font-family="Times,serif" font-size="14.00">v15 (frozen $7 @ Return frozen $7)</text>
149 -</g>
150 -<!-- v14&#45;&gt;v15 -->
151 -<g id="edge8" class="edge">
152 -<title>v14&#45;&gt;v15</title>
153 -<path fill="none" stroke="black" d="M2901.01,-71.7C2901.01,-63.98 2901.01,-54.71 2901.01,-46.11"/>
154 -<polygon fill="black" stroke="black" points="2904.51,-46.1 2901.01,-36.1 2897.51,-46.1 2904.51,-46.1"/>
155 -</g>
156 -</g>
157 -</svg>
compiler/forget/src/__tests__/fixtures/hir-svg/switch.svg
+229 -273
@@ -3,343 +3,299 @@
3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 <!-- Generated by graphviz version 6.0.1 (20220924.0800)
5 -->
6 -<!-- Title: InferMutability Pages: 1 -->
7 -<svg width="3277pt" height="602pt"
8 - viewBox="0.00 0.00 3276.76 602.40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 598.4)">
10 -<title>InferMutability</title>
11 -<polygon fill="white" stroke="none" points="-4,4 -4,-598.4 3272.76,-598.4 3272.76,4 -4,4"/>
6 +<!-- Title: BuildDefUseGraph Pages: 1 -->
7 +<svg width="5273pt" height="476pt"
8 + viewBox="0.00 0.00 5272.64 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9 +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 472)">
10 +<title>BuildDefUseGraph</title>
11 +<polygon fill="white" stroke="none" points="-4,4 -4,-472 5268.64,-472 5268.64,4 -4,4"/>
12 <!-- v0 -->
13 <g id="node1" class="node">
14 <title>v0</title>
15 -<polygon fill="none" stroke="black" points="509.99,-594.4 303.15,-594.4 303.15,-558.4 509.99,-558.4 509.99,-594.4"/>
16 -<text text-anchor="middle" x="406.57" y="-572.2" font-family="Times,serif" font-size="14.00">v0 (frozen props$1 @ &lt;no&#45;instr&gt;)</text>
15 +<polygon fill="none" stroke="black" points="801.01,-468 476.34,-468 476.34,-432 801.01,-432 801.01,-468"/>
16 +<text text-anchor="middle" x="638.67" y="-445.8" font-family="Times,serif" font-size="14.00">v0 (readonly x$2 @ readonly x$2 = Array []) &lt;assign&gt;</text>
17 </g>
18 -<!-- v1 -->
18 +<!-- v7 -->
19 <g id="node2" class="node">
20 -<title>v1</title>
21 -<polygon fill="none" stroke="black" points="734.98,-521.4 78.17,-521.4 78.17,-485.4 734.98,-485.4 734.98,-521.4"/>
22 -<text text-anchor="middle" x="406.57" y="-499.2" font-family="Times,serif" font-size="14.00">v1 (frozen props$1.p0 @ Switch (frozen props$1.p0); &#160;&#160;Case frozen $5: bb4; &#160;&#160;Case frozen $4: bb2; &#160;&#160;Default: bb1)</text>
20 +<title>v7</title>
21 +<polygon fill="none" stroke="black" points="611.1,-396 154.24,-396 154.24,-360 611.1,-360 611.1,-396"/>
22 +<text text-anchor="middle" x="382.67" y="-373.8" font-family="Times,serif" font-size="14.00">v7 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
23 </g>
24 -<!-- v0&#45;&gt;v1 -->
24 +<!-- v0&#45;&gt;v7 -->
25 <g id="edge1" class="edge">
26 -<title>v0&#45;&gt;v1</title>
27 -<path fill="none" stroke="black" d="M406.57,-558.21C406.57,-550.19 406.57,-540.45 406.57,-531.47"/>
28 -<polygon fill="black" stroke="black" points="410.07,-531.43 406.57,-521.43 403.07,-531.43 410.07,-531.43"/>
26 +<title>v0&#45;&gt;v7</title>
27 +<path fill="none" stroke="black" d="M576.37,-431.97C539.83,-421.97 493.48,-409.3 455.28,-398.85"/>
28 +<polygon fill="black" stroke="black" points="455.82,-395.37 445.25,-396.11 453.97,-402.12 455.82,-395.37"/>
29 </g>
30 <!-- v12 -->
31 -<g id="node13" class="node">
32 -<title>v12</title>
33 -<polygon fill="none" stroke="black" points="409.21,-448.4 -0.07,-448.4 -0.07,-412.4 409.21,-412.4 409.21,-448.4"/>
34 -<text text-anchor="middle" x="204.57" y="-426.2" font-family="Times,serif" font-size="14.00">v12 (frozen props$1.p2 @ Call mutable x$2.push(frozen props$1.p2))</text>
35 -</g>
36 -<!-- v1&#45;&gt;v12 -->
37 -<g id="edge8" class="edge">
38 -<title>v1&#45;&gt;v12</title>
39 -<path fill="none" stroke="black" d="M358.19,-485.39C329.54,-475.32 293.06,-462.5 262.83,-451.88"/>
40 -<polygon fill="black" stroke="black" points="263.85,-448.53 253.26,-448.51 261.53,-455.13 263.85,-448.53"/>
41 -</g>
42 -<!-- v13 -->
43 -<g id="node14" class="node">
44 -<title>v13</title>
45 -<polygon fill="none" stroke="black" points="467.37,-359.6 67.77,-359.6 67.77,-323.6 467.37,-323.6 467.37,-359.6"/>
46 -<text text-anchor="middle" x="267.57" y="-337.4" font-family="Times,serif" font-size="14.00">v13 (frozen props$1.p4 @ Call frozen y$3.push(frozen props$1.p4))</text>
47 -</g>
48 -<!-- v1&#45;&gt;v13 -->
49 -<g id="edge9" class="edge">
50 -<title>v1&#45;&gt;v13</title>
51 -<path fill="none" stroke="black" d="M420.72,-485.28C434.64,-466.22 451.77,-435.13 436.57,-412.4 421.01,-389.14 396.12,-373.62 370.17,-363.27"/>
52 -<polygon fill="black" stroke="black" points="371.17,-359.9 360.58,-359.68 368.72,-366.46 371.17,-359.9"/>
53 -</g>
54 -<!-- v2 -->
31 <g id="node3" class="node">
56 -<title>v2</title>
57 -<polygon fill="none" stroke="black" points="1172.85,-594.4 910.29,-594.4 910.29,-558.4 1172.85,-558.4 1172.85,-594.4"/>
58 -<text text-anchor="middle" x="1041.57" y="-572.2" font-family="Times,serif" font-size="14.00">v2 (mutable x$2 @ mutable x$2 = Array [])</text>
59 -</g>
60 -<!-- v3 -->
61 -<g id="node4" class="node">
62 -<title>v3</title>
63 -<polygon fill="none" stroke="black" points="1241.4,-521.4 841.75,-521.4 841.75,-485.4 1241.4,-485.4 1241.4,-521.4"/>
64 -<text text-anchor="middle" x="1041.57" y="-499.2" font-family="Times,serif" font-size="14.00">v3 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p2))</text>
32 +<title>v12</title>
33 +<polygon fill="none" stroke="black" points="583.46,-252 309.89,-252 309.89,-216 583.46,-216 583.46,-252"/>
34 +<text text-anchor="middle" x="446.67" y="-229.8" font-family="Times,serif" font-size="14.00">v12 (readonly x$2 @ readonly x$2) &lt;update&gt;</text>
35 </g>
66 -<!-- v2&#45;&gt;v3 -->
36 +<!-- v0&#45;&gt;v12 -->
37 <g id="edge2" class="edge">
68 -<title>v2&#45;&gt;v3</title>
69 -<path fill="none" stroke="black" d="M1041.57,-558.21C1041.57,-550.19 1041.57,-540.45 1041.57,-531.47"/>
70 -<polygon fill="black" stroke="black" points="1045.07,-531.43 1041.57,-521.43 1038.07,-531.43 1045.07,-531.43"/>
38 +<title>v0&#45;&gt;v12</title>
39 +<path fill="none" stroke="black" d="M642.19,-431.62C647.67,-399.31 654.3,-329.49 619.67,-288 608.04,-274.06 592.84,-263.72 576.28,-256.05"/>
40 +<polygon fill="black" stroke="black" points="577.52,-252.77 566.95,-252.06 574.77,-259.21 577.52,-252.77"/>
41 </g>
72 -<!-- v4 -->
73 -<g id="node5" class="node">
74 -<title>v4</title>
75 -<polygon fill="none" stroke="black" points="1171.48,-448.4 969.66,-448.4 969.66,-412.4 1171.48,-412.4 1171.48,-448.4"/>
76 -<text text-anchor="middle" x="1070.57" y="-426.2" font-family="Times,serif" font-size="14.00">v4 (mutable x$2 @ mutable x$2)</text>
42 +<!-- v15 -->
43 +<g id="node4" class="node">
44 +<title>v15</title>
45 +<polygon fill="none" stroke="black" points="975.63,-180 377.71,-180 377.71,-144 975.63,-144 975.63,-180"/>
46 +<text text-anchor="middle" x="676.67" y="-157.8" font-family="Times,serif" font-size="14.00">v15 (frozen x$2 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
47 </g>
78 -<!-- v2&#45;&gt;v4 -->
48 +<!-- v0&#45;&gt;v15 -->
49 <g id="edge3" class="edge">
80 -<title>v2&#45;&gt;v4</title>
81 -<path fill="none" stroke="black" d="M1172.81,-558.38C1215.6,-549.94 1255.51,-537.93 1268.57,-521.4 1300.34,-481.18 1242.76,-458.31 1181.64,-445.7"/>
82 -<polygon fill="black" stroke="black" points="1182.3,-442.26 1171.81,-443.76 1180.95,-449.13 1182.3,-442.26"/>
83 -</g>
84 -<!-- v5 -->
85 -<g id="node6" class="node">
86 -<title>v5</title>
87 -<polygon fill="none" stroke="black" points="1093.88,-359.6 533.26,-359.6 533.26,-323.6 1093.88,-323.6 1093.88,-359.6"/>
88 -<text text-anchor="middle" x="813.57" y="-337.4" font-family="Times,serif" font-size="14.00">v5 (readonly x$2 @ JSX &lt;frozen Component$0 data={readonly x$2} &gt;&lt;/frozen Component$0&gt;)</text>
50 +<title>v0&#45;&gt;v15</title>
51 +<path fill="none" stroke="black" d="M647.48,-431.81C652.25,-421.66 657.75,-408.41 660.67,-396 677.79,-323.23 678.55,-234.42 677.63,-190.42"/>
52 +<polygon fill="black" stroke="black" points="681.13,-190.15 677.37,-180.24 674.13,-190.32 681.13,-190.15"/>
53 </g>
90 -<!-- v2&#45;&gt;v5 -->
91 -<g id="edge4" class="edge">
92 -<title>v2&#45;&gt;v5</title>
93 -<path fill="none" stroke="black" d="M930.31,-558.39C887.81,-549.56 846.25,-537.25 832.57,-521.4 796.04,-479.06 801.33,-408.41 807.8,-369.81"/>
94 -<polygon fill="black" stroke="black" points="811.27,-370.29 809.63,-359.83 804.39,-369.04 811.27,-370.29"/>
54 +<!-- v9 -->
55 +<g id="node15" class="node">
56 +<title>v9</title>
57 +<polygon fill="none" stroke="black" points="611.1,-324 154.24,-324 154.24,-288 611.1,-288 611.1,-324"/>
58 +<text text-anchor="middle" x="382.67" y="-301.8" font-family="Times,serif" font-size="14.00">v9 (mutable x$2.push @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
59 </g>
96 -<!-- v3&#45;&gt;v3 -->
60 +<!-- v7&#45;&gt;v9 -->
61 <g id="edge10" class="edge">
98 -<title>v3&#45;&gt;v3</title>
99 -<path fill="none" stroke="black" d="M1241.53,-508.02C1252.78,-506.9 1259.48,-505.36 1259.48,-503.4 1259.48,-502.14 1256.73,-501.06 1251.8,-500.15"/>
100 -<polygon fill="black" stroke="black" points="1251.9,-496.63 1241.53,-498.78 1250.98,-503.57 1251.9,-496.63"/>
101 -</g>
102 -<!-- v3&#45;&gt;v4 -->
103 -<g id="edge11" class="edge">
104 -<title>v3&#45;&gt;v4</title>
105 -<path fill="none" stroke="black" d="M1042.71,-485.21C1045.23,-476.93 1049.14,-466.81 1053.33,-457.59"/>
106 -<polygon fill="black" stroke="black" points="1056.56,-458.96 1057.75,-448.43 1050.26,-455.91 1056.56,-458.96"/>
62 +<title>v7&#45;&gt;v9</title>
63 +<path fill="none" stroke="black" d="M382.67,-359.7C382.67,-351.98 382.67,-342.71 382.67,-334.11"/>
64 +<polygon fill="black" stroke="black" points="386.17,-334.1 382.67,-324.1 379.17,-334.1 386.17,-334.1"/>
65 </g>
108 -<!-- v3&#45;&gt;v5 -->
109 -<g id="edge12" class="edge">
110 -<title>v3&#45;&gt;v5</title>
111 -<path fill="none" stroke="black" d="M1015.51,-485.37C999.55,-474.85 978.77,-461.01 960.57,-448.4 920.35,-420.53 874.7,-387.44 845.09,-365.78"/>
112 -<polygon fill="black" stroke="black" points="846.95,-362.8 836.81,-359.72 842.81,-368.45 846.95,-362.8"/>
113 -</g>
114 -<!-- v4&#45;&gt;v3 -->
115 -<g id="edge18" class="edge">
116 -<title>v4&#45;&gt;v3</title>
117 -<path fill="none" stroke="black" d="M1069.48,-448.43C1066.98,-456.69 1063.08,-466.8 1058.89,-476.03"/>
118 -<polygon fill="black" stroke="black" points="1055.65,-474.68 1054.47,-485.21 1061.96,-477.72 1055.65,-474.68"/>
119 -</g>
120 -<!-- v4&#45;&gt;v4 -->
121 -<g id="edge19" class="edge">
122 -<title>v4&#45;&gt;v4</title>
123 -<path fill="none" stroke="black" d="M1171.67,-436.11C1182.54,-435.01 1189.53,-433.11 1189.53,-430.4 1189.53,-428.66 1186.66,-427.26 1181.74,-426.18"/>
124 -<polygon fill="black" stroke="black" points="1182.08,-422.7 1171.67,-424.69 1181.05,-429.62 1182.08,-422.7"/>
125 -</g>
126 -<!-- v4&#45;&gt;v5 -->
127 -<g id="edge20" class="edge">
128 -<title>v4&#45;&gt;v5</title>
129 -<path fill="none" stroke="black" d="M1020.1,-412.35C978.02,-398.14 917.97,-377.86 873.46,-362.83"/>
130 -<polygon fill="black" stroke="black" points="874.52,-359.49 863.92,-359.61 872.28,-366.12 874.52,-359.49"/>
131 -</g>
132 -<!-- v15 -->
133 -<g id="node16" class="node">
134 -<title>v15</title>
135 -<polygon fill="none" stroke="black" points="1405.47,-359.6 1111.67,-359.6 1111.67,-323.6 1405.47,-323.6 1405.47,-359.6"/>
136 -<text text-anchor="middle" x="1258.57" y="-337.4" font-family="Times,serif" font-size="14.00">v15 (mutable y$3 @ mutable y$3 = mutable x$2)</text>
66 +<!-- v12&#45;&gt;v15 -->
67 +<g id="edge15" class="edge">
68 +<title>v12&#45;&gt;v15</title>
69 +<path fill="none" stroke="black" d="M502.64,-215.97C535.2,-206.06 576.41,-193.51 610.56,-183.12"/>
70 +<polygon fill="black" stroke="black" points="611.9,-186.37 620.45,-180.11 609.86,-179.67 611.9,-186.37"/>
71 </g>
138 -<!-- v4&#45;&gt;v15 -->
139 -<g id="edge17" class="edge">
140 -<title>v4&#45;&gt;v15</title>
141 -<path fill="none" stroke="black" d="M1082.75,-412.03C1091.64,-400.61 1104.67,-386.23 1119.38,-377.6 1129.18,-371.84 1139.92,-367.03 1150.93,-363"/>
142 -<polygon fill="black" stroke="black" points="1152.35,-366.22 1160.67,-359.66 1150.08,-359.59 1152.35,-366.22"/>
143 -<text text-anchor="middle" x="1140.17" y="-381.8" font-family="Times,serif" font-size="14.00">capture</text>
72 +<!-- v13 -->
73 +<g id="node18" class="node">
74 +<title>v13</title>
75 +<polygon fill="none" stroke="black" points="359.51,-180 -0.17,-180 -0.17,-144 359.51,-144 359.51,-180"/>
76 +<text text-anchor="middle" x="179.67" y="-157.8" font-family="Times,serif" font-size="14.00">v13 (readonly y$3 @ readonly y$3 = readonly x$2) &lt;assign&gt;</text>
77 </g>
145 -<!-- v16 -->
146 -<g id="node17" class="node">
147 -<title>v16</title>
148 -<polygon fill="none" stroke="black" points="1213.29,-270.8 541.85,-270.8 541.85,-234.8 1213.29,-234.8 1213.29,-270.8"/>
149 -<text text-anchor="middle" x="877.57" y="-248.6" font-family="Times,serif" font-size="14.00">v16 (frozen child$6 @ frozen child$6 = JSX &lt;frozen Component$0 data={readonly x$2} &gt;&lt;/frozen Component$0&gt;)</text>
78 +<!-- v12&#45;&gt;v13 -->
79 +<g id="edge14" class="edge">
80 +<title>v12&#45;&gt;v13</title>
81 +<path fill="none" stroke="black" d="M381.7,-215.97C343.34,-205.91 294.62,-193.14 254.64,-182.65"/>
82 +<polygon fill="black" stroke="black" points="255.5,-179.26 244.94,-180.11 253.72,-186.03 255.5,-179.26"/>
83 </g>
151 -<!-- v5&#45;&gt;v16 -->
152 -<g id="edge23" class="edge">
153 -<title>v5&#45;&gt;v16</title>
154 -<path fill="none" stroke="black" d="M809.72,-323.56C808.25,-312.84 808.18,-299.14 814.38,-288.8 817.05,-284.34 820.51,-280.41 824.44,-276.95"/>
155 -<polygon fill="black" stroke="black" points="826.62,-279.7 832.48,-270.87 822.4,-274.11 826.62,-279.7"/>
156 -<text text-anchor="middle" x="835.17" y="-293" font-family="Times,serif" font-size="14.00">capture</text>
84 +<!-- v1 -->
85 +<g id="node5" class="node">
86 +<title>v1</title>
87 +<polygon fill="none" stroke="black" points="1328.01,-180 993.33,-180 993.33,-144 1328.01,-144 1328.01,-180"/>
88 +<text text-anchor="middle" x="1160.67" y="-157.8" font-family="Times,serif" font-size="14.00">v1 (readonly y$3 @ readonly y$3 = undefined) &lt;assign&gt;</text>
89 </g>
90 <!-- v17 -->
159 -<g id="node18" class="node">
91 +<g id="node6" class="node">
92 <title>v17</title>
161 -<polygon fill="none" stroke="black" points="916.1,-197.8 259.04,-197.8 259.04,-161.8 916.1,-161.8 916.1,-197.8"/>
162 -<text text-anchor="middle" x="587.57" y="-175.6" font-family="Times,serif" font-size="14.00">v17 (frozen child$6 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;)</text>
93 +<polygon fill="none" stroke="black" points="902.6,-108 438.74,-108 438.74,-72 902.6,-72 902.6,-108"/>
94 +<text text-anchor="middle" x="670.67" y="-85.8" font-family="Times,serif" font-size="14.00">v17 (mutable y$3.push @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
95 </g>
164 -<!-- v5&#45;&gt;v17 -->
165 -<g id="edge29" class="edge">
166 -<title>v5&#45;&gt;v17</title>
167 -<path fill="none" stroke="black" d="M645.94,-323.58C578.57,-312.96 511.95,-296.3 491.38,-270.8 481.33,-258.35 483.29,-248.61 491.38,-234.8 499.39,-221.11 512.3,-210.62 526.08,-202.7"/>
168 -<polygon fill="black" stroke="black" points="528.03,-205.63 535.23,-197.86 524.75,-199.44 528.03,-205.63"/>
169 -<text text-anchor="middle" x="512.17" y="-248.6" font-family="Times,serif" font-size="14.00">capture</text>
96 +<!-- v1&#45;&gt;v17 -->
97 +<g id="edge4" class="edge">
98 +<title>v1&#45;&gt;v17</title>
99 +<path fill="none" stroke="black" d="M1041.43,-143.97C968.37,-133.53 874.83,-120.17 799.99,-109.47"/>
100 +<polygon fill="black" stroke="black" points="800.42,-106 790.02,-108.05 799.43,-112.93 800.42,-106"/>
101 </g>
171 -<!-- v6 -->
102 +<!-- v20 -->
103 +<g id="node23" class="node">
104 +<title>v20</title>
105 +<polygon fill="none" stroke="black" points="1016.82,-36 324.52,-36 324.52,0 1016.82,0 1016.82,-36"/>
106 +<text text-anchor="middle" x="670.67" y="-13.8" font-family="Times,serif" font-size="14.00">v20 (frozen y$3 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
107 +</g>
108 +<!-- v17&#45;&gt;v20 -->
109 +<g id="edge19" class="edge">
110 +<title>v17&#45;&gt;v20</title>
111 +<path fill="none" stroke="black" d="M670.67,-71.7C670.67,-63.98 670.67,-54.71 670.67,-46.11"/>
112 +<polygon fill="black" stroke="black" points="674.17,-46.1 670.67,-36.1 667.17,-46.1 674.17,-46.1"/>
113 +</g>
114 +<!-- v2 -->
115 <g id="node7" class="node">
173 -<title>v6</title>
174 -<polygon fill="none" stroke="black" points="1677.67,-359.6 1423.48,-359.6 1423.48,-323.6 1677.67,-323.6 1677.67,-359.6"/>
175 -<text text-anchor="middle" x="1550.57" y="-337.4" font-family="Times,serif" font-size="14.00">v6 (frozen y$3 @ frozen y$3 = undefined)</text>
116 +<title>v2</title>
117 +<polygon fill="none" stroke="black" points="1202.46,-468 910.88,-468 910.88,-432 1202.46,-432 1202.46,-468"/>
118 +<text text-anchor="middle" x="1056.67" y="-445.8" font-family="Times,serif" font-size="14.00">v2 (readonly $4 @ readonly $4 = false) &lt;assign&gt;</text>
119 </g>
177 -<!-- v7 -->
120 +<!-- v6 -->
121 <g id="node8" class="node">
179 -<title>v7</title>
180 -<polygon fill="none" stroke="black" points="1741.21,-270.8 1359.94,-270.8 1359.94,-234.8 1741.21,-234.8 1741.21,-270.8"/>
181 -<text text-anchor="middle" x="1550.57" y="-248.6" font-family="Times,serif" font-size="14.00">v7 (frozen y$3.push @ Call frozen y$3.push(frozen props$1.p4))</text>
122 +<title>v6</title>
123 +<polygon fill="none" stroke="black" points="1408.76,-396 704.59,-396 704.59,-360 1408.76,-360 1408.76,-396"/>
124 +<text text-anchor="middle" x="1056.67" y="-373.8" font-family="Times,serif" font-size="14.00">v6 (readonly $4 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
125 </g>
183 -<!-- v6&#45;&gt;v7 -->
126 +<!-- v2&#45;&gt;v6 -->
127 <g id="edge5" class="edge">
185 -<title>v6&#45;&gt;v7</title>
186 -<path fill="none" stroke="black" d="M1550.57,-323.45C1550.57,-311.32 1550.57,-294.82 1550.57,-280.92"/>
187 -<polygon fill="black" stroke="black" points="1554.07,-280.91 1550.57,-270.91 1547.07,-280.91 1554.07,-280.91"/>
188 -</g>
189 -<!-- v20 -->
190 -<g id="node21" class="node">
191 -<title>v20</title>
192 -<polygon fill="none" stroke="black" points="1868.61,-197.8 1232.53,-197.8 1232.53,-161.8 1868.61,-161.8 1868.61,-197.8"/>
193 -<text text-anchor="middle" x="1550.57" y="-175.6" 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;)</text>
194 -</g>
195 -<!-- v7&#45;&gt;v20 -->
196 -<g id="edge26" class="edge">
197 -<title>v7&#45;&gt;v20</title>
198 -<path fill="none" stroke="black" d="M1550.57,-234.61C1550.57,-226.59 1550.57,-216.85 1550.57,-207.87"/>
199 -<polygon fill="black" stroke="black" points="1554.07,-207.83 1550.57,-197.83 1547.07,-207.83 1554.07,-207.83"/>
128 +<title>v2&#45;&gt;v6</title>
129 +<path fill="none" stroke="black" d="M1056.67,-431.7C1056.67,-423.98 1056.67,-414.71 1056.67,-406.11"/>
130 +<polygon fill="black" stroke="black" points="1060.17,-406.1 1056.67,-396.1 1053.17,-406.1 1060.17,-406.1"/>
131 </g>
201 -<!-- v8 -->
132 +<!-- v3 -->
133 <g id="node9" class="node">
203 -<title>v8</title>
204 -<polygon fill="none" stroke="black" points="1724.62,-594.4 1514.53,-594.4 1514.53,-558.4 1724.62,-558.4 1724.62,-594.4"/>
205 -<text text-anchor="middle" x="1619.57" y="-572.2" font-family="Times,serif" font-size="14.00">v8 (frozen $4 @ frozen $4 = false)</text>
134 +<title>v3</title>
135 +<polygon fill="none" stroke="black" points="1921.8,-468 1635.54,-468 1635.54,-432 1921.8,-432 1921.8,-468"/>
136 +<text text-anchor="middle" x="1778.67" y="-445.8" font-family="Times,serif" font-size="14.00">v3 (readonly $5 @ readonly $5 = true) &lt;assign&gt;</text>
137 </g>
207 -<!-- v9 -->
138 +<!-- v5 -->
139 <g id="node10" class="node">
209 -<title>v9</title>
210 -<polygon fill="none" stroke="black" points="1923.36,-521.4 1315.78,-521.4 1315.78,-485.4 1923.36,-485.4 1923.36,-521.4"/>
211 -<text text-anchor="middle" x="1619.57" y="-499.2" font-family="Times,serif" font-size="14.00">v9 (frozen $4 @ Switch (frozen props$1.p0); &#160;&#160;Case frozen $5: bb4; &#160;&#160;Case frozen $4: bb2; &#160;&#160;Default: bb1)</text>
140 +<title>v5</title>
141 +<polygon fill="none" stroke="black" points="2130.76,-396 1426.59,-396 1426.59,-360 2130.76,-360 2130.76,-396"/>
142 +<text text-anchor="middle" x="1778.67" y="-373.8" font-family="Times,serif" font-size="14.00">v5 (readonly $5 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
143 </g>
213 -<!-- v8&#45;&gt;v9 -->
144 +<!-- v3&#45;&gt;v5 -->
145 <g id="edge6" class="edge">
215 -<title>v8&#45;&gt;v9</title>
216 -<path fill="none" stroke="black" d="M1619.57,-558.21C1619.57,-550.19 1619.57,-540.45 1619.57,-531.47"/>
217 -<polygon fill="black" stroke="black" points="1623.07,-531.43 1619.57,-521.43 1616.07,-531.43 1623.07,-531.43"/>
146 +<title>v3&#45;&gt;v5</title>
147 +<path fill="none" stroke="black" d="M1778.67,-431.7C1778.67,-423.98 1778.67,-414.71 1778.67,-406.11"/>
148 +<polygon fill="black" stroke="black" points="1782.17,-406.1 1778.67,-396.1 1775.17,-406.1 1782.17,-406.1"/>
149 </g>
219 -<!-- v10 -->
150 +<!-- v4 -->
151 <g id="node11" class="node">
221 -<title>v10</title>
222 -<polygon fill="none" stroke="black" points="2354.95,-594.4 2142.19,-594.4 2142.19,-558.4 2354.95,-558.4 2354.95,-594.4"/>
223 -<text text-anchor="middle" x="2248.57" y="-572.2" font-family="Times,serif" font-size="14.00">v10 (frozen $5 @ frozen $5 = true)</text>
152 +<title>v4</title>
153 +<polygon fill="none" stroke="black" points="2888.64,-396 2148.7,-396 2148.7,-360 2888.64,-360 2888.64,-396"/>
154 +<text text-anchor="middle" x="2518.67" y="-373.8" font-family="Times,serif" font-size="14.00">v4 (frozen props$1.p0 @ Switch (frozen props$1.p0); &#160;&#160;Case readonly $5: bb4; &#160;&#160;Case readonly $4: bb2; &#160;&#160;Default: bb1) &lt;update&gt;</text>
155 </g>
225 -<!-- v11 -->
156 +<!-- v8 -->
157 <g id="node12" class="node">
227 -<title>v11</title>
228 -<polygon fill="none" stroke="black" points="2555.86,-521.4 1941.28,-521.4 1941.28,-485.4 2555.86,-485.4 2555.86,-521.4"/>
229 -<text text-anchor="middle" x="2248.57" y="-499.2" font-family="Times,serif" font-size="14.00">v11 (frozen $5 @ Switch (frozen props$1.p0); &#160;&#160;Case frozen $5: bb4; &#160;&#160;Case frozen $4: bb2; &#160;&#160;Default: bb1)</text>
158 +<title>v8</title>
159 +<polygon fill="none" stroke="black" points="2488.92,-324 2030.42,-324 2030.42,-288 2488.92,-288 2488.92,-324"/>
160 +<text text-anchor="middle" x="2259.67" y="-301.8" font-family="Times,serif" font-size="14.00">v8 (frozen props$1.p2 @ Call mutable x$2.push(frozen props$1.p2)) &lt;update&gt;</text>
161 </g>
231 -<!-- v10&#45;&gt;v11 -->
162 +<!-- v4&#45;&gt;v8 -->
163 <g id="edge7" class="edge">
233 -<title>v10&#45;&gt;v11</title>
234 -<path fill="none" stroke="black" d="M2248.57,-558.21C2248.57,-550.19 2248.57,-540.45 2248.57,-531.47"/>
235 -<polygon fill="black" stroke="black" points="2252.07,-531.43 2248.57,-521.43 2245.07,-531.43 2252.07,-531.43"/>
164 +<title>v4&#45;&gt;v8</title>
165 +<path fill="none" stroke="black" d="M2455.64,-359.97C2418.51,-349.93 2371.38,-337.19 2332.64,-326.72"/>
166 +<polygon fill="black" stroke="black" points="2333.55,-323.34 2322.98,-324.11 2331.72,-330.1 2333.55,-323.34"/>
167 +</g>
168 +<!-- v18 -->
169 +<g id="node13" class="node">
170 +<title>v18</title>
171 +<polygon fill="none" stroke="black" points="2719.42,-108 2253.92,-108 2253.92,-72 2719.42,-72 2719.42,-108"/>
172 +<text text-anchor="middle" x="2486.67" y="-85.8" font-family="Times,serif" font-size="14.00">v18 (frozen props$1.p4 @ Call mutable y$3.push(frozen props$1.p4)) &lt;update&gt;</text>
173 +</g>
174 +<!-- v4&#45;&gt;v18 -->
175 +<g id="edge8" class="edge">
176 +<title>v4&#45;&gt;v18</title>
177 +<path fill="none" stroke="black" d="M2526.56,-359.75C2530.78,-349.58 2535.53,-336.33 2537.67,-324 2551.37,-245.18 2567.57,-218.2 2537.67,-144 2533.32,-133.21 2525.61,-123.39 2517.48,-115.21"/>
178 +<polygon fill="black" stroke="black" points="2519.67,-112.46 2509.98,-108.18 2514.88,-117.57 2519.67,-112.46"/>
179 +</g>
180 +<!-- v25 -->
181 +<g id="node14" class="node">
182 +<title>v25</title>
183 +<polygon fill="none" stroke="black" points="2528.41,-180 2304.93,-180 2304.93,-144 2528.41,-144 2528.41,-180"/>
184 +<text text-anchor="middle" x="2416.67" y="-157.8" font-family="Times,serif" font-size="14.00">v25 (&lt;join&gt; @ &lt;no&#45;instr&gt;) &lt;update&gt;</text>
185 +</g>
186 +<!-- v4&#45;&gt;v25 -->
187 +<g id="edge9" class="edge">
188 +<title>v4&#45;&gt;v25</title>
189 +<path fill="none" stroke="black" d="M2521.14,-359.94C2524.75,-328.75 2528.23,-261.55 2499.67,-216 2491.78,-203.41 2479.67,-193.25 2467.13,-185.34"/>
190 +<polygon fill="black" stroke="black" points="2468.81,-182.27 2458.42,-180.21 2465.26,-188.3 2468.81,-182.27"/>
191 +</g>
192 +<!-- v10 -->
193 +<g id="node16" class="node">
194 +<title>v10</title>
195 +<polygon fill="none" stroke="black" points="2490.42,-252 2024.92,-252 2024.92,-216 2490.42,-216 2490.42,-252"/>
196 +<text text-anchor="middle" x="2257.67" y="-229.8" font-family="Times,serif" font-size="14.00">v10 (frozen props$1.p3 @ Call mutable x$2.push(frozen props$1.p3)) &lt;update&gt;</text>
197 +</g>
198 +<!-- v8&#45;&gt;v10 -->
199 +<g id="edge11" class="edge">
200 +<title>v8&#45;&gt;v10</title>
201 +<path fill="none" stroke="black" d="M2259.18,-287.7C2258.96,-279.98 2258.69,-270.71 2258.45,-262.11"/>
202 +<polygon fill="black" stroke="black" points="2261.94,-262 2258.16,-252.1 2254.95,-262.2 2261.94,-262"/>
203 +</g>
204 +<!-- v25&#45;&gt;v18 -->
205 +<g id="edge22" class="edge">
206 +<title>v25&#45;&gt;v18</title>
207 +<path fill="none" stroke="black" d="M2433.97,-143.7C2442.54,-135.14 2453.01,-124.66 2462.37,-115.3"/>
208 +<polygon fill="black" stroke="black" points="2464.97,-117.65 2469.57,-108.1 2460.02,-112.7 2464.97,-117.65"/>
209 </g>
237 -<!-- v12&#45;&gt;v12 -->
210 +<!-- v9&#45;&gt;v12 -->
211 +<g id="edge12" class="edge">
212 +<title>v9&#45;&gt;v12</title>
213 +<path fill="none" stroke="black" d="M398.49,-287.7C406.24,-279.22 415.71,-268.86 424.2,-259.58"/>
214 +<polygon fill="black" stroke="black" points="426.87,-261.85 431.03,-252.1 421.7,-257.12 426.87,-261.85"/>
215 +</g>
216 +<!-- v10&#45;&gt;v25 -->
217 <g id="edge13" class="edge">
239 -<title>v12&#45;&gt;v12</title>
240 -<path fill="none" stroke="black" d="M409.42,-434.96C420.54,-433.84 427.14,-432.32 427.14,-430.4 427.14,-429.17 424.43,-428.1 419.56,-427.2"/>
241 -<polygon fill="black" stroke="black" points="419.8,-423.7 409.42,-425.84 418.87,-430.64 419.8,-423.7"/>
218 +<title>v10&#45;&gt;v25</title>
219 +<path fill="none" stroke="black" d="M2296.57,-215.88C2318.3,-206.31 2345.57,-194.3 2368.64,-184.15"/>
220 +<polygon fill="black" stroke="black" points="2370.16,-187.3 2377.9,-180.07 2367.34,-180.89 2370.16,-187.3"/>
221 </g>
243 -<!-- v12&#45;&gt;v13 -->
244 -<g id="edge14" class="edge">
245 -<title>v12&#45;&gt;v13</title>
246 -<path fill="none" stroke="black" d="M217.02,-412.25C226.16,-399.65 238.74,-382.32 249.07,-368.1"/>
247 -<polygon fill="black" stroke="black" points="252.11,-369.86 255.15,-359.71 246.44,-365.75 252.11,-369.86"/>
222 +<!-- v11 -->
223 +<g id="node17" class="node">
224 +<title>v11</title>
225 +<polygon fill="none" stroke="black" points="3002.51,-468 2670.84,-468 2670.84,-432 3002.51,-432 3002.51,-468"/>
226 +<text text-anchor="middle" x="2836.67" y="-445.8" font-family="Times,serif" font-size="14.00">v11 (readonly y$3 @ readonly y$3 = Array []) &lt;assign&gt;</text>
227 +</g>
228 +<!-- v13&#45;&gt;v17 -->
229 +<g id="edge16" class="edge">
230 +<title>v13&#45;&gt;v17</title>
231 +<path fill="none" stroke="black" d="M299.16,-143.97C372.37,-133.53 466.1,-120.17 541.09,-109.47"/>
232 +<polygon fill="black" stroke="black" points="541.67,-112.93 551.08,-108.05 540.68,-106 541.67,-112.93"/>
233 </g>
234 <!-- v14 -->
250 -<g id="node15" class="node">
235 +<g id="node19" class="node">
236 <title>v14</title>
252 -<polygon fill="none" stroke="black" points="1945.66,-359.6 1695.48,-359.6 1695.48,-323.6 1945.66,-323.6 1945.66,-359.6"/>
253 -<text text-anchor="middle" x="1820.57" y="-337.4" font-family="Times,serif" font-size="14.00">v14 (frozen y$3 @ frozen y$3 = Array [])</text>
237 +<polygon fill="none" stroke="black" points="3676.97,-468 3020.38,-468 3020.38,-432 3676.97,-432 3676.97,-468"/>
238 +<text text-anchor="middle" x="3348.67" y="-445.8" font-family="Times,serif" font-size="14.00">v14 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
239 </g>
255 -<!-- v14&#45;&gt;v7 -->
256 -<g id="edge15" class="edge">
257 -<title>v14&#45;&gt;v7</title>
258 -<path fill="none" stroke="black" d="M1767.55,-323.55C1723.25,-309.31 1659.98,-288.97 1613.19,-273.93"/>
259 -<polygon fill="black" stroke="black" points="1614.06,-270.53 1603.47,-270.81 1611.92,-277.2 1614.06,-270.53"/>
240 +<!-- v19 -->
241 +<g id="node20" class="node">
242 +<title>v19</title>
243 +<polygon fill="none" stroke="black" points="3724.15,-396 2973.19,-396 2973.19,-360 3724.15,-360 3724.15,-396"/>
244 +<text text-anchor="middle" x="3348.67" y="-373.8" font-family="Times,serif" font-size="14.00">v19 (frozen Component$0 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
245 </g>
261 -<!-- v15&#45;&gt;v4 -->
262 -<g id="edge21" class="edge">
263 -<title>v15&#45;&gt;v4</title>
264 -<path fill="none" stroke="black" d="M1228.56,-359.62C1209.39,-370.2 1183.85,-383.76 1160.57,-394.4 1149.96,-399.25 1138.46,-404.05 1127.35,-408.47"/>
265 -<polygon fill="black" stroke="black" points="1125.74,-405.34 1117.71,-412.25 1128.3,-411.85 1125.74,-405.34"/>
266 -<text text-anchor="middle" x="1214.17" y="-381.8" font-family="Times,serif" font-size="14.00">capture</text>
246 +<!-- v14&#45;&gt;v19 -->
247 +<g id="edge17" class="edge">
248 +<title>v14&#45;&gt;v19</title>
249 +<path fill="none" stroke="black" d="M3348.67,-431.7C3348.67,-423.98 3348.67,-414.71 3348.67,-406.11"/>
250 +<polygon fill="black" stroke="black" points="3352.17,-406.1 3348.67,-396.1 3345.17,-406.1 3352.17,-406.1"/>
251 </g>
268 -<!-- v15&#45;&gt;v7 -->
269 -<g id="edge16" class="edge">
270 -<title>v15&#45;&gt;v7</title>
271 -<path fill="none" stroke="black" d="M1315.91,-323.55C1364.03,-309.25 1432.82,-288.8 1483.48,-273.74"/>
272 -<polygon fill="black" stroke="black" points="1484.77,-277.01 1493.36,-270.81 1482.78,-270.3 1484.77,-277.01"/>
273 -</g>
274 -<!-- v16&#45;&gt;v5 -->
275 -<g id="edge25" class="edge">
276 -<title>v16&#45;&gt;v5</title>
277 -<path fill="none" stroke="black" d="M872.5,-271.2C868.87,-281.8 863.26,-295.25 855.57,-305.6 852.68,-309.49 849.27,-313.22 845.67,-316.7"/>
278 -<polygon fill="black" stroke="black" points="843.22,-314.19 838.1,-323.47 847.89,-319.41 843.22,-314.19"/>
279 -<text text-anchor="middle" x="886.17" y="-293" font-family="Times,serif" font-size="14.00">capture</text>
280 -</g>
281 -<!-- v16&#45;&gt;v17 -->
282 -<g id="edge22" class="edge">
283 -<title>v16&#45;&gt;v17</title>
284 -<path fill="none" stroke="black" d="M808.11,-234.79C765.66,-224.4 711.22,-211.07 667.05,-200.26"/>
285 -<polygon fill="black" stroke="black" points="667.77,-196.83 657.22,-197.85 666.1,-203.63 667.77,-196.83"/>
252 +<!-- v16 -->
253 +<g id="node21" class="node">
254 +<title>v16</title>
255 +<polygon fill="none" stroke="black" points="4468.41,-468 3728.94,-468 3728.94,-432 4468.41,-432 4468.41,-468"/>
256 +<text text-anchor="middle" x="4098.67" y="-445.8" font-family="Times,serif" font-size="14.00">v16 (readonly child$6 @ readonly child$6 = JSX &lt;frozen Component$0 data={frozen x$2} &gt;&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
257 </g>
258 <!-- v21 -->
259 <g id="node22" class="node">
260 <title>v21</title>
290 -<polygon fill="none" stroke="black" points="872.26,-109 174.88,-109 174.88,-73 872.26,-73 872.26,-109"/>
291 -<text text-anchor="middle" x="523.57" y="-86.8" font-family="Times,serif" font-size="14.00">v21 (frozen $7 @ frozen $7 = JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;)</text>
261 +<polygon fill="none" stroke="black" points="4455.31,-396 3742.03,-396 3742.03,-360 4455.31,-360 4455.31,-396"/>
262 +<text text-anchor="middle" x="4098.67" y="-373.8" font-family="Times,serif" font-size="14.00">v21 (frozen child$6 @ JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;update&gt;</text>
263 </g>
293 -<!-- v17&#45;&gt;v21 -->
294 -<g id="edge28" class="edge">
295 -<title>v17&#45;&gt;v21</title>
296 -<path fill="none" stroke="black" d="M582.5,-161.4C578.87,-150.8 573.26,-137.35 565.57,-127 562.68,-123.11 559.27,-119.38 555.67,-115.9"/>
297 -<polygon fill="black" stroke="black" points="557.89,-113.19 548.1,-109.13 553.22,-118.41 557.89,-113.19"/>
298 -<text text-anchor="middle" x="596.17" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
264 +<!-- v16&#45;&gt;v21 -->
265 +<g id="edge18" class="edge">
266 +<title>v16&#45;&gt;v21</title>
267 +<path fill="none" stroke="black" d="M4098.67,-431.7C4098.67,-423.98 4098.67,-414.71 4098.67,-406.11"/>
268 +<polygon fill="black" stroke="black" points="4102.17,-406.1 4098.67,-396.1 4095.17,-406.1 4102.17,-406.1"/>
269 </g>
270 <!-- v22 -->
301 -<g id="node23" class="node">
271 +<g id="node24" class="node">
272 <title>v22</title>
303 -<polygon fill="none" stroke="black" points="824.4,-36 606.75,-36 606.75,0 824.4,0 824.4,-36"/>
304 -<text text-anchor="middle" x="715.57" y="-13.8" font-family="Times,serif" font-size="14.00">v22 (frozen $7 @ Return frozen $7)</text>
273 +<polygon fill="none" stroke="black" points="5264.6,-468 4486.74,-468 4486.74,-432 5264.6,-432 5264.6,-468"/>
274 +<text text-anchor="middle" x="4875.67" y="-445.8" font-family="Times,serif" font-size="14.00">v22 (readonly $7 @ readonly $7 = JSX &lt;frozen Component$0 data={frozen y$3} &gt;{frozen child$6}&lt;/frozen Component$0&gt;) &lt;assign&gt;</text>
275 </g>
306 -<!-- v17&#45;&gt;v22 -->
307 -<g id="edge31" class="edge">
308 -<title>v17&#45;&gt;v22</title>
309 -<path fill="none" stroke="black" d="M730.6,-161.75C795.41,-150.79 861.93,-133.85 881.57,-109 907.92,-75.67 865.04,-53.02 816.27,-38.78"/>
310 -<polygon fill="black" stroke="black" points="817.03,-35.35 806.46,-36.04 815.15,-42.1 817.03,-35.35"/>
311 -<text text-anchor="middle" x="911.17" y="-86.8" font-family="Times,serif" font-size="14.00">capture</text>
276 +<!-- v23 -->
277 +<g id="node25" class="node">
278 +<title>v23</title>
279 +<polygon fill="none" stroke="black" points="5013.1,-396 4738.24,-396 4738.24,-360 5013.1,-360 5013.1,-396"/>
280 +<text text-anchor="middle" x="4875.67" y="-373.8" font-family="Times,serif" font-size="14.00">v23 (frozen $7 @ Return frozen $7) &lt;update&gt;</text>
281 </g>
313 -<!-- v18 -->
314 -<g id="node19" class="node">
315 -<title>v18</title>
316 -<polygon fill="none" stroke="black" points="3227.98,-594.4 2615.16,-594.4 2615.16,-558.4 3227.98,-558.4 3227.98,-594.4"/>
317 -<text text-anchor="middle" x="2921.57" y="-572.2" font-family="Times,serif" font-size="14.00">v18 (frozen Component$0 @ JSX &lt;frozen Component$0 data={readonly x$2} &gt;&lt;/frozen Component$0&gt;)</text>
282 +<!-- v22&#45;&gt;v23 -->
283 +<g id="edge20" class="edge">
284 +<title>v22&#45;&gt;v23</title>
285 +<path fill="none" stroke="black" d="M4875.67,-431.7C4875.67,-423.98 4875.67,-414.71 4875.67,-406.11"/>
286 +<polygon fill="black" stroke="black" points="4879.17,-406.1 4875.67,-396.1 4872.17,-406.1 4879.17,-406.1"/>
287 </g>
319 -<!-- v19 -->
320 -<g id="node20" class="node">
321 -<title>v19</title>
322 -<polygon fill="none" stroke="black" points="3268.94,-521.4 2574.2,-521.4 2574.2,-485.4 3268.94,-485.4 3268.94,-521.4"/>
323 -<text text-anchor="middle" x="2921.57" y="-499.2" 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;)</text>
324 -</g>
325 -<!-- v18&#45;&gt;v19 -->
326 -<g id="edge24" class="edge">
327 -<title>v18&#45;&gt;v19</title>
328 -<path fill="none" stroke="black" d="M2921.57,-558.21C2921.57,-550.19 2921.57,-540.45 2921.57,-531.47"/>
329 -<polygon fill="black" stroke="black" points="2925.07,-531.43 2921.57,-521.43 2918.07,-531.43 2925.07,-531.43"/>
330 -</g>
331 -<!-- v21&#45;&gt;v17 -->
332 -<g id="edge30" class="edge">
333 -<title>v21&#45;&gt;v17</title>
334 -<path fill="none" stroke="black" d="M517.82,-109.05C515.28,-119.77 514.12,-133.48 520.38,-143.8 523.08,-148.25 526.55,-152.17 530.5,-155.6"/>
335 -<polygon fill="black" stroke="black" points="528.47,-158.46 538.58,-161.63 532.66,-152.85 528.47,-158.46"/>
336 -<text text-anchor="middle" x="541.17" y="-131.2" font-family="Times,serif" font-size="14.00">capture</text>
337 -</g>
338 -<!-- v21&#45;&gt;v22 -->
339 -<g id="edge27" class="edge">
340 -<title>v21&#45;&gt;v22</title>
341 -<path fill="none" stroke="black" d="M569.56,-72.99C596.67,-62.97 631.16,-50.21 659.82,-39.62"/>
342 -<polygon fill="black" stroke="black" points="661.13,-42.86 669.29,-36.11 658.7,-36.3 661.13,-42.86"/>
288 +<!-- v24 -->
289 +<g id="node26" class="node">
290 +<title>v24</title>
291 +<polygon fill="none" stroke="black" points="2652.38,-468 2384.96,-468 2384.96,-432 2652.38,-432 2652.38,-468"/>
292 +<text text-anchor="middle" x="2518.67" y="-445.8" font-family="Times,serif" font-size="14.00">v24 (frozen props$1 @ &lt;no&#45;instr&gt;) &lt;assign&gt;</text>
293 +</g>
294 +<!-- v24&#45;&gt;v4 -->
295 +<g id="edge21" class="edge">
296 +<title>v24&#45;&gt;v4</title>
297 +<path fill="none" stroke="black" d="M2518.67,-431.7C2518.67,-423.98 2518.67,-414.71 2518.67,-406.11"/>
298 +<polygon fill="black" stroke="black" points="2522.17,-406.1 2518.67,-396.1 2515.17,-406.1 2522.17,-406.1"/>
299 </g>
300 </g>
301 </svg>
compiler/forget/src/__tests__/fixtures/hir/call.expect.md
+6 -6
@@ -34,14 +34,14 @@ function foo$0() {
34
35 ```
36 bb0:
37 - mutable a$2 = Array []
38 - mutable b$3 = Object { }
37 + readonly a$2 = Array []
38 + readonly b$3 = Object { }
39 Call mutable foo$4(mutable a$2, mutable b$3)
40 - frozen $6 = "div"
41 - mutable _$5 = JSX <frozen $6 a={mutable a$2} ></frozen $6>
40 + readonly $6 = "div"
41 + readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
42 Call mutable foo$4(mutable b$3)
43 - frozen $7 = "div"
44 - frozen $8 = JSX <frozen $7 a={readonly a$2} b={readonly b$3} ></frozen $7>
43 + readonly $7 = "div"
44 + readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
45 Return frozen $8
46 ```
47
compiler/forget/src/__tests__/fixtures/hir/component.expect.md
+21 -20
@@ -2,6 +2,7 @@
2 ## Input
3
4 ```javascript
5 +// @Out DefUseGraph
6 function Component(props) {
7 const items = props.items;
8 const maxItems = props.maxItems;
@@ -36,42 +37,42 @@ function Component(props) {
37 bb0:
38 frozen items$2 = frozen props$1.items
39 frozen maxItems$3 = frozen props$1.maxItems
39 - mutable renderedItems$4 = Array []
40 - mutable seen$5 = New mutable Set$6()
41 - frozen $9 = 0
42 - frozen max$7 = Call mutable Math$8.max(frozen $9, frozen maxItems$3)
40 + readonly renderedItems$4 = Array []
41 + readonly seen$5 = New mutable Set$6()
42 + readonly $9 = 0
43 + readonly max$7 = Call mutable Math$8.max(mutable $9, frozen maxItems$3)
44 Goto bb1
45 bb1:
46 If (frozen items$2) then:bb3 else:bb2
47 bb3:
47 - frozen $11 = null
48 - frozen $12 = Binary mutable item$10 == frozen $11
48 + readonly $11 = null
49 + frozen $12 = Binary frozen item$10 == readonly $11
50 If (frozen $12) then:bb8 else:bb9
51 bb2:
51 - frozen count$17 = readonly renderedItems$4.length
52 - frozen $18 = "div"
53 - frozen $19 = "\n "
54 - frozen $20 = "h1"
55 - frozen $21 = " Items"
56 - frozen $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
57 - frozen $23 = "\n "
58 - frozen $24 = "\n "
59 - frozen $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{readonly renderedItems$4}{frozen $24}</frozen $18>
52 + readonly count$17 = readonly renderedItems$4.length
53 + readonly $18 = "div"
54 + readonly $19 = "\n "
55 + readonly $20 = "h1"
56 + readonly $21 = " Items"
57 + readonly $22 = JSX <frozen $20>{frozen count$17}{frozen $21}</frozen $20>
58 + readonly $23 = "\n "
59 + readonly $24 = "\n "
60 + readonly $25 = JSX <frozen $18>{frozen $19}{frozen $22}{frozen $23}{frozen renderedItems$4}{frozen $24}</frozen $18>
61 Return frozen $25
62 bb8:
63 frozen $13 = frozen $12
64 Goto bb7
65 bb9:
65 - mutable $13 = Call mutable seen$5.has(mutable item$10)
66 + readonly $13 = Call mutable seen$5.has(frozen item$10)
67 Goto bb7
68 bb7:
69 If (frozen $13) then:bb1 else:bb4
70 bb4:
70 - Call mutable seen$5.add(mutable item$10)
71 - frozen $14 = "div"
72 - mutable $15 = JSX <frozen $14>{mutable item$10}</frozen $14>
71 + Call mutable seen$5.add(frozen item$10)
72 + readonly $14 = "div"
73 + readonly $15 = JSX <frozen $14>{frozen item$10}</frozen $14>
74 Call mutable renderedItems$4.push(mutable $15)
74 - frozen $16 = Binary mutable renderedItems$4.length >= frozen max$7
75 + frozen $16 = Binary readonly renderedItems$4.length >= readonly max$7
76 If (frozen $16) then:bb2 else:bb1
77 ```
78
compiler/forget/src/__tests__/fixtures/hir/component.js
+1
@@ -1,3 +1,4 @@
1 +// @Out DefUseGraph
2 function Component(props) {
3 const items = props.items;
4 const maxItems = props.maxItems;
compiler/forget/src/__tests__/fixtures/hir/conditional-break.expect.md
+7 -7
@@ -78,11 +78,11 @@ function Component(props) {
78
79 ```
80 bb0:
81 - mutable a_DEBUG$2 = Array []
81 + readonly a_DEBUG$2 = Array []
82 Call mutable a_DEBUG$2.push(frozen props$1.a)
83 If (frozen props$1.b) then:bb2 else:bb1
84 bb2:
85 - frozen $3 = null
85 + readonly $3 = null
86 Return frozen $3
87 bb1:
88 Call mutable a_DEBUG$2.push(frozen props$1.d)
@@ -108,7 +108,7 @@ function Component$0(props$1) {
108
109 ```
110 bb0:
111 - mutable a$2 = Array []
111 + readonly a$2 = Array []
112 Call mutable a$2.push(frozen props$1.a)
113 If (frozen props$1.b) then:bb2 else:bb1
114 bb2:
@@ -139,12 +139,12 @@ function Component$0(props$1) {
139
140 ```
141 bb0:
142 - mutable a$2 = Array []
142 + readonly a$2 = Array []
143 Call mutable a$2.push(frozen props$1.a)
144 If (frozen props$1.b) then:bb2 else:bb1
145 bb2:
146 Call mutable a$2.push(frozen props$1.c)
147 - frozen $3 = null
147 + readonly $3 = null
148 Return frozen $3
149 bb1:
150 Call mutable a$2.push(frozen props$1.d)
@@ -171,7 +171,7 @@ function Component$0(props$1) {
171
172 ```
173 bb0:
174 - mutable a$2 = Array []
174 + readonly a$2 = Array []
175 Call mutable a$2.push(frozen props$1.a)
176 If (frozen props$1.b) then:bb2 else:bb1
177 bb2:
@@ -202,7 +202,7 @@ function Component$0(props$1) {
202
203 ```
204 bb0:
205 - mutable a$2 = Array []
205 + readonly a$2 = Array []
206 Call mutable a$2.push(frozen props$1.a)
207 If (frozen props$1.b) then:bb1 else:bb2
208 bb1:
compiler/forget/src/__tests__/fixtures/hir/conditional-on-mutable.expect.md
+9 -9
@@ -67,9 +67,9 @@ function mayMutate() {}
67
68 ```
69 bb0:
70 - mutable a$2 = Array []
71 - mutable b$3 = Array []
72 - If (mutable b$3) then:bb2 else:bb1
70 + readonly a$2 = Array []
71 + readonly b$3 = Array []
72 + If (readonly b$3) then:bb2 else:bb1
73 bb2:
74 Call mutable a$2.push(frozen props$1.p0)
75 Goto bb1
@@ -79,7 +79,7 @@ bb4:
79 Call mutable b$3.push(frozen props$1.p2)
80 Goto bb3
81 bb3:
82 - frozen $5 = JSX <frozen Foo$4 a={readonly a$2} b={readonly b$3} ></frozen Foo$4>
82 + readonly $5 = JSX <frozen Foo$4 a={frozen a$2} b={frozen b$3} ></frozen Foo$4>
83 Return frozen $5
84 ```
85
@@ -107,10 +107,10 @@ function Component$0(props$1) {
107
108 ```
109 bb0:
110 - mutable a$2 = Array []
111 - mutable b$3 = Array []
112 - mutable $5 = Call mutable mayMutate$4(mutable b$3)
113 - If (mutable $5) then:bb2 else:bb1
110 + readonly a$2 = Array []
111 + readonly b$3 = Array []
112 + readonly $5 = Call mutable mayMutate$4(mutable b$3)
113 + If (readonly $5) then:bb2 else:bb1
114 bb2:
115 Call mutable a$2.push(frozen props$1.p0)
116 Goto bb1
@@ -120,7 +120,7 @@ bb4:
120 Call mutable b$3.push(frozen props$1.p2)
121 Goto bb3
122 bb3:
123 - frozen $7 = JSX <frozen Foo$6 a={readonly a$2} b={readonly b$3} ></frozen Foo$6>
123 + readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$3} ></frozen Foo$6>
124 Return frozen $7
125 ```
126
compiler/forget/src/__tests__/fixtures/hir/constructor.expect.md
+6 -6
@@ -34,14 +34,14 @@ function Foo$0() {
34
35 ```
36 bb0:
37 - mutable a$2 = Array []
38 - mutable b$3 = Object { }
37 + readonly a$2 = Array []
38 + readonly b$3 = Object { }
39 New mutable Foo$4(mutable a$2, mutable b$3)
40 - frozen $6 = "div"
41 - mutable _$5 = JSX <frozen $6 a={mutable a$2} ></frozen $6>
40 + readonly $6 = "div"
41 + readonly _$5 = JSX <frozen $6 a={frozen a$2} ></frozen $6>
42 New mutable Foo$4(mutable b$3)
43 - frozen $7 = "div"
44 - frozen $8 = JSX <frozen $7 a={readonly a$2} b={readonly b$3} ></frozen $7>
43 + readonly $7 = "div"
44 + readonly $8 = JSX <frozen $7 a={frozen a$2} b={frozen b$3} ></frozen $7>
45 Return frozen $8
46 ```
47
compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md
+5 -5
@@ -53,13 +53,13 @@ function foo$0() {
53
54 ```
55 bb0:
56 - frozen x$2 = Array []
56 + readonly x$2 = Array []
57 frozen y$3 = Call frozen useFreeze$4(frozen x$2)
58 Call mutable foo$5(frozen y$3, frozen x$2)
59 - frozen $6 = "\n "
60 - frozen $7 = "\n "
61 - frozen $8 = "\n "
62 - frozen $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
59 + readonly $6 = "\n "
60 + readonly $7 = "\n "
61 + readonly $8 = "\n "
62 + readonly $9 = JSX <frozen Component$0>{frozen $6}{frozen x$2}{frozen $7}{frozen y$3}{frozen $8}</frozen Component$0>
63 Return frozen $9
64 ```
65
compiler/forget/src/__tests__/fixtures/hir/independent-across-if.expect.md
+3 -3
@@ -97,15 +97,15 @@ function Foo$0() {
97
98 ```
99 bb0:
100 - mutable a$2 = Call mutable compute$3(frozen props$1.a)
101 - mutable b$4 = Call mutable compute$3(frozen props$1.b)
100 + readonly a$2 = Call mutable compute$3(frozen props$1.a)
101 + readonly b$4 = Call mutable compute$3(frozen props$1.b)
102 If (frozen props$1.c) then:bb2 else:bb1
103 bb2:
104 Call mutable mutate$5(mutable a$2)
105 Call mutable mutate$5(mutable b$4)
106 Goto bb1
107 bb1:
108 - frozen $7 = JSX <frozen Foo$6 a={readonly a$2} b={readonly b$4} ></frozen Foo$6>
108 + readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
109 Return frozen $7
110 ```
111
compiler/forget/src/__tests__/fixtures/hir/independent.expect.md
+3 -3
@@ -28,9 +28,9 @@ function Foo() {}
28
29 ```
30 bb0:
31 - frozen a$2 = Call mutable compute$3(frozen props$1.a)
32 - frozen b$4 = Call mutable compute$3(frozen props$1.b)
33 - frozen $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
31 + readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 + readonly b$4 = Call mutable compute$3(frozen props$1.b)
33 + readonly $6 = JSX <frozen Foo$5 a={frozen a$2} b={frozen b$4} ></frozen Foo$5>
34 Return frozen $6
35 ```
36
compiler/forget/src/__tests__/fixtures/hir/interdependent-across-if.expect.md
+3 -3
@@ -76,14 +76,14 @@ function Foo$0() {
76
77 ```
78 bb0:
79 - mutable a$2 = Call mutable compute$3(frozen props$1.a)
80 - mutable b$4 = Call mutable compute$3(frozen props$1.b)
79 + readonly a$2 = Call mutable compute$3(frozen props$1.a)
80 + readonly b$4 = Call mutable compute$3(frozen props$1.b)
81 If (frozen props$1.c) then:bb2 else:bb1
82 bb2:
83 Call mutable foo$5(mutable a$2, mutable b$4)
84 Goto bb1
85 bb1:
86 - frozen $7 = JSX <frozen Foo$6 a={readonly a$2} b={readonly b$4} ></frozen Foo$6>
86 + readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
87 Return frozen $7
88 ```
89
compiler/forget/src/__tests__/fixtures/hir/interdependent.expect.md
+3 -3
@@ -28,10 +28,10 @@ function Foo() {}
28
29 ```
30 bb0:
31 - mutable a$2 = Call mutable compute$3(frozen props$1.a)
32 - mutable b$4 = Call mutable compute$3(frozen props$1.b)
31 + readonly a$2 = Call mutable compute$3(frozen props$1.a)
32 + readonly b$4 = Call mutable compute$3(frozen props$1.b)
33 Call mutable foo$5(mutable a$2, mutable b$4)
34 - frozen $7 = JSX <frozen Foo$6 a={readonly a$2} b={readonly b$4} ></frozen Foo$6>
34 + readonly $7 = JSX <frozen Foo$6 a={frozen a$2} b={frozen b$4} ></frozen Foo$6>
35 Return frozen $7
36 ```
37
compiler/forget/src/__tests__/fixtures/hir/property-assignment.expect.md
+5 -5
@@ -17,12 +17,12 @@ function Component(props) {
17
18 ```
19 bb0:
20 - mutable x$2 = Object { }
21 - mutable y$3 = Array []
22 - mutable x$2.y = mutable y$3
23 - mutable child$4 = JSX <frozen Component$0 data={mutable y$3} ></frozen Component$0>
20 + readonly x$2 = Object { }
21 + readonly y$3 = Array []
22 + readonly x$2.y = readonly y$3
23 + readonly child$4 = JSX <frozen Component$0 data={frozen y$3} ></frozen Component$0>
24 Call mutable x$2.y.push(frozen props$1.p0)
25 - frozen $5 = JSX <frozen Component$0 data={readonly x$2} >{readonly child$4}</frozen Component$0>
25 + readonly $5 = JSX <frozen Component$0 data={frozen x$2} >{frozen child$4}</frozen Component$0>
26 Return frozen $5
27 ```
28
compiler/forget/src/__tests__/fixtures/hir/reassignment-conditional.expect.md
+5 -5
@@ -23,17 +23,17 @@ function Component(props) {
23
24 ```
25 bb0:
26 - mutable x$2 = Array []
26 + readonly x$2 = Array []
27 Call mutable x$2.push(frozen props$1.p0)
28 - mutable y$3 = mutable x$2
28 + readonly y$3 = readonly x$2
29 If (frozen props$1.p1) then:bb2 else:bb1
30 bb2:
31 - mutable x$2 = Array []
31 + readonly x$2 = Array []
32 Goto bb1
33 bb1:
34 - mutable _$4 = JSX <frozen Component$0 x={mutable x$2} ></frozen Component$0>
34 + readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
35 Call mutable y$3.push(frozen props$1.p2)
36 - frozen $5 = JSX <frozen Component$0 x={readonly x$2} y={readonly y$3} ></frozen Component$0>
36 + readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
37 Return frozen $5
38 ```
39
compiler/forget/src/__tests__/fixtures/hir/reassignment.expect.md
+5 -5
@@ -21,13 +21,13 @@ function Component(props) {
21
22 ```
23 bb0:
24 - mutable x$2 = Array []
24 + readonly x$2 = Array []
25 Call mutable x$2.push(frozen props$1.p0)
26 - mutable y$3 = mutable x$2
27 - frozen x$2 = Array []
28 - frozen _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
26 + readonly y$3 = readonly x$2
27 + readonly x$2 = Array []
28 + readonly _$4 = JSX <frozen Component$0 x={frozen x$2} ></frozen Component$0>
29 Call mutable y$3.push(frozen props$1.p1)
30 - frozen $5 = JSX <frozen Component$0 x={frozen x$2} y={readonly y$3} ></frozen Component$0>
30 + readonly $5 = JSX <frozen Component$0 x={frozen x$2} y={frozen y$3} ></frozen Component$0>
31 Return frozen $5
32 ```
33
compiler/forget/src/__tests__/fixtures/hir/simple.expect.md
+5 -5
@@ -17,13 +17,13 @@ function foo(x, y) {
17 bb0:
18 If (frozen x$1) then:bb2 else:bb1
19 bb2:
20 - frozen $3 = false
21 - frozen $4 = Call mutable foo$0(frozen $3, frozen y$2)
20 + readonly $3 = false
21 + readonly $4 = Call mutable foo$0(mutable $3, frozen y$2)
22 Return frozen $4
23 bb1:
24 - frozen $5 = 10
25 - frozen $6 = Binary frozen y$2 * frozen $5
26 - frozen $7 = Array [frozen $6]
24 + readonly $5 = 10
25 + frozen $6 = Binary frozen y$2 * readonly $5
26 + readonly $7 = Array [frozen $6]
27 Return frozen $7
28 ```
29
compiler/forget/src/__tests__/fixtures/hir/switch.expect.md
+14 -11
@@ -2,12 +2,14 @@
2 ## Input
3
4 ```javascript
5 +// @Out DefUseGraph
6 function Component(props) {
7 let x = [];
8 let y;
9 switch (props.p0) {
10 case true: {
11 x.push(props.p2);
12 + x.push(props.p3);
13 y = [];
14 }
15 case false: {
@@ -26,25 +28,26 @@ function Component(props) {
28
29 ```
30 bb0:
29 - mutable x$2 = Array []
30 - frozen y$3 = undefined
31 - frozen $4 = false
32 - frozen $5 = true
31 + readonly x$2 = Array []
32 + readonly y$3 = undefined
33 + readonly $4 = false
34 + readonly $5 = true
35 Switch (frozen props$1.p0)
34 - Case frozen $5: bb4
35 - Case frozen $4: bb2
36 + Case readonly $5: bb4
37 + Case readonly $4: bb2
38 Default: bb1
39 bb4:
40 Call mutable x$2.push(frozen props$1.p2)
39 - frozen y$3 = Array []
41 + Call mutable x$2.push(frozen props$1.p3)
42 + readonly y$3 = Array []
43 Goto bb2
44 bb2:
42 - mutable y$3 = mutable x$2
45 + readonly y$3 = readonly x$2
46 Goto bb1
47 bb1:
45 - frozen child$6 = JSX <frozen Component$0 data={readonly x$2} ></frozen Component$0>
46 - Call frozen y$3.push(frozen props$1.p4)
47 - frozen $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
48 + readonly child$6 = JSX <frozen Component$0 data={frozen x$2} ></frozen Component$0>
49 + Call mutable y$3.push(frozen props$1.p4)
50 + readonly $7 = JSX <frozen Component$0 data={frozen y$3} >{frozen child$6}</frozen Component$0>
51 Return frozen $7
52 ```
53
compiler/forget/src/__tests__/fixtures/hir/switch.js
+2
@@ -1,9 +1,11 @@
1 +// @Out DefUseGraph
2 function Component(props) {
3 let x = [];
4 let y;
5 switch (props.p0) {
6 case true: {
7 x.push(props.p2);
8 + x.push(props.p3);
9 y = [];
10 }
11 case false: {
compiler/forget/src/__tests__/hir-test.ts
+10 -6
@@ -11,14 +11,14 @@ import generate from "@babel/generator";
11 import * as parser from "@babel/parser";
12 import traverse from "@babel/traverse";
13 import { graphviz, wasmFolder } from "@hpcc-js/wasm";
14 -import { writeFileSync } from "fs";
14 +import { existsSync, unlinkSync, writeFileSync } from "fs";
15 import invariant from "invariant";
16 import path from "path";
17 import prettier from "prettier";
18 +import buildDefUseGraph, { printGraph } from "../HIR/BuildDefUseGraph";
19 import { lower } from "../HIR/BuildHIR";
20 import codegen from "../HIR/Codegen";
21 import { HIRFunction } from "../HIR/HIR";
21 -import inferLifetimes, { printGraph } from "../HIR/InferMutability";
22 import printHIR from "../HIR/PrintHIR";
23 import generateTestsFromFixtures from "./test-utils/generateTestsFromFixtures";
24
@@ -45,7 +45,7 @@ describe("React Forget (HIR version)", () => {
45 FunctionDeclaration: {
46 enter(nodePath) {
47 const ir: HIRFunction = lower(nodePath);
48 - const lifetimeGraph = inferLifetimes(ir);
48 + const lifetimeGraph = buildDefUseGraph(ir);
49 const textHIR = printHIR(ir.body);
50 const textLifetimeGraph = printGraph(lifetimeGraph);
51 const graphvizFile = path.join(
@@ -54,9 +54,13 @@ describe("React Forget (HIR version)", () => {
54 "hir-svg",
55 file + ".svg"
56 );
57 - graphviz.layout(textLifetimeGraph, "svg", "dot").then((svg) => {
58 - writeFileSync(graphvizFile, svg);
59 - });
57 + if (input.indexOf("@Out DefUseGraph") !== -1) {
58 + graphviz.layout(textLifetimeGraph, "svg", "dot").then((svg) => {
59 + writeFileSync(graphvizFile, svg);
60 + });
61 + } else if (existsSync(graphvizFile)) {
62 + unlinkSync(graphvizFile);
63 + }
64
65 const ast = codegen(ir);
66 const text = prettier.format(