MCPcopy Index your code
hub / github.com/RustPython/RustPython / get_item

Method get_item

crates/vm/src/stdlib/itertools.rs:967–991  ·  view source on GitHub ↗
(&self, vm: &VirtualMachine, index: usize)

Source from the content-addressed store, hash-verified

965 }
966
967 fn get_item(&self, vm: &VirtualMachine, index: usize) -> PyResult<PyIterReturn> {
968 // Return cached value if available
969 {
970 let Some(values) = self.values.try_lock() else {
971 return Err(vm.new_runtime_error("cannot re-enter the tee iterator"));
972 };
973 if index < values.len() {
974 return Ok(PyIterReturn::Return(values[index].clone()));
975 }
976 }
977 // Prevent concurrent/reentrant calls to iterable.next()
978 if self.running.swap(true, Ordering::Acquire) {
979 return Err(vm.new_runtime_error("cannot re-enter the tee iterator"));
980 }
981 let result = self.iterable.next(vm);
982 self.running.store(false, Ordering::Release);
983 let obj = raise_if_stop!(result?);
984 let Some(mut values) = self.values.try_lock() else {
985 return Err(vm.new_runtime_error("cannot re-enter the tee iterator"));
986 };
987 if values.len() == index {
988 values.push(obj);
989 }
990 Ok(PyIterReturn::Return(values[index].clone()))
991 }
992 }
993
994 #[pyattr]

Callers 8

getitemFunction · 0.45
callMethod · 0.45
create_builtinFunction · 0.45
getattributelistFunction · 0.45
py_newMethod · 0.45
callerFunction · 0.45
warn_if_multi_threadedFunction · 0.45
envobj_to_dictFunction · 0.45

Calls 8

ErrClass · 0.50
try_lockMethod · 0.45
lenMethod · 0.45
cloneMethod · 0.45
swapMethod · 0.45
nextMethod · 0.45
storeMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected