diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2021-01-08 18:16:20 -0500 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2021-01-08 18:16:20 -0500 |
| commit | 7b36408b5f6373647eba37ad1f91c26070298454 (patch) | |
| tree | 2c8ac31c2ee11e979a9d3f420b09a6d9e2d629de /compiler/rustc_parse/src/parser | |
| parent | 26438b473883ea607b30288e461187f0fb2fe589 (diff) | |
| download | rust-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.rs | 10 |
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)?; |
