1
Fork 0

improve AttrTokenStream

This commit is contained in:
mojave2 2023-09-04 20:07:28 +08:00
parent abfc6c4438
commit f404990eb0
No known key found for this signature in database

View file

@ -213,14 +213,10 @@ impl AttrTokenStream {
.into_iter() .into_iter()
} }
AttrTokenTree::Attributes(data) => { AttrTokenTree::Attributes(data) => {
let mut outer_attrs = Vec::new(); let idx = data
let mut inner_attrs = Vec::new(); .attrs
for attr in &data.attrs { .partition_point(|attr| matches!(attr.style, crate::AttrStyle::Outer));
match attr.style { let (outer_attrs, inner_attrs) = data.attrs.split_at(idx);
crate::AttrStyle::Outer => outer_attrs.push(attr),
crate::AttrStyle::Inner => inner_attrs.push(attr),
}
}
let mut target_tokens: Vec<_> = data let mut target_tokens: Vec<_> = data
.tokens .tokens
@ -265,10 +261,10 @@ impl AttrTokenStream {
"Failed to find trailing delimited group in: {target_tokens:?}" "Failed to find trailing delimited group in: {target_tokens:?}"
); );
} }
let mut flat: SmallVec<[_; 1]> = SmallVec::new(); let mut flat: SmallVec<[_; 1]> =
SmallVec::with_capacity(target_tokens.len() + outer_attrs.len());
for attr in outer_attrs { for attr in outer_attrs {
// FIXME: Make this more efficient flat.extend(attr.tokens().0.iter().cloned());
flat.extend(attr.tokens().0.clone().iter().cloned());
} }
flat.extend(target_tokens); flat.extend(target_tokens);
flat.into_iter() flat.into_iter()