diff --git a/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.expect.md b/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.expect.md new file mode 100644 index 0000000000..3db71487a1 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.expect.md @@ -0,0 +1,13 @@ + +## Input + +```javascript + +``` + +## Code + +```javascript + +``` + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.js b/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.js new file mode 100644 index 0000000000..654fa341fa --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/hir/ternary-assignment-expression.js @@ -0,0 +1,6 @@ +// @only +function ternary(props) { + let x = 0; + const y = props.a ? (x = 1) : (x = 2); + return x + y; +} diff --git a/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.expect.md b/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.expect.md new file mode 100644 index 0000000000..c10d292ccc --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.expect.md @@ -0,0 +1,53 @@ + +## Input + +```javascript +function ternary(props) { + const a = props.a && props.b ? props.c || props.d : props.e ?? props.f; + const b = props.a ? (props.b && props.c ? props.d : props.e) : props.f; + return a ? b : null; +} + +``` + +## Code + +```javascript +function ternary(props) { + const $ = React.useMemoCache(); + const c_0 = $[0] !== props; + let t1; + if (c_0) { + t1 = props.a && props.b ? props.c || props.d : props.e ?? props.f; + $[0] = props; + $[1] = t1; + } else { + t1 = $[1]; + } + const a = t1; + const c_2 = $[2] !== props; + let t3; + if (c_2) { + t3 = props.a ? (props.b && props.c ? props.d : props.e) : props.f; + $[2] = props; + $[3] = t3; + } else { + t3 = $[3]; + } + const b = t3; + const c_4 = $[4] !== a; + const c_5 = $[5] !== b; + let t6; + if (c_4 || c_5) { + t6 = a ? b : null; + $[4] = a; + $[5] = b; + $[6] = t6; + } else { + t6 = $[6]; + } + return t6; +} + +``` + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.js b/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.js new file mode 100644 index 0000000000..9752555303 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/hir/ternary-expression.js @@ -0,0 +1,5 @@ +function ternary(props) { + const a = props.a && props.b ? props.c || props.d : props.e ?? props.f; + const b = props.a ? (props.b && props.c ? props.d : props.e) : props.f; + return a ? b : null; +}