Try to do less work during capture discovery (#5560)

This commit is contained in:
JT 2022-05-17 09:05:26 +12:00 committed by GitHub
parent a22d70718f
commit 5d40fc2726
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4924,15 +4924,18 @@ pub fn discover_captures_in_expr(
output.extend(&result); output.extend(&result);
} }
Expr::Block(block_id) => { Expr::Block(block_id) => {
let block = working_set.get_block(*block_id); if !seen_blocks.contains_key(block_id) {
let results = { let block = working_set.get_block(*block_id);
let mut seen = vec![]; seen_blocks.insert(*block_id, vec![]);
discover_captures_in_block(working_set, block, &mut seen, seen_blocks) let results = {
}; let mut seen = vec![];
seen_blocks.insert(*block_id, results.clone()); discover_captures_in_block(working_set, block, &mut seen, seen_blocks)
for var_id in results.into_iter() { };
if !seen.contains(&var_id) { seen_blocks.insert(*block_id, results.clone());
output.push(var_id) for var_id in results.into_iter() {
if !seen.contains(&var_id) {
output.push(var_id)
}
} }
} }
} }
@ -5073,15 +5076,18 @@ pub fn discover_captures_in_expr(
} }
} }
Expr::RowCondition(block_id) | Expr::Subexpression(block_id) => { Expr::RowCondition(block_id) | Expr::Subexpression(block_id) => {
let block = working_set.get_block(*block_id); if !seen_blocks.contains_key(block_id) {
let results = { let block = working_set.get_block(*block_id);
let mut seen = vec![]; seen_blocks.insert(*block_id, vec![]);
discover_captures_in_block(working_set, block, &mut seen, seen_blocks) let results = {
}; let mut seen = vec![];
seen_blocks.insert(*block_id, results.clone()); discover_captures_in_block(working_set, block, &mut seen, seen_blocks)
for var_id in results.into_iter() { };
if !seen.contains(&var_id) { seen_blocks.insert(*block_id, results.clone());
output.push(var_id) for var_id in results.into_iter() {
if !seen.contains(&var_id) {
output.push(var_id)
}
} }
} }
} }