dillon1000/react
Commit
Browse files feat(compiler): Implement constant folding for more binary expressions (#29650)
## Summary
There are already most arithmetic operators in constant propagation:
`+`, `-`, `*`, `/`.
We could add more, namely: `|`, `&`, `^`, `<<`, `>>`, `>>>` and `%`:
Input:
```js
function f() {
return [
123.45 | 0,
123.45 & 0,
123.45 ^ 0,
123 << 0,
123 >> 0,
123 >>> 0,
123.45 | 1,
123.45 & 1,
123.45 ^ 1,
123 << 1,
123 >> 1,
123 >>> 1,
3 ** 2,
3 ** 2.5,
3.5 ** 2,
2 ** 3 ** 0.5,
4 % 2,
4 % 2.5,
4 % 3,
4.5 % 2,
];
}
```
Output:
```js
function f() {
return [
123, 0, 123, 123, 123, 123, 123, 1, 122, 246, 61, 61, 9,
15.588457268119896, 12.25, 3.3219970854839125, 0, 1.5, 1, 0.5,
];
}
```
Resolves #29649
## How did you test this change?
See tests.
Note:
This PR was done without waiting for approval in #29649, so feel free to
just close it without any comment.Changed paths4 files
First-parent comparisoncompiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts ModifiedM compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-variations.expect.md ModifiedA compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-bit-ops.expect.md AddedA compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-bit-ops.js AddedPatch
Files changed
Rendering syntax-highlighted changes…