diff --git a/compiler/forget/src/HIR/BuildHIR.ts b/compiler/forget/src/HIR/BuildHIR.ts index 620516f8e3..0c6eec81ed 100644 --- a/compiler/forget/src/HIR/BuildHIR.ts +++ b/compiler/forget/src/HIR/BuildHIR.ts @@ -1744,6 +1744,13 @@ function lowerMemberExpression( }, }; } + if (t.isOptionalMemberExpression(expr)) { + builder.errors.push({ + reason: `(BuildHIR::lowerMemberExpression) Handle computed OptionalMemberExpression`, + severity: ErrorSeverity.Todo, + nodePath: expr, + }); + } const propertyPlace = lowerExpressionToTemporary(builder, property); const value: InstructionValue = { kind: "ComputedLoad", diff --git a/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.expect.md b/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.expect.md new file mode 100644 index 0000000000..126823579a --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.expect.md @@ -0,0 +1,25 @@ + +## Input + +```javascript +function Component(props) { + const object = makeObject(props); + return object?.[props.key]; +} + +``` + + +## Error + +``` +[ReactForget] TodoError: (BuildHIR::lowerMemberExpression) Handle computed OptionalMemberExpression + 1 | function Component(props) { + 2 | const object = makeObject(props); +> 3 | return object?.[props.key]; + | ^^^^^^^^^^^^^^^^^^^ + 4 | } + 5 | +``` + + \ No newline at end of file diff --git a/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.js b/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.js new file mode 100644 index 0000000000..5e8a408e10 --- /dev/null +++ b/compiler/forget/src/__tests__/fixtures/compiler/error.optional-computed-member-expression.js @@ -0,0 +1,4 @@ +function Component(props) { + const object = makeObject(props); + return object?.[props.key]; +}