mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[compiler][ez] Patch compilationMode:infer object method edge case
Fix for https://github.com/facebook/react/issues/31180
This commit is contained in:
@@ -992,9 +992,11 @@ function returnsNonNode(
|
||||
}
|
||||
}
|
||||
},
|
||||
// Skip traversing all nested functions and their return statements
|
||||
ArrowFunctionExpression: skipNestedFunctions(node),
|
||||
FunctionExpression: skipNestedFunctions(node),
|
||||
FunctionDeclaration: skipNestedFunctions(node),
|
||||
ObjectMethod: node => node.skip(),
|
||||
});
|
||||
|
||||
return !hasReturn || returnsNonNode;
|
||||
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
// @compilationMode(infer)
|
||||
|
||||
import { Stringify } from "shared-runtime";
|
||||
|
||||
function Test() {
|
||||
const context = {
|
||||
testFn() {
|
||||
// if it is an arrow function its work
|
||||
return () => 'test'; // it will break compile if returns an arrow fn
|
||||
},
|
||||
};
|
||||
|
||||
return <Stringify value={context} shouldInvokeFns={true}/>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Test,
|
||||
params: [{}]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
import { c as _c } from "react/compiler-runtime"; // @compilationMode(infer)
|
||||
|
||||
import { Stringify } from "shared-runtime";
|
||||
|
||||
function Test() {
|
||||
const $ = _c(1);
|
||||
let t0;
|
||||
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
||||
const context = {
|
||||
testFn() {
|
||||
return _temp;
|
||||
},
|
||||
};
|
||||
|
||||
t0 = <Stringify value={context} shouldInvokeFns={true} />;
|
||||
$[0] = t0;
|
||||
} else {
|
||||
t0 = $[0];
|
||||
}
|
||||
return t0;
|
||||
}
|
||||
function _temp() {
|
||||
return "test";
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Test,
|
||||
params: [{}],
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
### Eval output
|
||||
(kind: ok) <div>{"value":{"testFn":{"kind":"Function","result":{"kind":"Function","result":"test"}}},"shouldInvokeFns":true}</div>
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// @compilationMode(infer)
|
||||
|
||||
import { Stringify } from "shared-runtime";
|
||||
|
||||
function Test() {
|
||||
const context = {
|
||||
testFn() {
|
||||
// if it is an arrow function its work
|
||||
return () => 'test'; // it will break compile if returns an arrow fn
|
||||
},
|
||||
};
|
||||
|
||||
return <Stringify value={context} shouldInvokeFns={true}/>;
|
||||
}
|
||||
|
||||
export const FIXTURE_ENTRYPOINT = {
|
||||
fn: Test,
|
||||
params: [{}]
|
||||
}
|
||||
Reference in New Issue
Block a user