1
Fork 0

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:
Nicholas Nethercote 2018-11-30 10:02:04 +11:00
parent b755501043
commit 1fe2c03240
18 changed files with 182 additions and 203 deletions

View file

@ -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();
}