computeMemoizedIdentifiers() — react Function Reference
Architecture documentation for the computeMemoizedIdentifiers() function in PruneNonEscapingScopes.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 6cbc6f54_5202_efe6_f13a_d6f4722effbc["computeMemoizedIdentifiers()"] c4112963_95fe_d8ed_3bfd_f6d45887acb7["PruneNonEscapingScopes.ts"] 6cbc6f54_5202_efe6_f13a_d6f4722effbc -->|defined in| c4112963_95fe_d8ed_3bfd_f6d45887acb7 d832b21e_d654_e993_f855_4556f97c1e2d["pruneNonEscapingScopes()"] d832b21e_d654_e993_f855_4556f97c1e2d -->|calls| 6cbc6f54_5202_efe6_f13a_d6f4722effbc 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 6cbc6f54_5202_efe6_f13a_d6f4722effbc -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e style 6cbc6f54_5202_efe6_f13a_d6f4722effbc fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts lines 280–347
function computeMemoizedIdentifiers(state: State): Set<DeclarationId> {
const memoized = new Set<DeclarationId>();
// Visit an identifier, optionally forcing it to be memoized
function visit(id: DeclarationId, forceMemoize: boolean = false): boolean {
const node = state.identifiers.get(id);
CompilerError.invariant(node !== undefined, {
reason: `Expected a node for all identifiers, none found for \`${id}\``,
loc: GeneratedSource,
});
if (node.seen) {
return node.memoized;
}
node.seen = true;
/*
* Note: in case of cycles we temporarily mark the identifier as non-memoized,
* this is reset later after processing dependencies
*/
node.memoized = false;
// Visit dependencies, determine if any of them are memoized
let hasMemoizedDependency = false;
for (const dep of node.dependencies) {
const isDepMemoized = visit(dep);
hasMemoizedDependency ||= isDepMemoized;
}
if (
node.level === MemoizationLevel.Memoized ||
(node.level === MemoizationLevel.Conditional &&
(hasMemoizedDependency || forceMemoize)) ||
(node.level === MemoizationLevel.Unmemoized && forceMemoize)
) {
node.memoized = true;
memoized.add(id);
for (const scope of node.scopes) {
forceMemoizeScopeDependencies(scope);
}
}
return node.memoized;
}
// Force all the scope's optionally-memoizeable dependencies (not "Never") to be memoized
function forceMemoizeScopeDependencies(id: ScopeId): void {
const node = state.scopes.get(id);
CompilerError.invariant(node !== undefined, {
reason: 'Expected a node for all scopes',
loc: GeneratedSource,
});
if (node.seen) {
return;
}
node.seen = true;
for (const dep of node.dependencies) {
visit(dep, true);
}
return;
}
// Walk from the "roots" aka returned identifiers.
for (const value of state.escapingValues) {
visit(value);
}
return memoized;
}
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does computeMemoizedIdentifiers() do?
computeMemoizedIdentifiers() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts.
Where is computeMemoizedIdentifiers() defined?
computeMemoizedIdentifiers() is defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts at line 280.
What does computeMemoizedIdentifiers() call?
computeMemoizedIdentifiers() calls 1 function(s): invariant.
What calls computeMemoizedIdentifiers()?
computeMemoizedIdentifiers() is called by 1 function(s): pruneNonEscapingScopes.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free