[compiler] Reordering of logical expressions

ghstack-source-id: ad484f97451c65a2642618bfb9d540d6a53a19a6
Pull Request resolved: https://github.com/facebook/react/pull/30678
This commit is contained in:
Mike Vitousek
2024-08-13 16:57:45 -04:00
parent f6d1df6648
commit 8e60bacd08
3 changed files with 66 additions and 0 deletions

View File

@@ -2847,6 +2847,21 @@ function isReorderableExpression(
allowLocalIdentifiers,
);
}
case 'LogicalExpression': {
const logical = expr as NodePath<t.LogicalExpression>;
return (
isReorderableExpression(
builder,
logical.get('left'),
allowLocalIdentifiers,
) &&
isReorderableExpression(
builder,
logical.get('right'),
allowLocalIdentifiers,
)
);
}
case 'ConditionalExpression': {
const conditional = expr as NodePath<t.ConditionalExpression>;
return (

View File

@@ -0,0 +1,39 @@
## Input
```javascript
//@flow
const foo = undefined;
component C(...{scope = foo ?? null}: any) {
return scope;
}
export const FIXTURE_ENTRYPOINT = {
fn: C,
params: [{scope: undefined}],
};
```
## Code
```javascript
const foo = undefined;
function C(t0) {
const { scope: t1 } = t0;
const scope = t1 === undefined ? (foo ?? null) : t1;
return scope;
}
export const FIXTURE_ENTRYPOINT = {
fn: C,
params: [{ scope: undefined }],
};
```
### Eval output
(kind: ok) null

View File

@@ -0,0 +1,12 @@
//@flow
const foo = undefined;
component C(...{scope = foo ?? null}: any) {
return scope;
}
export const FIXTURE_ENTRYPOINT = {
fn: C,
params: [{scope: undefined}],
};