From: Ian Jackson Date: Fri, 15 Nov 2024 16:12:52 +0000 (+0000) Subject: move free to pop_front X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=7efe094662e131b106a5292d25adfb325a66cc46;p=manually-boxed move free to pop_front --- diff --git a/src/test/demo.rs b/src/test/demo.rs index 8185e41..f0b05c5 100644 --- a/src/test/demo.rs +++ b/src/test/demo.rs @@ -82,12 +82,14 @@ impl List { } pub fn pop_front(&mut self) -> Option { - let tok = self.noalias.token_mut(); - Self::pop_front_inner( - tok, + let mut tok = self.noalias.token_mut(); + let deleted = Self::pop_front_inner( + tok.as_mut(), &mut self.head, &mut self.tail, - ) + )?; + let deleted = unsafe { deleted.free_heap_return(&mut tok) }; + Some(deleted.data) } pub fn head_and_tail_mut(&mut self) -> HeadAndTail<&mut T> { @@ -131,13 +133,11 @@ impl List { }) } - // We wouldn't do this, since it's daft, but - // it lets us demonstrate passing a token. fn pop_front_inner<'a>( mut tok: TokenMut<'a>, head: &mut Option>, tail: &mut Option>, - ) -> Option { + ) -> Option> { let deleting = (*head)?; let new_head = deleting.borrow(&tok).next; *head = new_head; @@ -146,8 +146,7 @@ impl List { } else { *tail = None; } - let deleted = unsafe { deleting.free_heap_return(&mut tok) }; - Some(deleted.data) + Some(deleting) } fn iter_ptrs<'i, I: 'i>(