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
Called By
Source
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