dillon1000/react

Commit

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.
Browse files
Changed paths14 files
First-parent comparison
M compiler/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 Added
Patch

Files changed

Rendering syntax-highlighted changes…