Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/tt/src/lib.rs')
-rw-r--r--crates/tt/src/lib.rs30
1 files changed, 4 insertions, 26 deletions
diff --git a/crates/tt/src/lib.rs b/crates/tt/src/lib.rs
index 7705ba876e..1cfead54f1 100644
--- a/crates/tt/src/lib.rs
+++ b/crates/tt/src/lib.rs
@@ -243,8 +243,8 @@ impl<S: Copy> TopSubtreeBuilder<S> {
self.token_trees.extend(tt.0.iter().cloned());
}
- pub fn expected_delimiter(&self) -> Option<&Delimiter<S>> {
- self.unclosed_subtree_indices.last().map(|&subtree_idx| {
+ pub fn expected_delimiters(&self) -> impl Iterator<Item = &Delimiter<S>> {
+ self.unclosed_subtree_indices.iter().rev().map(|&subtree_idx| {
let TokenTree::Subtree(subtree) = &self.token_trees[subtree_idx] else {
unreachable!("unclosed token tree is always a subtree")
};
@@ -252,28 +252,6 @@ impl<S: Copy> TopSubtreeBuilder<S> {
})
}
- /// Converts unclosed subtree to a punct of their open delimiter.
- // FIXME: This is incorrect to do, delimiters can never be puncts. See #18244.
- pub fn flatten_unclosed_subtrees(&mut self) {
- for &subtree_idx in &self.unclosed_subtree_indices {
- let TokenTree::Subtree(subtree) = &self.token_trees[subtree_idx] else {
- unreachable!("unclosed token tree is always a subtree")
- };
- let char = match subtree.delimiter.kind {
- DelimiterKind::Parenthesis => '(',
- DelimiterKind::Brace => '{',
- DelimiterKind::Bracket => '[',
- DelimiterKind::Invisible => '$',
- };
- self.token_trees[subtree_idx] = TokenTree::Leaf(Leaf::Punct(Punct {
- char,
- spacing: Spacing::Alone,
- span: subtree.delimiter.open,
- }));
- }
- self.unclosed_subtree_indices.clear();
- }
-
/// Builds, and remove the top subtree if it has only one subtree child.
pub fn build_skip_top_subtree(mut self) -> TopSubtree<S> {
let top_tts = TokenTreesView::new(&self.token_trees[1..]);
@@ -731,9 +709,9 @@ fn print_debug_subtree<S: fmt::Debug>(
};
write!(f, "{align}SUBTREE {delim} ",)?;
- fmt::Debug::fmt(&open, f)?;
+ write!(f, "{:#?}", open)?;
write!(f, " ")?;
- fmt::Debug::fmt(&close, f)?;
+ write!(f, "{:#?}", close)?;
for child in iter {
writeln!(f)?;
print_debug_token(f, level + 1, child)?;