From a37d272892172dfe598d9df182fa908d74359c6e Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 18 Jan 2022 19:20:33 -0800 Subject: Implement check_stack nonrecursively --- compiler/rustc_ast_pretty/src/pp.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_ast_pretty/src/pp.rs b/compiler/rustc_ast_pretty/src/pp.rs index d32cc4694d3..dca0515a330 100644 --- a/compiler/rustc_ast_pretty/src/pp.rs +++ b/compiler/rustc_ast_pretty/src/pp.rs @@ -378,27 +378,28 @@ impl Printer { } } - fn check_stack(&mut self, k: usize) { - if let Some(&x) = self.scan_stack.front() { + fn check_stack(&mut self, mut k: usize) { + while let Some(&x) = self.scan_stack.front() { match self.buf[x].token { Token::Begin(_) => { - if k > 0 { - self.scan_stack.pop_front().unwrap(); - self.buf[x].size += self.right_total; - self.check_stack(k - 1); + if k == 0 { + break; } + self.scan_stack.pop_front().unwrap(); + self.buf[x].size += self.right_total; + k -= 1; } Token::End => { // paper says + not =, but that makes no sense. self.scan_stack.pop_front().unwrap(); self.buf[x].size = 1; - self.check_stack(k + 1); + k += 1; } _ => { self.scan_stack.pop_front().unwrap(); self.buf[x].size += self.right_total; - if k > 0 { - self.check_stack(k); + if k == 0 { + break; } } } -- cgit v1.2.1