Prevent double allocation due to Content::sequence (#5084)

This commit is contained in:
Laurenz 2024-10-01 12:47:59 +02:00 committed by GitHub
parent 63e6150ca1
commit d03af848eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -245,16 +245,14 @@ impl Content {
/// Create a new sequence element from multiples elements. /// Create a new sequence element from multiples elements.
pub fn sequence(iter: impl IntoIterator<Item = Self>) -> Self { pub fn sequence(iter: impl IntoIterator<Item = Self>) -> Self {
let mut iter = iter.into_iter(); let vec: Vec<_> = iter.into_iter().collect();
let Some(first) = iter.next() else { return Self::empty() }; if vec.is_empty() {
let Some(second) = iter.next() else { return first }; Self::empty()
SequenceElem::new( } else if vec.len() == 1 {
std::iter::once(first) vec.into_iter().next().unwrap()
.chain(std::iter::once(second)) } else {
.chain(iter) SequenceElem::new(vec).into()
.collect(), }
)
.into()
} }
/// Whether the contained element is of type `T`. /// Whether the contained element is of type `T`.