Skip to content

Commit

Permalink
[compiler] repro for dep merging edge case (non-hir)
Browse files Browse the repository at this point in the history
ghstack-source-id: 7adf7a76cf0f61695e370d81ec560c3477f8e67c
Pull Request resolved: #31035
  • Loading branch information
mofeiZ committed Sep 23, 2024
1 parent 4ba3edf commit 0db7c15
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@

## Input

```javascript
import {identity} from 'shared-runtime';

/**
* Evaluator failure:
* Found differences in evaluator results
* Non-forget (expected):
* (kind: ok) {}
* [[ (exception in render) TypeError: Cannot read properties of null (reading 'title_text') ]]
* Forget:
* (kind: ok) {}
* {}
*/
/**
* Very contrived text fixture showing that it's technically incorrect to merge
* a conditional dependency (e.g. dep.path in `cond ? dep.path : ...`) and an
* unconditionally evaluated optional chain (`dep?.path`).
*
*
* when screen is non-null, useFoo returns { title: null } or "(not null)"
* when screen is null, useFoo throws
*/
function useFoo({screen}: {screen: null | undefined | {title_text: null}}) {
return screen?.title_text != null
? '(not null)'
: identity({title: screen.title_text});
}
export const FIXTURE_ENTRYPOINT = {
fn: useFoo,
params: [{screen: null}],
sequentialRenders: [{screen: {title_bar: undefined}}, {screen: null}],
};

```
## Code
```javascript
import { c as _c } from "react/compiler-runtime";
import { identity } from "shared-runtime";

/**
* Evaluator failure:
* Found differences in evaluator results
* Non-forget (expected):
* (kind: ok) {}
* [[ (exception in render) TypeError: Cannot read properties of null (reading 'title_text') ]]
* Forget:
* (kind: ok) {}
* {}
*/
/**
* Very contrived text fixture showing that it's technically incorrect to merge
* a conditional dependency (e.g. dep.path in `cond ? dep.path : ...`) and an
* unconditionally evaluated optional chain (`dep?.path`).
*
*
* when screen is non-null, useFoo returns { title: null } or "(not null)"
* when screen is null, useFoo throws
*/
function useFoo(t0) {
const $ = _c(2);
const { screen } = t0;
let t1;
if ($[0] !== screen?.title_text) {
t1 =
screen?.title_text != null
? "(not null)"
: identity({ title: screen.title_text });
$[0] = screen?.title_text;
$[1] = t1;
} else {
t1 = $[1];
}
return t1;
}

export const FIXTURE_ENTRYPOINT = {
fn: useFoo,
params: [{ screen: null }],
sequentialRenders: [{ screen: { title_bar: undefined } }, { screen: null }],
};

```
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {identity} from 'shared-runtime';

/**
* Evaluator failure:
* Found differences in evaluator results
* Non-forget (expected):
* (kind: ok) {}
* [[ (exception in render) TypeError: Cannot read properties of null (reading 'title_text') ]]
* Forget:
* (kind: ok) {}
* {}
*/
/**
* Very contrived text fixture showing that it's technically incorrect to merge
* a conditional dependency (e.g. dep.path in `cond ? dep.path : ...`) and an
* unconditionally evaluated optional chain (`dep?.path`).
*
*
* when screen is non-null, useFoo returns { title: null } or "(not null)"
* when screen is null, useFoo throws
*/
function useFoo({screen}: {screen: null | undefined | {title_text: null}}) {
return screen?.title_text != null
? '(not null)'
: identity({title: screen.title_text});
}
export const FIXTURE_ENTRYPOINT = {
fn: useFoo,
params: [{screen: null}],
sequentialRenders: [{screen: {title_bar: undefined}}, {screen: null}],
};
1 change: 1 addition & 0 deletions compiler/packages/snap/src/SproutTodoFilter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,7 @@ const skipFilter = new Set([
'fbt/bug-fbt-plural-multiple-mixed-call-tag',
'bug-invalid-hoisting-functionexpr',
'bug-try-catch-maybe-null-dependency',
'reduce-reactive-deps/bug-merge-uncond-optional-chain-and-cond',
'original-reactive-scopes-fork/bug-nonmutating-capture-in-unsplittable-memo-block',
'original-reactive-scopes-fork/bug-hoisted-declaration-with-scope',
'bug-codegen-inline-iife',
Expand Down

0 comments on commit 0db7c15

Please sign in to comment.