mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #2866 from eldpswp99/make-deque-maxlen-readonly
remove improper setter of deque.maxlen
This commit is contained in:
@@ -109,8 +109,6 @@ class TestBasic(unittest.TestCase):
|
||||
d.extendleft(it)
|
||||
self.assertEqual(list(it), [])
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_maxlen_attribute(self):
|
||||
self.assertEqual(deque().maxlen, None)
|
||||
self.assertEqual(deque('abc').maxlen, None)
|
||||
|
||||
@@ -20,7 +20,7 @@ mod _collections {
|
||||
#[derive(Debug)]
|
||||
struct PyDeque {
|
||||
deque: PyRwLock<VecDeque<PyObjectRef>>,
|
||||
maxlen: AtomicCell<Option<usize>>,
|
||||
maxlen: Option<usize>,
|
||||
}
|
||||
|
||||
type PyDequeRef = PyRef<PyDeque>;
|
||||
@@ -76,7 +76,7 @@ mod _collections {
|
||||
) -> PyResult<PyRef<Self>> {
|
||||
let py_deque = PyDeque {
|
||||
deque: PyRwLock::default(),
|
||||
maxlen: AtomicCell::new(maxlen),
|
||||
maxlen,
|
||||
}
|
||||
.into_ref_with_type(vm, cls)?;
|
||||
if let OptionalArg::Present(iter) = iter {
|
||||
@@ -88,7 +88,7 @@ mod _collections {
|
||||
#[pymethod]
|
||||
fn append(&self, obj: PyObjectRef) {
|
||||
let mut deque = self.borrow_deque_mut();
|
||||
if self.maxlen.load() == Some(deque.len()) {
|
||||
if self.maxlen == Some(deque.len()) {
|
||||
deque.pop_front();
|
||||
}
|
||||
deque.push_back(obj);
|
||||
@@ -97,7 +97,7 @@ mod _collections {
|
||||
#[pymethod]
|
||||
fn appendleft(&self, obj: PyObjectRef) {
|
||||
let mut deque = self.borrow_deque_mut();
|
||||
if self.maxlen.load() == Some(deque.len()) {
|
||||
if self.maxlen == Some(deque.len()) {
|
||||
deque.pop_back();
|
||||
}
|
||||
deque.push_front(obj);
|
||||
@@ -112,7 +112,7 @@ mod _collections {
|
||||
fn copy(&self) -> Self {
|
||||
PyDeque {
|
||||
deque: PyRwLock::new(self.borrow_deque().clone()),
|
||||
maxlen: AtomicCell::new(self.maxlen.load()),
|
||||
maxlen: self.maxlen,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ mod _collections {
|
||||
#[pymethod]
|
||||
fn extend(zelf: PyRef<Self>, iter: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
|
||||
// TODO: use length_hint here and for extendleft
|
||||
let max_len = zelf.maxlen.load();
|
||||
let max_len = zelf.maxlen;
|
||||
let mut elements: Vec<PyObjectRef> = vm.extract_elements(&iter)?;
|
||||
if let Some(max_len) = max_len {
|
||||
if max_len > elements.len() {
|
||||
@@ -181,7 +181,7 @@ mod _collections {
|
||||
fn insert(&self, idx: i32, obj: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
|
||||
let mut deque = self.borrow_deque_mut();
|
||||
|
||||
if self.maxlen.load() == Some(deque.len()) {
|
||||
if self.maxlen == Some(deque.len()) {
|
||||
return Err(vm.new_index_error("deque already at its maximum size".to_owned()));
|
||||
}
|
||||
|
||||
@@ -249,12 +249,7 @@ mod _collections {
|
||||
|
||||
#[pyproperty]
|
||||
fn maxlen(&self) -> Option<usize> {
|
||||
self.maxlen.load()
|
||||
}
|
||||
|
||||
#[pyproperty(setter)]
|
||||
fn set_maxlen(&self, maxlen: Option<usize>) {
|
||||
self.maxlen.store(maxlen);
|
||||
self.maxlen
|
||||
}
|
||||
|
||||
#[pymethod(magic)]
|
||||
@@ -292,7 +287,6 @@ mod _collections {
|
||||
.collect::<Result<Vec<_>, _>>()?;
|
||||
let maxlen = zelf
|
||||
.maxlen
|
||||
.load()
|
||||
.map(|maxlen| format!(", maxlen={}", maxlen))
|
||||
.unwrap_or_default();
|
||||
format!("deque([{}]{})", elements.into_iter().format(", "), maxlen)
|
||||
@@ -320,14 +314,13 @@ mod _collections {
|
||||
let mul = sequence::seq_mul(&deque, n);
|
||||
let skipped = self
|
||||
.maxlen
|
||||
.load()
|
||||
.and_then(|maxlen| mul.len().checked_sub(maxlen))
|
||||
.unwrap_or(0);
|
||||
|
||||
let deque = mul.skip(skipped).cloned().collect();
|
||||
PyDeque {
|
||||
deque: PyRwLock::new(deque),
|
||||
maxlen: AtomicCell::new(self.maxlen.load()),
|
||||
maxlen: self.maxlen,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user