Home / Function/ propagateScopeDependenciesHIR() — react Function Reference

propagateScopeDependenciesHIR() — react Function Reference

Architecture documentation for the propagateScopeDependenciesHIR() function in PropagateScopeDependenciesHIR.ts from the react codebase.

Function typescript MIRInfrastructure HIR calls 11 called by 1

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);
    }
  }
}

Subdomains

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