Refactor VisualizeHIRMermaid
- Get rid of `indent` as it was making the code hard to read - Remove unnecessary 2nd iteration over blocks - Remove extra newline between the bb subgraphs and the jumps section - Remove trailing spaces - Remove newlines between each subgraph and jump
Lauren Tan committed
Nov 13, 2022 at 16:07 UTC
0c5fc52c479fd47526997ec1d0bcff23ff623c6f
53 files changed
+685
-1036
compiler/forget/src/HIR/VisualizeHIRMermaid.ts
+82
-76
@@ -2,6 +2,9 @@ import { assertExhaustive } from "../Common/utils";
2
import { BasicBlock, BlockId, HIRFunction, Terminal } from "./HIR";
3
import { printInstruction, printPlace } from "./PrintHIR";
4
5
+const INSTRUCTIONS_NODE_NAME = "instrs";
6
+const TERMINAL_NODE_NAME = "terminal";
7
+
8
enum MermaidFlowchartDirection {
9
TopBottom = "TB", // top to bottom
10
TopDown = "TD", // top-down/ same as top to bottom
@@ -10,117 +13,138 @@ enum MermaidFlowchartDirection {
13
LeftRight = "LR", // left to right
14
}
15
13
-function indent(str: string, level: number = 1) {
14
- const leadingSpaces = " ".repeat(level * 2);
15
- return str
16
- .split("\n")
17
- .map((line) => `${leadingSpaces}${line}`)
18
- .join("\n");
19
-}
20
-
16
function printBlockId(id: BlockId): string {
17
return `bb${id}`;
18
}
19
25
-function printJump(from: BlockId, to: BlockId, label: string | null): string {
20
+/**
21
+ * Prints a mermaid arrow with optional label connecting BasicBlocks for use in the "Jumps" section.
22
+ */
23
+function printJumpArrow(
24
+ from: BlockId,
25
+ to: BlockId,
26
+ label: string | null
27
+): string {
28
const fromId = printBlockId(from);
29
const toId = printBlockId(to);
30
if (label != null) {
29
- return `${fromId}_terminal -- ${label} --> ${toId}\n`;
31
+ return `${fromId}_${TERMINAL_NODE_NAME} -- ${label} --> ${toId}\n`;
32
}
31
- return `${fromId}_terminal --> ${toId}\n`;
33
+ return `${fromId}_${TERMINAL_NODE_NAME} --> ${toId}\n`;
34
}
35
34
-function visualizeInstructions({ id, instructions }: BasicBlock): string {
35
- return (
36
- `${printBlockId(id)}_instrs["\n` +
37
- indent(
38
- instructions
39
- .map((instr) => printInstruction(instr).replaceAll('"', "'"))
40
- .join("\n"),
41
- 2
42
- ) +
43
- indent('\n"]')
44
- );
36
+/**
37
+ * Prints a mermaid arrow connecting a BasicBlock's instructions to its Terminal for use in the
38
+ * "Basic Blocks" section.
39
+ */
40
+function printTerminalArrow(blockId: BlockId, block: BasicBlock) {
41
+ const bbId = printBlockId(blockId);
42
+ if (block.instructions.length > 0) {
43
+ return `${bbId}_${INSTRUCTIONS_NODE_NAME} --> ${bbId}_${TERMINAL_NODE_NAME}(["${printTerminalLabel(
44
+ block.terminal
45
+ )}"])`;
46
+ }
47
+ return `${bbId}_${TERMINAL_NODE_NAME}(["${printTerminalLabel(
48
+ block.terminal
49
+ )}"])`;
50
}
51
47
-function visualizeTerminal(terminal: Terminal) {
48
- let buffer = "";
52
+/**
53
+ * Prints a BasicBlock as a mermaid `subgraph`, with instructions as a single multiline mermaid node
54
+ * and the terminal as an arrow connecting the instruction node with the terminal.
55
+ */
56
+function printBlockSubgraphs(blockId: BlockId, block: BasicBlock) {
57
+ const buffer = [];
58
+ const bbId = printBlockId(blockId);
59
+ const instructions = block.instructions
60
+ .map((instr) => ` ${printInstruction(instr).replaceAll('"', "'")}\n`)
61
+ .join("");
62
+ buffer.push(` subgraph ${bbId}\n`);
63
+ if (block.instructions.length > 0) {
64
+ buffer.push(` ${bbId}_${INSTRUCTIONS_NODE_NAME}["\n`);
65
+ buffer.push(instructions);
66
+ buffer.push(' "]\n');
67
+ }
68
+ buffer.push(` ${printTerminalArrow(blockId, block)}`);
69
+ buffer.push("\n end\n");
70
+ return buffer.join("");
71
+}
72
+
73
+function printTerminalLabel(terminal: Terminal): string {
74
+ const buffer = [];
75
switch (terminal.kind) {
76
case "if": {
51
- buffer = buffer.concat(`If (${printPlace(terminal.test)})`);
77
+ buffer.push(`If (${printPlace(terminal.test)})`);
78
break;
79
}
80
case "goto": {
55
- buffer = buffer.concat("Goto");
81
+ buffer.push("Goto");
82
break;
83
}
84
case "return": {
85
if (terminal.value != null) {
60
- buffer = buffer.concat(`Return ${printPlace(terminal.value)}`);
86
+ buffer.push(`Return ${printPlace(terminal.value)}`);
87
} else {
62
- buffer = buffer.concat("Return");
88
+ buffer.push("Return");
89
}
90
break;
91
}
92
case "switch":
67
- buffer = buffer.concat(`Switch (${printPlace(terminal.test)})`);
93
+ buffer.push(`Switch (${printPlace(terminal.test)})`);
94
break;
95
case "throw":
70
- buffer = buffer.concat(`Throw ${printPlace(terminal.value)}`);
96
+ buffer.push(`Throw ${printPlace(terminal.value)}`);
97
break;
98
case "while":
73
- buffer = buffer.concat("While");
99
+ buffer.push("While");
100
break;
101
default:
102
assertExhaustive(terminal, `unhandled terminal ${terminal}`);
103
}
78
- return buffer;
104
+ return buffer.join("");
105
}
106
81
-function visualizeJump(blockId: BlockId, terminal: Terminal): string {
82
- let buffer = "";
107
+function printTerminalArrows(blockId: BlockId, terminal: Terminal): string {
108
+ const buffer = [];
109
switch (terminal.kind) {
110
case "if": {
85
- buffer = buffer.concat(printJump(blockId, terminal.consequent, "then"));
86
- buffer = buffer.concat(printJump(blockId, terminal.alternate, "else"));
111
+ buffer.push(printJumpArrow(blockId, terminal.consequent, "then"));
112
+ buffer.push(printJumpArrow(blockId, terminal.alternate, "else"));
113
if (
114
terminal.fallthrough != null &&
115
terminal.alternate !== terminal.fallthrough
116
) {
91
- buffer = buffer.concat(
92
- printJump(blockId, terminal.fallthrough, "fallthrough")
117
+ buffer.push(
118
+ printJumpArrow(blockId, terminal.fallthrough, "fallthrough")
119
);
120
}
121
break;
122
}
123
case "goto": {
98
- buffer = buffer.concat(printJump(blockId, terminal.block, null));
124
+ buffer.push(printJumpArrow(blockId, terminal.block, null));
125
break;
126
}
127
case "switch": {
128
terminal.cases.forEach((case_) => {
129
if (case_.test != null) {
104
- buffer = buffer.concat(
105
- printJump(blockId, case_.block, printPlace(case_.test))
130
+ buffer.push(
131
+ printJumpArrow(blockId, case_.block, printPlace(case_.test))
132
);
133
} else {
108
- buffer = buffer.concat(printJump(blockId, case_.block, "default"));
134
+ buffer.push(printJumpArrow(blockId, case_.block, "default"));
135
}
136
});
137
if (terminal.fallthrough != null) {
112
- buffer = buffer.concat(
113
- printJump(blockId, terminal.fallthrough, "fallthrough")
138
+ buffer.push(
139
+ printJumpArrow(blockId, terminal.fallthrough, "fallthrough")
140
);
141
}
142
break;
143
}
144
case "while": {
119
- buffer = buffer.concat(printJump(blockId, terminal.test, "test"));
120
- buffer = buffer.concat(printJump(blockId, terminal.loop, "loop"));
121
- buffer = buffer.concat(
122
- printJump(blockId, terminal.fallthrough, "fallthrough")
123
- );
145
+ buffer.push(printJumpArrow(blockId, terminal.test, "test"));
146
+ buffer.push(printJumpArrow(blockId, terminal.loop, "loop"));
147
+ buffer.push(printJumpArrow(blockId, terminal.fallthrough, "fallthrough"));
148
break;
149
}
150
case "throw":
@@ -130,7 +154,7 @@ function visualizeJump(blockId: BlockId, terminal: Terminal): string {
154
default:
155
assertExhaustive(terminal, `unhandled terminal ${terminal}`);
156
}
133
- return buffer;
157
+ return buffer.map((line) => ` ${line}`).join("");
158
}
159
160
/**
@@ -142,39 +166,21 @@ export default function visualizeHIRMermaid(fn: HIRFunction): string {
166
const jumps = [];
167
168
for (const [blockId, block] of ir.blocks) {
145
- let buffer;
146
- const bbId = printBlockId(blockId);
147
- buffer = indent(`subgraph ${bbId}\n`);
148
- if (block.instructions.length > 0) {
149
- buffer = buffer.concat(indent(visualizeInstructions(block)));
150
- buffer = buffer.concat(
151
- indent(
152
- `\n${bbId}_instrs --> ${bbId}_terminal(["${visualizeTerminal(
153
- block.terminal
154
- )}"])`,
155
- 2
156
- )
157
- );
158
- } else {
159
- buffer = buffer.concat(
160
- indent(`${bbId}_terminal(["${visualizeTerminal(block.terminal)}"])`)
161
- );
169
+ const subgraph = printBlockSubgraphs(blockId, block);
170
+ const jump = printTerminalArrows(blockId, block.terminal);
171
+
172
+ if (subgraph.length > 0) {
173
+ subgraphs.push(subgraph);
174
}
163
- buffer = buffer.concat(indent("\nend\n"));
164
- subgraphs.push(buffer);
165
- }
175
167
- for (const [blockId, block] of ir.blocks) {
168
- const jump = visualizeJump(blockId, block.terminal);
176
if (jump.length > 0) {
170
- jumps.push(indent(jump));
177
+ jumps.push(jump);
178
}
179
}
180
181
return `flowchart ${MermaidFlowchartDirection.TopBottom}
182
%% Basic Blocks
176
-${subgraphs.length ? subgraphs.join("\n") : " %% empty"}
177
-
183
+${subgraphs.length ? subgraphs.join("") : " %% empty"}
184
%% Jumps
179
-${jumps.length ? jumps.join("\n") : " %% empty"}`;
185
+${jumps.length ? jumps.join("") : " %% empty"}`;
186
}
compiler/forget/src/__tests__/fixtures/hir/call.expect.md
+4
-6
@@ -28,9 +28,8 @@ bb0:
28
flowchart TB
29
%% Basic Blocks
30
subgraph bb0
31
- bb0_terminal(["Return"])
31
+ bb0_terminal(["Return"])
32
end
33
-
33
34
%% Jumps
35
%% empty
@@ -73,11 +72,10 @@ flowchart TB
72
[5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73
[6] Call mutate foo$4(mutate b$11)
74
[7] Const mutate $14 = 'div'
76
- [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77
- "]
78
- bb0_instrs --> bb0_terminal(["Return read $15"])
75
+ [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76
+ "]
77
+ bb0_instrs --> bb0_terminal(["Return read $15"])
78
end
80
-
79
80
%% Jumps
81
%% empty
compiler/forget/src/__tests__/fixtures/hir/complex-while.expect.md
+7
-17
@@ -42,46 +42,36 @@ bb1:
42
flowchart TB
43
%% Basic Blocks
44
subgraph bb0
45
- bb0_terminal(["If (read a$4)"])
45
+ bb0_terminal(["If (read a$4)"])
46
end
47
-
47
subgraph bb3
49
- bb3_terminal(["While"])
48
+ bb3_terminal(["While"])
49
end
51
-
50
subgraph bb4
53
- bb4_terminal(["If (read b$5)"])
51
+ bb4_terminal(["If (read b$5)"])
52
end
55
-
53
subgraph bb6
57
- bb6_terminal(["If (read c$6)"])
54
+ bb6_terminal(["If (read c$6)"])
55
end
59
-
56
subgraph bb7
61
- bb7_terminal(["Goto"])
57
+ bb7_terminal(["Goto"])
58
end
63
-
59
subgraph bb1
65
- bb1_terminal(["Return"])
60
+ bb1_terminal(["Return"])
61
end
67
-
62
63
%% Jumps
64
bb0_terminal -- then --> bb3
65
bb0_terminal -- else --> bb1
72
-
66
bb3_terminal -- test --> bb4
67
bb3_terminal -- loop --> bb6
68
bb3_terminal -- fallthrough --> bb1
76
-
69
bb4_terminal -- then --> bb6
70
bb4_terminal -- else --> bb1
79
-
71
bb6_terminal -- then --> bb1
72
bb6_terminal -- else --> bb7
82
-
73
bb7_terminal --> bb4
84
-
74
+
75
```
76
77
## Code
compiler/forget/src/__tests__/fixtures/hir/component.expect.md
+23
-41
@@ -101,60 +101,51 @@ flowchart TB
101
[3] Const mutate renderedItems$29[3:14] = Array []
102
[4] Const mutate seen$30[4:11] = New mutate Set$6()
103
[5] Const mutate $31 = 0
104
- [6] Const mutate max$32 = Call mutate Math$8.max(read $31, read maxItems$28)
105
- "]
106
- bb0_instrs --> bb0_terminal(["Goto"])
104
+ [6] Const mutate max$32 = Call mutate Math$8.max(read $31, read maxItems$28)
105
+ "]
106
+ bb0_instrs --> bb0_terminal(["Goto"])
107
end
108
-
108
subgraph bb1
110
- bb1_terminal(["If (read items$27)"])
109
+ bb1_terminal(["If (read items$27)"])
110
end
112
-
111
subgraph bb3
112
bb3_instrs["
113
[7] Const mutate $34 = null
116
- [8] Const mutate $36 = Binary read item$10 == read $34
117
- "]
118
- bb3_instrs --> bb3_terminal(["If (read $36)"])
114
+ [8] Const mutate $36 = Binary read item$10 == read $34
115
+ "]
116
+ bb3_instrs --> bb3_terminal(["If (read $36)"])
117
end
120
-
118
subgraph bb8
119
bb8_instrs["
123
- [9] Const mutate $13 = read $36
124
- "]
125
- bb8_instrs --> bb8_terminal(["Goto"])
120
+ [9] Const mutate $13 = read $36
121
+ "]
122
+ bb8_instrs --> bb8_terminal(["Goto"])
123
end
127
-
124
subgraph bb9
125
bb9_instrs["
130
- [10] Const mutate $13 = Call mutate seen$30.has(mutate item$10)
131
- "]
132
- bb9_instrs --> bb9_terminal(["Goto"])
126
+ [10] Const mutate $13 = Call mutate seen$30.has(mutate item$10)
127
+ "]
128
+ bb9_instrs --> bb9_terminal(["Goto"])
129
end
134
-
130
subgraph bb7
136
- bb7_terminal(["If (read $13)"])
131
+ bb7_terminal(["If (read $13)"])
132
end
138
-
133
subgraph bb5
140
- bb5_terminal(["Goto"])
134
+ bb5_terminal(["Goto"])
135
end
142
-
136
subgraph bb4
137
bb4_instrs["
138
[11] Call mutate seen$30.add(mutate item$10)
139
[12] Const mutate $43 = 'div'
140
[13] Const mutate $44 = JSX <read $43>{read item$10}</read $43>
141
[14] Call mutate renderedItems$29.push(read $44)
149
- [15] Const mutate $49 = Binary read renderedItems$29.length >= read max$32
150
- "]
151
- bb4_instrs --> bb4_terminal(["If (read $49)"])
142
+ [15] Const mutate $49 = Binary read renderedItems$29.length >= read max$32
143
+ "]
144
+ bb4_instrs --> bb4_terminal(["If (read $49)"])
145
end
153
-
146
subgraph bb10
155
- bb10_terminal(["Goto"])
147
+ bb10_terminal(["Goto"])
148
end
157
-
149
subgraph bb2
150
bb2_instrs["
151
[16] Const mutate count$52 = read renderedItems$29.length
@@ -165,36 +156,27 @@ flowchart TB
156
[21] Const mutate $57 = JSX <read $55>{freeze count$52}{read $56}</read $55>
157
[22] Const mutate $58 = '\n '
158
[23] Const mutate $59 = '\n '
168
- [24] Const mutate $60 = JSX <read $53>{read $54}{read $57}{read $58}{freeze renderedItems$29}{read $59}</read $53>
169
- "]
170
- bb2_instrs --> bb2_terminal(["Return read $60"])
159
+ [24] Const mutate $60 = JSX <read $53>{read $54}{read $57}{read $58}{freeze renderedItems$29}{read $59}</read $53>
160
+ "]
161
+ bb2_instrs --> bb2_terminal(["Return read $60"])
162
end
172
-
163
164
%% Jumps
165
bb0_terminal --> bb1
176
-
166
bb1_terminal -- then --> bb3
167
bb1_terminal -- else --> bb2
179
-
168
bb3_terminal -- then --> bb8
169
bb3_terminal -- else --> bb9
170
bb3_terminal -- fallthrough --> bb7
183
-
171
bb8_terminal --> bb7
185
-
172
bb9_terminal --> bb7
187
-
173
bb7_terminal -- then --> bb5
174
bb7_terminal -- else --> bb4
190
-
175
bb5_terminal --> bb1
192
-
176
bb4_terminal -- then --> bb2
177
bb4_terminal -- else --> bb10
195
-
178
bb10_terminal --> bb1
197
-
179
+
180
```
181
182
## Code
compiler/forget/src/__tests__/fixtures/hir/conditional-break.expect.md
+50
-67
@@ -99,30 +99,27 @@ flowchart TB
99
subgraph bb0
100
bb0_instrs["
101
[1] Const mutate a_DEBUG$5[1:4] = Array []
102
- [2] Call mutate a_DEBUG$5.push(read props$4.a)
103
- "]
104
- bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
102
+ [2] Call mutate a_DEBUG$5.push(read props$4.a)
103
+ "]
104
+ bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
105
end
106
-
106
subgraph bb2
107
bb2_instrs["
109
- [3] Const mutate $6 = null
110
- "]
111
- bb2_instrs --> bb2_terminal(["Return read $6"])
108
+ [3] Const mutate $6 = null
109
+ "]
110
+ bb2_instrs --> bb2_terminal(["Return read $6"])
111
end
113
-
112
subgraph bb1
113
bb1_instrs["
116
- [4] Call mutate a_DEBUG$5.push(read props$4.d)
117
- "]
118
- bb1_instrs --> bb1_terminal(["Return freeze a_DEBUG$5"])
114
+ [4] Call mutate a_DEBUG$5.push(read props$4.d)
115
+ "]
116
+ bb1_instrs --> bb1_terminal(["Return freeze a_DEBUG$5"])
117
end
120
-
118
119
%% Jumps
120
bb0_terminal -- then --> bb2
121
bb0_terminal -- else --> bb1
125
-
122
+
123
```
124
125
## Code
@@ -165,32 +162,28 @@ flowchart TB
162
subgraph bb0
163
bb0_instrs["
164
[1] Const mutate a$4[1:4] = Array []
168
- [2] Call mutate a$4.push(read props$3.a)
169
- "]
170
- bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
165
+ [2] Call mutate a$4.push(read props$3.a)
166
+ "]
167
+ bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
168
end
172
-
169
subgraph bb2
170
bb2_instrs["
175
- [3] Call mutate a$4.push(read props$3.c)
176
- "]
177
- bb2_instrs --> bb2_terminal(["Goto"])
171
+ [3] Call mutate a$4.push(read props$3.c)
172
+ "]
173
+ bb2_instrs --> bb2_terminal(["Goto"])
174
end
179
-
175
subgraph bb1
176
bb1_instrs["
182
- [4] Call mutate a$4.push(read props$3.d)
183
- "]
184
- bb1_instrs --> bb1_terminal(["Return freeze a$4"])
177
+ [4] Call mutate a$4.push(read props$3.d)
178
+ "]
179
+ bb1_instrs --> bb1_terminal(["Return freeze a$4"])
180
end
186
-
181
182
%% Jumps
183
bb0_terminal -- then --> bb2
184
bb0_terminal -- else --> bb1
191
-
185
bb2_terminal --> bb1
193
-
186
+
187
```
188
189
## Code
@@ -234,31 +227,28 @@ flowchart TB
227
subgraph bb0
228
bb0_instrs["
229
[1] Const mutate a$5[1:5] = Array []
237
- [2] Call mutate a$5.push(read props$4.a)
238
- "]
239
- bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
230
+ [2] Call mutate a$5.push(read props$4.a)
231
+ "]
232
+ bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
233
end
241
-
234
subgraph bb2
235
bb2_instrs["
236
[3] Call mutate a$5.push(read props$4.c)
245
- [4] Const mutate $6 = null
246
- "]
247
- bb2_instrs --> bb2_terminal(["Return read $6"])
237
+ [4] Const mutate $6 = null
238
+ "]
239
+ bb2_instrs --> bb2_terminal(["Return read $6"])
240
end
249
-
241
subgraph bb1
242
bb1_instrs["
252
- [5] Call mutate a$5.push(read props$4.d)
253
- "]
254
- bb1_instrs --> bb1_terminal(["Return freeze a$5"])
243
+ [5] Call mutate a$5.push(read props$4.d)
244
+ "]
245
+ bb1_instrs --> bb1_terminal(["Return freeze a$5"])
246
end
256
-
247
248
%% Jumps
249
bb0_terminal -- then --> bb2
250
bb0_terminal -- else --> bb1
261
-
251
+
252
```
253
254
## Code
@@ -302,30 +292,27 @@ flowchart TB
292
subgraph bb0
293
bb0_instrs["
294
[1] Const mutate a$4[1:4] = Array []
305
- [2] Call mutate a$4.push(read props$3.a)
306
- "]
307
- bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
295
+ [2] Call mutate a$4.push(read props$3.a)
296
+ "]
297
+ bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
298
end
309
-
299
subgraph bb2
300
bb2_instrs["
312
- [3] Call mutate a$4.push(read props$3.c)
313
- "]
314
- bb2_instrs --> bb2_terminal(["Return freeze a$4"])
301
+ [3] Call mutate a$4.push(read props$3.c)
302
+ "]
303
+ bb2_instrs --> bb2_terminal(["Return freeze a$4"])
304
end
316
-
305
subgraph bb1
306
bb1_instrs["
319
- [4] Call mutate a$4.push(read props$3.d)
320
- "]
321
- bb1_instrs --> bb1_terminal(["Return freeze a$4"])
307
+ [4] Call mutate a$4.push(read props$3.d)
308
+ "]
309
+ bb1_instrs --> bb1_terminal(["Return freeze a$4"])
310
end
323
-
311
312
%% Jumps
313
bb0_terminal -- then --> bb2
314
bb0_terminal -- else --> bb1
328
-
315
+
316
```
317
318
## Code
@@ -369,32 +356,28 @@ flowchart TB
356
subgraph bb0
357
bb0_instrs["
358
[1] Const mutate a$4[1:4] = Array []
372
- [2] Call mutate a$4.push(read props$3.a)
373
- "]
374
- bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
359
+ [2] Call mutate a$4.push(read props$3.a)
360
+ "]
361
+ bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
362
end
376
-
363
subgraph bb2
364
bb2_instrs["
379
- [3] Call mutate a$4.push(read props$3.c)
380
- "]
381
- bb2_instrs --> bb2_terminal(["Goto"])
365
+ [3] Call mutate a$4.push(read props$3.c)
366
+ "]
367
+ bb2_instrs --> bb2_terminal(["Goto"])
368
end
383
-
369
subgraph bb1
370
bb1_instrs["
386
- [4] Call mutate a$4.push(read props$3.d)
387
- "]
388
- bb1_instrs --> bb1_terminal(["Return freeze a$4"])
371
+ [4] Call mutate a$4.push(read props$3.d)
372
+ "]
373
+ bb1_instrs --> bb1_terminal(["Return freeze a$4"])
374
end
390
-
375
376
%% Jumps
377
bb0_terminal -- then --> bb1
378
bb0_terminal -- else --> bb2
395
-
379
bb2_terminal --> bb1
397
-
380
+
381
```
382
383
## Code
compiler/forget/src/__tests__/fixtures/hir/conditional-on-mutable.expect.md
+30
-48
@@ -95,48 +95,40 @@ flowchart TB
95
subgraph bb0
96
bb0_instrs["
97
[1] Const mutate a$7[1:3] = Array []
98
- [2] Const mutate b$8[2:4] = Array []
99
- "]
100
- bb0_instrs --> bb0_terminal(["If (read b$8)"])
98
+ [2] Const mutate b$8[2:4] = Array []
99
+ "]
100
+ bb0_instrs --> bb0_terminal(["If (read b$8)"])
101
end
102
-
102
subgraph bb2
103
bb2_instrs["
105
- [3] Call mutate a$7.push(read props$6.p0)
106
- "]
107
- bb2_instrs --> bb2_terminal(["Goto"])
104
+ [3] Call mutate a$7.push(read props$6.p0)
105
+ "]
106
+ bb2_instrs --> bb2_terminal(["Goto"])
107
end
109
-
108
subgraph bb1
111
- bb1_terminal(["If (read props$6.p1)"])
109
+ bb1_terminal(["If (read props$6.p1)"])
110
end
113
-
111
subgraph bb4
112
bb4_instrs["
116
- [4] Call mutate b$8.push(read props$6.p2)
117
- "]
118
- bb4_instrs --> bb4_terminal(["Goto"])
113
+ [4] Call mutate b$8.push(read props$6.p2)
114
+ "]
115
+ bb4_instrs --> bb4_terminal(["Goto"])
116
end
120
-
117
subgraph bb3
118
bb3_instrs["
123
- [5] Const mutate $16 = JSX <read Foo$4 a={freeze a$7} b={freeze b$8} ></read Foo$4>
124
- "]
125
- bb3_instrs --> bb3_terminal(["Return read $16"])
119
+ [5] Const mutate $16 = JSX <read Foo$4 a={freeze a$7} b={freeze b$8} ></read Foo$4>
120
+ "]
121
+ bb3_instrs --> bb3_terminal(["Return read $16"])
122
end
127
-
123
124
%% Jumps
125
bb0_terminal -- then --> bb2
126
bb0_terminal -- else --> bb1
132
-
127
bb2_terminal --> bb1
134
-
128
bb1_terminal -- then --> bb4
129
bb1_terminal -- else --> bb3
137
-
130
bb4_terminal --> bb3
139
-
131
+
132
```
133
134
## Code
@@ -191,48 +183,40 @@ flowchart TB
183
bb0_instrs["
184
[1] Const mutate a$9[1:4] = Array []
185
[2] Const mutate b$10[2:5] = Array []
194
- [3] Const mutate $11 = Call mutate mayMutate$4(mutate b$10)
195
- "]
196
- bb0_instrs --> bb0_terminal(["If (read $11)"])
186
+ [3] Const mutate $11 = Call mutate mayMutate$4(mutate b$10)
187
+ "]
188
+ bb0_instrs --> bb0_terminal(["If (read $11)"])
189
end
198
-
190
subgraph bb2
191
bb2_instrs["
201
- [4] Call mutate a$9.push(read props$8.p0)
202
- "]
203
- bb2_instrs --> bb2_terminal(["Goto"])
192
+ [4] Call mutate a$9.push(read props$8.p0)
193
+ "]
194
+ bb2_instrs --> bb2_terminal(["Goto"])
195
end
205
-
196
subgraph bb1
207
- bb1_terminal(["If (read props$8.p1)"])
197
+ bb1_terminal(["If (read props$8.p1)"])
198
end
209
-
199
subgraph bb4
200
bb4_instrs["
212
- [5] Call mutate b$10.push(read props$8.p2)
213
- "]
214
- bb4_instrs --> bb4_terminal(["Goto"])
201
+ [5] Call mutate b$10.push(read props$8.p2)
202
+ "]
203
+ bb4_instrs --> bb4_terminal(["Goto"])
204
end
216
-
205
subgraph bb3
206
bb3_instrs["
219
- [6] Const mutate $19 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
220
- "]
221
- bb3_instrs --> bb3_terminal(["Return read $19"])
207
+ [6] Const mutate $19 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
208
+ "]
209
+ bb3_instrs --> bb3_terminal(["Return read $19"])
210
end
223
-
211
212
%% Jumps
213
bb0_terminal -- then --> bb2
214
bb0_terminal -- else --> bb1
228
-
215
bb2_terminal --> bb1
230
-
216
bb1_terminal -- then --> bb4
217
bb1_terminal -- else --> bb3
233
-
218
bb4_terminal --> bb3
235
-
219
+
220
```
221
222
## Code
@@ -266,9 +250,8 @@ bb0:
250
flowchart TB
251
%% Basic Blocks
252
subgraph bb0
269
- bb0_terminal(["Return"])
253
+ bb0_terminal(["Return"])
254
end
271
-
255
256
%% Jumps
257
%% empty
@@ -295,9 +278,8 @@ bb0:
278
flowchart TB
279
%% Basic Blocks
280
subgraph bb0
298
- bb0_terminal(["Return"])
281
+ bb0_terminal(["Return"])
282
end
300
-
283
284
%% Jumps
285
%% empty
compiler/forget/src/__tests__/fixtures/hir/constructor.expect.md
+4
-6
@@ -28,9 +28,8 @@ bb0:
28
flowchart TB
29
%% Basic Blocks
30
subgraph bb0
31
- bb0_terminal(["Return"])
31
+ bb0_terminal(["Return"])
32
end
33
-
33
34
%% Jumps
35
%% empty
@@ -73,11 +72,10 @@ flowchart TB
72
[5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73
[6] New mutate Foo$4(mutate b$11)
74
[7] Const mutate $14 = 'div'
76
- [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77
- "]
78
- bb0_instrs --> bb0_terminal(["Return read $15"])
75
+ [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76
+ "]
77
+ bb0_instrs --> bb0_terminal(["Return read $15"])
78
end
80
-
79
80
%% Jumps
81
%% empty
compiler/forget/src/__tests__/fixtures/hir/frozen-after-alias.expect.md
+5
-8
@@ -35,11 +35,10 @@ flowchart TB
35
[1] Const mutate a$5 = Array []
36
[2] Const mutate b$6 = read a$5
37
[3] Call read useFreeze$3(freeze a$5)
38
- [4] Call mutate foo$4(read b$6)
39
- "]
40
- bb0_instrs --> bb0_terminal(["Return"])
38
+ [4] Call mutate foo$4(read b$6)
39
+ "]
40
+ bb0_instrs --> bb0_terminal(["Return"])
41
end
42
-
42
43
%% Jumps
44
%% empty
@@ -70,9 +69,8 @@ bb0:
69
flowchart TB
70
%% Basic Blocks
71
subgraph bb0
73
- bb0_terminal(["Return"])
72
+ bb0_terminal(["Return"])
73
end
75
-
74
75
%% Jumps
76
%% empty
@@ -99,9 +97,8 @@ bb0:
97
flowchart TB
98
%% Basic Blocks
99
subgraph bb0
102
- bb0_terminal(["Return"])
100
+ bb0_terminal(["Return"])
101
end
104
-
102
103
%% Jumps
104
%% empty
compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md
+5
-8
@@ -32,9 +32,8 @@ bb0:
32
flowchart TB
33
%% Basic Blocks
34
subgraph bb0
35
- bb0_terminal(["Return"])
35
+ bb0_terminal(["Return"])
36
end
37
-
37
38
%% Jumps
39
%% empty
@@ -61,9 +60,8 @@ bb0:
60
flowchart TB
61
%% Basic Blocks
62
subgraph bb0
64
- bb0_terminal(["Return"])
63
+ bb0_terminal(["Return"])
64
end
66
-
65
66
%% Jumps
67
%% empty
@@ -104,11 +102,10 @@ flowchart TB
102
[4] Const mutate $13 = '\n '
103
[5] Const mutate $14 = '\n '
104
[6] Const mutate $15 = '\n '
107
- [7] Const mutate $16 = JSX <read Component$0>{read $13}{read x$11}{read $14}{read y$12}{read $15}</read Component$0>
108
- "]
109
- bb0_instrs --> bb0_terminal(["Return read $16"])
105
+ [7] Const mutate $16 = JSX <read Component$0>{read $13}{read x$11}{read $14}{read y$12}{read $15}</read Component$0>
106
+ "]
107
+ bb0_instrs --> bb0_terminal(["Return read $16"])
108
end
111
-
109
110
%% Jumps
111
%% empty
compiler/forget/src/__tests__/fixtures/hir/hooks-freeze-arguments.expect.md
+5
-8
@@ -36,11 +36,10 @@ flowchart TB
36
[1] Const mutate a$4 = Array []
37
[2] Call read useFreeze$2(freeze a$4)
38
[3] Call read useFreeze$2(read a$4)
39
- [4] Call mutate call$3(read a$4)
40
- "]
41
- bb0_instrs --> bb0_terminal(["Return read a$4"])
39
+ [4] Call mutate call$3(read a$4)
40
+ "]
41
+ bb0_instrs --> bb0_terminal(["Return read a$4"])
42
end
43
-
43
44
%% Jumps
45
%% empty
@@ -71,9 +70,8 @@ bb0:
70
flowchart TB
71
%% Basic Blocks
72
subgraph bb0
74
- bb0_terminal(["Return"])
73
+ bb0_terminal(["Return"])
74
end
76
-
75
76
%% Jumps
77
%% empty
@@ -100,9 +98,8 @@ bb0:
98
flowchart TB
99
%% Basic Blocks
100
subgraph bb0
103
- bb0_terminal(["Return"])
101
+ bb0_terminal(["Return"])
102
end
105
-
103
104
%% Jumps
105
%% empty
compiler/forget/src/__tests__/fixtures/hir/hooks-freeze-possibly-mutable-arguments.expect.md
+15
-23
@@ -55,44 +55,38 @@ flowchart TB
55
bb0_instrs["
56
[1] Const mutate cond$8 = read props$7.cond
57
[2] Const mutate x$9 = read props$7.x
58
- [3] Let mutate a$10 = undefined
59
- "]
60
- bb0_instrs --> bb0_terminal(["If (read cond$8)"])
58
+ [3] Let mutate a$10 = undefined
59
+ "]
60
+ bb0_instrs --> bb0_terminal(["If (read cond$8)"])
61
end
62
-
62
subgraph bb2
63
bb2_instrs["
65
- [4] Reassign mutate a$4 = read x$9
66
- "]
67
- bb2_instrs --> bb2_terminal(["Goto"])
64
+ [4] Reassign mutate a$4 = read x$9
65
+ "]
66
+ bb2_instrs --> bb2_terminal(["Goto"])
67
end
69
-
68
subgraph bb3
69
bb3_instrs["
72
- [5] Reassign mutate a$4 = Array []
73
- "]
74
- bb3_instrs --> bb3_terminal(["Goto"])
70
+ [5] Reassign mutate a$4 = Array []
71
+ "]
72
+ bb3_instrs --> bb3_terminal(["Goto"])
73
end
76
-
74
subgraph bb1
75
bb1_instrs["
76
[6] Call read useFreeze$5(freeze a$4)
77
[7] Call read useFreeze$5(read a$4)
81
- [8] Call mutate call$6(read a$4)
82
- "]
83
- bb1_instrs --> bb1_terminal(["Return read a$4"])
78
+ [8] Call mutate call$6(read a$4)
79
+ "]
80
+ bb1_instrs --> bb1_terminal(["Return read a$4"])
81
end
85
-
82
83
%% Jumps
84
bb0_terminal -- then --> bb2
85
bb0_terminal -- else --> bb3
86
bb0_terminal -- fallthrough --> bb1
91
-
87
bb2_terminal --> bb1
93
-
88
bb3_terminal --> bb1
95
-
89
+
90
```
91
92
## Code
@@ -128,9 +122,8 @@ bb0:
122
flowchart TB
123
%% Basic Blocks
124
subgraph bb0
131
- bb0_terminal(["Return"])
125
+ bb0_terminal(["Return"])
126
end
133
-
127
128
%% Jumps
129
%% empty
@@ -157,9 +150,8 @@ bb0:
150
flowchart TB
151
%% Basic Blocks
152
subgraph bb0
160
- bb0_terminal(["Return"])
153
+ bb0_terminal(["Return"])
154
end
162
-
155
156
%% Jumps
157
%% empty
compiler/forget/src/__tests__/fixtures/hir/independent-across-if.expect.md
+14
-22
@@ -46,9 +46,8 @@ bb0:
46
flowchart TB
47
%% Basic Blocks
48
subgraph bb0
49
- bb0_terminal(["Return"])
49
+ bb0_terminal(["Return"])
50
end
51
-
51
52
%% Jumps
53
%% empty
@@ -75,9 +74,8 @@ bb0:
74
flowchart TB
75
%% Basic Blocks
76
subgraph bb0
78
- bb0_terminal(["Return"])
77
+ bb0_terminal(["Return"])
78
end
80
-
79
80
%% Jumps
81
%% empty
@@ -104,9 +102,8 @@ bb0:
102
flowchart TB
103
%% Basic Blocks
104
subgraph bb0
107
- bb0_terminal(["Return"])
105
+ bb0_terminal(["Return"])
106
end
109
-
107
108
%% Jumps
109
%% empty
@@ -133,9 +130,8 @@ bb0:
130
flowchart TB
131
%% Basic Blocks
132
subgraph bb0
136
- bb0_terminal(["Return"])
133
+ bb0_terminal(["Return"])
134
end
138
-
135
136
%% Jumps
137
%% empty
@@ -175,33 +171,29 @@ flowchart TB
171
subgraph bb0
172
bb0_instrs["
173
[1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
178
- [2] Const mutate b$10[2:4] = Call mutate compute$3(read props$8.b)
179
- "]
180
- bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
174
+ [2] Const mutate b$10[2:4] = Call mutate compute$3(read props$8.b)
175
+ "]
176
+ bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
177
end
182
-
178
subgraph bb2
179
bb2_instrs["
180
[3] Call mutate mutate$5(mutate a$9)
186
- [4] Call mutate mutate$5(mutate b$10)
187
- "]
188
- bb2_instrs --> bb2_terminal(["Goto"])
181
+ [4] Call mutate mutate$5(mutate b$10)
182
+ "]
183
+ bb2_instrs --> bb2_terminal(["Goto"])
184
end
190
-
185
subgraph bb1
186
bb1_instrs["
193
- [5] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
194
- "]
195
- bb1_instrs --> bb1_terminal(["Return read $14"])
187
+ [5] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
188
+ "]
189
+ bb1_instrs --> bb1_terminal(["Return read $14"])
190
end
197
-
191
192
%% Jumps
193
bb0_terminal -- then --> bb2
194
bb0_terminal -- else --> bb1
202
-
195
bb2_terminal --> bb1
204
-
196
+
197
```
198
199
## Code
compiler/forget/src/__tests__/fixtures/hir/independent.expect.md
+6
-10
@@ -43,11 +43,10 @@ flowchart TB
43
bb0_instrs["
44
[1] Const mutate a$8 = Call mutate compute$3(read props$7.a)
45
[2] Const mutate b$9 = Call mutate compute$3(read props$7.b)
46
- [3] Const mutate $10 = JSX <read Foo$5 a={freeze a$8} b={freeze b$9} ></read Foo$5>
47
- "]
48
- bb0_instrs --> bb0_terminal(["Return read $10"])
46
+ [3] Const mutate $10 = JSX <read Foo$5 a={freeze a$8} b={freeze b$9} ></read Foo$5>
47
+ "]
48
+ bb0_instrs --> bb0_terminal(["Return read $10"])
49
end
50
-
50
51
%% Jumps
52
%% empty
@@ -76,9 +75,8 @@ bb0:
75
flowchart TB
76
%% Basic Blocks
77
subgraph bb0
79
- bb0_terminal(["Return"])
78
+ bb0_terminal(["Return"])
79
end
81
-
80
81
%% Jumps
82
%% empty
@@ -105,9 +103,8 @@ bb0:
103
flowchart TB
104
%% Basic Blocks
105
subgraph bb0
108
- bb0_terminal(["Return"])
106
+ bb0_terminal(["Return"])
107
end
110
-
108
109
%% Jumps
110
%% empty
@@ -134,9 +131,8 @@ bb0:
131
flowchart TB
132
%% Basic Blocks
133
subgraph bb0
137
- bb0_terminal(["Return"])
134
+ bb0_terminal(["Return"])
135
end
139
-
136
137
%% Jumps
138
%% empty
compiler/forget/src/__tests__/fixtures/hir/interdependent-across-if.expect.md
+13
-20
@@ -40,9 +40,8 @@ bb0:
40
flowchart TB
41
%% Basic Blocks
42
subgraph bb0
43
- bb0_terminal(["Return"])
43
+ bb0_terminal(["Return"])
44
end
45
-
45
46
%% Jumps
47
%% empty
@@ -69,9 +68,8 @@ bb0:
68
flowchart TB
69
%% Basic Blocks
70
subgraph bb0
72
- bb0_terminal(["Return"])
71
+ bb0_terminal(["Return"])
72
end
74
-
73
74
%% Jumps
75
%% empty
@@ -98,9 +96,8 @@ bb0:
96
flowchart TB
97
%% Basic Blocks
98
subgraph bb0
101
- bb0_terminal(["Return"])
99
+ bb0_terminal(["Return"])
100
end
103
-
101
102
%% Jumps
103
%% empty
@@ -139,32 +136,28 @@ flowchart TB
136
subgraph bb0
137
bb0_instrs["
138
[1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
142
- [2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
143
- "]
144
- bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
139
+ [2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
140
+ "]
141
+ bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
142
end
146
-
143
subgraph bb2
144
bb2_instrs["
149
- [3] Call mutate foo$5(mutate a$9, mutate b$10)
150
- "]
151
- bb2_instrs --> bb2_terminal(["Goto"])
145
+ [3] Call mutate foo$5(mutate a$9, mutate b$10)
146
+ "]
147
+ bb2_instrs --> bb2_terminal(["Goto"])
148
end
153
-
149
subgraph bb1
150
bb1_instrs["
156
- [4] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
157
- "]
158
- bb1_instrs --> bb1_terminal(["Return read $14"])
151
+ [4] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
152
+ "]
153
+ bb1_instrs --> bb1_terminal(["Return read $14"])
154
end
160
-
155
156
%% Jumps
157
bb0_terminal -- then --> bb2
158
bb0_terminal -- else --> bb1
165
-
159
bb2_terminal --> bb1
167
-
160
+
161
```
162
163
## Code
compiler/forget/src/__tests__/fixtures/hir/interdependent.expect.md
+6
-10
@@ -45,11 +45,10 @@ flowchart TB
45
[1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
46
[2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
47
[3] Call mutate foo$5(mutate a$9, mutate b$10)
48
- [4] Const mutate $11 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
49
- "]
50
- bb0_instrs --> bb0_terminal(["Return read $11"])
48
+ [4] Const mutate $11 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
49
+ "]
50
+ bb0_instrs --> bb0_terminal(["Return read $11"])
51
end
52
-
52
53
%% Jumps
54
%% empty
@@ -79,9 +78,8 @@ bb0:
78
flowchart TB
79
%% Basic Blocks
80
subgraph bb0
82
- bb0_terminal(["Return"])
81
+ bb0_terminal(["Return"])
82
end
84
-
83
84
%% Jumps
85
%% empty
@@ -108,9 +106,8 @@ bb0:
106
flowchart TB
107
%% Basic Blocks
108
subgraph bb0
111
- bb0_terminal(["Return"])
109
+ bb0_terminal(["Return"])
110
end
113
-
111
112
%% Jumps
113
%% empty
@@ -137,9 +134,8 @@ bb0:
134
flowchart TB
135
%% Basic Blocks
136
subgraph bb0
140
- bb0_terminal(["Return"])
137
+ bb0_terminal(["Return"])
138
end
142
-
139
140
%% Jumps
141
%% empty
compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md
+3
-4
@@ -50,11 +50,10 @@ flowchart TB
50
[8] Const mutate $21 = '\n '
51
[9] Const mutate $22 = JSX <read $17>{read $18}{read $20}{read $21}</read $17>
52
[10] Const mutate $23 = '\n '
53
- [11] Const mutate $24 = JsxFragment [read $14, read props$13.greeting, read $15, read $16, read $22, read $23]
54
- "]
55
- bb0_instrs --> bb0_terminal(["Return read $24"])
53
+ [11] Const mutate $24 = JsxFragment [read $14, read props$13.greeting, read $15, read $16, read $22, read $23]
54
+ "]
55
+ bb0_instrs --> bb0_terminal(["Return read $24"])
56
end
57
-
57
58
%% Jumps
59
%% empty
compiler/forget/src/__tests__/fixtures/hir/logical-expression.expect.md
+35
-55
@@ -45,39 +45,33 @@ flowchart TB
45
%% Basic Blocks
46
subgraph bb0
47
bb0_instrs["
48
- [1] Const mutate $5 = Call mutate f$1()
49
- "]
50
- bb0_instrs --> bb0_terminal(["If (read $5)"])
48
+ [1] Const mutate $5 = Call mutate f$1()
49
+ "]
50
+ bb0_instrs --> bb0_terminal(["If (read $5)"])
51
end
52
-
52
subgraph bb2
53
bb2_instrs["
55
- [2] Const mutate $3 = Call mutate g$4()
56
- "]
57
- bb2_instrs --> bb2_terminal(["Goto"])
54
+ [2] Const mutate $3 = Call mutate g$4()
55
+ "]
56
+ bb2_instrs --> bb2_terminal(["Goto"])
57
end
59
-
58
subgraph bb3
59
bb3_instrs["
62
- [3] Const mutate $3 = read $5
63
- "]
64
- bb3_instrs --> bb3_terminal(["Goto"])
60
+ [3] Const mutate $3 = read $5
61
+ "]
62
+ bb3_instrs --> bb3_terminal(["Goto"])
63
end
66
-
64
subgraph bb1
68
- bb1_terminal(["Return freeze $3"])
65
+ bb1_terminal(["Return freeze $3"])
66
end
70
-
67
68
%% Jumps
69
bb0_terminal -- then --> bb2
70
bb0_terminal -- else --> bb3
71
bb0_terminal -- fallthrough --> bb1
76
-
72
bb2_terminal --> bb1
78
-
73
bb3_terminal --> bb1
80
-
74
+
75
```
76
77
## Code
@@ -117,39 +111,33 @@ flowchart TB
111
%% Basic Blocks
112
subgraph bb0
113
bb0_instrs["
120
- [1] Const mutate $5 = Call mutate f$1()
121
- "]
122
- bb0_instrs --> bb0_terminal(["If (read $5)"])
114
+ [1] Const mutate $5 = Call mutate f$1()
115
+ "]
116
+ bb0_instrs --> bb0_terminal(["If (read $5)"])
117
end
124
-
118
subgraph bb2
119
bb2_instrs["
127
- [2] Const mutate $3 = read $5
128
- "]
129
- bb2_instrs --> bb2_terminal(["Goto"])
120
+ [2] Const mutate $3 = read $5
121
+ "]
122
+ bb2_instrs --> bb2_terminal(["Goto"])
123
end
131
-
124
subgraph bb3
125
bb3_instrs["
134
- [3] Const mutate $3 = Call mutate g$4()
135
- "]
136
- bb3_instrs --> bb3_terminal(["Goto"])
126
+ [3] Const mutate $3 = Call mutate g$4()
127
+ "]
128
+ bb3_instrs --> bb3_terminal(["Goto"])
129
end
138
-
130
subgraph bb1
140
- bb1_terminal(["Return freeze $3"])
131
+ bb1_terminal(["Return freeze $3"])
132
end
142
-
133
134
%% Jumps
135
bb0_terminal -- then --> bb2
136
bb0_terminal -- else --> bb3
137
bb0_terminal -- fallthrough --> bb1
148
-
138
bb2_terminal --> bb1
150
-
139
bb3_terminal --> bb1
152
-
140
+
141
```
142
143
## Code
@@ -193,39 +181,33 @@ flowchart TB
181
bb0_instrs["
182
[1] Const mutate $9 = Call mutate f$2()
183
[2] Const mutate $10 = null
196
- [3] Const mutate $11 = Binary read $9 != read $10
197
- "]
198
- bb0_instrs --> bb0_terminal(["If (read $11)"])
184
+ [3] Const mutate $11 = Binary read $9 != read $10
185
+ "]
186
+ bb0_instrs --> bb0_terminal(["If (read $11)"])
187
end
200
-
188
subgraph bb2
189
bb2_instrs["
203
- [4] Const mutate $6 = read $9
204
- "]
205
- bb2_instrs --> bb2_terminal(["Goto"])
190
+ [4] Const mutate $6 = read $9
191
+ "]
192
+ bb2_instrs --> bb2_terminal(["Goto"])
193
end
207
-
194
subgraph bb3
195
bb3_instrs["
210
- [5] Const mutate $6 = Call mutate g$7()
211
- "]
212
- bb3_instrs --> bb3_terminal(["Goto"])
196
+ [5] Const mutate $6 = Call mutate g$7()
197
+ "]
198
+ bb3_instrs --> bb3_terminal(["Goto"])
199
end
214
-
200
subgraph bb1
216
- bb1_terminal(["Return freeze $6"])
201
+ bb1_terminal(["Return freeze $6"])
202
end
218
-
203
204
%% Jumps
205
bb0_terminal -- then --> bb2
206
bb0_terminal -- else --> bb3
207
bb0_terminal -- fallthrough --> bb1
224
-
208
bb2_terminal --> bb1
226
-
209
bb3_terminal --> bb1
228
-
210
+
211
```
212
213
## Code
@@ -252,9 +234,8 @@ bb0:
234
flowchart TB
235
%% Basic Blocks
236
subgraph bb0
255
- bb0_terminal(["Return"])
237
+ bb0_terminal(["Return"])
238
end
257
-
239
240
%% Jumps
241
%% empty
@@ -281,9 +262,8 @@ bb0:
262
flowchart TB
263
%% Basic Blocks
264
subgraph bb0
284
- bb0_terminal(["Return"])
265
+ bb0_terminal(["Return"])
266
end
286
-
267
268
%% Jumps
269
%% empty
compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-loops.expect.md
+20
-38
@@ -52,9 +52,8 @@ bb0:
52
flowchart TB
53
%% Basic Blocks
54
subgraph bb0
55
- bb0_terminal(["Return"])
55
+ bb0_terminal(["Return"])
56
end
57
-
57
58
%% Jumps
59
%% empty
@@ -81,9 +80,8 @@ bb0:
80
flowchart TB
81
%% Basic Blocks
82
subgraph bb0
84
- bb0_terminal(["Return"])
83
+ bb0_terminal(["Return"])
84
end
86
-
85
86
%% Jumps
87
%% empty
@@ -152,18 +150,16 @@ flowchart TB
150
[1] Let mutate a$2 = Object { }
151
[2] Let mutate b$3 = Object { }
152
[3] Let mutate c$4 = Object { }
155
- [4] Let mutate d$5 = Object { }
156
- "]
157
- bb0_instrs --> bb0_terminal(["While"])
153
+ [4] Let mutate d$5 = Object { }
154
+ "]
155
+ bb0_instrs --> bb0_terminal(["While"])
156
end
159
-
157
subgraph bb1
158
bb1_instrs["
162
- [5] Const mutate $17 = true
163
- "]
164
- bb1_instrs --> bb1_terminal(["If (read $17)"])
159
+ [5] Const mutate $17 = true
160
+ "]
161
+ bb1_instrs --> bb1_terminal(["If (read $17)"])
162
end
166
-
163
subgraph bb3
164
bb3_instrs["
165
[6] Let mutate z$19 = read a$2
@@ -172,65 +168,51 @@ flowchart TB
168
[9] Reassign mutate c$4 = read d$5
169
[10] Reassign mutate d$5 = read z$19
170
[11] Call mutate mutate$7(mutate a$2, mutate b$3)
175
- [12] Const mutate $29 = Call mutate cond$8(mutate a$2)
176
- "]
177
- bb3_instrs --> bb3_terminal(["If (read $29)"])
171
+ [12] Const mutate $29 = Call mutate cond$8(mutate a$2)
172
+ "]
173
+ bb3_instrs --> bb3_terminal(["If (read $29)"])
174
end
179
-
175
subgraph bb4
181
- bb4_terminal(["Goto"])
176
+ bb4_terminal(["Goto"])
177
end
183
-
178
subgraph bb2
185
- bb2_terminal(["If (read a$2)"])
179
+ bb2_terminal(["If (read a$2)"])
180
end
187
-
181
subgraph bb7
189
- bb7_terminal(["If (read b$3)"])
182
+ bb7_terminal(["If (read b$3)"])
183
end
191
-
184
subgraph bb9
193
- bb9_terminal(["If (read c$4)"])
185
+ bb9_terminal(["If (read c$4)"])
186
end
195
-
187
subgraph bb11
197
- bb11_terminal(["If (read d$5)"])
188
+ bb11_terminal(["If (read d$5)"])
189
end
199
-
190
subgraph bb13
191
bb13_instrs["
192
[13] Const mutate $34 = null
203
- [14] Call mutate mutate$7(mutate d$5, read $34)
204
- "]
205
- bb13_instrs --> bb13_terminal(["Return"])
193
+ [14] Call mutate mutate$7(mutate d$5, read $34)
194
+ "]
195
+ bb13_instrs --> bb13_terminal(["Return"])
196
end
207
-
197
198
%% Jumps
199
bb0_terminal -- test --> bb1
200
bb0_terminal -- loop --> bb3
201
bb0_terminal -- fallthrough --> bb2
213
-
202
bb1_terminal -- then --> bb3
203
bb1_terminal -- else --> bb2
216
-
204
bb3_terminal -- then --> bb2
205
bb3_terminal -- else --> bb4
219
-
206
bb4_terminal --> bb1
221
-
207
bb2_terminal -- then --> bb7
208
bb2_terminal -- else --> bb7
224
-
209
bb7_terminal -- then --> bb9
210
bb7_terminal -- else --> bb9
227
-
211
bb9_terminal -- then --> bb11
212
bb9_terminal -- else --> bb11
230
-
213
bb11_terminal -- then --> bb13
214
bb11_terminal -- else --> bb13
233
-
215
+
216
```
217
218
## Code
compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-with-aliasing.expect.md
+12
-23
@@ -48,9 +48,8 @@ bb0:
48
flowchart TB
49
%% Basic Blocks
50
subgraph bb0
51
- bb0_terminal(["Return"])
51
+ bb0_terminal(["Return"])
52
end
53
-
53
54
%% Jumps
55
%% empty
@@ -108,52 +107,42 @@ flowchart TB
107
[4] Const mutate d$14[4:7] = Object { c: read c$13 }
108
[5] Const mutate x$15[5:9] = Object { }
109
[6] Reassign mutate x$15.b[5:9] = read b$12
111
- [7] Const mutate y$16 = Call mutate mutate$8(mutate x$15, mutate d$14)
112
- "]
113
- bb0_instrs --> bb0_terminal(["If (read a$11)"])
110
+ [7] Const mutate y$16 = Call mutate mutate$8(mutate x$15, mutate d$14)
111
+ "]
112
+ bb0_instrs --> bb0_terminal(["If (read a$11)"])
113
end
115
-
114
subgraph bb1
117
- bb1_terminal(["If (read b$12)"])
115
+ bb1_terminal(["If (read b$12)"])
116
end
119
-
117
subgraph bb3
121
- bb3_terminal(["If (read c$13)"])
118
+ bb3_terminal(["If (read c$13)"])
119
end
123
-
120
subgraph bb5
125
- bb5_terminal(["If (read d$14)"])
121
+ bb5_terminal(["If (read d$14)"])
122
end
127
-
123
subgraph bb7
129
- bb7_terminal(["If (read y$16)"])
124
+ bb7_terminal(["If (read y$16)"])
125
end
131
-
126
subgraph bb9
127
bb9_instrs["
128
[8] Const mutate $17 = null
135
- [9] Call mutate mutate$8(mutate x$15, read $17)
136
- "]
137
- bb9_instrs --> bb9_terminal(["Return"])
129
+ [9] Call mutate mutate$8(mutate x$15, read $17)
130
+ "]
131
+ bb9_instrs --> bb9_terminal(["Return"])
132
end
139
-
133
134
%% Jumps
135
bb0_terminal -- then --> bb1
136
bb0_terminal -- else --> bb1
144
-
137
bb1_terminal -- then --> bb3
138
bb1_terminal -- else --> bb3
147
-
139
bb3_terminal -- then --> bb5
140
bb3_terminal -- else --> bb5
150
-
141
bb5_terminal -- then --> bb7
142
bb5_terminal -- else --> bb7
153
-
143
bb7_terminal -- then --> bb9
144
bb7_terminal -- else --> bb9
156
-
145
+
146
```
147
148
## Code
compiler/forget/src/__tests__/fixtures/hir/mutable-liverange-loop.expect.md
+20
-38
@@ -47,9 +47,8 @@ bb0:
47
flowchart TB
48
%% Basic Blocks
49
subgraph bb0
50
- bb0_terminal(["Return"])
50
+ bb0_terminal(["Return"])
51
end
52
-
52
53
%% Jumps
54
%% empty
@@ -76,9 +75,8 @@ bb0:
75
flowchart TB
76
%% Basic Blocks
77
subgraph bb0
79
- bb0_terminal(["Return"])
78
+ bb0_terminal(["Return"])
79
end
81
-
80
81
%% Jumps
82
%% empty
@@ -142,80 +140,64 @@ flowchart TB
140
[1] Let mutate a$12[1:7] = Object { }
141
[2] Let mutate b$13[2:6] = Object { }
142
[3] Let mutate c$14 = Object { }
145
- [4] Let mutate d$15[4:9] = Object { }
146
- "]
147
- bb0_instrs --> bb0_terminal(["While"])
143
+ [4] Let mutate d$15[4:9] = Object { }
144
+ "]
145
+ bb0_instrs --> bb0_terminal(["While"])
146
end
149
-
147
subgraph bb1
148
bb1_instrs["
152
- [5] Const mutate $16 = true
153
- "]
154
- bb1_instrs --> bb1_terminal(["If (read $16)"])
149
+ [5] Const mutate $16 = true
150
+ "]
151
+ bb1_instrs --> bb1_terminal(["If (read $16)"])
152
end
156
-
153
subgraph bb3
154
bb3_instrs["
155
[6] Call mutate mutate$6(mutate a$12, mutate b$13)
160
- [7] Const mutate $21 = Call mutate cond$7(mutate a$12)
161
- "]
162
- bb3_instrs --> bb3_terminal(["If (read $21)"])
156
+ [7] Const mutate $21 = Call mutate cond$7(mutate a$12)
157
+ "]
158
+ bb3_instrs --> bb3_terminal(["If (read $21)"])
159
end
164
-
160
subgraph bb4
166
- bb4_terminal(["Goto"])
161
+ bb4_terminal(["Goto"])
162
end
168
-
163
subgraph bb2
170
- bb2_terminal(["If (read a$12)"])
164
+ bb2_terminal(["If (read a$12)"])
165
end
172
-
166
subgraph bb7
174
- bb7_terminal(["If (read b$13)"])
167
+ bb7_terminal(["If (read b$13)"])
168
end
176
-
169
subgraph bb9
178
- bb9_terminal(["If (read c$14)"])
170
+ bb9_terminal(["If (read c$14)"])
171
end
180
-
172
subgraph bb11
182
- bb11_terminal(["If (read d$15)"])
173
+ bb11_terminal(["If (read d$15)"])
174
end
184
-
175
subgraph bb13
176
bb13_instrs["
177
[8] Const mutate $28 = null
188
- [9] Call mutate mutate$6(mutate d$15, read $28)
189
- "]
190
- bb13_instrs --> bb13_terminal(["Return"])
178
+ [9] Call mutate mutate$6(mutate d$15, read $28)
179
+ "]
180
+ bb13_instrs --> bb13_terminal(["Return"])
181
end
192
-
182
183
%% Jumps
184
bb0_terminal -- test --> bb1
185
bb0_terminal -- loop --> bb3
186
bb0_terminal -- fallthrough --> bb2
198
-
187
bb1_terminal -- then --> bb3
188
bb1_terminal -- else --> bb2
201
-
189
bb3_terminal -- then --> bb2
190
bb3_terminal -- else --> bb4
204
-
191
bb4_terminal --> bb1
206
-
192
bb2_terminal -- then --> bb7
193
bb2_terminal -- else --> bb7
209
-
194
bb7_terminal -- then --> bb9
195
bb7_terminal -- else --> bb9
212
-
196
bb9_terminal -- then --> bb11
197
bb9_terminal -- else --> bb11
215
-
198
bb11_terminal -- then --> bb13
199
bb11_terminal -- else --> bb13
218
-
200
+
201
```
202
203
## Code
compiler/forget/src/__tests__/fixtures/hir/property-assignment.expect.md
+3
-4
@@ -38,11 +38,10 @@ flowchart TB
38
[3] Reassign mutate x$7.y[1:5] = read y$8
39
[4] Const mutate child$9 = JSX <read Component$0 data={freeze y$8} ></read Component$0>
40
[5] Call mutate x$7.y.push(read props$6.p0)
41
- [6] Const mutate $10 = JSX <read Component$0 data={freeze x$7} >{read child$9}</read Component$0>
42
- "]
43
- bb0_instrs --> bb0_terminal(["Return read $10"])
41
+ [6] Const mutate $10 = JSX <read Component$0 data={freeze x$7} >{read child$9}</read Component$0>
42
+ "]
43
+ bb0_instrs --> bb0_terminal(["Return read $10"])
44
end
45
-
45
46
%% Jumps
47
%% empty
compiler/forget/src/__tests__/fixtures/hir/reassignment-conditional.expect.md
+10
-14
@@ -48,34 +48,30 @@ flowchart TB
48
bb0_instrs["
49
[1] Let mutate x$2 = Array []
50
[2] Call mutate x$2.push(read props$6.p0)
51
- [3] Let mutate y$8 = read x$2
52
- "]
53
- bb0_instrs --> bb0_terminal(["If (read props$6.p1)"])
51
+ [3] Let mutate y$8 = read x$2
52
+ "]
53
+ bb0_instrs --> bb0_terminal(["If (read props$6.p1)"])
54
end
55
-
55
subgraph bb2
56
bb2_instrs["
58
- [4] Reassign mutate x$2 = Array []
59
- "]
60
- bb2_instrs --> bb2_terminal(["Goto"])
57
+ [4] Reassign mutate x$2 = Array []
58
+ "]
59
+ bb2_instrs --> bb2_terminal(["Goto"])
60
end
62
-
61
subgraph bb1
62
bb1_instrs["
63
[5] Let mutate _$12 = JSX <read Component$0 x={freeze x$2} ></read Component$0>
64
[6] Call read y$8.push(read props$6.p2)
67
- [7] Const mutate $15 = JSX <read Component$0 x={read x$2} y={read y$8} ></read Component$0>
68
- "]
69
- bb1_instrs --> bb1_terminal(["Return read $15"])
65
+ [7] Const mutate $15 = JSX <read Component$0 x={read x$2} y={read y$8} ></read Component$0>
66
+ "]
67
+ bb1_instrs --> bb1_terminal(["Return read $15"])
68
end
71
-
69
70
%% Jumps
71
bb0_terminal -- then --> bb2
72
bb0_terminal -- else --> bb1
76
-
73
bb2_terminal --> bb1
78
-
74
+
75
```
76
77
## Code
compiler/forget/src/__tests__/fixtures/hir/reassignment.expect.md
+3
-4
@@ -44,11 +44,10 @@ flowchart TB
44
[4] Reassign mutate x$9 = Array []
45
[5] Let mutate _$10 = JSX <read Component$0 x={freeze x$9} ></read Component$0>
46
[6] Call mutate y$8.push(read props$6.p1)
47
- [7] Const mutate $11 = JSX <read Component$0 x={read x$9} y={freeze y$8} ></read Component$0>
48
- "]
49
- bb0_instrs --> bb0_terminal(["Return read $11"])
47
+ [7] Const mutate $11 = JSX <read Component$0 x={read x$9} y={freeze y$8} ></read Component$0>
48
+ "]
49
+ bb0_instrs --> bb0_terminal(["Return read $11"])
50
end
51
-
51
52
%% Jumps
53
%% empty
compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md
+26
-42
@@ -84,92 +84,76 @@ flowchart TB
84
%% Basic Blocks
85
subgraph bb0
86
bb0_instrs["
87
- [1] Let mutate x$7 = undefined
88
- "]
89
- bb0_instrs --> bb0_terminal(["If (read props$6.cond)"])
87
+ [1] Let mutate x$7 = undefined
88
+ "]
89
+ bb0_instrs --> bb0_terminal(["If (read props$6.cond)"])
90
end
91
-
91
subgraph bb2
92
bb2_instrs["
93
[2] Const mutate $8 = 2
94
[3] Const mutate $9 = 1
96
- [4] Const mutate $10 = 0
97
- "]
98
- bb2_instrs --> bb2_terminal(["Switch (read props$6.test)"])
95
+ [4] Const mutate $10 = 0
96
+ "]
97
+ bb2_instrs --> bb2_terminal(["Switch (read props$6.test)"])
98
end
100
-
99
subgraph bb8
100
bb8_instrs["
103
- [5] Reassign mutate x$2 = read props$6.v0
104
- "]
105
- bb8_instrs --> bb8_terminal(["Goto"])
101
+ [5] Reassign mutate x$2 = read props$6.v0
102
+ "]
103
+ bb8_instrs --> bb8_terminal(["Goto"])
104
end
107
-
105
subgraph bb6
106
bb6_instrs["
110
- [6] Reassign mutate x$2 = read props$6.v1
111
- "]
112
- bb6_instrs --> bb6_terminal(["Goto"])
107
+ [6] Reassign mutate x$2 = read props$6.v1
108
+ "]
109
+ bb6_instrs --> bb6_terminal(["Goto"])
110
end
114
-
111
subgraph bb4
112
bb4_instrs["
117
- [7] Reassign mutate x$2 = read props$6.v2
118
- "]
119
- bb4_instrs --> bb4_terminal(["Goto"])
113
+ [7] Reassign mutate x$2 = read props$6.v2
114
+ "]
115
+ bb4_instrs --> bb4_terminal(["Goto"])
116
end
121
-
117
subgraph bb10
123
- bb10_terminal(["If (read props$6.cond2)"])
118
+ bb10_terminal(["If (read props$6.cond2)"])
119
end
125
-
120
subgraph bb12
121
bb12_instrs["
128
- [8] Reassign mutate x$2 = read props$6.b
129
- "]
130
- bb12_instrs --> bb12_terminal(["Goto"])
122
+ [8] Reassign mutate x$2 = read props$6.b
123
+ "]
124
+ bb12_instrs --> bb12_terminal(["Goto"])
125
end
132
-
126
subgraph bb13
127
bb13_instrs["
135
- [9] Reassign mutate x$2 = read props$6.c
136
- "]
137
- bb13_instrs --> bb13_terminal(["Goto"])
128
+ [9] Reassign mutate x$2 = read props$6.c
129
+ "]
130
+ bb13_instrs --> bb13_terminal(["Goto"])
131
end
139
-
132
subgraph bb1
133
bb1_instrs["
142
- [10] read x$2
143
- "]
144
- bb1_instrs --> bb1_terminal(["Return"])
134
+ [10] read x$2
135
+ "]
136
+ bb1_instrs --> bb1_terminal(["Return"])
137
end
146
-
138
139
%% Jumps
140
bb0_terminal -- then --> bb2
141
bb0_terminal -- else --> bb10
142
bb0_terminal -- fallthrough --> bb1
152
-
143
bb2_terminal -- read $10 --> bb8
144
bb2_terminal -- read $9 --> bb6
145
bb2_terminal -- read $8 --> bb4
146
bb2_terminal -- default --> bb4
147
bb2_terminal -- fallthrough --> bb1
158
-
148
bb8_terminal --> bb1
160
-
149
bb6_terminal --> bb1
162
-
150
bb4_terminal --> bb1
164
-
151
bb10_terminal -- then --> bb12
152
bb10_terminal -- else --> bb13
153
bb10_terminal -- fallthrough --> bb1
168
-
154
bb12_terminal --> bb1
170
-
155
bb13_terminal --> bb1
172
-
156
+
157
```
158
159
## Code
compiler/forget/src/__tests__/fixtures/hir/simple.expect.md
+8
-11
@@ -35,31 +35,28 @@ bb1:
35
flowchart TB
36
%% Basic Blocks
37
subgraph bb0
38
- bb0_terminal(["If (read x$8)"])
38
+ bb0_terminal(["If (read x$8)"])
39
end
40
-
40
subgraph bb2
41
bb2_instrs["
42
[1] Const mutate $10 = false
44
- [2] Const mutate $11 = Call read foo$0(read $10, read y$9)
45
- "]
46
- bb2_instrs --> bb2_terminal(["Return freeze $11"])
43
+ [2] Const mutate $11 = Call read foo$0(read $10, read y$9)
44
+ "]
45
+ bb2_instrs --> bb2_terminal(["Return freeze $11"])
46
end
48
-
47
subgraph bb1
48
bb1_instrs["
49
[3] Const mutate $12 = 10
50
[4] Const mutate $13 = Binary read y$9 * read $12
53
- [5] Const mutate $14 = Array [read $13]
54
- "]
55
- bb1_instrs --> bb1_terminal(["Return freeze $14"])
51
+ [5] Const mutate $14 = Array [read $13]
52
+ "]
53
+ bb1_instrs --> bb1_terminal(["Return freeze $14"])
54
end
57
-
55
56
%% Jumps
57
bb0_terminal -- then --> bb2
58
bb0_terminal -- else --> bb1
62
-
59
+
60
```
61
62
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-arrayexpression.expect.md
+3
-4
@@ -30,11 +30,10 @@ flowchart TB
30
bb0_instrs["
31
[1] Const mutate a$6 = 1
32
[2] Const mutate b$7 = 2
33
- [3] Const mutate x$8 = Array [read a$6, read b$7]
34
- "]
35
- bb0_instrs --> bb0_terminal(["Return freeze x$8"])
33
+ [3] Const mutate x$8 = Array [read a$6, read b$7]
34
+ "]
35
+ bb0_instrs --> bb0_terminal(["Return freeze x$8"])
36
end
37
-
37
38
%% Jumps
39
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx-2.expect.md
+11
-16
@@ -31,9 +31,8 @@ bb0:
31
flowchart TB
32
%% Basic Blocks
33
subgraph bb0
34
- bb0_terminal(["Return"])
34
+ bb0_terminal(["Return"])
35
end
36
-
36
37
%% Jumps
38
%% empty
@@ -79,35 +78,31 @@ flowchart TB
78
[1] Const mutate a$11[1:3] = Array []
79
[2] Const mutate b$12[2:7] = Object { }
80
[3] Call mutate foo$4(mutate a$11, mutate b$12)
82
- [4] Const mutate $13 = Call mutate foo$4()
83
- "]
84
- bb0_instrs --> bb0_terminal(["If (read $13)"])
81
+ [4] Const mutate $13 = Call mutate foo$4()
82
+ "]
83
+ bb0_instrs --> bb0_terminal(["If (read $13)"])
84
end
86
-
85
subgraph bb2
86
bb2_instrs["
87
[5] Const mutate $14 = 'div'
90
- [6] Let mutate _$15 = JSX <read $14 a={freeze a$11} ></read $14>
91
- "]
92
- bb2_instrs --> bb2_terminal(["Goto"])
88
+ [6] Let mutate _$15 = JSX <read $14 a={freeze a$11} ></read $14>
89
+ "]
90
+ bb2_instrs --> bb2_terminal(["Goto"])
91
end
94
-
92
subgraph bb1
93
bb1_instrs["
94
[7] Call mutate foo$4(read a$11, mutate b$12)
95
[8] Const mutate $19 = 'div'
99
- [9] Const mutate $20 = JSX <read $19 a={freeze a$11} b={freeze b$12} ></read $19>
100
- "]
101
- bb1_instrs --> bb1_terminal(["Return read $20"])
96
+ [9] Const mutate $20 = JSX <read $19 a={freeze a$11} b={freeze b$12} ></read $19>
97
+ "]
98
+ bb1_instrs --> bb1_terminal(["Return read $20"])
99
end
103
-
100
101
%% Jumps
102
bb0_terminal -- then --> bb2
103
bb0_terminal -- else --> bb1
108
-
104
bb2_terminal --> bb1
110
-
105
+
106
```
107
108
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx.expect.md
+4
-6
@@ -28,9 +28,8 @@ bb0:
28
flowchart TB
29
%% Basic Blocks
30
subgraph bb0
31
- bb0_terminal(["Return"])
31
+ bb0_terminal(["Return"])
32
end
33
-
33
34
%% Jumps
35
%% empty
@@ -73,11 +72,10 @@ flowchart TB
72
[5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73
[6] Call mutate foo$4(read a$10, mutate b$11)
74
[7] Const mutate $14 = 'div'
76
- [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77
- "]
78
- bb0_instrs --> bb0_terminal(["Return read $15"])
75
+ [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76
+ "]
77
+ bb0_instrs --> bb0_terminal(["Return read $15"])
78
end
80
-
79
80
%% Jumps
81
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-complex-multiple-if.expect.md
+16
-24
@@ -55,52 +55,44 @@ flowchart TB
55
[1] Let mutate x$1 = 1
56
[2] Let mutate y$8 = 2
57
[3] Const mutate $9 = 2
58
- [4] Const mutate $10 = Binary read y$8 === read $9
59
- "]
60
- bb0_instrs --> bb0_terminal(["If (read $10)"])
58
+ [4] Const mutate $10 = Binary read y$8 === read $9
59
+ "]
60
+ bb0_instrs --> bb0_terminal(["If (read $10)"])
61
end
62
-
62
subgraph bb2
63
bb2_instrs["
65
- [5] Reassign mutate x$1 = 3
66
- "]
67
- bb2_instrs --> bb2_terminal(["Goto"])
64
+ [5] Reassign mutate x$1 = 3
65
+ "]
66
+ bb2_instrs --> bb2_terminal(["Goto"])
67
end
69
-
68
subgraph bb1
69
bb1_instrs["
70
[6] Const mutate $12 = 3
73
- [7] Const mutate $14 = Binary read y$8 === read $12
74
- "]
75
- bb1_instrs --> bb1_terminal(["If (read $14)"])
71
+ [7] Const mutate $14 = Binary read y$8 === read $12
72
+ "]
73
+ bb1_instrs --> bb1_terminal(["If (read $14)"])
74
end
77
-
75
subgraph bb4
76
bb4_instrs["
80
- [8] Reassign mutate x$1 = 5
81
- "]
82
- bb4_instrs --> bb4_terminal(["Goto"])
77
+ [8] Reassign mutate x$1 = 5
78
+ "]
79
+ bb4_instrs --> bb4_terminal(["Goto"])
80
end
84
-
81
subgraph bb3
82
bb3_instrs["
87
- [9] Reassign mutate y$18 = read x$1
88
- "]
89
- bb3_instrs --> bb3_terminal(["Return"])
83
+ [9] Reassign mutate y$18 = read x$1
84
+ "]
85
+ bb3_instrs --> bb3_terminal(["Return"])
86
end
91
-
87
88
%% Jumps
89
bb0_terminal -- then --> bb2
90
bb0_terminal -- else --> bb1
96
-
91
bb2_terminal --> bb1
98
-
92
bb1_terminal -- then --> bb4
93
bb1_terminal -- else --> bb3
101
-
94
bb4_terminal --> bb3
103
-
95
+
96
```
97
98
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-complex-single-if.expect.md
+10
-14
@@ -43,32 +43,28 @@ flowchart TB
43
[1] Let mutate x$1 = 1
44
[2] Let mutate y$6 = 2
45
[3] Const mutate $7 = 2
46
- [4] Const mutate $8 = Binary read y$6 === read $7
47
- "]
48
- bb0_instrs --> bb0_terminal(["If (read $8)"])
46
+ [4] Const mutate $8 = Binary read y$6 === read $7
47
+ "]
48
+ bb0_instrs --> bb0_terminal(["If (read $8)"])
49
end
50
-
50
subgraph bb2
51
bb2_instrs["
53
- [5] Reassign mutate x$1 = 3
54
- "]
55
- bb2_instrs --> bb2_terminal(["Goto"])
52
+ [5] Reassign mutate x$1 = 3
53
+ "]
54
+ bb2_instrs --> bb2_terminal(["Goto"])
55
end
57
-
56
subgraph bb1
57
bb1_instrs["
60
- [6] Reassign mutate y$11 = read x$1
61
- "]
62
- bb1_instrs --> bb1_terminal(["Return"])
58
+ [6] Reassign mutate y$11 = read x$1
59
+ "]
60
+ bb1_instrs --> bb1_terminal(["Return"])
61
end
64
-
62
63
%% Jumps
64
bb0_terminal -- then --> bb2
65
bb0_terminal -- else --> bb1
69
-
66
bb2_terminal --> bb1
71
-
67
+
68
```
69
70
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-for-of.expect.md
+13
-23
@@ -47,51 +47,41 @@ flowchart TB
47
%% Basic Blocks
48
subgraph bb0
49
bb0_instrs["
50
- [1] Let mutate items$5 = Array []
51
- "]
52
- bb0_instrs --> bb0_terminal(["Goto"])
50
+ [1] Let mutate items$5 = Array []
51
+ "]
52
+ bb0_instrs --> bb0_terminal(["Goto"])
53
end
54
-
54
subgraph bb1
56
- bb1_terminal(["If (read items$5)"])
55
+ bb1_terminal(["If (read items$5)"])
56
end
58
-
57
subgraph bb3
58
bb3_instrs["
61
- [2] Let mutate y$7 = 0
62
- "]
63
- bb3_instrs --> bb3_terminal(["If (read cond$4)"])
59
+ [2] Let mutate y$7 = 0
60
+ "]
61
+ bb3_instrs --> bb3_terminal(["If (read cond$4)"])
62
end
65
-
63
subgraph bb5
64
bb5_instrs["
68
- [3] Reassign mutate y$9 = 1
69
- "]
70
- bb5_instrs --> bb5_terminal(["Goto"])
65
+ [3] Reassign mutate y$9 = 1
66
+ "]
67
+ bb5_instrs --> bb5_terminal(["Goto"])
68
end
72
-
69
subgraph bb4
74
- bb4_terminal(["Goto"])
70
+ bb4_terminal(["Goto"])
71
end
76
-
72
subgraph bb2
78
- bb2_terminal(["Return freeze items$5"])
73
+ bb2_terminal(["Return freeze items$5"])
74
end
80
-
75
76
%% Jumps
77
bb0_terminal --> bb1
84
-
78
bb1_terminal -- then --> bb3
79
bb1_terminal -- else --> bb2
87
-
80
bb3_terminal -- then --> bb5
81
bb3_terminal -- else --> bb4
90
-
82
bb5_terminal --> bb4
92
-
83
bb4_terminal --> bb1
94
-
84
+
85
```
86
87
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-for.expect.md
+11
-17
@@ -40,40 +40,34 @@ flowchart TB
40
%% Basic Blocks
41
subgraph bb0
42
bb0_instrs["
43
- [1] Let mutate x$1 = 0
44
- "]
45
- bb0_instrs --> bb0_terminal(["Goto"])
43
+ [1] Let mutate x$1 = 0
44
+ "]
45
+ bb0_instrs --> bb0_terminal(["Goto"])
46
end
47
-
47
subgraph bb1
48
bb1_instrs["
49
[2] Const mutate $6 = 10
51
- [3] Const mutate $8 = Binary read x$1 < read $6
52
- "]
53
- bb1_instrs --> bb1_terminal(["If (read $8)"])
50
+ [3] Const mutate $8 = Binary read x$1 < read $6
51
+ "]
52
+ bb1_instrs --> bb1_terminal(["If (read $8)"])
53
end
55
-
54
subgraph bb4
55
bb4_instrs["
56
[4] Const mutate $9 = 1
59
- [5] Reassign mutate x$1 = Binary read x$1 + read $9
60
- "]
61
- bb4_instrs --> bb4_terminal(["Goto"])
57
+ [5] Reassign mutate x$1 = Binary read x$1 + read $9
58
+ "]
59
+ bb4_instrs --> bb4_terminal(["Goto"])
60
end
63
-
61
subgraph bb2
65
- bb2_terminal(["Return read x$1"])
62
+ bb2_terminal(["Return read x$1"])
63
end
67
-
64
65
%% Jumps
66
bb0_terminal --> bb1
71
-
67
bb1_terminal -- then --> bb4
68
bb1_terminal -- else --> bb2
74
-
69
bb4_terminal --> bb1
76
-
70
+
71
```
72
73
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-if-else.expect.md
+11
-17
@@ -43,39 +43,33 @@ flowchart TB
43
subgraph bb0
44
bb0_instrs["
45
[1] Let mutate x$5 = 1
46
- [2] Let mutate y$6 = 2
47
- "]
48
- bb0_instrs --> bb0_terminal(["If (read y$6)"])
46
+ [2] Let mutate y$6 = 2
47
+ "]
48
+ bb0_instrs --> bb0_terminal(["If (read y$6)"])
49
end
50
-
50
subgraph bb2
51
bb2_instrs["
53
- [3] Let mutate z$7 = Binary read x$5 + read y$6
54
- "]
55
- bb2_instrs --> bb2_terminal(["Goto"])
52
+ [3] Let mutate z$7 = Binary read x$5 + read y$6
53
+ "]
54
+ bb2_instrs --> bb2_terminal(["Goto"])
55
end
57
-
56
subgraph bb3
57
bb3_instrs["
60
- [4] Let mutate z$8 = read x$5
61
- "]
62
- bb3_instrs --> bb3_terminal(["Goto"])
58
+ [4] Let mutate z$8 = read x$5
59
+ "]
60
+ bb3_instrs --> bb3_terminal(["Goto"])
61
end
64
-
62
subgraph bb1
66
- bb1_terminal(["Return"])
63
+ bb1_terminal(["Return"])
64
end
68
-
65
66
%% Jumps
67
bb0_terminal -- then --> bb2
68
bb0_terminal -- else --> bb3
69
bb0_terminal -- fallthrough --> bb1
74
-
70
bb2_terminal --> bb1
76
-
71
bb3_terminal --> bb1
78
-
72
+
73
```
74
75
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-nested-loops-no-reassign.expect.md
+15
-33
@@ -61,80 +61,62 @@ flowchart TB
61
%% Basic Blocks
62
subgraph bb0
63
bb0_instrs["
64
- [1] Let mutate x$9 = 0
65
- "]
66
- bb0_instrs --> bb0_terminal(["While"])
64
+ [1] Let mutate x$9 = 0
65
+ "]
66
+ bb0_instrs --> bb0_terminal(["While"])
67
end
68
-
68
subgraph bb1
70
- bb1_terminal(["If (read a$6)"])
69
+ bb1_terminal(["If (read a$6)"])
70
end
72
-
71
subgraph bb3
74
- bb3_terminal(["While"])
72
+ bb3_terminal(["While"])
73
end
76
-
74
subgraph bb4
78
- bb4_terminal(["If (read b$7)"])
75
+ bb4_terminal(["If (read b$7)"])
76
end
80
-
77
subgraph bb6
82
- bb6_terminal(["While"])
78
+ bb6_terminal(["While"])
79
end
84
-
80
subgraph bb7
86
- bb7_terminal(["If (read c$8)"])
81
+ bb7_terminal(["If (read c$8)"])
82
end
88
-
83
subgraph bb9
84
bb9_instrs["
85
[2] Const mutate $13 = 1
92
- [3] Binary read x$9 + read $13
93
- "]
94
- bb9_instrs --> bb9_terminal(["Goto"])
86
+ [3] Binary read x$9 + read $13
87
+ "]
88
+ bb9_instrs --> bb9_terminal(["Goto"])
89
end
96
-
90
subgraph bb8
98
- bb8_terminal(["Goto"])
91
+ bb8_terminal(["Goto"])
92
end
100
-
93
subgraph bb5
102
- bb5_terminal(["Goto"])
94
+ bb5_terminal(["Goto"])
95
end
104
-
96
subgraph bb2
106
- bb2_terminal(["Return read x$9"])
97
+ bb2_terminal(["Return read x$9"])
98
end
108
-
99
100
%% Jumps
101
bb0_terminal -- test --> bb1
102
bb0_terminal -- loop --> bb3
103
bb0_terminal -- fallthrough --> bb2
114
-
104
bb1_terminal -- then --> bb3
105
bb1_terminal -- else --> bb2
117
-
106
bb3_terminal -- test --> bb4
107
bb3_terminal -- loop --> bb6
108
bb3_terminal -- fallthrough --> bb5
121
-
109
bb4_terminal -- then --> bb6
110
bb4_terminal -- else --> bb5
124
-
111
bb6_terminal -- test --> bb7
112
bb6_terminal -- loop --> bb9
113
bb6_terminal -- fallthrough --> bb8
128
-
114
bb7_terminal -- then --> bb9
115
bb7_terminal -- else --> bb8
131
-
116
bb9_terminal --> bb7
133
-
117
bb8_terminal --> bb4
135
-
118
bb5_terminal --> bb1
137
-
119
+
120
```
121
122
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-newexpression.expect.md
+4
-6
@@ -26,9 +26,8 @@ bb0:
26
flowchart TB
27
%% Basic Blocks
28
subgraph bb0
29
- bb0_terminal(["Return"])
29
+ bb0_terminal(["Return"])
30
end
31
-
31
32
%% Jumps
33
%% empty
@@ -61,11 +60,10 @@ flowchart TB
60
bb0_instrs["
61
[1] Const mutate a$7[1:3] = Array []
62
[2] Const mutate b$8[2:3] = Object { }
64
- [3] Let mutate c$9 = New mutate Foo$5(mutate a$7, mutate b$8)
65
- "]
66
- bb0_instrs --> bb0_terminal(["Return freeze c$9"])
63
+ [3] Let mutate c$9 = New mutate Foo$5(mutate a$7, mutate b$8)
64
+ "]
65
+ bb0_instrs --> bb0_terminal(["Return freeze c$9"])
66
end
68
-
67
68
%% Jumps
69
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression-phi.expect.md
+13
-19
@@ -51,42 +51,36 @@ flowchart TB
51
[1] Let mutate x$1 = 1
52
[2] Let mutate y$2 = 2
53
[3] Const mutate $8 = 1
54
- [4] Const mutate $9 = Binary read x$1 > read $8
55
- "]
56
- bb0_instrs --> bb0_terminal(["If (read $9)"])
54
+ [4] Const mutate $9 = Binary read x$1 > read $8
55
+ "]
56
+ bb0_instrs --> bb0_terminal(["If (read $9)"])
57
end
58
-
58
subgraph bb2
59
bb2_instrs["
61
- [5] Reassign mutate x$1 = 2
62
- "]
63
- bb2_instrs --> bb2_terminal(["Goto"])
60
+ [5] Reassign mutate x$1 = 2
61
+ "]
62
+ bb2_instrs --> bb2_terminal(["Goto"])
63
end
65
-
64
subgraph bb3
65
bb3_instrs["
68
- [6] Reassign mutate y$2 = 3
69
- "]
70
- bb3_instrs --> bb3_terminal(["Goto"])
66
+ [6] Reassign mutate y$2 = 3
67
+ "]
68
+ bb3_instrs --> bb3_terminal(["Goto"])
69
end
72
-
70
subgraph bb1
71
bb1_instrs["
75
- [7] Let mutate t$14 = Object { x: read x$1, y: read y$2 }
76
- "]
77
- bb1_instrs --> bb1_terminal(["Return freeze t$14"])
72
+ [7] Let mutate t$14 = Object { x: read x$1, y: read y$2 }
73
+ "]
74
+ bb1_instrs --> bb1_terminal(["Return freeze t$14"])
75
end
79
-
76
77
%% Jumps
78
bb0_terminal -- then --> bb2
79
bb0_terminal -- else --> bb3
80
bb0_terminal -- fallthrough --> bb1
85
-
81
bb2_terminal --> bb1
87
-
82
bb3_terminal --> bb1
89
-
83
+
84
```
85
86
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression.expect.md
+3
-4
@@ -30,11 +30,10 @@ flowchart TB
30
bb0_instrs["
31
[1] Const mutate a$6 = 1
32
[2] Const mutate b$7 = 2
33
- [3] Const mutate x$8 = Object { a: read a$6, b: read b$7 }
34
- "]
35
- bb0_instrs --> bb0_terminal(["Return freeze x$8"])
33
+ [3] Const mutate x$8 = Object { a: read a$6, b: read b$7 }
34
+ "]
35
+ bb0_instrs --> bb0_terminal(["Return freeze x$8"])
36
end
37
-
37
38
%% Jumps
39
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-property-call.expect.md
+3
-4
@@ -32,11 +32,10 @@ flowchart TB
32
[1] Const mutate x$4 = Array []
33
[2] Const mutate y$5[2:4] = Object { x: read x$4 }
34
[3] Const mutate $6[3:4] = Array []
35
- [4] Call mutate y$5.x.push(mutate $6)
36
- "]
37
- bb0_instrs --> bb0_terminal(["Return freeze y$5"])
35
+ [4] Call mutate y$5.x.push(mutate $6)
36
+ "]
37
+ bb0_instrs --> bb0_terminal(["Return freeze y$5"])
38
end
39
-
39
40
%% Jumps
41
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-property.expect.md
+3
-4
@@ -30,11 +30,10 @@ flowchart TB
30
bb0_instrs["
31
[1] Const mutate x$3 = Array []
32
[2] Const mutate y$4[2:3] = Object { }
33
- [3] Reassign mutate y$4.x[2:3] = read x$3
34
- "]
35
- bb0_instrs --> bb0_terminal(["Return freeze y$4"])
33
+ [3] Reassign mutate y$4.x[2:3] = read x$3
34
+ "]
35
+ bb0_instrs --> bb0_terminal(["Return freeze y$4"])
36
end
37
-
37
38
%% Jumps
39
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-return.expect.md
+8
-12
@@ -39,29 +39,25 @@ flowchart TB
39
bb0_instrs["
40
[1] Let mutate x$1 = 1
41
[2] Const mutate $5 = 1
42
- [3] Const mutate $6 = Binary read x$1 === read $5
43
- "]
44
- bb0_instrs --> bb0_terminal(["If (read $6)"])
42
+ [3] Const mutate $6 = Binary read x$1 === read $5
43
+ "]
44
+ bb0_instrs --> bb0_terminal(["If (read $6)"])
45
end
46
-
46
subgraph bb2
47
bb2_instrs["
49
- [4] Reassign mutate x$1 = 2
50
- "]
51
- bb2_instrs --> bb2_terminal(["Goto"])
48
+ [4] Reassign mutate x$1 = 2
49
+ "]
50
+ bb2_instrs --> bb2_terminal(["Goto"])
51
end
53
-
52
subgraph bb1
55
- bb1_terminal(["Return read x$1"])
53
+ bb1_terminal(["Return read x$1"])
54
end
57
-
55
56
%% Jumps
57
bb0_terminal -- then --> bb2
58
bb0_terminal -- else --> bb1
62
-
59
bb2_terminal --> bb1
64
-
60
+
61
```
62
63
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-shadowing.expect.md
+14
-21
@@ -30,9 +30,8 @@ bb0:
30
flowchart TB
31
%% Basic Blocks
32
subgraph bb0
33
- bb0_terminal(["Return"])
33
+ bb0_terminal(["Return"])
34
end
35
-
35
36
%% Jumps
37
%% empty
@@ -74,43 +73,37 @@ flowchart TB
73
%% Basic Blocks
74
subgraph bb0
75
bb0_instrs["
77
- [1] Let mutate str$2 = ''
78
- "]
79
- bb0_instrs --> bb0_terminal(["If (read cond$5)"])
76
+ [1] Let mutate str$2 = ''
77
+ "]
78
+ bb0_instrs --> bb0_terminal(["If (read cond$5)"])
79
end
81
-
80
subgraph bb2
81
bb2_instrs["
82
[2] Let mutate str$7 = 'other test'
85
- [3] Call mutate log$4(read str$7)
86
- "]
87
- bb2_instrs --> bb2_terminal(["Goto"])
83
+ [3] Call mutate log$4(read str$7)
84
+ "]
85
+ bb2_instrs --> bb2_terminal(["Goto"])
86
end
89
-
87
subgraph bb3
88
bb3_instrs["
92
- [4] Reassign mutate str$2 = 'fallthrough test'
93
- "]
94
- bb3_instrs --> bb3_terminal(["Goto"])
89
+ [4] Reassign mutate str$2 = 'fallthrough test'
90
+ "]
91
+ bb3_instrs --> bb3_terminal(["Goto"])
92
end
96
-
93
subgraph bb1
94
bb1_instrs["
99
- [5] Call mutate log$4(read str$2)
100
- "]
101
- bb1_instrs --> bb1_terminal(["Return"])
95
+ [5] Call mutate log$4(read str$2)
96
+ "]
97
+ bb1_instrs --> bb1_terminal(["Return"])
98
end
103
-
99
100
%% Jumps
101
bb0_terminal -- then --> bb2
102
bb0_terminal -- else --> bb3
103
bb0_terminal -- fallthrough --> bb1
109
-
104
bb2_terminal --> bb1
111
-
105
bb3_terminal --> bb1
113
-
106
+
107
```
108
109
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-simple-phi.expect.md
+13
-19
@@ -47,42 +47,36 @@ flowchart TB
47
bb0_instrs["
48
[1] Let mutate y$5 = 2
49
[2] Const mutate $6 = 1
50
- [3] Const mutate $7 = Binary read y$5 > read $6
51
- "]
52
- bb0_instrs --> bb0_terminal(["If (read $7)"])
50
+ [3] Const mutate $7 = Binary read y$5 > read $6
51
+ "]
52
+ bb0_instrs --> bb0_terminal(["If (read $7)"])
53
end
54
-
54
subgraph bb2
55
bb2_instrs["
57
- [4] Reassign mutate y$1 = 1
58
- "]
59
- bb2_instrs --> bb2_terminal(["Goto"])
56
+ [4] Reassign mutate y$1 = 1
57
+ "]
58
+ bb2_instrs --> bb2_terminal(["Goto"])
59
end
61
-
60
subgraph bb3
61
bb3_instrs["
64
- [5] Reassign mutate y$1 = 2
65
- "]
66
- bb3_instrs --> bb3_terminal(["Goto"])
62
+ [5] Reassign mutate y$1 = 2
63
+ "]
64
+ bb3_instrs --> bb3_terminal(["Goto"])
65
end
68
-
66
subgraph bb1
67
bb1_instrs["
71
- [6] Let mutate x$11 = read y$1
72
- "]
73
- bb1_instrs --> bb1_terminal(["Return"])
68
+ [6] Let mutate x$11 = read y$1
69
+ "]
70
+ bb1_instrs --> bb1_terminal(["Return"])
71
end
75
-
72
73
%% Jumps
74
bb0_terminal -- then --> bb2
75
bb0_terminal -- else --> bb3
76
bb0_terminal -- fallthrough --> bb1
81
-
77
bb2_terminal --> bb1
83
-
78
bb3_terminal --> bb1
85
-
79
+
80
```
81
82
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-simple.expect.md
+3
-4
@@ -26,11 +26,10 @@ flowchart TB
26
subgraph bb0
27
bb0_instrs["
28
[1] Let mutate x$3 = 1
29
- [2] Let mutate y$4 = 2
30
- "]
31
- bb0_instrs --> bb0_terminal(["Return"])
29
+ [2] Let mutate y$4 = 2
30
+ "]
31
+ bb0_instrs --> bb0_terminal(["Return"])
32
end
33
-
33
34
%% Jumps
35
%% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-single-if.expect.md
+8
-12
@@ -37,29 +37,25 @@ flowchart TB
37
subgraph bb0
38
bb0_instrs["
39
[1] Let mutate x$4 = 1
40
- [2] Let mutate y$5 = 2
41
- "]
42
- bb0_instrs --> bb0_terminal(["If (read y$5)"])
40
+ [2] Let mutate y$5 = 2
41
+ "]
42
+ bb0_instrs --> bb0_terminal(["If (read y$5)"])
43
end
44
-
44
subgraph bb2
45
bb2_instrs["
47
- [3] Let mutate z$6 = Binary read x$4 + read y$5
48
- "]
49
- bb2_instrs --> bb2_terminal(["Goto"])
46
+ [3] Let mutate z$6 = Binary read x$4 + read y$5
47
+ "]
48
+ bb2_instrs --> bb2_terminal(["Goto"])
49
end
51
-
50
subgraph bb1
53
- bb1_terminal(["Return"])
51
+ bb1_terminal(["Return"])
52
end
55
-
53
54
%% Jumps
55
bb0_terminal -- then --> bb2
56
bb0_terminal -- else --> bb1
60
-
57
bb2_terminal --> bb1
62
-
58
+
59
```
60
61
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md
+16
-24
@@ -69,55 +69,47 @@ flowchart TB
69
[2] Const mutate $11 = 2
70
[3] Const mutate $12 = Binary read x$10 === read $11
71
[4] Const mutate $13 = 1
72
- [5] Const mutate $14 = Binary read x$10 === read $13
73
- "]
74
- bb0_instrs --> bb0_terminal(["Switch (read x$10)"])
72
+ [5] Const mutate $14 = Binary read x$10 === read $13
73
+ "]
74
+ bb0_instrs --> bb0_terminal(["Switch (read x$10)"])
75
end
76
-
76
subgraph bb5
77
bb5_instrs["
78
[6] Const mutate $15 = 1
80
- [7] Reassign mutate x$1 = Binary read x$10 + read $15
81
- "]
82
- bb5_instrs --> bb5_terminal(["Goto"])
79
+ [7] Reassign mutate x$1 = Binary read x$10 + read $15
80
+ "]
81
+ bb5_instrs --> bb5_terminal(["Goto"])
82
end
84
-
83
subgraph bb3
84
bb3_instrs["
85
[8] Const mutate $17 = 2
88
- [9] Reassign mutate x$1 = Binary read x$10 + read $17
89
- "]
90
- bb3_instrs --> bb3_terminal(["Goto"])
86
+ [9] Reassign mutate x$1 = Binary read x$10 + read $17
87
+ "]
88
+ bb3_instrs --> bb3_terminal(["Goto"])
89
end
92
-
90
subgraph bb2
91
bb2_instrs["
92
[10] Const mutate $19 = 3
96
- [11] Reassign mutate x$1 = Binary read x$10 + read $19
97
- "]
98
- bb2_instrs --> bb2_terminal(["Goto"])
93
+ [11] Reassign mutate x$1 = Binary read x$10 + read $19
94
+ "]
95
+ bb2_instrs --> bb2_terminal(["Goto"])
96
end
100
-
97
subgraph bb1
98
bb1_instrs["
103
- [12] Let mutate y$22 = read x$1
104
- "]
105
- bb1_instrs --> bb1_terminal(["Return"])
99
+ [12] Let mutate y$22 = read x$1
100
+ "]
101
+ bb1_instrs --> bb1_terminal(["Return"])
102
end
107
-
103
104
%% Jumps
105
bb0_terminal -- read $14 --> bb5
106
bb0_terminal -- read $12 --> bb3
107
bb0_terminal -- default --> bb2
108
bb0_terminal -- fallthrough --> bb1
114
-
109
bb5_terminal --> bb1
116
-
110
bb3_terminal --> bb1
118
-
111
bb2_terminal --> bb1
120
-
112
+
113
```
114
115
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-throw.expect.md
+8
-12
@@ -38,29 +38,25 @@ flowchart TB
38
bb0_instrs["
39
[1] Let mutate x$1 = 1
40
[2] Const mutate $5 = 1
41
- [3] Const mutate $6 = Binary read x$1 === read $5
42
- "]
43
- bb0_instrs --> bb0_terminal(["If (read $6)"])
41
+ [3] Const mutate $6 = Binary read x$1 === read $5
42
+ "]
43
+ bb0_instrs --> bb0_terminal(["If (read $6)"])
44
end
45
-
45
subgraph bb2
46
bb2_instrs["
48
- [4] Reassign mutate x$1 = 2
49
- "]
50
- bb2_instrs --> bb2_terminal(["Goto"])
47
+ [4] Reassign mutate x$1 = 2
48
+ "]
49
+ bb2_instrs --> bb2_terminal(["Goto"])
50
end
52
-
51
subgraph bb1
54
- bb1_terminal(["Throw read x$1"])
52
+ bb1_terminal(["Throw read x$1"])
53
end
56
-
54
55
%% Jumps
56
bb0_terminal -- then --> bb2
57
bb0_terminal -- else --> bb1
61
-
58
bb2_terminal --> bb1
63
-
59
+
60
```
61
62
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-while-no-reassign.expect.md
+11
-17
@@ -41,42 +41,36 @@ flowchart TB
41
%% Basic Blocks
42
subgraph bb0
43
bb0_instrs["
44
- [1] Let mutate x$5 = 1
45
- "]
46
- bb0_instrs --> bb0_terminal(["While"])
44
+ [1] Let mutate x$5 = 1
45
+ "]
46
+ bb0_instrs --> bb0_terminal(["While"])
47
end
48
-
48
subgraph bb1
49
bb1_instrs["
50
[2] Const mutate $6 = 10
52
- [3] Const mutate $8 = Binary read x$5 < read $6
53
- "]
54
- bb1_instrs --> bb1_terminal(["If (read $8)"])
51
+ [3] Const mutate $8 = Binary read x$5 < read $6
52
+ "]
53
+ bb1_instrs --> bb1_terminal(["If (read $8)"])
54
end
56
-
55
subgraph bb3
56
bb3_instrs["
57
[4] Const mutate $9 = 1
60
- [5] Binary read x$5 + read $9
61
- "]
62
- bb3_instrs --> bb3_terminal(["Goto"])
58
+ [5] Binary read x$5 + read $9
59
+ "]
60
+ bb3_instrs --> bb3_terminal(["Goto"])
61
end
64
-
62
subgraph bb2
66
- bb2_terminal(["Return read x$5"])
63
+ bb2_terminal(["Return read x$5"])
64
end
68
-
65
66
%% Jumps
67
bb0_terminal -- test --> bb1
68
bb0_terminal -- loop --> bb3
69
bb0_terminal -- fallthrough --> bb2
74
-
70
bb1_terminal -- then --> bb3
71
bb1_terminal -- else --> bb2
77
-
72
bb3_terminal --> bb1
79
-
73
+
74
```
75
76
## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-while.expect.md
+11
-17
@@ -41,42 +41,36 @@ flowchart TB
41
%% Basic Blocks
42
subgraph bb0
43
bb0_instrs["
44
- [1] Let mutate x$1 = 1
45
- "]
46
- bb0_instrs --> bb0_terminal(["While"])
44
+ [1] Let mutate x$1 = 1
45
+ "]
46
+ bb0_instrs --> bb0_terminal(["While"])
47
end
48
-
48
subgraph bb1
49
bb1_instrs["
50
[2] Const mutate $6 = 10
52
- [3] Const mutate $8 = Binary read x$1 < read $6
53
- "]
54
- bb1_instrs --> bb1_terminal(["If (read $8)"])
51
+ [3] Const mutate $8 = Binary read x$1 < read $6
52
+ "]
53
+ bb1_instrs --> bb1_terminal(["If (read $8)"])
54
end
56
-
55
subgraph bb3
56
bb3_instrs["
57
[4] Const mutate $9 = 1
60
- [5] Reassign mutate x$1 = Binary read x$1 + read $9
61
- "]
62
- bb3_instrs --> bb3_terminal(["Goto"])
58
+ [5] Reassign mutate x$1 = Binary read x$1 + read $9
59
+ "]
60
+ bb3_instrs --> bb3_terminal(["Goto"])
61
end
64
-
62
subgraph bb2
66
- bb2_terminal(["Return read x$1"])
63
+ bb2_terminal(["Return read x$1"])
64
end
68
-
65
66
%% Jumps
67
bb0_terminal -- test --> bb1
68
bb0_terminal -- loop --> bb3
69
bb0_terminal -- fallthrough --> bb2
74
-
70
bb1_terminal -- then --> bb3
71
bb1_terminal -- else --> bb2
77
-
72
bb3_terminal --> bb1
79
-
73
+
74
```
75
76
## Code
compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md
+13
-19
@@ -70,35 +70,31 @@ flowchart TB
70
[2] Let mutate y$3 = undefined
71
[3] Const mutate $12 = false
72
[4] Const mutate $13 = true
73
- [5] Const mutate $14 = 1
74
- "]
75
- bb0_instrs --> bb0_terminal(["Switch (read props$9.p0)"])
73
+ [5] Const mutate $14 = 1
74
+ "]
75
+ bb0_instrs --> bb0_terminal(["Switch (read props$9.p0)"])
76
end
77
-
77
subgraph bb6
78
bb6_instrs["
79
[6] Call mutate x$10.push(read props$9.p2)
81
- [7] Reassign mutate y$3 = Array []
82
- "]
83
- bb6_instrs --> bb6_terminal(["Goto"])
80
+ [7] Reassign mutate y$3 = Array []
81
+ "]
82
+ bb6_instrs --> bb6_terminal(["Goto"])
83
end
85
-
84
subgraph bb2
85
bb2_instrs["
88
- [8] Reassign mutate y$3 = read x$10
89
- "]
90
- bb2_instrs --> bb2_terminal(["Goto"])
86
+ [8] Reassign mutate y$3 = read x$10
87
+ "]
88
+ bb2_instrs --> bb2_terminal(["Goto"])
89
end
92
-
90
subgraph bb1
91
bb1_instrs["
92
[9] Const mutate child$19 = JSX <read Component$0 data={freeze x$10} ></read Component$0>
93
[10] Call read y$3.push(read props$9.p4)
97
- [11] Const mutate $22 = JSX <read Component$0 data={freeze y$3} >{read child$19}</read Component$0>
98
- "]
99
- bb1_instrs --> bb1_terminal(["Return read $22"])
94
+ [11] Const mutate $22 = JSX <read Component$0 data={freeze y$3} >{read child$19}</read Component$0>
95
+ "]
96
+ bb1_instrs --> bb1_terminal(["Return read $22"])
97
end
101
-
98
99
%% Jumps
100
bb0_terminal -- read $14 --> bb1
@@ -106,11 +102,9 @@ flowchart TB
102
bb0_terminal -- default --> bb1
103
bb0_terminal -- read $12 --> bb2
104
bb0_terminal -- fallthrough --> bb1
109
-
105
bb6_terminal --> bb1
111
-
106
bb2_terminal --> bb1
113
-
107
+
108
```
109
110
## Code
compiler/forget/src/__tests__/fixtures/hir/switch-with-fallthrough.expect.md
+23
-37
@@ -93,57 +93,49 @@ flowchart TB
93
[4] Const mutate $13 = 3
94
[5] Const mutate $14 = 2
95
[6] Const mutate $15 = 1
96
- [7] Const mutate $16 = 0
97
- "]
98
- bb0_instrs --> bb0_terminal(["Switch (read x$9)"])
96
+ [7] Const mutate $16 = 0
97
+ "]
98
+ bb0_instrs --> bb0_terminal(["Switch (read x$9)"])
99
end
100
-
100
subgraph bb10
101
bb10_instrs["
103
- [8] Reassign mutate y$17 = 0
104
- "]
105
- bb10_instrs --> bb10_terminal(["Goto"])
102
+ [8] Reassign mutate y$17 = 0
103
+ "]
104
+ bb10_instrs --> bb10_terminal(["Goto"])
105
end
107
-
106
subgraph bb9
107
bb9_instrs["
110
- [9] Reassign mutate y$18 = 1
111
- "]
112
- bb9_instrs --> bb9_terminal(["Goto"])
108
+ [9] Reassign mutate y$18 = 1
109
+ "]
110
+ bb9_instrs --> bb9_terminal(["Goto"])
111
end
114
-
112
subgraph bb5
113
bb5_instrs["
117
- [10] Reassign mutate y$19 = 3
118
- "]
119
- bb5_instrs --> bb5_terminal(["Goto"])
114
+ [10] Reassign mutate y$19 = 3
115
+ "]
116
+ bb5_instrs --> bb5_terminal(["Goto"])
117
end
121
-
118
subgraph bb4
119
bb4_instrs["
124
- [11] Reassign mutate y$20 = 4
125
- "]
126
- bb4_instrs --> bb4_terminal(["Goto"])
120
+ [11] Reassign mutate y$20 = 4
121
+ "]
122
+ bb4_instrs --> bb4_terminal(["Goto"])
123
end
128
-
124
subgraph bb3
125
bb3_instrs["
131
- [12] Reassign mutate y$21 = 5
132
- "]
133
- bb3_instrs --> bb3_terminal(["Goto"])
126
+ [12] Reassign mutate y$21 = 5
127
+ "]
128
+ bb3_instrs --> bb3_terminal(["Goto"])
129
end
135
-
130
subgraph bb2
131
bb2_instrs["
138
- [13] Reassign mutate y$22 = 0
139
- "]
140
- bb2_instrs --> bb2_terminal(["Goto"])
132
+ [13] Reassign mutate y$22 = 0
133
+ "]
134
+ bb2_instrs --> bb2_terminal(["Goto"])
135
end
142
-
136
subgraph bb1
144
- bb1_terminal(["Return"])
137
+ bb1_terminal(["Return"])
138
end
146
-
139
140
%% Jumps
141
bb0_terminal -- read $16 --> bb10
@@ -154,19 +146,13 @@ flowchart TB
146
bb0_terminal -- read $11 --> bb3
147
bb0_terminal -- default --> bb2
148
bb0_terminal -- fallthrough --> bb1
157
-
149
bb10_terminal --> bb9
159
-
150
bb9_terminal --> bb1
161
-
151
bb5_terminal --> bb1
163
-
152
bb4_terminal --> bb3
165
-
153
bb3_terminal --> bb2
167
-
154
bb2_terminal --> bb1
169
-
155
+
156
```
157
158
## Code
compiler/forget/src/__tests__/fixtures/hir/switch.expect.md
+13
-19
@@ -64,47 +64,41 @@ flowchart TB
64
[1] Let mutate x$9[1:6] = Array []
65
[2] Let mutate y$3 = undefined
66
[3] Const mutate $11 = false
67
- [4] Const mutate $12 = true
68
- "]
69
- bb0_instrs --> bb0_terminal(["Switch (read props$8.p0)"])
67
+ [4] Const mutate $12 = true
68
+ "]
69
+ bb0_instrs --> bb0_terminal(["Switch (read props$8.p0)"])
70
end
71
-
71
subgraph bb4
72
bb4_instrs["
73
[5] Call mutate x$9.push(read props$8.p2)
74
[6] Call mutate x$9.push(read props$8.p3)
76
- [7] Reassign mutate y$13 = Array []
77
- "]
78
- bb4_instrs --> bb4_terminal(["Goto"])
75
+ [7] Reassign mutate y$13 = Array []
76
+ "]
77
+ bb4_instrs --> bb4_terminal(["Goto"])
78
end
80
-
79
subgraph bb2
80
bb2_instrs["
83
- [8] Reassign mutate y$3 = read x$9
84
- "]
85
- bb2_instrs --> bb2_terminal(["Goto"])
81
+ [8] Reassign mutate y$3 = read x$9
82
+ "]
83
+ bb2_instrs --> bb2_terminal(["Goto"])
84
end
87
-
85
subgraph bb1
86
bb1_instrs["
87
[9] Const mutate child$19 = JSX <read Component$0 data={freeze x$9} ></read Component$0>
88
[10] Call read y$3.push(read props$8.p4)
92
- [11] Const mutate $23 = JSX <read Component$0 data={read y$3} >{read child$19}</read Component$0>
93
- "]
94
- bb1_instrs --> bb1_terminal(["Return read $23"])
89
+ [11] Const mutate $23 = JSX <read Component$0 data={read y$3} >{read child$19}</read Component$0>
90
+ "]
91
+ bb1_instrs --> bb1_terminal(["Return read $23"])
92
end
96
-
93
94
%% Jumps
95
bb0_terminal -- read $12 --> bb4
96
bb0_terminal -- read $11 --> bb2
97
bb0_terminal -- default --> bb1
98
bb0_terminal -- fallthrough --> bb1
103
-
99
bb4_terminal --> bb2
105
-
100
bb2_terminal --> bb1
107
-
101
+
102
```
103
104
## Code
compiler/forget/src/__tests__/fixtures/hir/while-break.expect.md
+4
-8
@@ -30,26 +30,22 @@ bb2:
30
flowchart TB
31
%% Basic Blocks
32
subgraph bb0
33
- bb0_terminal(["While"])
33
+ bb0_terminal(["While"])
34
end
35
-
35
subgraph bb1
37
- bb1_terminal(["If (read a$3)"])
36
+ bb1_terminal(["If (read a$3)"])
37
end
39
-
38
subgraph bb2
41
- bb2_terminal(["Return read b$4"])
39
+ bb2_terminal(["Return read b$4"])
40
end
43
-
41
42
%% Jumps
43
bb0_terminal -- test --> bb1
44
bb0_terminal -- loop --> bb2
45
bb0_terminal -- fallthrough --> bb2
49
-
46
bb1_terminal -- then --> bb2
47
bb1_terminal -- else --> bb2
52
-
48
+
49
```
50
51
## Code
compiler/forget/src/__tests__/fixtures/hir/while-conditional-continue.expect.md
+11
-21
@@ -45,51 +45,41 @@ bb2:
45
flowchart TB
46
%% Basic Blocks
47
subgraph bb0
48
- bb0_terminal(["While"])
48
+ bb0_terminal(["While"])
49
end
50
-
50
subgraph bb1
52
- bb1_terminal(["If (read a$5)"])
51
+ bb1_terminal(["If (read a$5)"])
52
end
54
-
53
subgraph bb3
56
- bb3_terminal(["If (read b$6)"])
54
+ bb3_terminal(["If (read b$6)"])
55
end
58
-
56
subgraph bb5
60
- bb5_terminal(["Goto"])
57
+ bb5_terminal(["Goto"])
58
end
62
-
59
subgraph bb4
60
bb4_instrs["
65
- [1] Call read c$7()
66
- "]
67
- bb4_instrs --> bb4_terminal(["Goto"])
61
+ [1] Call read c$7()
62
+ "]
63
+ bb4_instrs --> bb4_terminal(["Goto"])
64
end
69
-
65
subgraph bb2
66
bb2_instrs["
72
- [2] Call read d$8()
73
- "]
74
- bb2_instrs --> bb2_terminal(["Return"])
67
+ [2] Call read d$8()
68
+ "]
69
+ bb2_instrs --> bb2_terminal(["Return"])
70
end
76
-
71
72
%% Jumps
73
bb0_terminal -- test --> bb1
74
bb0_terminal -- loop --> bb3
75
bb0_terminal -- fallthrough --> bb2
82
-
76
bb1_terminal -- then --> bb3
77
bb1_terminal -- else --> bb2
85
-
78
bb3_terminal -- then --> bb5
79
bb3_terminal -- else --> bb4
88
-
80
bb5_terminal --> bb1
90
-
81
bb4_terminal --> bb1
92
-
82
+
83
```
84
85
## Code