Skip to content

Commit

Permalink
[compiler][ez] Patch compilationMode:infer object method edge case (f…
Browse files Browse the repository at this point in the history
  • Loading branch information
mofeiZ authored Jan 13, 2025
1 parent cabd8a0 commit af8532f
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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>
Original file line number Diff line number Diff line change
@@ -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: [{}],
};

0 comments on commit af8532f

Please sign in to comment.