diff --git a/compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts b/compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts index a354acf692..00c68915f5 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts @@ -189,9 +189,17 @@ function runWithEnvironment( assertConsistentIdentifiers(hir); + const wasTernaryConstantPropagationEnabled = + env.config.enableTernaryConstantPropagation; + env.config.enableTernaryConstantPropagation = false; constantPropagation(hir); log({kind: 'hir', name: 'ConstantPropagation', value: hir}); + env.config.enableTernaryConstantPropagation = + wasTernaryConstantPropagationEnabled; + constantPropagation(hir); + log({kind: 'hir', name: 'ConstantPropagationTernary', value: hir}); + inferTypes(hir); log({kind: 'hir', name: 'InferTypes', value: hir}); diff --git a/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts b/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts index 47bcddb0d4..a447b0f71f 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts @@ -182,6 +182,7 @@ function applyConstantPropagation( */ branchBlock.terminal.consequent : branchBlock.terminal.alternate; + block.kind = 'block'; block.terminal = { kind: 'goto', variant: GotoVariant.Break, @@ -190,7 +191,13 @@ function applyConstantPropagation( loc: terminal.loc, }; - block.kind = 'block'; + const fallthrough = fn.body.blocks.get( + branchBlock.terminal.fallthrough, + ); + + if (fallthrough?.terminal.kind == 'goto') { + fallthrough.kind = 'block'; + } const consequent = fn.body.blocks.get( branchBlock.terminal.consequent, diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js index f74185e36a..7dda1f6960 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-ternary-unary.js @@ -4,7 +4,7 @@ import {Stringify} from 'shared-runtime'; function foo() { let _b; const b = true; - _b = !b ? 'bar' : false ? 'foo' : 'baz'; + _b = !b ? 'bar' : 'baz'; return (