dillon1000/react
Commit
Browse files ValidateUnconditionalHooks pass using dominators
See the code comments for more, but the basic idea here is that we use the post dominator tree to find the set of basic blocks which are guaranteed reachable in each function. Those are the only blocks where it is safe to call hooks, and we error for hook calls in any other blocks.
Changed paths14 files
First-parent comparisoncompiler/forget/src/CompilerPipeline.ts ModifiedA compiler/forget/src/HIR/ValidateUnconditionalHooks.ts AddedM compiler/forget/src/HIR/index.ts ModifiedM compiler/forget/src/Optimization/DeadCodeElimination.ts ModifiedM compiler/forget/src/__tests__/fixtures/compiler/dominator.expect.md ModifiedM compiler/forget/src/__tests__/fixtures/compiler/dominator.js ModifiedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-after-early-return.expect.md AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-after-early-return.js AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-for.expect.md AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-for.js AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-if-alternate.expect.md AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-if-alternate.js AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-if-consequent.expect.md AddedA compiler/forget/src/__tests__/fixtures/compiler/error.invalid-hook-if-consequent.js AddedPatch
Files changed
Rendering syntax-highlighted changes…