Home / Function/ computeImmediateDominators() — react Function Reference

computeImmediateDominators() — react Function Reference

Architecture documentation for the computeImmediateDominators() function in Dominator.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  9817c1db_b7a8_e8dc_1ed4_f224e36002e9["computeImmediateDominators()"]
  b02a9daf_aca4_b66a_9b9b_0b739a8ca4aa["Dominator.ts"]
  9817c1db_b7a8_e8dc_1ed4_f224e36002e9 -->|defined in| b02a9daf_aca4_b66a_9b9b_0b739a8ca4aa
  e28bcdab_2c48_d52f_7a36_ef26ead72639["computeDominatorTree()"]
  e28bcdab_2c48_d52f_7a36_ef26ead72639 -->|calls| 9817c1db_b7a8_e8dc_1ed4_f224e36002e9
  7703f432_520f_80d2_69d8_201d9cb9eb55["computePostDominatorTree()"]
  7703f432_520f_80d2_69d8_201d9cb9eb55 -->|calls| 9817c1db_b7a8_e8dc_1ed4_f224e36002e9
  041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"]
  9817c1db_b7a8_e8dc_1ed4_f224e36002e9 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e
  eb04bd2c_f40e_dbee_f195_08280608a550["intersect()"]
  9817c1db_b7a8_e8dc_1ed4_f224e36002e9 -->|calls| eb04bd2c_f40e_dbee_f195_08280608a550
  style 9817c1db_b7a8_e8dc_1ed4_f224e36002e9 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/HIR/Dominator.ts lines 151–194

function computeImmediateDominators<T>(graph: Graph<T>): Map<T, T> {
  const nodes: Map<T, T> = new Map();
  nodes.set(graph.entry, graph.entry);
  let changed = true;
  while (changed) {
    changed = false;
    for (const [id, node] of graph.nodes) {
      // Skip start node
      if (node.id === graph.entry) {
        continue;
      }

      // first processed predecessor
      let newIdom: T | null = null;
      for (const pred of node.preds) {
        if (nodes.has(pred)) {
          newIdom = pred;
          break;
        }
      }
      CompilerError.invariant(newIdom !== null, {
        reason: `At least one predecessor must have been visited for block ${id}`,
        loc: GeneratedSource,
      });

      for (const pred of node.preds) {
        // For all other predecessors
        if (pred === newIdom) {
          continue;
        }
        const predDom = nodes.get(pred);
        if (predDom !== undefined) {
          newIdom = intersect(pred, newIdom, graph, nodes);
        }
      }

      if (nodes.get(id) !== newIdom) {
        nodes.set(id, newIdom);
        changed = true;
      }
    }
  }
  return nodes;
}

Subdomains

Frequently Asked Questions

What does computeImmediateDominators() do?
computeImmediateDominators() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/HIR/Dominator.ts.
Where is computeImmediateDominators() defined?
computeImmediateDominators() is defined in compiler/packages/babel-plugin-react-compiler/src/HIR/Dominator.ts at line 151.
What does computeImmediateDominators() call?
computeImmediateDominators() calls 2 function(s): intersect, invariant.
What calls computeImmediateDominators()?
computeImmediateDominators() is called by 2 function(s): computeDominatorTree, computePostDominatorTree.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free