mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Phi operands belong in the same reactive scope
This completes the implementation of InferReactiveScopeVariables, adding support
for phi nodes. Example:
```javascript
let x$0 = null;
mutate(x$0);
if (cond) {
x$1 = a;
mutate(x$1)
} else {
x$2 = b;
}
x$3 = phi(x$1, x$2);
mutate(x$3);
```
We now add x$1, x$2, and x$3 to the same reactive scope. This reflects the fact
that x$3 cannot be computed without also computing both x$1 and x$2. Note that
x$3 can never be x$0, so x$0 is _not_ added to the same scope. This allows us to
take advantage of SSA form to note that _some_ instances of an identifier really
are distinct.
This commit is contained in:
@@ -52,7 +52,7 @@ import { eachInstructionOperand } from "./visitors";
|
||||
*
|
||||
* ## Other Issues Uncovered
|
||||
*
|
||||
* 1. Mutable lifetimes need to account for aliasing.
|
||||
* Mutable lifetimes need to account for aliasing (known todo, already described in InferMutableLifetimes.ts)
|
||||
*
|
||||
* ```javascript
|
||||
* let x = {};
|
||||
@@ -60,24 +60,17 @@ import { eachInstructionOperand } from "./visitors";
|
||||
* x.y = y; // RHS is not considered mutable here bc not further mutation
|
||||
* mutate(x); // bc y is aliased here, it should still be considered mutable above
|
||||
* ```
|
||||
*
|
||||
* 2. Mutable lifetimes need to account for SSA reassignment.
|
||||
*
|
||||
* ```javascript
|
||||
* // y is never considered mutable bc SSA treats subsequent assignments as distinct identifiers
|
||||
* let y;
|
||||
* if (cond) {
|
||||
* y = ...;
|
||||
* } else {
|
||||
* y = ...;
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
export function inferReactiveScopeVariables(fn: HIRFunction) {
|
||||
// Represents the set of reactive scopes as disjoint sets of identifiers
|
||||
// that mutate together.
|
||||
const scopes = new DisjointSet<Identifier>();
|
||||
for (const [_, block] of fn.body.blocks) {
|
||||
for (const phi of block.phis) {
|
||||
const operands: Array<Identifier> = [phi.id, ...phi.operands.values()];
|
||||
scopes.union(operands);
|
||||
}
|
||||
|
||||
for (const instr of block.instructions) {
|
||||
const operands: Array<Identifier> = [];
|
||||
if (instr.lvalue !== null) {
|
||||
|
||||
@@ -52,7 +52,7 @@ bb3:
|
||||
If (read $12_@3) then:bb8 else:bb9
|
||||
bb8:
|
||||
predecessor blocks: bb3
|
||||
[9] Const mutate $13_@7 = read $12_@3
|
||||
[9] Const mutate $13_@3 = read $12_@3
|
||||
Goto bb7
|
||||
bb9:
|
||||
predecessor blocks: bb3
|
||||
@@ -60,33 +60,33 @@ bb9:
|
||||
Goto bb7
|
||||
bb7:
|
||||
predecessor blocks: bb8 bb9
|
||||
If (read $13) then:bb5 else:bb4
|
||||
If (read $13_@3) then:bb5 else:bb4
|
||||
bb5:
|
||||
predecessor blocks: bb7
|
||||
Goto(Continue) bb1
|
||||
bb4:
|
||||
predecessor blocks: bb7
|
||||
[11] Call mutate seen$5_@3.add(mutate item$10_@3)
|
||||
[12] Const mutate $14_@8 = "div"
|
||||
[13] Const mutate $15_@9 = JSX <read $14_@8>{read item$10_@3}</read $14_@8>
|
||||
[14] Call mutate renderedItems$4_@2.push(read $15_@9)
|
||||
[15] Const mutate $16_@10 = Binary read renderedItems$4_@2.length >= read max$7_@5
|
||||
If (read $16_@10) then:bb2 else:bb10
|
||||
[12] Const mutate $14_@7 = "div"
|
||||
[13] Const mutate $15_@8 = JSX <read $14_@7>{read item$10_@3}</read $14_@7>
|
||||
[14] Call mutate renderedItems$4_@2.push(read $15_@8)
|
||||
[15] Const mutate $16_@9 = Binary read renderedItems$4_@2.length >= read max$7_@5
|
||||
If (read $16_@9) then:bb2 else:bb10
|
||||
bb10:
|
||||
predecessor blocks: bb4
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb4 bb1
|
||||
[16] Const mutate count$17_@11 = read renderedItems$4_@2.length
|
||||
[17] Const mutate $18_@12 = "div"
|
||||
[18] Const mutate $19_@13 = "\n "
|
||||
[19] Const mutate $20_@14 = "h1"
|
||||
[20] Const mutate $21_@15 = " Items"
|
||||
[21] Const mutate $22_@16 = JSX <read $20_@14>{freeze count$17_@11}{read $21_@15}</read $20_@14>
|
||||
[22] Const mutate $23_@17 = "\n "
|
||||
[23] Const mutate $24_@18 = "\n "
|
||||
[24] Const mutate $25_@19 = JSX <read $18_@12>{read $19_@13}{read $22_@16}{read $23_@17}{freeze renderedItems$4_@2}{read $24_@18}</read $18_@12>
|
||||
Return read $25_@19
|
||||
[16] Const mutate count$17_@10 = read renderedItems$4_@2.length
|
||||
[17] Const mutate $18_@11 = "div"
|
||||
[18] Const mutate $19_@12 = "\n "
|
||||
[19] Const mutate $20_@13 = "h1"
|
||||
[20] Const mutate $21_@14 = " Items"
|
||||
[21] Const mutate $22_@15 = JSX <read $20_@13>{freeze count$17_@10}{read $21_@14}</read $20_@13>
|
||||
[22] Const mutate $23_@16 = "\n "
|
||||
[23] Const mutate $24_@17 = "\n "
|
||||
[24] Const mutate $25_@18 = JSX <read $18_@11>{read $19_@12}{read $22_@15}{read $23_@16}{freeze renderedItems$4_@2}{read $24_@17}</read $18_@11>
|
||||
Return read $25_@18
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -117,7 +117,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[9] Const mutate $13_@7 = read $12_@3
|
||||
[9] Const mutate $13_@3 = read $12_@3
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
@@ -128,7 +128,7 @@ flowchart TB
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_terminal(["If (read $13)"])
|
||||
bb7_terminal(["If (read $13_@3)"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_terminal(["Goto"])
|
||||
@@ -136,29 +136,29 @@ flowchart TB
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[11] Call mutate seen$5_@3.add(mutate item$10_@3)
|
||||
[12] Const mutate $14_@8 = 'div'
|
||||
[13] Const mutate $15_@9 = JSX <read $14_@8>{read item$10_@3}</read $14_@8>
|
||||
[14] Call mutate renderedItems$4_@2.push(read $15_@9)
|
||||
[15] Const mutate $16_@10 = Binary read renderedItems$4_@2.length >= read max$7_@5
|
||||
[12] Const mutate $14_@7 = 'div'
|
||||
[13] Const mutate $15_@8 = JSX <read $14_@7>{read item$10_@3}</read $14_@7>
|
||||
[14] Call mutate renderedItems$4_@2.push(read $15_@8)
|
||||
[15] Const mutate $16_@9 = Binary read renderedItems$4_@2.length >= read max$7_@5
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["If (read $16_@10)"])
|
||||
bb4_instrs --> bb4_terminal(["If (read $16_@9)"])
|
||||
end
|
||||
subgraph bb10
|
||||
bb10_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[16] Const mutate count$17_@11 = read renderedItems$4_@2.length
|
||||
[17] Const mutate $18_@12 = 'div'
|
||||
[18] Const mutate $19_@13 = '\n '
|
||||
[19] Const mutate $20_@14 = 'h1'
|
||||
[20] Const mutate $21_@15 = ' Items'
|
||||
[21] Const mutate $22_@16 = JSX <read $20_@14>{freeze count$17_@11}{read $21_@15}</read $20_@14>
|
||||
[22] Const mutate $23_@17 = '\n '
|
||||
[23] Const mutate $24_@18 = '\n '
|
||||
[24] Const mutate $25_@19 = JSX <read $18_@12>{read $19_@13}{read $22_@16}{read $23_@17}{freeze renderedItems$4_@2}{read $24_@18}</read $18_@12>
|
||||
[16] Const mutate count$17_@10 = read renderedItems$4_@2.length
|
||||
[17] Const mutate $18_@11 = 'div'
|
||||
[18] Const mutate $19_@12 = '\n '
|
||||
[19] Const mutate $20_@13 = 'h1'
|
||||
[20] Const mutate $21_@14 = ' Items'
|
||||
[21] Const mutate $22_@15 = JSX <read $20_@13>{freeze count$17_@10}{read $21_@14}</read $20_@13>
|
||||
[22] Const mutate $23_@16 = '\n '
|
||||
[23] Const mutate $24_@17 = '\n '
|
||||
[24] Const mutate $25_@18 = JSX <read $18_@11>{read $19_@12}{read $22_@15}{read $23_@16}{freeze renderedItems$4_@2}{read $24_@17}</read $18_@11>
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Return read $25_@19"])
|
||||
bb2_instrs --> bb2_terminal(["Return read $25_@18"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
+10
-10
@@ -36,14 +36,14 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate a$4_@4 = Array []
|
||||
[5] Reassign mutate a$4_@3 = Array []
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
[6] Call read useFreeze$5(freeze a$4)
|
||||
[7] Call read useFreeze$5(read a$4)
|
||||
[8] Call mutate call$6_@5(read a$4)
|
||||
Return read a$4
|
||||
[6] Call read useFreeze$5(freeze a$4_@3)
|
||||
[7] Call read useFreeze$5(read a$4_@3)
|
||||
[8] Call mutate call$6_@4(read a$4_@3)
|
||||
Return read a$4_@3
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -67,17 +67,17 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Reassign mutate a$4_@4 = Array []
|
||||
[5] Reassign mutate a$4_@3 = Array []
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[6] Call read useFreeze$5(freeze a$4)
|
||||
[7] Call read useFreeze$5(read a$4)
|
||||
[8] Call mutate call$6_@5(read a$4)
|
||||
[6] Call read useFreeze$5(freeze a$4_@3)
|
||||
[7] Call read useFreeze$5(read a$4_@3)
|
||||
[8] Call mutate call$6_@4(read a$4_@3)
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read a$4"])
|
||||
bb1_instrs --> bb1_terminal(["Return read a$4_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -31,11 +31,11 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $3_@2 = read $2_@0
|
||||
[3] Const mutate $3_@1 = read $2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
Return freeze $3
|
||||
Return freeze $3_@1
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -57,12 +57,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Const mutate $3_@2 = read $2_@0
|
||||
[3] Const mutate $3_@1 = read $2_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $3"])
|
||||
bb1_terminal(["Return freeze $3_@1"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
@@ -97,11 +97,11 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $3_@2 = Call mutate g$4_@2()
|
||||
[3] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
Return freeze $3
|
||||
Return freeze $3_@1
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -123,12 +123,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Const mutate $3_@2 = Call mutate g$4_@2()
|
||||
[3] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $3"])
|
||||
bb1_terminal(["Return freeze $3_@1"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
@@ -165,11 +165,11 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Const mutate $6_@4 = Call mutate g$7_@4()
|
||||
[5] Const mutate $6_@3 = Call mutate g$7_@3()
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
Return freeze $6
|
||||
Return freeze $6_@3
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -193,12 +193,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Const mutate $6_@4 = Call mutate g$7_@4()
|
||||
[5] Const mutate $6_@3 = Call mutate g$7_@3()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $6"])
|
||||
bb1_terminal(["Return freeze $6_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -100,43 +100,43 @@ function cond$0(x$1) {
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$2_@0 = Object { }
|
||||
[2] Let mutate b$3_@1 = Object { }
|
||||
[3] Let mutate c$4_@2 = Object { }
|
||||
[4] Let mutate d$5_@3 = Object { }
|
||||
[2] Let mutate b$3_@0 = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0 = Object { }
|
||||
While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
[5] Const mutate $10_@4 = true
|
||||
If (read $10_@4) then:bb3 else:bb2
|
||||
[5] Const mutate $10_@2 = true
|
||||
If (read $10_@2) then:bb3 else:bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[6] Let mutate z$6_@5 = read a$2
|
||||
[7] Reassign mutate a$2_@6[7:12] = read b$3
|
||||
[8] Reassign mutate b$3_@6[8:11] = read c$4
|
||||
[9] Reassign mutate c$4_@7 = read d$5
|
||||
[10] Reassign mutate d$5_@8 = read z$6_@5
|
||||
[11] Call mutate mutate$7_@6(mutate a$2_@6, mutate b$3_@6)
|
||||
[12] Const mutate $9_@6 = Call mutate cond$8_@6(mutate a$2_@6)
|
||||
If (read $9_@6) then:bb2 else:bb4
|
||||
[6] Let mutate z$6_@3 = read a$2_@0
|
||||
[7] Reassign mutate a$2_@0[7:12] = read b$3_@0
|
||||
[8] Reassign mutate b$3_@0[8:11] = read c$4_@1
|
||||
[9] Reassign mutate c$4_@1 = read d$5_@0
|
||||
[10] Reassign mutate d$5_@0 = read z$6_@3
|
||||
[11] Call mutate mutate$7_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[12] Const mutate $9_@0 = Call mutate cond$8_@0(mutate a$2_@0)
|
||||
If (read $9_@0) then:bb2 else:bb4
|
||||
bb4:
|
||||
predecessor blocks: bb3
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb3 bb1
|
||||
If (read a$2) then:bb7 else:bb7
|
||||
If (read a$2_@0) then:bb7 else:bb7
|
||||
bb7:
|
||||
predecessor blocks: bb2
|
||||
If (read b$3) then:bb9 else:bb9
|
||||
If (read b$3_@0) then:bb9 else:bb9
|
||||
bb9:
|
||||
predecessor blocks: bb7
|
||||
If (read c$4) then:bb11 else:bb11
|
||||
If (read c$4_@1) then:bb11 else:bb11
|
||||
bb11:
|
||||
predecessor blocks: bb9
|
||||
If (read d$5_@6) then:bb13 else:bb13
|
||||
If (read d$5_@0) then:bb13 else:bb13
|
||||
bb13:
|
||||
predecessor blocks: bb11
|
||||
[13] Const mutate $11_@9 = null
|
||||
[14] Call mutate mutate$7_@6(mutate d$5_@6, read $11_@9)
|
||||
[13] Const mutate $11_@4 = null
|
||||
[14] Call mutate mutate$7_@0(mutate d$5_@0, read $11_@4)
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -148,49 +148,49 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$2_@0 = Object { }
|
||||
[2] Let mutate b$3_@1 = Object { }
|
||||
[3] Let mutate c$4_@2 = Object { }
|
||||
[4] Let mutate d$5_@3 = Object { }
|
||||
[2] Let mutate b$3_@0 = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0 = Object { }
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[5] Const mutate $10_@4 = true
|
||||
[5] Const mutate $10_@2 = true
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $10_@4)"])
|
||||
bb1_instrs --> bb1_terminal(["If (read $10_@2)"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Let mutate z$6_@5 = read a$2
|
||||
[7] Reassign mutate a$2_@6[7:12] = read b$3
|
||||
[8] Reassign mutate b$3_@6[8:11] = read c$4
|
||||
[9] Reassign mutate c$4_@7 = read d$5
|
||||
[10] Reassign mutate d$5_@8 = read z$6_@5
|
||||
[11] Call mutate mutate$7_@6(mutate a$2_@6, mutate b$3_@6)
|
||||
[12] Const mutate $9_@6 = Call mutate cond$8_@6(mutate a$2_@6)
|
||||
[6] Let mutate z$6_@3 = read a$2_@0
|
||||
[7] Reassign mutate a$2_@0[7:12] = read b$3_@0
|
||||
[8] Reassign mutate b$3_@0[8:11] = read c$4_@1
|
||||
[9] Reassign mutate c$4_@1 = read d$5_@0
|
||||
[10] Reassign mutate d$5_@0 = read z$6_@3
|
||||
[11] Call mutate mutate$7_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[12] Const mutate $9_@0 = Call mutate cond$8_@0(mutate a$2_@0)
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $9_@6)"])
|
||||
bb3_instrs --> bb3_terminal(["If (read $9_@0)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["If (read a$2)"])
|
||||
bb2_terminal(["If (read a$2_@0)"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_terminal(["If (read b$3)"])
|
||||
bb7_terminal(["If (read b$3_@0)"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_terminal(["If (read c$4)"])
|
||||
bb9_terminal(["If (read c$4_@1)"])
|
||||
end
|
||||
subgraph bb11
|
||||
bb11_terminal(["If (read d$5_@6)"])
|
||||
bb11_terminal(["If (read d$5_@0)"])
|
||||
end
|
||||
subgraph bb13
|
||||
bb13_instrs["
|
||||
[13] Const mutate $11_@9 = null
|
||||
[14] Call mutate mutate$7_@6(mutate d$5_@6, read $11_@9)
|
||||
[13] Const mutate $11_@4 = null
|
||||
[14] Call mutate mutate$7_@0(mutate d$5_@0, read $11_@4)
|
||||
"]
|
||||
bb13_instrs --> bb13_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -29,14 +29,14 @@ bb0:
|
||||
If (read props$1.p1) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$2_@2 = Array []
|
||||
[4] Reassign mutate x$2_@0 = Array []
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
[5] Let mutate _$4_@3 = JSX <read Component$0 x={freeze x$2} ></read Component$0>
|
||||
[5] Let mutate _$4_@2 = JSX <read Component$0 x={freeze x$2_@0} ></read Component$0>
|
||||
[6] Call read y$3_@1.push(read props$1.p2)
|
||||
[7] Const mutate $5_@4 = JSX <read Component$0 x={read x$2} y={read y$3_@1} ></read Component$0>
|
||||
Return read $5_@4
|
||||
[7] Const mutate $5_@3 = JSX <read Component$0 x={read x$2_@0} y={read y$3_@1} ></read Component$0>
|
||||
Return read $5_@3
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -54,17 +54,17 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$2_@2 = Array []
|
||||
[4] Reassign mutate x$2_@0 = Array []
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[5] Let mutate _$4_@3 = JSX <read Component$0 x={freeze x$2} ></read Component$0>
|
||||
[5] Let mutate _$4_@2 = JSX <read Component$0 x={freeze x$2_@0} ></read Component$0>
|
||||
[6] Call read y$3_@1.push(read props$1.p2)
|
||||
[7] Const mutate $5_@4 = JSX <read Component$0 x={read x$2} y={read y$3_@1} ></read Component$0>
|
||||
[7] Const mutate $5_@3 = JSX <read Component$0 x={read x$2_@0} y={read y$3_@1} ></read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $5_@4"])
|
||||
bb1_instrs --> bb1_terminal(["Return read $5_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -54,26 +54,26 @@ bb8:
|
||||
Goto bb1
|
||||
bb6:
|
||||
predecessor blocks: bb2
|
||||
[6] Reassign mutate x$2_@5 = read props$1.v1
|
||||
[6] Reassign mutate x$2_@4 = read props$1.v1
|
||||
Goto bb1
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[7] Reassign mutate x$2_@6 = read props$1.v2
|
||||
[7] Reassign mutate x$2_@4 = read props$1.v2
|
||||
Goto bb1
|
||||
bb10:
|
||||
predecessor blocks: bb0
|
||||
If (read props$1.cond2) then:bb12 else:bb13
|
||||
bb12:
|
||||
predecessor blocks: bb10
|
||||
[8] Reassign mutate x$2_@7 = read props$1.b
|
||||
[8] Reassign mutate x$2_@4 = read props$1.b
|
||||
Goto bb1
|
||||
bb13:
|
||||
predecessor blocks: bb10
|
||||
[9] Reassign mutate x$2_@8 = read props$1.c
|
||||
[9] Reassign mutate x$2_@4 = read props$1.c
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb8 bb6 bb4 bb12 bb13
|
||||
[10] read x$2
|
||||
[10] read x$2_@4
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -104,13 +104,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[6] Reassign mutate x$2_@5 = read props$1.v1
|
||||
[6] Reassign mutate x$2_@4 = read props$1.v1
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[7] Reassign mutate x$2_@6 = read props$1.v2
|
||||
[7] Reassign mutate x$2_@4 = read props$1.v2
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
@@ -119,19 +119,19 @@ flowchart TB
|
||||
end
|
||||
subgraph bb12
|
||||
bb12_instrs["
|
||||
[8] Reassign mutate x$2_@7 = read props$1.b
|
||||
[8] Reassign mutate x$2_@4 = read props$1.b
|
||||
"]
|
||||
bb12_instrs --> bb12_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb13
|
||||
bb13_instrs["
|
||||
[9] Reassign mutate x$2_@8 = read props$1.c
|
||||
[9] Reassign mutate x$2_@4 = read props$1.c
|
||||
"]
|
||||
bb13_instrs --> bb13_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[10] read x$2
|
||||
[10] read x$2_@4
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -28,20 +28,20 @@ bb0:
|
||||
If (read $4_@3) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@4 = 3
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
[6] Const mutate $5_@5 = 3
|
||||
[7] Const mutate $6_@6 = Binary read y$2_@1 === read $5_@5
|
||||
If (read $6_@6) then:bb4 else:bb3
|
||||
[6] Const mutate $5_@4 = 3
|
||||
[7] Const mutate $6_@5 = Binary read y$2_@1 === read $5_@4
|
||||
If (read $6_@5) then:bb4 else:bb3
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[8] Reassign mutate x$1_@7 = 5
|
||||
[8] Reassign mutate x$1_@0 = 5
|
||||
Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb1
|
||||
[9] Reassign mutate y$2_@8 = read x$1
|
||||
[9] Reassign mutate y$2_@6 = read x$1_@0
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -61,26 +61,26 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@4 = 3
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[6] Const mutate $5_@5 = 3
|
||||
[7] Const mutate $6_@6 = Binary read y$2_@1 === read $5_@5
|
||||
[6] Const mutate $5_@4 = 3
|
||||
[7] Const mutate $6_@5 = Binary read y$2_@1 === read $5_@4
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $6_@6)"])
|
||||
bb1_instrs --> bb1_terminal(["If (read $6_@5)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[8] Reassign mutate x$1_@7 = 5
|
||||
[8] Reassign mutate x$1_@0 = 5
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[9] Reassign mutate y$2_@8 = read x$1
|
||||
[9] Reassign mutate y$2_@6 = read x$1_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -25,11 +25,11 @@ bb0:
|
||||
If (read $4_@3) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@4 = 3
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
[6] Reassign mutate y$2_@5 = read x$1
|
||||
[6] Reassign mutate y$2_@4 = read x$1_@0
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -49,13 +49,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@4 = 3
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[6] Reassign mutate y$2_@5 = read x$1
|
||||
[6] Reassign mutate y$2_@4 = read x$1_@0
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -21,16 +21,16 @@ bb0:
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
[2] Const mutate $3_@1 = 10
|
||||
[3] Const mutate $4_@2 = Binary read x$1 < read $3_@1
|
||||
[3] Const mutate $4_@2 = Binary read x$1_@0 < read $3_@1
|
||||
If (read $4_@2) then:bb4 else:bb2
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@4 = Binary read x$1 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
Return read x$1
|
||||
Return read x$1_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -47,19 +47,19 @@ flowchart TB
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[2] Const mutate $3_@1 = 10
|
||||
[3] Const mutate $4_@2 = Binary read x$1 < read $3_@1
|
||||
[3] Const mutate $4_@2 = Binary read x$1_@0 < read $3_@1
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $4_@2)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@4 = Binary read x$1 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["Return read x$1"])
|
||||
bb2_terminal(["Return read x$1_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -29,16 +29,16 @@ bb0:
|
||||
If (read $4_@3) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@4 = 2
|
||||
[5] Reassign mutate x$1_@0 = 2
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate y$2_@5 = 3
|
||||
[6] Reassign mutate y$2_@1 = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
[7] Let mutate t$5_@6 = Object { x: read x$1, y: read y$2 }
|
||||
Return freeze t$5_@6
|
||||
[7] Let mutate t$5_@4 = Object { x: read x$1_@0, y: read y$2_@1 }
|
||||
Return freeze t$5_@4
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -57,21 +57,21 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@4 = 2
|
||||
[5] Reassign mutate x$1_@0 = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Reassign mutate y$2_@5 = 3
|
||||
[6] Reassign mutate y$2_@1 = 3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[7] Let mutate t$5_@6 = Object { x: read x$1, y: read y$2 }
|
||||
[7] Let mutate t$5_@4 = Object { x: read x$1_@0, y: read y$2_@1 }
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return freeze t$5_@6"])
|
||||
bb1_instrs --> bb1_terminal(["Return freeze t$5_@4"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -23,11 +23,11 @@ bb0:
|
||||
If (read $3_@2) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$1_@3 = 2
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
Return read x$1
|
||||
Return read x$1_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -45,12 +45,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$1_@3 = 2
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return read x$1"])
|
||||
bb1_terminal(["Return read x$1_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -58,11 +58,11 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate str$2_@3 = "fallthrough test"
|
||||
[4] Reassign mutate str$2_@0 = "fallthrough test"
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
[5] Call mutate log$4_@2(read str$2)
|
||||
[5] Call mutate log$4_@2(read str$2_@0)
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -86,13 +86,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[4] Reassign mutate str$2_@3 = 'fallthrough test'
|
||||
[4] Reassign mutate str$2_@0 = 'fallthrough test'
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[5] Call mutate log$4_@2(read str$2)
|
||||
[5] Call mutate log$4_@2(read str$2_@0)
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -30,11 +30,11 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate y$1_@4 = 2
|
||||
[5] Reassign mutate y$1_@3 = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
[6] Let mutate x$4_@5 = read y$1
|
||||
[6] Let mutate x$4_@4 = read y$1_@3
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -59,13 +59,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Reassign mutate y$1_@4 = 2
|
||||
[5] Reassign mutate y$1_@3 = 2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[6] Let mutate x$4_@5 = read y$1
|
||||
[6] Let mutate x$4_@4 = read y$1_@3
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -45,16 +45,16 @@ bb5:
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[8] Const mutate $3_@7 = 2
|
||||
[9] Reassign mutate x$1_@8 = Binary read x$1_@0 + read $3_@7
|
||||
[9] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $3_@7
|
||||
Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[10] Const mutate $2_@9 = 3
|
||||
[11] Reassign mutate x$1_@10 = Binary read x$1_@0 + read $2_@9
|
||||
[10] Const mutate $2_@8 = 3
|
||||
[11] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $2_@8
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb5 bb3 bb2
|
||||
[12] Let mutate y$9_@11 = read x$1
|
||||
[12] Let mutate y$9_@9 = read x$1_@6
|
||||
Return
|
||||
```
|
||||
|
||||
@@ -83,20 +83,20 @@ flowchart TB
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[8] Const mutate $3_@7 = 2
|
||||
[9] Reassign mutate x$1_@8 = Binary read x$1_@0 + read $3_@7
|
||||
[9] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $3_@7
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[10] Const mutate $2_@9 = 3
|
||||
[11] Reassign mutate x$1_@10 = Binary read x$1_@0 + read $2_@9
|
||||
[10] Const mutate $2_@8 = 3
|
||||
[11] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $2_@8
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[12] Let mutate y$9_@11 = read x$1
|
||||
[12] Let mutate y$9_@9 = read x$1_@6
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -22,11 +22,11 @@ bb0:
|
||||
If (read $3_@2) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$1_@3 = 2
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
Throw read x$1
|
||||
Throw read x$1_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -44,12 +44,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$1_@3 = 2
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Throw read x$1"])
|
||||
bb1_terminal(["Throw read x$1_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -22,16 +22,16 @@ bb0:
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
[2] Const mutate $3_@1 = 10
|
||||
[3] Const mutate $4_@2 = Binary read x$1 < read $3_@1
|
||||
[3] Const mutate $4_@2 = Binary read x$1_@0 < read $3_@1
|
||||
If (read $4_@2) then:bb3 else:bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@4 = Binary read x$1 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
Return read x$1
|
||||
Return read x$1_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -48,19 +48,19 @@ flowchart TB
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[2] Const mutate $3_@1 = 10
|
||||
[3] Const mutate $4_@2 = Binary read x$1 < read $3_@1
|
||||
[3] Const mutate $4_@2 = Binary read x$1_@0 < read $3_@1
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $4_@2)"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@4 = Binary read x$1 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["Return read x$1"])
|
||||
bb2_terminal(["Return read x$1_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -45,18 +45,18 @@ bb0:
|
||||
bb6:
|
||||
predecessor blocks: bb0
|
||||
[6] Call mutate x$2_@0.push(read props$1.p2)
|
||||
[7] Reassign mutate y$3_@5 = Array []
|
||||
[7] Reassign mutate y$3_@1 = Array []
|
||||
Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[8] Reassign mutate y$3_@6 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb6 bb2
|
||||
[9] Const mutate child$7_@7 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3.push(read props$1.p4)
|
||||
[11] Const mutate $8_@8 = JSX <read Component$0 data={freeze y$3} >{read child$7_@7}</read Component$0>
|
||||
Return read $8_@8
|
||||
[9] Const mutate child$7_@5 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3_@1.push(read props$1.p4)
|
||||
[11] Const mutate $8_@6 = JSX <read Component$0 data={freeze y$3_@1} >{read child$7_@5}</read Component$0>
|
||||
Return read $8_@6
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -77,23 +77,23 @@ flowchart TB
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[6] Call mutate x$2_@0.push(read props$1.p2)
|
||||
[7] Reassign mutate y$3_@5 = Array []
|
||||
[7] Reassign mutate y$3_@1 = Array []
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[8] Reassign mutate y$3_@6 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[9] Const mutate child$7_@7 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3.push(read props$1.p4)
|
||||
[11] Const mutate $8_@8 = JSX <read Component$0 data={freeze y$3} >{read child$7_@7}</read Component$0>
|
||||
[9] Const mutate child$7_@5 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3_@1.push(read props$1.p4)
|
||||
[11] Const mutate $8_@6 = JSX <read Component$0 data={freeze y$3_@1} >{read child$7_@5}</read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $8_@8"])
|
||||
bb1_instrs --> bb1_terminal(["Return read $8_@6"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -44,14 +44,14 @@ bb4:
|
||||
Goto bb2
|
||||
bb2:
|
||||
predecessor blocks: bb4 bb0
|
||||
[8] Reassign mutate y$3_@5 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
[9] Const mutate child$6_@6 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3.push(read props$1.p4)
|
||||
[11] Const mutate $7_@7 = JSX <read Component$0 data={read y$3} >{read child$6_@6}</read Component$0>
|
||||
Return read $7_@7
|
||||
[9] Const mutate child$6_@5 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3_@1.push(read props$1.p4)
|
||||
[11] Const mutate $7_@6 = JSX <read Component$0 data={read y$3_@1} >{read child$6_@5}</read Component$0>
|
||||
Return read $7_@6
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -78,17 +78,17 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[8] Reassign mutate y$3_@5 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[9] Const mutate child$6_@6 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3.push(read props$1.p4)
|
||||
[11] Const mutate $7_@7 = JSX <read Component$0 data={read y$3} >{read child$6_@6}</read Component$0>
|
||||
[9] Const mutate child$6_@5 = JSX <read Component$0 data={freeze x$2_@0} ></read Component$0>
|
||||
[10] Call read y$3_@1.push(read props$1.p4)
|
||||
[11] Const mutate $7_@6 = JSX <read Component$0 data={read y$3_@1} >{read child$6_@5}</read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $7_@7"])
|
||||
bb1_instrs --> bb1_terminal(["Return read $7_@6"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
Reference in New Issue
Block a user