]> git.lizzy.rs Git - rust.git/commitdiff
Implement check_stack nonrecursively
authorDavid Tolnay <dtolnay@gmail.com>
Wed, 19 Jan 2022 03:20:33 +0000 (19:20 -0800)
committerDavid Tolnay <dtolnay@gmail.com>
Wed, 19 Jan 2022 03:20:33 +0000 (19:20 -0800)
compiler/rustc_ast_pretty/src/pp.rs

index d32cc4694d3e5cf42d34e1553c55e7d898073d30..dca0515a3303387252d0285100b0ba9e3775c5cc 100644 (file)
@@ -378,27 +378,28 @@ fn advance_left(&mut self) {
         }
     }
 
-    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;
                     }
                 }
             }