/
githubmr
/
facebook-react
Обзор
Документация
Войти
/
githubmr
/
facebook-react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
compiler/packages/babel-plugin-react-compiler/src/HIR/AssertTerminalBlocksExist.ts
66 строк
2 KB
lauren
[compiler] Migrate CompilerError.invariant to new CompilerDiagnostic infra (#34403)
06 сен 2025, 19:58
Не верифицирован
06 сен 2025, 19:58
474f258
Код
Авторство
О чём код?
/** * 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 {CompilerError} from '../CompilerError'; import {GeneratedSource, HIRFunction} from './HIR'; import {printTerminal} from './PrintHIR'; import {eachTerminalSuccessor, mapTerminalSuccessors} from './visitors'; export function assertTerminalSuccessorsExist(fn: HIRFunction): void { for (const [, block] of fn.body.blocks) { mapTerminalSuccessors(block.terminal, successor => { CompilerError.invariant(fn.body.blocks.has(successor), { reason: `Terminal successor references unknown block`, description: `Block bb${successor} does not exist for terminal '${printTerminal( block.terminal, )}'`, details: [ { kind: 'error', loc: (block.terminal as any).loc ?? GeneratedSource, message: null, }, ], suggestions: null, }); return successor; }); } } export function assertTerminalPredsExist(fn: HIRFunction): void { for (const [, block] of fn.body.blocks) { for (const pred of block.preds) { const predBlock = fn.body.blocks.get(pred); CompilerError.invariant(predBlock != null, { reason: 'Expected predecessor block to exist', description: `Block ${block.id} references non-existent ${pred}`, details: [ { kind: 'error', loc: GeneratedSource, message: null, }, ], }); CompilerError.invariant( [...eachTerminalSuccessor(predBlock.terminal)].includes(block.id), { reason: 'Terminal successor does not reference correct predecessor', description: `Block bb${block.id} has bb${predBlock.id} as a predecessor, but bb${predBlock.id}'s successors do not include bb${block.id}`, details: [ { kind: 'error', loc: GeneratedSource, message: null, }, ], }, ); } } }