Improve doc comment desugaring.
Sometimes the parser needs to desugar a doc comment into `#[doc = r"foo"]`. Currently it does this in a hacky way: by pushing a "fake" new frame (one without a delimiter) onto the `TokenCursor` stack. This commit changes things so that the token stream itself is modified in place. The nice thing about this is that it means `TokenCursorFrame::delim_sp` is now only `None` for the outermost frame.
This commit is contained in:
parent
97872b792c
commit
af1d16e82d
2 changed files with 30 additions and 27 deletions
|
@ -614,6 +614,15 @@ impl Cursor {
|
|||
pub fn look_ahead(&self, n: usize) -> Option<&TokenTree> {
|
||||
self.stream.0.get(self.index + n)
|
||||
}
|
||||
|
||||
// Replace the previously obtained token tree with `tts`, and rewind to
|
||||
// just before them.
|
||||
pub fn replace_prev_and_rewind(&mut self, tts: Vec<TokenTree>) {
|
||||
assert!(self.index > 0);
|
||||
self.index -= 1;
|
||||
let stream = Lrc::make_mut(&mut self.stream.0);
|
||||
stream.splice(self.index..self.index + 1, tts);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Encodable, Decodable, HashStable_Generic)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue