about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2021-01-08 18:16:20 -0500
committerAaron Hill <aa1ronham@gmail.com>2021-01-08 18:16:20 -0500
commit7b36408b5f6373647eba37ad1f91c26070298454 (patch)
tree2c8ac31c2ee11e979a9d3f420b09a6d9e2d629de /compiler/rustc_parse/src/parser
parent26438b473883ea607b30288e461187f0fb2fe589 (diff)
downloadrust-7b36408b5f6373647eba37ad1f91c26070298454.tar.gz
rust-7b36408b5f6373647eba37ad1f91c26070298454.zip
Use an empty `TokenCursorFrame` stack when capturing tokens
We will never need to pop  past our starting frame during token
capturing. Using an empty stack allows us to avoid pointless heap
allocations/deallocations.
Diffstat (limited to 'compiler/rustc_parse/src/parser')
-rw-r--r--compiler/rustc_parse/src/parser/mod.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs
index 073e62c41d3..cecf0130cf7 100644
--- a/compiler/rustc_parse/src/parser/mod.rs
+++ b/compiler/rustc_parse/src/parser/mod.rs
@@ -1239,7 +1239,15 @@ impl<'a> Parser<'a> {
         f: impl FnOnce(&mut Self) -> PResult<'a, R>,
     ) -> PResult<'a, (R, Option<LazyTokenStream>)> {
         let start_token = (self.token.clone(), self.token_spacing);
-        let cursor_snapshot = self.token_cursor.clone();
+        let cursor_snapshot = TokenCursor {
+            frame: self.token_cursor.frame.clone(),
+            // We only ever capture tokens within our current frame,
+            // so we can just use an empty frame stack
+            stack: vec![],
+            desugar_doc_comments: self.token_cursor.desugar_doc_comments,
+            num_next_calls: self.token_cursor.num_next_calls,
+            append_unglued_token: self.token_cursor.append_unglued_token.clone(),
+        };
 
         let ret = f(self)?;