Home / Function/ createControlDominators() — react Function Reference

createControlDominators() — react Function Reference

Architecture documentation for the createControlDominators() function in ControlDominators.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d["createControlDominators()"]
  5d62162e_5fa5_1488_29bf_5150b4be53a0["ControlDominators.ts"]
  1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d -->|defined in| 5d62162e_5fa5_1488_29bf_5150b4be53a0
  fddc4da2_1151_8052_c771_8b67085ebeca["inferReactivePlaces()"]
  fddc4da2_1151_8052_c771_8b67085ebeca -->|calls| 1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d
  3b48551f_7fdf_a2e3_1a73_61107c6532fd["getSetStateCall()"]
  3b48551f_7fdf_a2e3_1a73_61107c6532fd -->|calls| 1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d
  7703f432_520f_80d2_69d8_201d9cb9eb55["computePostDominatorTree()"]
  1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d -->|calls| 7703f432_520f_80d2_69d8_201d9cb9eb55
  2ab5bf9c_e206_7c2b_7310_4c254855325b["postDominatorFrontier()"]
  1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d -->|calls| 2ab5bf9c_e206_7c2b_7310_4c254855325b
  229919e6_9735_4317_1205_cd584725c183["get()"]
  1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d -->|calls| 229919e6_9735_4317_1205_cd584725c183
  style 1c6dc7ec_72e1_b907_d23f_94b6a80c2a2d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Inference/ControlDominators.ts lines 17–59

export function createControlDominators(
  fn: HIRFunction,
  isControlVariable: (place: Place) => boolean,
): ControlDominators {
  const postDominators = computePostDominatorTree(fn, {
    includeThrowsAsExitNode: false,
  });
  const postDominatorFrontierCache = new Map<BlockId, Set<BlockId>>();

  function isControlledBlock(id: BlockId): boolean {
    let controlBlocks = postDominatorFrontierCache.get(id);
    if (controlBlocks === undefined) {
      controlBlocks = postDominatorFrontier(fn, postDominators, id);
      postDominatorFrontierCache.set(id, controlBlocks);
    }
    for (const blockId of controlBlocks) {
      const controlBlock = fn.body.blocks.get(blockId)!;
      switch (controlBlock.terminal.kind) {
        case 'if':
        case 'branch': {
          if (isControlVariable(controlBlock.terminal.test)) {
            return true;
          }
          break;
        }
        case 'switch': {
          if (isControlVariable(controlBlock.terminal.test)) {
            return true;
          }
          for (const case_ of controlBlock.terminal.cases) {
            if (case_.test !== null && isControlVariable(case_.test)) {
              return true;
            }
          }
          break;
        }
      }
    }
    return false;
  }

  return isControlledBlock;
}

Domain

Subdomains

Frequently Asked Questions

What does createControlDominators() do?
createControlDominators() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Inference/ControlDominators.ts.
Where is createControlDominators() defined?
createControlDominators() is defined in compiler/packages/babel-plugin-react-compiler/src/Inference/ControlDominators.ts at line 17.
What does createControlDominators() call?
createControlDominators() calls 3 function(s): computePostDominatorTree, get, postDominatorFrontier.
What calls createControlDominators()?
createControlDominators() is called by 2 function(s): getSetStateCall, inferReactivePlaces.

Analyze Your Own Codebase

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

Try Supermodel Free