From 4ebecc0f5ede90ac2a34ebed2334fbeb4515db36 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" <69878+youknowone@users.noreply.github.com> Date: Sun, 29 Jun 2025 05:31:21 +0900 Subject: [PATCH] Remove PyTuple::fast_getitem (#5863) --- vm/src/builtins/dict.rs | 10 +++++----- vm/src/builtins/memory.rs | 4 ++-- vm/src/builtins/tuple.rs | 6 ------ vm/src/builtins/union.rs | 4 ++-- vm/src/exceptions.rs | 2 +- vm/src/protocol/object.rs | 6 +++--- vm/src/types/structseq.rs | 2 +- 7 files changed, 14 insertions(+), 20 deletions(-) diff --git a/vm/src/builtins/dict.rs b/vm/src/builtins/dict.rs index 7b7df8184..3d9b8e245 100644 --- a/vm/src/builtins/dict.rs +++ b/vm/src/builtins/dict.rs @@ -1235,13 +1235,13 @@ impl AsSequence for PyDictItems { } let zelf = PyDictItems::sequence_downcast(seq); - let key = needle.fast_getitem(0); - if !zelf.dict.__contains__(key.clone(), vm)? { + let key = &needle[0]; + if !zelf.dict.__contains__(key.to_owned(), vm)? { return Ok(false); } - let value = needle.fast_getitem(1); - let found = zelf.dict().__getitem__(key, vm)?; - vm.identical_or_equal(&found, &value) + let value = &needle[1]; + let found = zelf.dict().__getitem__(key.to_owned(), vm)?; + vm.identical_or_equal(&found, value) }), ..PySequenceMethods::NOT_IMPLEMENTED }); diff --git a/vm/src/builtins/memory.rs b/vm/src/builtins/memory.rs index cce9fb2d3..00cbdbb3b 100644 --- a/vm/src/builtins/memory.rs +++ b/vm/src/builtins/memory.rs @@ -212,7 +212,7 @@ impl PyMemoryView { .unpack(&bytes[pos..pos + self.desc.itemsize], vm) .map(|x| { if x.len() == 1 { - x.fast_getitem(0) + x[0].to_owned() } else { x.into() } @@ -1067,7 +1067,7 @@ fn format_unpack( ) -> PyResult { format_spec.unpack(bytes, vm).map(|x| { if x.len() == 1 { - x.fast_getitem(0) + x[0].to_owned() } else { x.into() } diff --git a/vm/src/builtins/tuple.rs b/vm/src/builtins/tuple.rs index e0d66f7fd..7f3855c52 100644 --- a/vm/src/builtins/tuple.rs +++ b/vm/src/builtins/tuple.rs @@ -108,12 +108,6 @@ impl_from_into_pytuple!(A, B, C, D, E); impl_from_into_pytuple!(A, B, C, D, E, F); impl_from_into_pytuple!(A, B, C, D, E, F, G); -impl PyTuple { - pub(crate) fn fast_getitem(&self, idx: usize) -> PyObjectRef { - self.elements[idx].clone() - } -} - pub type PyTupleRef = PyRef; impl Constructor for PyTuple { diff --git a/vm/src/builtins/union.rs b/vm/src/builtins/union.rs index ea2a47043..996d3f665 100644 --- a/vm/src/builtins/union.rs +++ b/vm/src/builtins/union.rs @@ -194,7 +194,7 @@ fn dedup_and_flatten_args(args: &Py, vm: &VirtualMachine) -> PyTupleRef pub fn make_union(args: &Py, vm: &VirtualMachine) -> PyObjectRef { let args = dedup_and_flatten_args(args, vm); match args.len() { - 1 => args.fast_getitem(0), + 1 => args[0].to_owned(), _ => PyUnion::new(args, vm).to_pyobject(vm), } } @@ -212,7 +212,7 @@ impl PyUnion { if new_args.is_empty() { res = make_union(&new_args, vm); } else { - res = new_args.fast_getitem(0); + res = new_args[0].to_owned(); for arg in new_args.iter().skip(1) { res = vm._or(&res, arg)?; } diff --git a/vm/src/exceptions.rs b/vm/src/exceptions.rs index 70ee543f2..520a09ba3 100644 --- a/vm/src/exceptions.rs +++ b/vm/src/exceptions.rs @@ -1667,7 +1667,7 @@ pub(super) mod types { .enumerate() { if location_tup_len > i { - zelf.set_attr(attr, location_tuple.fast_getitem(i).clone(), vm)?; + zelf.set_attr(attr, location_tuple[i].to_owned(), vm)?; } else { break; } diff --git a/vm/src/protocol/object.rs b/vm/src/protocol/object.rs index 92a3c1111..5e3773e5e 100644 --- a/vm/src/protocol/object.rs +++ b/vm/src/protocol/object.rs @@ -404,14 +404,14 @@ impl PyObject { return Ok(false); } 1 => { - first_item = tuple.fast_getitem(0).clone(); + first_item = tuple[0].clone(); derived = &first_item; continue; } _ => { - if let Some(i) = (0..n).next() { + for i in 0..n { let check = vm.with_recursion("in abstract_issubclass", || { - tuple.fast_getitem(i).abstract_issubclass(cls, vm) + tuple[i].abstract_issubclass(cls, vm) })?; if check { return Ok(true); diff --git a/vm/src/types/structseq.rs b/vm/src/types/structseq.rs index 73e5b37a4..318280f86 100644 --- a/vm/src/types/structseq.rs +++ b/vm/src/types/structseq.rs @@ -97,7 +97,7 @@ pub trait PyStructSequence: StaticType + PyClassImpl + Sized + 'static { class.set_attr( ctx.intern_str(name), ctx.new_readonly_getset(name, class, move |zelf: &PyTuple| { - zelf.fast_getitem(i.into()) + zelf[i as usize].to_owned() }) .into(), );