|
1 | 1 | use std::fmt;
|
2 | 2 | use std::mem::size_of;
|
3 |
| -use std::ops::Range; |
| 3 | +use std::ops::{DerefMut, Range}; |
4 | 4 | use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard};
|
5 | 5 |
|
6 | 6 | use crossbeam_utils::atomic::AtomicCell;
|
@@ -114,7 +114,7 @@ impl PyList {
|
114 | 114 | vm: &VirtualMachine,
|
115 | 115 | ) -> PyResult<objbyteinner::PyByteInner> {
|
116 | 116 | let mut elements = Vec::<u8>::with_capacity(self.borrow_elements().len());
|
117 |
| - for elem in self.borrow_elements().clone().iter() { |
| 117 | + for elem in self.borrow_elements().iter() { |
118 | 118 | match PyIntRef::try_from_object(vm, elem.clone()) {
|
119 | 119 | Ok(result) => match result.as_bigint().to_u8() {
|
120 | 120 | Some(result) => elements.push(result),
|
@@ -498,10 +498,10 @@ impl PyList {
|
498 | 498 |
|
499 | 499 | #[pymethod(name = "__imul__")]
|
500 | 500 | fn imul(zelf: PyRef<Self>, counter: isize) -> PyRef<Self> {
|
501 |
| - let elements = zelf.borrow_elements_mut(); |
502 |
| - let new_elements: Vec<PyObjectRef> = |
| 501 | + let mut elements = zelf.borrow_elements_mut(); |
| 502 | + let mut new_elements: Vec<PyObjectRef> = |
503 | 503 | sequence::seq_mul(&elements, counter).cloned().collect();
|
504 |
| - PyList::_replace(elements, new_elements); |
| 504 | + std::mem::swap(elements.deref_mut(), &mut new_elements); |
505 | 505 | zelf.clone()
|
506 | 506 | }
|
507 | 507 |
|
@@ -777,26 +777,17 @@ impl PyList {
|
777 | 777 | // replace list contents with [] for duration of sort.
|
778 | 778 | // this prevents keyfunc from messing with the list and makes it easy to
|
779 | 779 | // check if it tries to append elements to it.
|
780 |
| - let mut elements = PyList::_replace(self.borrow_elements_mut(), vec![]); |
| 780 | + let mut elements = std::mem::take(self.borrow_elements_mut().deref_mut()); |
781 | 781 | do_sort(vm, &mut elements, options.key, options.reverse)?;
|
782 |
| - let temp_elements = PyList::_replace(self.borrow_elements_mut(), elements); |
| 782 | + std::mem::swap(self.borrow_elements_mut().deref_mut(), &mut elements); |
783 | 783 |
|
784 |
| - if !temp_elements.is_empty() { |
| 784 | + if !elements.is_empty() { |
785 | 785 | return Err(vm.new_value_error("list modified during sort".to_owned()));
|
786 | 786 | }
|
787 | 787 |
|
788 | 788 | Ok(())
|
789 | 789 | }
|
790 | 790 |
|
791 |
| - fn _replace( |
792 |
| - mut elements: RwLockWriteGuard<'_, Vec<PyObjectRef>>, |
793 |
| - mut new: Vec<PyObjectRef>, |
794 |
| - ) -> Vec<PyObjectRef> { |
795 |
| - let old = elements.drain(..).collect(); |
796 |
| - elements.append(&mut new); |
797 |
| - old |
798 |
| - } |
799 |
| - |
800 | 791 | #[pyslot]
|
801 | 792 | fn tp_new(
|
802 | 793 | cls: PyClassRef,
|
|
0 commit comments