mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Add maxlen as a named arg
This commit is contained in:
2 files changed
+17
-9
No files matched your search
@@ -31,3 +31,7 @@ assert d == deque([], 4)
|
||||
assert deque([1, 2, 3]) * 2 == deque([1, 2, 3, 1, 2, 3])
|
||||
|
||||
assert deque([1, 2, 3], 4) * 2 == deque([3, 1, 2, 3])
|
||||
|
||||
assert deque(maxlen=3) == deque()
|
||||
|
||||
assert deque([1, 2, 3, 4], maxlen=2) == deque([3, 4])
|
||||
@@ -20,25 +20,29 @@ impl PyValue for PyDeque {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
struct PyDequeOptions {
|
||||
#[pyarg(positional_or_keyword, default = "None")]
|
||||
maxlen: Option<usize>,
|
||||
}
|
||||
|
||||
#[pyimpl]
|
||||
impl PyDeque {
|
||||
#[pymethod(name = "__new__")]
|
||||
fn new(
|
||||
cls: PyClassRef,
|
||||
iter: OptionalArg<PyIterable>,
|
||||
maxlen: OptionalArg<Option<usize>>,
|
||||
PyDequeOptions { maxlen }: PyDequeOptions,
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<PyRef<Self>> {
|
||||
let deque = if let OptionalArg::Present(iter) = iter {
|
||||
iter.iter(vm)?.collect::<Result<_, _>>()?
|
||||
} else {
|
||||
VecDeque::new()
|
||||
let py_deque = PyDeque {
|
||||
deque: RefCell::default(),
|
||||
maxlen: maxlen.into(),
|
||||
};
|
||||
PyDeque {
|
||||
deque: RefCell::new(deque),
|
||||
maxlen: maxlen.into_option().and_then(|x| x).into(),
|
||||
if let OptionalArg::Present(iter) = iter {
|
||||
py_deque.extend(iter, vm)?;
|
||||
}
|
||||
.into_ref_with_type(vm, cls)
|
||||
py_deque.into_ref_with_type(vm, cls)
|
||||
}
|
||||
|
||||
#[pymethod]
|
||||
|
||||
Reference in new issue
Block a user