Skip to content

Commit

Permalink
feat(compiler): Compiler Logical Negation Constant Propagation
Browse files Browse the repository at this point in the history
Resolves #29622
  • Loading branch information
nikeee committed May 29, 2024
1 parent 97722ca commit 93c4b02
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,25 @@ function evaluateInstruction(
}
return null;
}
case "UnaryExpression": {
switch (value.operator) {
case "!": {
const operand = read(constants, value.value);
if (operand !== null && operand.kind === "Primitive") {
const result: Primitive = {
kind: "Primitive",
value: !operand.value,
loc: value.loc,
};
instr.value = result;
return result;
}
return null;
}
default:
return null;
}
}
case "BinaryExpression": {
const lhsValue = read(constants, value.left);
const rhsValue = read(constants, value.right);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@

## Input

```javascript
import { Stringify } from "shared-runtime";

function foo() {
let _b;
const b = true;
if (!b) {
_b = "bar";
} else {
_b = "baz";
}

return (
<Stringify
value={{
_b,
b0: !true,
n0: !0,
n1: !1,
n2: !2,
n3: !-1,
s0: !"",
s1: !"a",
s2: !"ab",
u: !undefined,
n: !null,
}}
/>
);
}

export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [],
isComponent: false,
};

```

## Code

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

function foo() {
const $ = _c(1);
let t0;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t0 = (
<Stringify
value={{
_b: "baz",
b0: false,
n0: true,
n1: false,
n2: false,
n3: !-1,
s0: true,
s1: false,
s2: false,
u: !undefined,
n: true,
}}
/>
);
$[0] = t0;
} else {
t0 = $[0];
}
return t0;
}

export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [],
isComponent: false,
};

```
### Eval output
(kind: ok) <div>{"value":{"_b":"baz","b0":false,"n0":true,"n1":false,"n2":false,"n3":false,"s0":true,"s1":false,"s2":false,"u":true,"n":true}}</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { Stringify } from "shared-runtime";

function foo() {
let _b;
const b = true;
if (!b) {
_b = "bar";
} else {
_b = "baz";
}

return (
<Stringify
value={{
_b,
b0: !true,
n0: !0,
n1: !1,
n2: !2,
n3: !-1,
s0: !"",
s1: !"a",
s2: !"ab",
u: !undefined,
n: !null,
}}
/>
);
}

export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [],
isComponent: false,
};

0 comments on commit 93c4b02

Please sign in to comment.