Files
react/compiler/packages/babel-plugin-react-compiler/src/HIR/ComputeUnconditionalBlocks.ts
T
Jan Kassens fd2b3e13d3 Compiler: unfork prettier config (#30205)
Updates the prettier config to format all `.ts` and `.tsx` files in the
repo using the existing defaults and removing overrides.

The first commit in this PR contains the config changes, the second is
just the result of running `yarn prettier-all`.
2024-07-18 17:00:24 -04:00

35 lines
1.2 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import {BlockId, HIRFunction, computePostDominatorTree} from '.';
import {CompilerError} from '..';
export function computeUnconditionalBlocks(fn: HIRFunction): Set<BlockId> {
// Construct the set of blocks that is always reachable from the entry block.
const unconditionalBlocks = new Set<BlockId>();
const dominators = computePostDominatorTree(fn, {
/*
* Hooks must only be in a consistent order for executions that return normally,
* so we opt-in to viewing throw as a non-exit node.
*/
includeThrowsAsExitNode: false,
});
const exit = dominators.exit;
let current: BlockId | null = fn.body.entry;
while (current !== null && current !== exit) {
CompilerError.invariant(!unconditionalBlocks.has(current), {
reason:
'Internal error: non-terminating loop in ComputeUnconditionalBlocks',
loc: null,
suggestions: null,
});
unconditionalBlocks.add(current);
current = dominators.get(current);
}
return unconditionalBlocks;
}