@@ -202,53 +202,18 @@ impl<T> TypedArena<T> {
202202 #[ inline]
203203 pub fn alloc_from_iter < I : IntoIterator < Item = T > > ( & self , iter : I ) -> & mut [ T ] {
204204 assert ! ( mem:: size_of:: <T >( ) != 0 ) ;
205- let mut iter = iter. into_iter ( ) ;
206- let size_hint = iter. size_hint ( ) ;
207-
208- match size_hint {
209- ( min, Some ( max) ) if min == max => {
210- // We know the exact number of elements the iterator will produce here
211- let len = min;
212-
213- if len == 0 {
214- return & mut [ ] ;
215- }
216-
217- self . ensure_capacity ( len) ;
218-
219- let slice = self . ptr . get ( ) ;
220-
221- unsafe {
222- let mut ptr = self . ptr . get ( ) ;
223- for _ in 0 ..len {
224- // Write into uninitialized memory.
225- ptr:: write ( ptr, iter. next ( ) . unwrap ( ) ) ;
226- // Advance the pointer.
227- ptr = ptr. offset ( 1 ) ;
228- // Update the pointer per iteration so if `iter.next()` panics
229- // we destroy the correct amount
230- self . ptr . set ( ptr) ;
231- }
232- slice:: from_raw_parts_mut ( slice, len)
233- }
234- }
235- _ => {
236- cold_path ( move || -> & mut [ T ] {
237- let mut vec: SmallVec < [ _ ; 8 ] > = iter. collect ( ) ;
238- if vec. is_empty ( ) {
239- return & mut [ ] ;
240- }
241- // Move the content to the arena by copying it and then forgetting
242- // the content of the SmallVec
243- unsafe {
244- let len = vec. len ( ) ;
245- let start_ptr = self . alloc_raw_slice ( len) ;
246- vec. as_ptr ( ) . copy_to_nonoverlapping ( start_ptr, len) ;
247- vec. set_len ( 0 ) ;
248- slice:: from_raw_parts_mut ( start_ptr, len)
249- }
250- } )
251- }
205+ let mut vec: SmallVec < [ _ ; 8 ] > = iter. into_iter ( ) . collect ( ) ;
206+ if vec. is_empty ( ) {
207+ return & mut [ ] ;
208+ }
209+ // Move the content to the arena by copying it and then forgetting
210+ // the content of the SmallVec
211+ unsafe {
212+ let len = vec. len ( ) ;
213+ let start_ptr = self . alloc_raw_slice ( len) ;
214+ vec. as_ptr ( ) . copy_to_nonoverlapping ( start_ptr, len) ;
215+ vec. set_len ( 0 ) ;
216+ slice:: from_raw_parts_mut ( start_ptr, len)
252217 }
253218 }
254219
0 commit comments