Skip to content

Commit

Permalink
[compiler] Flatten scopes based on fallthrough, not scope range
Browse files Browse the repository at this point in the history
Once we create scopes, we should prefer to use the block structure to identify active scope ranges rather than the scope range. They _should_ always be in sync, but ultimately the block structure determine the active range (ie the id of the 'scope' terminal and the terminal's fallthrough block).

ghstack-source-id: 730b6d1cfaf0eb689d71057c78a48045ac4fb11c
Pull Request resolved: facebook#30398
  • Loading branch information
josephsavona committed Jul 24, 2024
1 parent 7c70878 commit ca5fef0
Showing 1 changed file with 3 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
HIRFunction,
LabelTerminal,
PrunedScopeTerminal,
ReactiveScope,
getHookKind,
isUseOperator,
} from '../HIR';
Expand Down Expand Up @@ -39,12 +38,11 @@ import {retainWhere} from '../Utils/utils';
* to ensure the hook call does not inadvertently become conditional.
*/
export function flattenScopesWithHooksOrUseHIR(fn: HIRFunction): void {
const activeScopes: Array<{block: BlockId; scope: ReactiveScope}> = [];
const activeScopes: Array<{block: BlockId; fallthrough: BlockId}> = [];
const prune: Array<BlockId> = [];

for (const [, block] of fn.body.blocks) {
const firstId = block.instructions[0]?.id ?? block.terminal.id;
retainWhere(activeScopes, current => current.scope.range.end > firstId);
retainWhere(activeScopes, current => current.fallthrough !== block.id);

for (const instr of block.instructions) {
const {value} = instr;
Expand All @@ -66,7 +64,7 @@ export function flattenScopesWithHooksOrUseHIR(fn: HIRFunction): void {
if (block.terminal.kind === 'scope') {
activeScopes.push({
block: block.id,
scope: block.terminal.scope,
fallthrough: block.terminal.fallthrough,
});
}
}
Expand Down

0 comments on commit ca5fef0

Please sign in to comment.