computeMemoizationInputs() — react Function Reference
Architecture documentation for the computeMemoizationInputs() function in PruneNonEscapingScopes.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 5f0939bb_76eb_1279_d295_dacefad72c8a["computeMemoizationInputs()"] 714af45f_cbe2_027b_49c5_27e47069c22c["CollectDependenciesVisitor"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|defined in| 714af45f_cbe2_027b_49c5_27e47069c22c 97a5722d_5f85_030f_127a_0ee70f10e274["visitValueForMemoization()"] 97a5722d_5f85_030f_127a_0ee70f10e274 -->|calls| 5f0939bb_76eb_1279_d295_dacefad72c8a 97a5722d_5f85_030f_127a_0ee70f10e274["visitValueForMemoization()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| 97a5722d_5f85_030f_127a_0ee70f10e274 073c81a5_c389_d108_5b8f_4d6dc6eece83["push()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| 073c81a5_c389_d108_5b8f_4d6dc6eece83 eadd4103_8b1c_576b_7add_97a5c5edb9c7["eachReactiveValueOperand()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| eadd4103_8b1c_576b_7add_97a5c5edb9c7 f0c93b07_94b1_2207_1b17_c2cb9b4253b7["computePatternLValues()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| f0c93b07_94b1_2207_1b17_c2cb9b4253b7 d2c89465_144e_76da_505e_4a2de182f6f4["getFunctionCallSignature()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| d2c89465_144e_76da_505e_4a2de182f6f4 5d049649_b557_97d4_1320_627cfe79576d["isMutableEffect()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| 5d049649_b557_97d4_1320_627cfe79576d d7fde76c_4fd9_feb3_299b_798689f05bc6["assertExhaustive()"] 5f0939bb_76eb_1279_d295_dacefad72c8a -->|calls| d7fde76c_4fd9_feb3_299b_798689f05bc6 style 5f0939bb_76eb_1279_d295_dacefad72c8a fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts lines 423–858
computeMemoizationInputs(
value: ReactiveValue,
lvalue: Place | null,
): {
// can optionally return a custom set of lvalues per instruction
lvalues: Array<LValueMemoization>;
rvalues: Array<Place>;
} {
const env = this.env;
const options = this.options;
switch (value.kind) {
case 'ConditionalExpression': {
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
rvalues: [
// Conditionals do not alias their test value.
...this.computeMemoizationInputs(value.consequent, null).rvalues,
...this.computeMemoizationInputs(value.alternate, null).rvalues,
],
};
}
case 'LogicalExpression': {
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
rvalues: [
...this.computeMemoizationInputs(value.left, null).rvalues,
...this.computeMemoizationInputs(value.right, null).rvalues,
],
};
}
case 'SequenceExpression': {
for (const instr of value.instructions) {
this.visitValueForMemoization(instr.id, instr.value, instr.lvalue);
}
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
/*
* Only the final value of the sequence is a true rvalue:
* values from the sequence's instructions are evaluated
* as separate nodes
*/
rvalues: this.computeMemoizationInputs(value.value, null).rvalues,
};
}
case 'JsxExpression': {
const operands: Array<Place> = [];
if (value.tag.kind === 'Identifier') {
operands.push(value.tag);
}
for (const prop of value.props) {
if (prop.kind === 'JsxAttribute') {
operands.push(prop.place);
} else {
operands.push(prop.argument);
}
}
if (value.children !== null) {
for (const child of value.children) {
operands.push(child);
}
}
const level = options.memoizeJsxElements
? MemoizationLevel.Memoized
: MemoizationLevel.Unmemoized;
return {
/*
* JSX elements themselves are not memoized unless forced to
* avoid breaking downstream memoization
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does computeMemoizationInputs() do?
computeMemoizationInputs() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts.
Where is computeMemoizationInputs() defined?
computeMemoizationInputs() is defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts at line 423.
What does computeMemoizationInputs() call?
computeMemoizationInputs() calls 7 function(s): assertExhaustive, computePatternLValues, eachReactiveValueOperand, getFunctionCallSignature, isMutableEffect, push, visitValueForMemoization.
What calls computeMemoizationInputs()?
computeMemoizationInputs() is called by 1 function(s): visitValueForMemoization.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free