8000 Merge pull request #1655 from youknowone/refactor-tuple · RustPython/RustPython@2473f8a · GitHub
[go: up one dir, main page]

Skip to content

Commit 2473f8a

Browse files
authored
Merge pull request #1655 from youknowone/refactor-tuple
Refactor list, tuple and collections.deque
2 parents e4636b4 + 5e2035f commit 2473f8a

File tree

17 files changed

+518
-511
lines changed

17 files changed

+518
-511
lines changed

src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ fn main() {
5252
if let Err(err) = res {
5353
if objtype::isinstance(&err, &vm.ctx.exceptions.system_exit) {
5454
let args = err.args();
55-
match args.elements.len() {
55+
match args.as_slice().len() {
5656
0 => return,
57-
1 => match_class!(match args.elements[0].clone() {
57+
1 => match_class!(match args.as_slice()[0].clone() {
5858
i @ PyInt => {
5959
use num_traits::cast::ToPrimitive;
6060
process::exit(i.as_bigint().to_i32().unwrap());

tests/snippets/stdlib_collections.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,10 @@
3737
assert deque([1, 2, 3, 4], maxlen=2) == deque([3, 4])
3838

3939
assert len(deque([1, 2, 3, 4])) == 4
40+
41+
assert d >= d
42+
assert not (d > d)
43+
assert d <= d
44+
assert not (d < d)
45+
assert d == d
46+
assert not (d != d)

vm/src/exceptions.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,20 +275,20 @@ fn exception_args_as_string(
275275
varargs: PyTupleRef,
276276
str_single: bool,
277277
) -> Vec<PyStringRef> {
278-
match varargs.elements.len() {
278+
let varargs = varargs.as_slice();
279+
match varargs.len() {
279280
0 => vec![],
280281
1 => {
281282
let args0_repr = if str_single {
282-
vm.to_str(&varargs.elements[0])
283+
vm.to_str(&varargs[0])
283284
.unwrap_or_else(|_| PyString::from("<element str() failed>").into_ref(vm))
284285
} else {
285-
vm.to_repr(&varargs.elements[0])
286+
vm.to_repr(&varargs[0])
286287
.unwrap_or_else(|_| PyString::from("<element repr() failed>").into_ref(vm))
287288
};
288289
vec![args0_repr]
289290
}
290291
_ => varargs
291-
.elements
292292
.iter()
293293
.map(|vararg| {
294294
vm.to_repr(vararg)
@@ -362,8 +362,8 @@ impl ExceptionCtor {
362362
(Self::Class(cls), _) => {
363363
let args = match_class!(match value {
364364
PyNone => vec![],
365-
tup @ PyTuple => tup.elements.clone(),
366-
exc @ PyBaseException => exc.args().elements.clone(),
365+
tup @ PyTuple => tup.as_slice().to_vec(),
366+
exc @ PyBaseException => exc.args().as_slice().to_vec(),
367367
obj => vec![obj],
368368
});
369369
invoke(cls, args, vm)
@@ -609,7 +609,7 @@ fn make_arg_getter(idx: usize) -> impl Fn(PyBaseExceptionRef, &VirtualMachine) -
609609
move |exc, vm| {
610610
exc.args
611611
.borrow()
612-
.elements
612+
.as_slice()
613613
.get(idx)
614614
.cloned()
615615
.unwrap_or_else(|| vm.get_none())

vm/src/function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ pub fn single_or_tuple_any<T: PyValue, F: Fn(PyRef<T>) -> PyResult<bool>>(
583583
match_class!(match obj {
584584
obj @ T => (self.predicate)(obj),
585585
tuple @ PyTuple => {
586-
for obj in tuple.elements.iter() {
586+
for obj in tuple.as_slice().iter() {
587587
if self.check(obj.clone())? {
588588
return Ok(true);
589589
}

vm/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ pub mod py_serde;
6464
mod pyhash;
6565
pub mod pyobject;
6666
pub mod scope;
67+
mod sequence;
6768
pub mod stdlib;
6869
mod sysmodule;
6970
pub mod types;

vm/src/obj/objbyteinner.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use super::objint::{self, PyInt, PyIntRef};
1111
use super::objlist::PyList;
1212
use super::objmemory::PyMemoryView;
1313
use super::objnone::PyNoneRef;
14-
use super::objsequence::{self, is_valid_slice_arg, PySliceableSequence};
14+
use super::objsequence::{is_valid_slice_arg, PySliceableSequence};
1515
use super::objslice::PySliceRef;
1616
use super::objstr::{self, PyString, PyStringRef};
1717
use super::objtuple::PyTupleRef;
@@ -859,8 +859,8 @@ impl PyByteInner {
859859
Either::A(byte) => byte.elements,
860860
Either::B(tuple) => {
861861
let mut flatten = vec![];
862-
for v in objsequence::get_elements_tuple(tuple.as_object()).to_vec() {
863-
flatten.extend(PyByteInner::try_from_object(vm, v)?.elements)
862+
for v in tuple.as_slice() {
863+
flatten.extend(PyByteInner::try_from_object(vm, v.clone())?.elements)
864864
}
865865
flatten
866866
}

vm/src/obj/objiter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub fn new_stop_iteration(vm: &VirtualMachine) -> PyBaseExceptionRef {
7676
pub fn stop_iter_value(vm: &VirtualMachine, exc: &PyBaseExceptionRef) -> PyResult {
7777
let args = exc.args();
7878
let val = args
79-
.elements
79+
.as_slice()
8080
.first()
8181
.cloned()
8282
.unwrap_or_else(|| vm.get_none());

0 commit comments

Comments
 (0)
0