From 0adea712ef9d3f2fbfe276dc93b67dae55022940 Mon Sep 17 00:00:00 2001 From: Douglas Creager Date: Fri, 24 Jan 2025 17:33:02 -0500 Subject: [PATCH] Remove DeclarationIdIterator and friends --- .../semantic_index/use_def/symbol_state.rs | 45 +++++-------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/crates/red_knot_python_semantic/src/semantic_index/use_def/symbol_state.rs b/crates/red_knot_python_semantic/src/semantic_index/use_def/symbol_state.rs index 7972e66ae2..c990e1d644 100644 --- a/crates/red_knot_python_semantic/src/semantic_index/use_def/symbol_state.rs +++ b/crates/red_knot_python_semantic/src/semantic_index/use_def/symbol_state.rs @@ -48,7 +48,7 @@ use itertools::{EitherOrBoth, Itertools}; use ruff_index::newtype_index; use smallvec::SmallVec; -use crate::semantic_index::use_def::bitset::{BitSet, BitSetIterator}; +use crate::semantic_index::use_def::bitset::BitSet; use crate::semantic_index::use_def::VisibilityConstraints; /// A newtype-index for a definition in a particular scope. @@ -79,7 +79,6 @@ const INLINE_DECLARATION_BLOCKS: usize = 3; /// A [`BitSet`] of [`ScopedDefinitionId`], representing live declarations of a symbol in a scope. type Declarations = BitSet; -type DeclarationsIterator<'a> = BitSetIterator<'a, INLINE_DECLARATION_BLOCKS>; /// Can reference this * 64 total constraints inline; more will fall back to the heap. const INLINE_CONSTRAINT_BLOCKS: usize = 2; @@ -117,9 +116,6 @@ type VisibilityConstraintPerDeclaration = SmallVec; -/// Iterator over the visibility constraints for all live bindings/declarations. -type VisibilityConstraintsIterator<'a> = std::slice::Iter<'a, ScopedVisibilityConstraintId>; - /// Live declarations for a single symbol at some point in control flow, with their /// corresponding visibility constraints. #[derive(Clone, Debug, Default, PartialEq, Eq)] @@ -169,11 +165,15 @@ impl SymbolDeclarations { } /// Return an iterator over live declarations for this symbol. - pub(super) fn iter(&self) -> DeclarationIdIterator { - DeclarationIdIterator { - declarations: self.live_declarations.iter(), - visibility_constraints: self.visibility_constraints.iter(), - } + pub(super) fn iter(&self) -> impl Iterator + '_ { + (self.live_declarations.iter()) + .zip(self.visibility_constraints.iter()) + .map( + |(declaration, &visibility_constraint)| DeclarationIdWithConstraint { + definition: ScopedDefinitionId::from_u32(declaration), + visibility_constraint, + }, + ) } fn merge(&mut self, b: Self, visibility_constraints: &mut VisibilityConstraints) { @@ -439,31 +439,6 @@ pub(super) struct DeclarationIdWithConstraint { pub(super) visibility_constraint: ScopedVisibilityConstraintId, } -pub(super) struct DeclarationIdIterator<'map> { - pub(crate) declarations: DeclarationsIterator<'map>, - pub(crate) visibility_constraints: VisibilityConstraintsIterator<'map>, -} - -impl Iterator for DeclarationIdIterator<'_> { - type Item = DeclarationIdWithConstraint; - - fn next(&mut self) -> Option { - match (self.declarations.next(), self.visibility_constraints.next()) { - (None, None) => None, - (Some(declaration), Some(&visibility_constraint)) => { - Some(DeclarationIdWithConstraint { - definition: ScopedDefinitionId::from_u32(declaration), - visibility_constraint, - }) - } - // SAFETY: see above. - _ => unreachable!("declarations and visibility_constraints length mismatch"), - } - } -} - -impl std::iter::FusedIterator for DeclarationIdIterator<'_> {} - #[cfg(test)] mod tests { use super::*;