mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Annotate mutable range for each scope
Expands InferReactiveScopeVariables to update the mutableRange of all identifiers to be the range of its scope. The result is that all identifiers in a given scope will have the same range, whose start is the minimum of the identifiers range starts, and end is the maximum.
This commit is contained in:
@@ -5,10 +5,11 @@
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import invariant from "invariant";
|
||||
import { assertExhaustive } from "../Common/utils";
|
||||
import { Effect, HIRFunction, Instruction, Place } from "./HIR";
|
||||
import { eachInstructionOperand } from "./visitors";
|
||||
import { printInstruction, printPlace } from "./PrintHIR";
|
||||
import { eachInstructionOperand } from "./visitors";
|
||||
|
||||
/**
|
||||
* For each usage of a value in the given function, determines if the usage
|
||||
@@ -77,9 +78,19 @@ function inferPlace(place: Place, instr: Instruction) {
|
||||
export function inferMutableRanges(func: HIRFunction) {
|
||||
for (const [_, block] of func.body.blocks) {
|
||||
for (const phi of block.phis) {
|
||||
let start = Number.MAX_SAFE_INTEGER;
|
||||
let end = Number.MIN_SAFE_INTEGER;
|
||||
for (const [_, operand] of phi.operands) {
|
||||
start = Math.min(start, operand.mutableRange.start);
|
||||
end = Math.max(end, operand.mutableRange.end);
|
||||
}
|
||||
invariant(
|
||||
start !== Number.MAX_SAFE_INTEGER && end !== Number.MIN_SAFE_INTEGER,
|
||||
"Expected phi to have set start/end range values"
|
||||
);
|
||||
phi.id.mutableRange = {
|
||||
start: -1, // TODO(gsn): This is a hack, we should assign proper ids to phis.
|
||||
end: -1,
|
||||
start,
|
||||
end,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
Identifier,
|
||||
Instruction,
|
||||
makeScopeId,
|
||||
MutableRange,
|
||||
Place,
|
||||
ScopeId,
|
||||
} from "./HIR";
|
||||
@@ -94,10 +95,20 @@ export function inferReactiveScopeVariables(fn: HIRFunction) {
|
||||
|
||||
// Maps each scope (by its identifying member) to a ScopeId value
|
||||
const scopeIds: Map<Identifier, ScopeId> = new Map();
|
||||
// Store the mutable range and set of identifiers for each scope
|
||||
const scopeVariables: Map<
|
||||
ScopeId,
|
||||
{ range: MutableRange; variables: Set<Identifier> }
|
||||
> = new Map();
|
||||
|
||||
// Iterate over all the identifiers in all scopes, and assign each
|
||||
// identifier to its group's scope id. The first identifier in each
|
||||
// group assigns the scope id for that group.
|
||||
/**
|
||||
* Iterate over all the identifiers and assign a unique ScopeId
|
||||
* for each scope (based on the set identifier).
|
||||
*
|
||||
* At the same time, group the identifiers in each scope and
|
||||
* build a MutableRange that describes the span of mutations
|
||||
* across all identifiers in each scope.
|
||||
*/
|
||||
scopes.forEach((identifier, groupIdentifier) => {
|
||||
let scopeId = scopeIds.get(groupIdentifier);
|
||||
if (scopeId == null) {
|
||||
@@ -105,7 +116,31 @@ export function inferReactiveScopeVariables(fn: HIRFunction) {
|
||||
scopeIds.set(groupIdentifier, scopeId);
|
||||
}
|
||||
identifier.scope = scopeId;
|
||||
|
||||
let scope = scopeVariables.get(scopeId);
|
||||
if (scope === undefined) {
|
||||
scope = {
|
||||
range: { ...identifier.mutableRange },
|
||||
variables: new Set(),
|
||||
};
|
||||
scopeVariables.set(scopeId, scope);
|
||||
} else {
|
||||
scope.range.start = Math.min(
|
||||
scope.range.start,
|
||||
identifier.mutableRange.start
|
||||
);
|
||||
scope.range.end = Math.max(scope.range.end, identifier.mutableRange.end);
|
||||
}
|
||||
scope.variables.add(identifier);
|
||||
});
|
||||
|
||||
// Update all the identifiers for each scope now that we know
|
||||
// the scope's full range.
|
||||
for (const [_, scope] of scopeVariables) {
|
||||
for (const identifier of scope.variables) {
|
||||
identifier.mutableRange = scope.range;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Is the operand mutable at this given instruction
|
||||
|
||||
@@ -47,8 +47,8 @@ function foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = "div"
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
@@ -65,8 +65,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = 'div'
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
|
||||
@@ -38,9 +38,9 @@ bb0:
|
||||
[1] Const mutate items$2_@0 = read props$1.items
|
||||
[2] Const mutate maxItems$3_@1 = read props$1.maxItems
|
||||
[3] Const mutate renderedItems$4_@2[3:14] = Array []
|
||||
[4] Const mutate seen$5_@3[4:11] = New mutate Set$6_@3()
|
||||
[4] Const mutate seen$5_@3[0:11] = New mutate Set$6_@3()
|
||||
[5] Const mutate $9_@4 = 0
|
||||
[6] Const mutate max$7_@5 = Call mutate Math$8_@5.max(read $9_@4, read maxItems$3_@1)
|
||||
[6] Const mutate max$7_@5[0:6] = Call mutate Math$8_@5.max(read $9_@4, read maxItems$3_@1)
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb5 bb10
|
||||
@@ -48,15 +48,15 @@ bb1:
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[7] Const mutate $11_@6 = null
|
||||
[8] Const mutate $12_@3 = Binary read item$10_@3 == read $11_@6
|
||||
[8] Const mutate $12_@3[0:11] = Binary read item$10_@3 == read $11_@6
|
||||
If (read $12_@3) then:bb8 else:bb9
|
||||
bb8:
|
||||
predecessor blocks: bb3
|
||||
[9] Const mutate $13_@3 = read $12_@3
|
||||
[9] Const mutate $13_@3[0:11] = read $12_@3
|
||||
Goto bb7
|
||||
bb9:
|
||||
predecessor blocks: bb3
|
||||
[10] Const mutate $13_@3 = Call mutate seen$5_@3.has(mutate item$10_@3)
|
||||
[10] Const mutate $13_@3[0:11] = Call mutate seen$5_@3.has(mutate item$10_@3)
|
||||
Goto bb7
|
||||
bb7:
|
||||
predecessor blocks: bb8 bb9
|
||||
@@ -99,9 +99,9 @@ flowchart TB
|
||||
[1] Const mutate items$2_@0 = read props$1.items
|
||||
[2] Const mutate maxItems$3_@1 = read props$1.maxItems
|
||||
[3] Const mutate renderedItems$4_@2[3:14] = Array []
|
||||
[4] Const mutate seen$5_@3[4:11] = New mutate Set$6_@3()
|
||||
[4] Const mutate seen$5_@3[0:11] = New mutate Set$6_@3()
|
||||
[5] Const mutate $9_@4 = 0
|
||||
[6] Const mutate max$7_@5 = Call mutate Math$8_@5.max(read $9_@4, read maxItems$3_@1)
|
||||
[6] Const mutate max$7_@5[0:6] = Call mutate Math$8_@5.max(read $9_@4, read maxItems$3_@1)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Goto"])
|
||||
end
|
||||
@@ -111,19 +111,19 @@ flowchart TB
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Const mutate $11_@6 = null
|
||||
[8] Const mutate $12_@3 = Binary read item$10_@3 == read $11_@6
|
||||
[8] Const mutate $12_@3[0:11] = Binary read item$10_@3 == read $11_@6
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $12_@3)"])
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[9] Const mutate $13_@3 = read $12_@3
|
||||
[9] Const mutate $13_@3[0:11] = read $12_@3
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_instrs["
|
||||
[10] Const mutate $13_@3 = Call mutate seen$5_@3.has(mutate item$10_@3)
|
||||
[10] Const mutate $13_@3[0:11] = Call mutate seen$5_@3.has(mutate item$10_@3)
|
||||
"]
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -154,8 +154,8 @@ function Component$0(props$1) {
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:4] = Array []
|
||||
[2] Const mutate b$3_@1[2:5] = Array []
|
||||
[3] Const mutate $5_@1 = Call mutate mayMutate$4_@1(mutate b$3_@1)
|
||||
[2] Const mutate b$3_@1[0:5] = Array []
|
||||
[3] Const mutate $5_@1[0:5] = Call mutate mayMutate$4_@1(mutate b$3_@1)
|
||||
If (read $5_@1) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -182,8 +182,8 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:4] = Array []
|
||||
[2] Const mutate b$3_@1[2:5] = Array []
|
||||
[3] Const mutate $5_@1 = Call mutate mayMutate$4_@1(mutate b$3_@1)
|
||||
[2] Const mutate b$3_@1[0:5] = Array []
|
||||
[3] Const mutate $5_@1[0:5] = Call mutate mayMutate$4_@1(mutate b$3_@1)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $5_@1)"])
|
||||
end
|
||||
|
||||
@@ -47,8 +47,8 @@ function Foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] New mutate Foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = "div"
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
@@ -65,8 +65,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] New mutate Foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = 'div'
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
|
||||
+4
-4
@@ -32,11 +32,11 @@ bb0:
|
||||
If (read cond$2_@0) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate a$4_@3 = read x$3_@1
|
||||
[4] Reassign mutate a$4_@3[4:5] = read x$3_@1
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate a$4_@3 = Array []
|
||||
[5] Reassign mutate a$4_@3[4:5] = Array []
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -61,13 +61,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate a$4_@3 = read x$3_@1
|
||||
[4] Reassign mutate a$4_@3[4:5] = read x$3_@1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Reassign mutate a$4_@3 = Array []
|
||||
[5] Reassign mutate a$4_@3[4:5] = Array []
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -149,8 +149,8 @@ function Foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:4] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:4] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:4] = Call mutate compute$3_@0(read props$1.b)
|
||||
If (read props$1.c) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -170,8 +170,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:4] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:4] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:4] = Call mutate compute$3_@0(read props$1.b)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read props$1.c)"])
|
||||
end
|
||||
|
||||
@@ -28,8 +28,8 @@ function Foo() {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0 = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0 = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:2] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:2] = Call mutate compute$3_@0(read props$1.b)
|
||||
[3] Const mutate $6_@1 = JSX <read Foo$5 a={freeze a$2_@0} b={freeze b$4_@0} ></read Foo$5>
|
||||
Return read $6_@1
|
||||
```
|
||||
@@ -41,8 +41,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0 = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0 = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:2] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:2] = Call mutate compute$3_@0(read props$1.b)
|
||||
[3] Const mutate $6_@1 = JSX <read Foo$5 a={freeze a$2_@0} b={freeze b$4_@0} ></read Foo$5>
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return read $6_@1"])
|
||||
|
||||
@@ -115,8 +115,8 @@ function Foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
If (read props$1.c) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -135,8 +135,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read props$1.c)"])
|
||||
end
|
||||
|
||||
@@ -28,8 +28,8 @@ function Foo() {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[3] Call mutate foo$5_@0(mutate a$2_@0, mutate b$4_@0)
|
||||
[4] Const mutate $7_@1 = JSX <read Foo$6 a={freeze a$2_@0} b={freeze b$4_@0} ></read Foo$6>
|
||||
Return read $7_@1
|
||||
@@ -42,8 +42,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[2:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[1] Const mutate a$2_@0[0:3] = Call mutate compute$3_@0(read props$1.a)
|
||||
[2] Const mutate b$4_@0[0:3] = Call mutate compute$3_@0(read props$1.b)
|
||||
[3] Call mutate foo$5_@0(mutate a$2_@0, mutate b$4_@0)
|
||||
[4] Const mutate $7_@1 = JSX <read Foo$6 a={freeze a$2_@0} b={freeze b$4_@0} ></read Foo$6>
|
||||
"]
|
||||
|
||||
@@ -23,15 +23,15 @@ function g() {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate $2_@0 = Call mutate f$1_@0()
|
||||
[1] Const mutate $2_@0[0:1] = Call mutate f$1_@0()
|
||||
If (read $2_@0) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[2] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
[2] Const mutate $3_@1[0:3] = Call mutate g$4_@1()
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $3_@1 = read $2_@0
|
||||
[3] Const mutate $3_@1[0:3] = read $2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -45,19 +45,19 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate $2_@0 = Call mutate f$1_@0()
|
||||
[1] Const mutate $2_@0[0:1] = Call mutate f$1_@0()
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $2_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[2] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
[2] Const mutate $3_@1[0:3] = Call mutate g$4_@1()
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Const mutate $3_@1 = read $2_@0
|
||||
[3] Const mutate $3_@1[0:3] = read $2_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
@@ -89,15 +89,15 @@ function And$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate $2_@0 = Call mutate f$1_@0()
|
||||
[1] Const mutate $2_@0[0:1] = Call mutate f$1_@0()
|
||||
If (read $2_@0) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[2] Const mutate $3_@1 = read $2_@0
|
||||
[2] Const mutate $3_@1[0:3] = read $2_@0
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
[3] Const mutate $3_@1[0:3] = Call mutate g$4_@1()
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -111,19 +111,19 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate $2_@0 = Call mutate f$1_@0()
|
||||
[1] Const mutate $2_@0[0:1] = Call mutate f$1_@0()
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $2_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[2] Const mutate $3_@1 = read $2_@0
|
||||
[2] Const mutate $3_@1[0:3] = read $2_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Const mutate $3_@1 = Call mutate g$4_@1()
|
||||
[3] Const mutate $3_@1[0:3] = Call mutate g$4_@1()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
@@ -155,17 +155,17 @@ function Or$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate $3_@0 = Call mutate f$2_@0()
|
||||
[1] Const mutate $3_@0[0:1] = Call mutate f$2_@0()
|
||||
[2] Const mutate $4_@1 = null
|
||||
[3] Const mutate $5_@2 = Binary read $3_@0 != read $4_@1
|
||||
If (read $5_@2) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Const mutate $6_@3 = read $3_@0
|
||||
[4] Const mutate $6_@3[0:5] = read $3_@0
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Const mutate $6_@3 = Call mutate g$7_@3()
|
||||
[5] Const mutate $6_@3[0:5] = Call mutate g$7_@3()
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -179,7 +179,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate $3_@0 = Call mutate f$2_@0()
|
||||
[1] Const mutate $3_@0[0:1] = Call mutate f$2_@0()
|
||||
[2] Const mutate $4_@1 = null
|
||||
[3] Const mutate $5_@2 = Binary read $3_@0 != read $4_@1
|
||||
"]
|
||||
@@ -187,13 +187,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Const mutate $6_@3 = read $3_@0
|
||||
[4] Const mutate $6_@3[0:5] = read $3_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Const mutate $6_@3 = Call mutate g$7_@3()
|
||||
[5] Const mutate $6_@3[0:5] = Call mutate g$7_@3()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -99,10 +99,10 @@ function cond$0(x$1) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$2_@0 = Object { }
|
||||
[2] Let mutate b$3_@0 = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0 = Object { }
|
||||
[1] Let mutate a$2_@0[0:14] = Object { }
|
||||
[2] Let mutate b$3_@0[0:14] = Object { }
|
||||
[3] Let mutate c$4_@1[0:9] = Object { }
|
||||
[4] Let mutate d$5_@0[0:14] = Object { }
|
||||
While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
@@ -111,12 +111,12 @@ bb1:
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[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
|
||||
[7] Reassign mutate a$2_@0[0:14] = read b$3_@0
|
||||
[8] Reassign mutate b$3_@0[0:14] = read c$4_@1
|
||||
[9] Reassign mutate c$4_@1[0:9] = read d$5_@0
|
||||
[10] Reassign mutate d$5_@0[0:14] = 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)
|
||||
[12] Const mutate $9_@0[0:14] = Call mutate cond$8_@0(mutate a$2_@0)
|
||||
If (read $9_@0) then:bb2 else:bb4
|
||||
bb4:
|
||||
predecessor blocks: bb3
|
||||
@@ -147,10 +147,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$2_@0 = Object { }
|
||||
[2] Let mutate b$3_@0 = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0 = Object { }
|
||||
[1] Let mutate a$2_@0[0:14] = Object { }
|
||||
[2] Let mutate b$3_@0[0:14] = Object { }
|
||||
[3] Let mutate c$4_@1[0:9] = Object { }
|
||||
[4] Let mutate d$5_@0[0:14] = Object { }
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
@@ -163,12 +163,12 @@ flowchart TB
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[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
|
||||
[7] Reassign mutate a$2_@0[0:14] = read b$3_@0
|
||||
[8] Reassign mutate b$3_@0[0:14] = read c$4_@1
|
||||
[9] Reassign mutate c$4_@1[0:9] = read d$5_@0
|
||||
[10] Reassign mutate d$5_@0[0:14] = 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)
|
||||
[12] Const mutate $9_@0[0:14] = Call mutate cond$8_@0(mutate a$2_@0)
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $9_@0)"])
|
||||
end
|
||||
|
||||
@@ -70,10 +70,10 @@ bb0:
|
||||
[1] Const mutate a$2_@0 = Object { }
|
||||
[2] Const mutate b$3_@1 = Array [read a$2_@0]
|
||||
[3] Const mutate c$4_@2 = Object { }
|
||||
[4] Const mutate d$5_@3[4:7] = Object { c: read c$4_@2 }
|
||||
[5] Const mutate x$6_@3[5:9] = Object { }
|
||||
[6] Reassign mutate x$6_@3.b[5:9] = read b$3_@1
|
||||
[7] Const mutate y$7_@3 = Call mutate mutate$8_@3(mutate x$6_@3, mutate d$5_@3)
|
||||
[4] Const mutate d$5_@3[0:9] = Object { c: read c$4_@2 }
|
||||
[5] Const mutate x$6_@3[0:9] = Object { }
|
||||
[6] Reassign mutate x$6_@3.b[0:9] = read b$3_@1
|
||||
[7] Const mutate y$7_@3[0:9] = Call mutate mutate$8_@3(mutate x$6_@3, mutate d$5_@3)
|
||||
If (read a$2_@0) then:bb1 else:bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0
|
||||
@@ -104,10 +104,10 @@ flowchart TB
|
||||
[1] Const mutate a$2_@0 = Object { }
|
||||
[2] Const mutate b$3_@1 = Array [read a$2_@0]
|
||||
[3] Const mutate c$4_@2 = Object { }
|
||||
[4] Const mutate d$5_@3[4:7] = Object { c: read c$4_@2 }
|
||||
[5] Const mutate x$6_@3[5:9] = Object { }
|
||||
[6] Reassign mutate x$6_@3.b[5:9] = read b$3_@1
|
||||
[7] Const mutate y$7_@3 = Call mutate mutate$8_@3(mutate x$6_@3, mutate d$5_@3)
|
||||
[4] Const mutate d$5_@3[0:9] = Object { c: read c$4_@2 }
|
||||
[5] Const mutate x$6_@3[0:9] = Object { }
|
||||
[6] Reassign mutate x$6_@3.b[0:9] = read b$3_@1
|
||||
[7] Const mutate y$7_@3[0:9] = Call mutate mutate$8_@3(mutate x$6_@3, mutate d$5_@3)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$2_@0)"])
|
||||
end
|
||||
|
||||
@@ -94,10 +94,10 @@ function cond$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$2_@0[1:7] = Object { }
|
||||
[2] Let mutate b$3_@0[2:6] = Object { }
|
||||
[1] Let mutate a$2_@0[0:9] = Object { }
|
||||
[2] Let mutate b$3_@0[0:9] = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0[4:9] = Object { }
|
||||
[4] Let mutate d$5_@0[0:9] = Object { }
|
||||
While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
@@ -106,7 +106,7 @@ bb1:
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[6] Call mutate mutate$6_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[7] Const mutate $8_@0 = Call mutate cond$7_@0(mutate a$2_@0)
|
||||
[7] Const mutate $8_@0[0:9] = Call mutate cond$7_@0(mutate a$2_@0)
|
||||
If (read $8_@0) then:bb2 else:bb4
|
||||
bb4:
|
||||
predecessor blocks: bb3
|
||||
@@ -137,10 +137,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$2_@0[1:7] = Object { }
|
||||
[2] Let mutate b$3_@0[2:6] = Object { }
|
||||
[1] Let mutate a$2_@0[0:9] = Object { }
|
||||
[2] Let mutate b$3_@0[0:9] = Object { }
|
||||
[3] Let mutate c$4_@1 = Object { }
|
||||
[4] Let mutate d$5_@0[4:9] = Object { }
|
||||
[4] Let mutate d$5_@0[0:9] = Object { }
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
@@ -153,7 +153,7 @@ flowchart TB
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Call mutate mutate$6_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[7] Const mutate $8_@0 = Call mutate cond$7_@0(mutate a$2_@0)
|
||||
[7] Const mutate $8_@0[0:9] = Call mutate cond$7_@0(mutate a$2_@0)
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $8_@0)"])
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ function foo() {
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0[1:5] = Object { }
|
||||
[2] Let mutate y$2_@1[2:4] = Array []
|
||||
[3] Let mutate z$3_@1[3:4] = Object { }
|
||||
[3] Let mutate z$3_@1[2:4] = Object { }
|
||||
[4] Call mutate y$2_@1.push(mutate z$3_@1)
|
||||
[5] Reassign mutate x$1_@0.y[1:5] = read y$2_@1
|
||||
Return freeze x$1_@0
|
||||
@@ -35,7 +35,7 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0[1:5] = Object { }
|
||||
[2] Let mutate y$2_@1[2:4] = Array []
|
||||
[3] Let mutate z$3_@1[3:4] = Object { }
|
||||
[3] Let mutate z$3_@1[2:4] = Object { }
|
||||
[4] Call mutate y$2_@1.push(mutate z$3_@1)
|
||||
[5] Reassign mutate x$1_@0.y[1:5] = read y$2_@1
|
||||
"]
|
||||
|
||||
@@ -23,13 +23,13 @@ function Component(props) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$2_@0[1:2] = Array []
|
||||
[1] Let mutate x$2_@0[1:4] = Array []
|
||||
[2] Call mutate x$2_@0.push(read props$1.p0)
|
||||
[3] Let mutate y$3_@1 = read x$2_@0
|
||||
If (read props$1.p1) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$2_@0 = Array []
|
||||
[4] Reassign mutate x$2_@0[1:4] = Array []
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -46,7 +46,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$2_@0[1:2] = Array []
|
||||
[1] Let mutate x$2_@0[1:4] = Array []
|
||||
[2] Call mutate x$2_@0.push(read props$1.p0)
|
||||
[3] Let mutate y$3_@1 = read x$2_@0
|
||||
"]
|
||||
@@ -54,7 +54,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$2_@0 = Array []
|
||||
[4] Reassign mutate x$2_@0[1:4] = Array []
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -50,26 +50,26 @@ bb2:
|
||||
Default: bb4
|
||||
bb8:
|
||||
predecessor blocks: bb2
|
||||
[5] Reassign mutate x$2_@4 = read props$1.v0
|
||||
[5] Reassign mutate x$2_@4[5:9] = read props$1.v0
|
||||
Goto bb1
|
||||
bb6:
|
||||
predecessor blocks: bb2
|
||||
[6] Reassign mutate x$2_@4 = read props$1.v1
|
||||
[6] Reassign mutate x$2_@4[5:9] = read props$1.v1
|
||||
Goto bb1
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[7] Reassign mutate x$2_@4 = read props$1.v2
|
||||
[7] Reassign mutate x$2_@4[5:9] = 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_@4 = read props$1.b
|
||||
[8] Reassign mutate x$2_@4[5:9] = read props$1.b
|
||||
Goto bb1
|
||||
bb13:
|
||||
predecessor blocks: bb10
|
||||
[9] Reassign mutate x$2_@4 = read props$1.c
|
||||
[9] Reassign mutate x$2_@4[5:9] = read props$1.c
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb8 bb6 bb4 bb12 bb13
|
||||
@@ -98,19 +98,19 @@ flowchart TB
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[5] Reassign mutate x$2_@4 = read props$1.v0
|
||||
[5] Reassign mutate x$2_@4[5:9] = read props$1.v0
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[6] Reassign mutate x$2_@4 = read props$1.v1
|
||||
[6] Reassign mutate x$2_@4[5:9] = read props$1.v1
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[7] Reassign mutate x$2_@4 = read props$1.v2
|
||||
[7] Reassign mutate x$2_@4[5:9] = read props$1.v2
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
@@ -119,13 +119,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb12
|
||||
bb12_instrs["
|
||||
[8] Reassign mutate x$2_@4 = read props$1.b
|
||||
[8] Reassign mutate x$2_@4[5:9] = read props$1.b
|
||||
"]
|
||||
bb12_instrs --> bb12_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb13
|
||||
bb13_instrs["
|
||||
[9] Reassign mutate x$2_@4 = read props$1.c
|
||||
[9] Reassign mutate x$2_@4[5:9] = read props$1.c
|
||||
"]
|
||||
bb13_instrs --> bb13_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -50,10 +50,10 @@ function foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:7] = Object { }
|
||||
[1] Const mutate a$2_@0[0:7] = Array []
|
||||
[2] Const mutate b$3_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $7_@0 = Call mutate foo$4_@0()
|
||||
[4] Const mutate $7_@0[0:7] = Call mutate foo$4_@0()
|
||||
If (read $7_@0) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -75,10 +75,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:7] = Object { }
|
||||
[1] Const mutate a$2_@0[0:7] = Array []
|
||||
[2] Const mutate b$3_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $7_@0 = Call mutate foo$4_@0()
|
||||
[4] Const mutate $7_@0[0:7] = Call mutate foo$4_@0()
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $7_@0)"])
|
||||
end
|
||||
|
||||
@@ -47,8 +47,8 @@ function foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = "div"
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
@@ -65,8 +65,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:6] = Object { }
|
||||
[1] Const mutate a$2_@0[0:6] = Array []
|
||||
[2] Const mutate b$3_@0[0:6] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[4] Const mutate $6_@1 = 'div'
|
||||
[5] Let mutate _$5_@2 = JSX <read $6_@1 a={freeze a$2_@0} ></read $6_@1>
|
||||
|
||||
@@ -21,14 +21,14 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:8] = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[3] Const mutate $3_@2 = 2
|
||||
[4] Const mutate $4_@3 = Binary read y$2_@1 === read $3_@2
|
||||
If (read $4_@3) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
[5] Reassign mutate x$1_@0[1:8] = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -37,7 +37,7 @@ bb1:
|
||||
If (read $6_@5) then:bb4 else:bb3
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[8] Reassign mutate x$1_@0 = 5
|
||||
[8] Reassign mutate x$1_@0[1:8] = 5
|
||||
Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb1
|
||||
@@ -52,7 +52,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:8] = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[3] Const mutate $3_@2 = 2
|
||||
[4] Const mutate $4_@3 = Binary read y$2_@1 === read $3_@2
|
||||
@@ -61,7 +61,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
[5] Reassign mutate x$1_@0[1:8] = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
@@ -74,7 +74,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[8] Reassign mutate x$1_@0 = 5
|
||||
[8] Reassign mutate x$1_@0[1:8] = 5
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -18,14 +18,14 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:5] = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[3] Const mutate $3_@2 = 2
|
||||
[4] Const mutate $4_@3 = Binary read y$2_@1 === read $3_@2
|
||||
If (read $4_@3) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
[5] Reassign mutate x$1_@0[1:5] = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -40,7 +40,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:5] = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[3] Const mutate $3_@2 = 2
|
||||
[4] Const mutate $4_@3 = Binary read y$2_@1 === read $3_@2
|
||||
@@ -49,7 +49,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@0 = 3
|
||||
[5] Reassign mutate x$1_@0[1:5] = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 0
|
||||
[1] Let mutate x$1_@0[0:5] = 0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
@@ -26,7 +26,7 @@ bb1:
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0[0:5] = Binary read x$1_@0 + read $2_@3
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
@@ -40,7 +40,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 0
|
||||
[1] Let mutate x$1_@0[0:5] = 0
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Goto"])
|
||||
end
|
||||
@@ -54,7 +54,7 @@ flowchart TB
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0[0:5] = Binary read x$1_@0 + read $2_@3
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -45,9 +45,9 @@ function Foo$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:3] = Object { }
|
||||
[3] Let mutate c$4_@0 = New mutate Foo$5_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[1] Const mutate a$2_@0[0:3] = Array []
|
||||
[2] Const mutate b$3_@0[0:3] = Object { }
|
||||
[3] Let mutate c$4_@0[0:3] = New mutate Foo$5_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
Return freeze c$4_@0
|
||||
```
|
||||
|
||||
@@ -58,9 +58,9 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$2_@0[1:3] = Array []
|
||||
[2] Const mutate b$3_@0[2:3] = Object { }
|
||||
[3] Let mutate c$4_@0 = New mutate Foo$5_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
[1] Const mutate a$2_@0[0:3] = Array []
|
||||
[2] Const mutate b$3_@0[0:3] = Object { }
|
||||
[3] Let mutate c$4_@0[0:3] = New mutate Foo$5_@0(mutate a$2_@0, mutate b$3_@0)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return freeze c$4_@0"])
|
||||
end
|
||||
|
||||
@@ -22,18 +22,18 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[1] Let mutate x$1_@0[1:5] = 1
|
||||
[2] Let mutate y$2_@1[2:6] = 2
|
||||
[3] Const mutate $3_@2 = 1
|
||||
[4] Const mutate $4_@3 = Binary read x$1_@0 > read $3_@2
|
||||
If (read $4_@3) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$1_@0 = 2
|
||||
[5] Reassign mutate x$1_@0[1:5] = 2
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate y$2_@1 = 3
|
||||
[6] Reassign mutate y$2_@1[2:6] = 3
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -48,8 +48,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[2] Let mutate y$2_@1 = 2
|
||||
[1] Let mutate x$1_@0[1:5] = 1
|
||||
[2] Let mutate y$2_@1[2:6] = 2
|
||||
[3] Const mutate $3_@2 = 1
|
||||
[4] Const mutate $4_@3 = Binary read x$1_@0 > read $3_@2
|
||||
"]
|
||||
@@ -57,13 +57,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$1_@0 = 2
|
||||
[5] Reassign mutate x$1_@0[1:5] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Reassign mutate y$2_@1 = 3
|
||||
[6] Reassign mutate y$2_@1[2:6] = 3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -17,7 +17,7 @@ function foo() {
|
||||
bb0:
|
||||
[1] Const mutate x$1_@0 = Array []
|
||||
[2] Const mutate y$2_@1[2:4] = Object { x: read x$1_@0 }
|
||||
[3] Const mutate $3_@1[3:4] = Array []
|
||||
[3] Const mutate $3_@1[2:4] = Array []
|
||||
[4] Call mutate y$2_@1.x.push(mutate $3_@1)
|
||||
Return freeze y$2_@1
|
||||
```
|
||||
@@ -31,7 +31,7 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Const mutate x$1_@0 = Array []
|
||||
[2] Const mutate y$2_@1[2:4] = Object { x: read x$1_@0 }
|
||||
[3] Const mutate $3_@1[3:4] = Array []
|
||||
[3] Const mutate $3_@1[2:4] = Array []
|
||||
[4] Call mutate y$2_@1.x.push(mutate $3_@1)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return freeze y$2_@1"])
|
||||
|
||||
@@ -17,13 +17,13 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:4] = 1
|
||||
[2] Const mutate $2_@1 = 1
|
||||
[3] Const mutate $3_@2 = Binary read x$1_@0 === read $2_@1
|
||||
If (read $3_@2) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
[4] Reassign mutate x$1_@0[1:4] = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -37,7 +37,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:4] = 1
|
||||
[2] Const mutate $2_@1 = 1
|
||||
[3] Const mutate $3_@2 = Binary read x$1_@0 === read $2_@1
|
||||
"]
|
||||
@@ -45,7 +45,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
[4] Reassign mutate x$1_@0[1:4] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -49,7 +49,7 @@ function log$0() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate str$2_@0 = ""
|
||||
[1] Let mutate str$2_@0[1:4] = ""
|
||||
If (read cond$1) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -58,7 +58,7 @@ bb2:
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate str$2_@0 = "fallthrough test"
|
||||
[4] Reassign mutate str$2_@0[1:4] = "fallthrough test"
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -73,7 +73,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate str$2_@0 = ''
|
||||
[1] Let mutate str$2_@0[1:4] = ''
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read cond$1)"])
|
||||
end
|
||||
@@ -86,7 +86,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[4] Reassign mutate str$2_@0 = 'fallthrough test'
|
||||
[4] Reassign mutate str$2_@0[1:4] = 'fallthrough test'
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -26,11 +26,11 @@ bb0:
|
||||
If (read $3_@2) then:bb2 else:bb3
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate y$1_@3 = 1
|
||||
[4] Reassign mutate y$1_@3[4:5] = 1
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate y$1_@3 = 2
|
||||
[5] Reassign mutate y$1_@3[4:5] = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -53,13 +53,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate y$1_@3 = 1
|
||||
[4] Reassign mutate y$1_@3[4:5] = 1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Reassign mutate y$1_@3 = 2
|
||||
[5] Reassign mutate y$1_@3[4:5] = 2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -40,17 +40,17 @@ bb0:
|
||||
bb5:
|
||||
predecessor blocks: bb0
|
||||
[6] Const mutate $6_@5 = 1
|
||||
[7] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $6_@5
|
||||
[7] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $6_@5
|
||||
Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[8] Const mutate $3_@7 = 2
|
||||
[9] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $3_@7
|
||||
[9] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $3_@7
|
||||
Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[10] Const mutate $2_@8 = 3
|
||||
[11] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $2_@8
|
||||
[11] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $2_@8
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb5 bb3 bb2
|
||||
@@ -76,21 +76,21 @@ flowchart TB
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[6] Const mutate $6_@5 = 1
|
||||
[7] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $6_@5
|
||||
[7] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $6_@5
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[8] Const mutate $3_@7 = 2
|
||||
[9] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $3_@7
|
||||
[9] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $3_@7
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[10] Const mutate $2_@8 = 3
|
||||
[11] Reassign mutate x$1_@6 = Binary read x$1_@0 + read $2_@8
|
||||
[11] Reassign mutate x$1_@6[7:11] = Binary read x$1_@0 + read $2_@8
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -16,13 +16,13 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:4] = 1
|
||||
[2] Const mutate $2_@1 = 1
|
||||
[3] Const mutate $3_@2 = Binary read x$1_@0 === read $2_@1
|
||||
If (read $3_@2) then:bb2 else:bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
[4] Reassign mutate x$1_@0[1:4] = 2
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -36,7 +36,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[1:4] = 1
|
||||
[2] Const mutate $2_@1 = 1
|
||||
[3] Const mutate $3_@2 = Binary read x$1_@0 === read $2_@1
|
||||
"]
|
||||
@@ -44,7 +44,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Reassign mutate x$1_@0 = 2
|
||||
[4] Reassign mutate x$1_@0[1:4] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -17,7 +17,7 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[0:5] = 1
|
||||
While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
@@ -27,7 +27,7 @@ bb1:
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0[0:5] = Binary read x$1_@0 + read $2_@3
|
||||
Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
@@ -41,7 +41,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$1_@0 = 1
|
||||
[1] Let mutate x$1_@0[0:5] = 1
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
@@ -55,7 +55,7 @@ flowchart TB
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[4] Const mutate $2_@3 = 1
|
||||
[5] Reassign mutate x$1_@0 = Binary read x$1_@0 + read $2_@3
|
||||
[5] Reassign mutate x$1_@0[0:5] = Binary read x$1_@0 + read $2_@3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ function Component(props) {
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$2_@0[1:6] = Array []
|
||||
[2] Let mutate y$3_@1 = undefined
|
||||
[2] Let mutate y$3_@1[2:8] = undefined
|
||||
[3] Const mutate $4_@2 = false
|
||||
[4] Const mutate $5_@3 = true
|
||||
[5] Const mutate $6_@4 = 1
|
||||
@@ -45,11 +45,11 @@ bb0:
|
||||
bb6:
|
||||
predecessor blocks: bb0
|
||||
[6] Call mutate x$2_@0.push(read props$1.p2)
|
||||
[7] Reassign mutate y$3_@1 = Array []
|
||||
[7] Reassign mutate y$3_@1[2:8] = Array []
|
||||
Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1[2:8] = read x$2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb6 bb2
|
||||
@@ -67,7 +67,7 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$2_@0[1:6] = Array []
|
||||
[2] Let mutate y$3_@1 = undefined
|
||||
[2] Let mutate y$3_@1[2:8] = undefined
|
||||
[3] Const mutate $4_@2 = false
|
||||
[4] Const mutate $5_@3 = true
|
||||
[5] Const mutate $6_@4 = 1
|
||||
@@ -77,13 +77,13 @@ flowchart TB
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[6] Call mutate x$2_@0.push(read props$1.p2)
|
||||
[7] Reassign mutate y$3_@1 = Array []
|
||||
[7] Reassign mutate y$3_@1[2:8] = Array []
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1[2:8] = read x$2_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -29,7 +29,7 @@ function Component(props) {
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$2_@0[1:6] = Array []
|
||||
[2] Let mutate y$3_@1 = undefined
|
||||
[2] Let mutate y$3_@1[2:8] = undefined
|
||||
[3] Const mutate $4_@2 = false
|
||||
[4] Const mutate $5_@3 = true
|
||||
Switch (read props$1.p0)
|
||||
@@ -44,7 +44,7 @@ bb4:
|
||||
Goto bb2
|
||||
bb2:
|
||||
predecessor blocks: bb4 bb0
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1[2:8] = read x$2_@0
|
||||
Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -62,7 +62,7 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$2_@0[1:6] = Array []
|
||||
[2] Let mutate y$3_@1 = undefined
|
||||
[2] Let mutate y$3_@1[2:8] = undefined
|
||||
[3] Const mutate $4_@2 = false
|
||||
[4] Const mutate $5_@3 = true
|
||||
"]
|
||||
@@ -78,7 +78,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[8] Reassign mutate y$3_@1 = read x$2_@0
|
||||
[8] Reassign mutate y$3_@1[2:8] = read x$2_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user