mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[ez] Patch BuildHIR to match unlabeled breaks to switch and loops
This commit is contained in:
@@ -517,7 +517,11 @@ export default class HIRBuilder {
|
||||
lookupBreak(label: string | null): BlockId {
|
||||
for (let ii = this.#scopes.length - 1; ii >= 0; ii--) {
|
||||
const scope = this.#scopes[ii];
|
||||
if (label === null || label === scope.label) {
|
||||
if (
|
||||
(label === null &&
|
||||
(scope.kind === "loop" || scope.kind === "switch")) ||
|
||||
label === scope.label
|
||||
) {
|
||||
return scope.breakBlock;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -8,7 +8,7 @@ function useHook(end) {
|
||||
log.push(`${i} @A`);
|
||||
bb0: {
|
||||
if (i === end) {
|
||||
break;
|
||||
break bb0;
|
||||
}
|
||||
log.push(`${i} @B`);
|
||||
}
|
||||
@@ -59,4 +59,6 @@ export const FIXTURE_ENTRYPOINT = {
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Eval output
|
||||
(kind: ok) ["0 @A","0 @B","0 @C","1 @A","1 @C"]
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
function useHook(end) {
|
||||
const log = [];
|
||||
for (let i = 0; i < end + 1; i++) {
|
||||
log.push(`${i} @A`);
|
||||
bb0: {
|
||||
if (i === end) {
|
||||
break bb0;
|
||||
}
|
||||
log.push(`${i} @B`);
|
||||
}
|
||||
log.push(`${i} @C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [1],
|
||||
};
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const log = [];
|
||||
switch (CONST_STRING0) {
|
||||
case CONST_STRING0:
|
||||
log.push(`@A`);
|
||||
bb0: {
|
||||
if (cond) {
|
||||
break bb0;
|
||||
}
|
||||
log.push(`@B`);
|
||||
}
|
||||
log.push(`@C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { unstable_useMemoCache as useMemoCache } from "react";
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const $ = useMemoCache(2);
|
||||
let log;
|
||||
if ($[0] !== cond) {
|
||||
log = [];
|
||||
switch (CONST_STRING0) {
|
||||
case CONST_STRING0: {
|
||||
log.push(`@A`);
|
||||
bb3: {
|
||||
if (cond) {
|
||||
break bb3;
|
||||
}
|
||||
|
||||
log.push(`@B`);
|
||||
}
|
||||
|
||||
log.push(`@C`);
|
||||
}
|
||||
}
|
||||
$[0] = cond;
|
||||
$[1] = log;
|
||||
} else {
|
||||
log = $[1];
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) ["@A","@C"]
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const log = [];
|
||||
switch (CONST_STRING0) {
|
||||
case CONST_STRING0:
|
||||
log.push(`@A`);
|
||||
bb0: {
|
||||
if (cond) {
|
||||
break bb0;
|
||||
}
|
||||
log.push(`@B`);
|
||||
}
|
||||
log.push(`@C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
function useHook(end) {
|
||||
const log = [];
|
||||
for (let i = 0; i < end + 1; i++) {
|
||||
log.push(`${i} @A`);
|
||||
bb0: {
|
||||
if (i === end) {
|
||||
break;
|
||||
}
|
||||
log.push(`${i} @B`);
|
||||
}
|
||||
log.push(`${i} @C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [1],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { unstable_useMemoCache as useMemoCache } from "react";
|
||||
function useHook(end) {
|
||||
const $ = useMemoCache(2);
|
||||
let log;
|
||||
if ($[0] !== end) {
|
||||
log = [];
|
||||
for (let i = 0; i < end + 1; i++) {
|
||||
log.push(`${i} @A`);
|
||||
if (i === end) {
|
||||
break;
|
||||
}
|
||||
|
||||
log.push(`${i} @B`);
|
||||
|
||||
log.push(`${i} @C`);
|
||||
}
|
||||
$[0] = end;
|
||||
$[1] = log;
|
||||
} else {
|
||||
log = $[1];
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [1],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) ["0 @A","0 @B","0 @C","1 @A"]
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const log = [];
|
||||
switch (CONST_STRING0) {
|
||||
case CONST_STRING0:
|
||||
log.push(`@A`);
|
||||
bb0: {
|
||||
if (cond) {
|
||||
break;
|
||||
}
|
||||
log.push(`@B`);
|
||||
}
|
||||
log.push(`@C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { unstable_useMemoCache as useMemoCache } from "react";
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const $ = useMemoCache(2);
|
||||
let log;
|
||||
if ($[0] !== cond) {
|
||||
log = [];
|
||||
bb1: switch (CONST_STRING0) {
|
||||
case CONST_STRING0: {
|
||||
log.push(`@A`);
|
||||
if (cond) {
|
||||
break bb1;
|
||||
}
|
||||
|
||||
log.push(`@B`);
|
||||
|
||||
log.push(`@C`);
|
||||
}
|
||||
}
|
||||
$[0] = cond;
|
||||
$[1] = log;
|
||||
} else {
|
||||
log = $[1];
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) ["@A"]
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
import { CONST_STRING0 } from "shared-runtime";
|
||||
|
||||
function useHook(cond) {
|
||||
const log = [];
|
||||
switch (CONST_STRING0) {
|
||||
case CONST_STRING0:
|
||||
log.push(`@A`);
|
||||
bb0: {
|
||||
if (cond) {
|
||||
break;
|
||||
}
|
||||
log.push(`@B`);
|
||||
}
|
||||
log.push(`@C`);
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: useHook,
|
||||
params: [true],
|
||||
};
|
||||
@@ -534,7 +534,6 @@ const skipFilter = new Set([
|
||||
// bugs
|
||||
"bug-reduce-reactive-deps-return-in-scope",
|
||||
"bug-reduce-reactive-deps-break-in-scope",
|
||||
"bug-unlabeled-break-within-label-loop",
|
||||
|
||||
// 'react-forget-runtime' not yet supported
|
||||
"flag-enable-emit-hook-guards",
|
||||
|
||||
Reference in New Issue
Block a user