propagateScopeDependenciesHIR() — react Function Reference
Architecture documentation for the propagateScopeDependenciesHIR() function in PropagateScopeDependenciesHIR.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 55f3fce3_0db5_e260_b549_d5a721561462["propagateScopeDependenciesHIR()"] 76832af2_c0a7_f31c_e448_af5664da4b88["PropagateScopeDependenciesHIR.ts"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|defined in| 76832af2_c0a7_f31c_e448_af5664da4b88 c3bc3875_256f_8f5e_7800_2f9c5bae65eb["runWithEnvironment()"] c3bc3875_256f_8f5e_7800_2f9c5bae65eb -->|calls| 55f3fce3_0db5_e260_b549_d5a721561462 3cbb5167_d55c_6775_cfe5_cd15846ca8d2["findTemporariesUsedOutsideDeclaringScope()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 3cbb5167_d55c_6775_cfe5_cd15846ca8d2 5c398df4_9a90_b7aa_6be6_ddff9be0b519["collectTemporariesSidemap()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 5c398df4_9a90_b7aa_6be6_ddff9be0b519 ef81e884_f545_95f9_d420_7fcb2bd33ee0["collectOptionalChainSidemap()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| ef81e884_f545_95f9_d420_7fcb2bd33ee0 9feae12a_25c0_ee10_d379_b2494a720a79["keyByScopeId()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 9feae12a_25c0_ee10_d379_b2494a720a79 bff0b2a9_918b_8c37_61b5_56f59c89a9a1["collectHoistablePropertyLoads()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| bff0b2a9_918b_8c37_61b5_56f59c89a9a1 5b709ffb_65e9_2125_d608_a351c667cd6c["collectDependencies()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 5b709ffb_65e9_2125_d608_a351c667cd6c 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e 61f036d0_eb91_7e31_154e_acb3c7c8f23c["addDependency()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 61f036d0_eb91_7e31_154e_acb3c7c8f23c 3007052f_a4b8_b5ea_a419_9f2abc9f4286["deriveMinimalDependencies()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 3007052f_a4b8_b5ea_a419_9f2abc9f4286 527555c0_9544_ae6b_5f83_952272d2caa1["Iterable_some()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 527555c0_9544_ae6b_5f83_952272d2caa1 96f724f9_c647_5d60_5eeb_d1554b8ee60d["areEqualPaths()"] 55f3fce3_0db5_e260_b549_d5a721561462 -->|calls| 96f724f9_c647_5d60_5eeb_d1554b8ee60d style 55f3fce3_0db5_e260_b549_d5a721561462 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/HIR/PropagateScopeDependenciesHIR.ts lines 52–118
export function propagateScopeDependenciesHIR(fn: HIRFunction): void {
const usedOutsideDeclaringScope =
findTemporariesUsedOutsideDeclaringScope(fn);
const temporaries = collectTemporariesSidemap(fn, usedOutsideDeclaringScope);
const {
temporariesReadInOptional,
processedInstrsInOptional,
hoistableObjects,
} = collectOptionalChainSidemap(fn);
const hoistablePropertyLoads = keyByScopeId(
fn,
collectHoistablePropertyLoads(fn, temporaries, hoistableObjects),
);
const scopeDeps = collectDependencies(
fn,
usedOutsideDeclaringScope,
new Map([...temporaries, ...temporariesReadInOptional]),
processedInstrsInOptional,
);
/**
* Derive the minimal set of hoistable dependencies for each scope.
*/
for (const [scope, deps] of scopeDeps) {
if (deps.length === 0) {
continue;
}
/**
* Step 1: Find hoistable accesses, given the basic block in which the scope
* begins.
*/
const hoistables = hoistablePropertyLoads.get(scope.id);
CompilerError.invariant(hoistables != null, {
reason: '[PropagateScopeDependencies] Scope not found in tracked blocks',
loc: GeneratedSource,
});
/**
* Step 2: Calculate hoistable dependencies.
*/
const tree = new ReactiveScopeDependencyTreeHIR(
[...hoistables.assumedNonNullObjects].map(o => o.fullPath),
);
for (const dep of deps) {
tree.addDependency({...dep});
}
/**
* Step 3: Reduce dependencies to a minimal set.
*/
const candidates = tree.deriveMinimalDependencies();
for (const candidateDep of candidates) {
if (
!Iterable_some(
scope.dependencies,
existingDep =>
existingDep.identifier.declarationId ===
candidateDep.identifier.declarationId &&
areEqualPaths(existingDep.path, candidateDep.path),
)
)
scope.dependencies.add(candidateDep);
}
}
}
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does propagateScopeDependenciesHIR() do?
propagateScopeDependenciesHIR() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/HIR/PropagateScopeDependenciesHIR.ts.
Where is propagateScopeDependenciesHIR() defined?
propagateScopeDependenciesHIR() is defined in compiler/packages/babel-plugin-react-compiler/src/HIR/PropagateScopeDependenciesHIR.ts at line 52.
What does propagateScopeDependenciesHIR() call?
propagateScopeDependenciesHIR() calls 11 function(s): Iterable_some, addDependency, areEqualPaths, collectDependencies, collectHoistablePropertyLoads, collectOptionalChainSidemap, collectTemporariesSidemap, deriveMinimalDependencies, and 3 more.
What calls propagateScopeDependenciesHIR()?
propagateScopeDependenciesHIR() is called by 1 function(s): runWithEnvironment.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free