Remove tokenstream::Delimited
.
Because it's an extra type layer that doesn't really help; in a couple of places it actively gets in the way, and overall removing it makes the code nicer. It does, however, move `tokenstream::TokenTree` further away from the `TokenTree` in `quote.rs`. More importantly, this change reduces the size of `TokenStream` from 48 bytes to 40 bytes on x86-64, which is enough to slightly reduce instruction counts on numerous benchmarks, the best by 1.5%. Note that `open_tt` and `close_tt` have gone from being methods on `Delimited` to associated methods of `TokenTree`.
This commit is contained in:
parent
b755501043
commit
1fe2c03240
18 changed files with 182 additions and 203 deletions
|
@ -64,11 +64,11 @@ impl FromInternal<(TokenStream, &'_ ParseSess, &'_ mut Vec<Self>)>
|
|||
|
||||
let (tree, joint) = stream.as_tree();
|
||||
let (span, token) = match tree {
|
||||
tokenstream::TokenTree::Delimited(span, delimed) => {
|
||||
let delimiter = Delimiter::from_internal(delimed.delim);
|
||||
tokenstream::TokenTree::Delimited(span, delim, tts) => {
|
||||
let delimiter = Delimiter::from_internal(delim);
|
||||
return TokenTree::Group(Group {
|
||||
delimiter,
|
||||
stream: delimed.tts.into(),
|
||||
stream: tts.into(),
|
||||
span,
|
||||
});
|
||||
}
|
||||
|
@ -232,10 +232,8 @@ impl ToInternal<TokenStream> for TokenTree<Group, Punct, Ident, Literal> {
|
|||
}) => {
|
||||
return tokenstream::TokenTree::Delimited(
|
||||
span,
|
||||
tokenstream::Delimited {
|
||||
delim: delimiter.to_internal(),
|
||||
tts: stream.into(),
|
||||
},
|
||||
delimiter.to_internal(),
|
||||
stream.into(),
|
||||
)
|
||||
.into();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue