diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts index efcfecce78..5bcf27b333 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts @@ -1388,10 +1388,13 @@ function lowerStatement( }); return; } - case 'TypeAlias': - case 'TSInterfaceDeclaration': - case 'TSTypeAliasDeclaration': { - // We do not preserve type annotations/syntax through transformation + case 'EnumDeclaration': + case 'TSEnumDeclaration': { + lowerValueToTemporary(builder, { + kind: 'UnsupportedNode', + loc: stmtPath.node.loc ?? GeneratedSource, + node: stmtPath.node, + }); return; } case 'DeclareClass': @@ -1404,15 +1407,19 @@ function lowerStatement( case 'DeclareOpaqueType': case 'DeclareTypeAlias': case 'DeclareVariable': - case 'EnumDeclaration': + case 'InterfaceDeclaration': + case 'OpaqueType': + case 'TSDeclareFunction': + case 'TSInterfaceDeclaration': + case 'TSTypeAliasDeclaration': + case 'TypeAlias': { + // We do not preserve type annotations/syntax through transformation + return; + } case 'ExportAllDeclaration': case 'ExportDefaultDeclaration': case 'ExportNamedDeclaration': case 'ImportDeclaration': - case 'InterfaceDeclaration': - case 'OpaqueType': - case 'TSDeclareFunction': - case 'TSEnumDeclaration': case 'TSExportAssignment': case 'TSImportEqualsDeclaration': case 'TSModuleDeclaration': diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts index caaced124e..23471a00b0 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -import generate from '@babel/generator'; import {CompilerError} from '../CompilerError'; import {printReactiveScopeSummary} from '../ReactiveScopes/PrintReactiveFunction'; import DisjointSet from '../Utils/DisjointSet'; @@ -466,7 +465,7 @@ export function printInstructionValue(instrValue: ReactiveValue): string { break; } case 'UnsupportedNode': { - value = `UnsupportedNode(${generate(instrValue.node).code})`; + value = `UnsupportedNode ${instrValue.node.type}`; break; } case 'LoadLocal': { diff --git a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts index 52a0312dcd..8484a1ca8d 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts @@ -829,12 +829,14 @@ class CollectDependenciesVisitor extends ReactiveFunctionVisitor< }; } case 'UnsupportedNode': { - CompilerError.invariant(false, { - reason: `Unexpected unsupported node`, - description: null, - loc: value.loc, - suggestions: null, - }); + const lvalues = []; + if (lvalue !== null) { + lvalues.push({place: lvalue, level: MemoizationLevel.Never}); + } + return { + lvalues, + rvalues: [], + }; } default: { assertExhaustive( diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/flow-enum-inline.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/flow-enum-inline.expect.md new file mode 100644 index 0000000000..dfbf4fbfd9 --- /dev/null +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/flow-enum-inline.expect.md @@ -0,0 +1,60 @@ + +## Input + +```javascript +// @flow +function Component(props) { + enum Bool { + True = 'true', + False = 'false', + } + + let bool: Bool = Bool.False; + if (props.value) { + bool = Bool.True; + } + return