From 74e1b46ab23fe1f2deb414968340ca35e7882ae0 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 13 May 2024 10:06:27 +1000 Subject: [PATCH] Make `Comments::next` consume a comment. This avoids the need for a clone, fixing a FIXME comment. --- compiler/rustc_ast_pretty/src/pprust/state.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index 9eb552cdcdfae..329c2167d5506 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -55,8 +55,8 @@ impl PpAnn for NoAnn {} pub struct Comments<'a> { sm: &'a SourceMap, - comments: Vec, - current: usize, + // Stored in reverse order so we can consume them by popping. + reversed_comments: Vec, } /// Returns `None` if the first `col` chars of `s` contain a non-whitespace char. @@ -182,19 +182,17 @@ fn gather_comments(sm: &SourceMap, path: FileName, src: String) -> Vec impl<'a> Comments<'a> { pub fn new(sm: &'a SourceMap, filename: FileName, input: String) -> Comments<'a> { - let comments = gather_comments(sm, filename, input); - Comments { sm, comments, current: 0 } + let mut comments = gather_comments(sm, filename, input); + comments.reverse(); + Comments { sm, reversed_comments: comments } } fn peek(&self) -> Option<&Comment> { - self.comments.get(self.current) + self.reversed_comments.last() } - // FIXME: This shouldn't probably clone lmao fn next(&mut self) -> Option { - let cmnt = self.comments.get(self.current).cloned(); - self.current += 1; - cmnt + self.reversed_comments.pop() } fn trailing_comment(