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 a179224a77..d4284c77ee 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts @@ -82,6 +82,7 @@ export function lower( kind: 'Identifier', identifier: builder.resolveBinding(ref), effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: ref.loc ?? GeneratedSource, }); @@ -113,6 +114,7 @@ export function lower( kind: 'Identifier', identifier: binding.identifier, effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: param.node.loc ?? GeneratedSource, }; @@ -126,6 +128,7 @@ export function lower( kind: 'Identifier', identifier: builder.makeTemporary(param.node.loc ?? GeneratedSource), effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: param.node.loc ?? GeneratedSource, }; @@ -144,6 +147,7 @@ export function lower( kind: 'Identifier', identifier: builder.makeTemporary(param.node.loc ?? GeneratedSource), effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: param.node.loc ?? GeneratedSource, }; @@ -460,6 +464,7 @@ function lowerStatement( }); const place: Place = { effect: Effect.Unknown, + abstractValue: null, identifier: identifier.identifier, kind: 'Identifier', reactive: false, @@ -853,6 +858,7 @@ function lowerStatement( } else { const place: Place = { effect: Effect.Unknown, + abstractValue: null, identifier: binding.identifier, kind: 'Identifier', reactive: false, @@ -1264,6 +1270,7 @@ function lowerStatement( handlerBindingPath.node.loc ?? GeneratedSource, ), effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: handlerBindingPath.node.loc ?? GeneratedSource, }; @@ -3428,6 +3435,7 @@ function lowerIdentifier( kind: 'Identifier', identifier: binding.identifier, effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: exprLoc, }; @@ -3449,6 +3457,7 @@ function buildTemporaryPlace(builder: HIRBuilder, loc: SourceLocation): Place { kind: 'Identifier', identifier: builder.makeTemporary(loc), effect: Effect.Unknown, + abstractValue: null, reactive: false, loc, }; @@ -3511,6 +3520,7 @@ function lowerIdentifierForAssignment( kind: 'Identifier', identifier: binding.identifier, effect: Effect.Unknown, + abstractValue: null, reactive: false, loc, }; diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts index 30408ab032..ae39d0c1a6 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts @@ -761,6 +761,7 @@ function _staticInvariantInstructionValueHasLocation( export type Phi = { kind: 'Phi'; id: Identifier; + abstractValue: AbstractValue | null; operands: Map; }; @@ -1110,6 +1111,7 @@ export type Place = { kind: 'Identifier'; identifier: Identifier; effect: Effect; + abstractValue: AbstractValue | null; reactive: boolean; loc: SourceLocation; }; diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/HIRBuilder.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/HIRBuilder.ts index c694cf310f..2adc9d66e8 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/HIRBuilder.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/HIRBuilder.ts @@ -895,6 +895,7 @@ export function createTemporaryPlace( kind: 'Identifier', identifier: makeTemporaryIdentifier(env.nextIdentifierId, loc), reactive: false, + abstractValue: null, effect: Effect.Unknown, loc: GeneratedSource, }; diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/MergeConsecutiveBlocks.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/MergeConsecutiveBlocks.ts index 98721f636f..4fdfbd228a 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/MergeConsecutiveBlocks.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/MergeConsecutiveBlocks.ts @@ -86,6 +86,7 @@ export function mergeConsecutiveBlocks(fn: HIRFunction): void { kind: 'Identifier', identifier: phi.id, effect: Effect.ConditionallyMutate, + abstractValue: null, reactive: false, loc: GeneratedSource, }, @@ -95,6 +96,7 @@ export function mergeConsecutiveBlocks(fn: HIRFunction): void { kind: 'Identifier', identifier: operand, effect: Effect.Read, + abstractValue: null, reactive: false, loc: GeneratedSource, }, 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 c88d3bf773..b6622f480a 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts @@ -833,6 +833,8 @@ export function printPattern(pattern: Pattern | Place | SpreadPattern): string { export function printPlace(place: Place): string { const items = [ + place.abstractValue?.kind, + place.abstractValue ? ' ' : '', place.effect, ' ', printIdentifier(place.identifier), diff --git a/compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts b/compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts index 4dcdc21e15..cbf1e00259 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts @@ -268,6 +268,7 @@ function getManualMemoizationReplacement( kind: 'Identifier', identifier: fn.identifier, effect: Effect.Unknown, + abstractValue: null, reactive: false, loc, }, @@ -420,6 +421,7 @@ export function dropManualMemoization(func: HIRFunction): void { kind: 'Identifier', identifier: fnPlace.identifier, effect: Effect.Unknown, + abstractValue: null, reactive: false, loc: fnPlace.loc, }; diff --git a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PropagateEarlyReturns.ts b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PropagateEarlyReturns.ts index b8ba196284..693ce9af66 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PropagateEarlyReturns.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PropagateEarlyReturns.ts @@ -237,6 +237,7 @@ class Transform extends ReactiveFunctionTransform { place: { kind: 'Identifier', effect: Effect.ConditionallyMutate, + abstractValue: null, loc, reactive: true, identifier: earlyReturnValue.value, @@ -308,6 +309,7 @@ class Transform extends ReactiveFunctionTransform { kind: 'Identifier', identifier: earlyReturnValue.value, effect: Effect.Capture, + abstractValue: null, loc, reactive: true, }, diff --git a/compiler/packages/babel-plugin-react-compiler/src/SSA/EnterSSA.ts b/compiler/packages/babel-plugin-react-compiler/src/SSA/EnterSSA.ts index 73942769c2..2b85b7096c 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/SSA/EnterSSA.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/SSA/EnterSSA.ts @@ -191,6 +191,7 @@ class SSABuilder { const phi: Phi = { kind: 'Phi', id: newId, + abstractValue: null, operands: predDefs, }; diff --git a/compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts b/compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts index e7615320c7..4ab16e9569 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts @@ -250,6 +250,7 @@ function validateInferredDep( identifier: dep.identifier, loc: GeneratedSource, effect: Effect.Read, + abstractValue: null, reactive: false, }, },