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

Method setdefault_entry

crates/vm/src/dict_inner.rs:550–584  ·  view source on GitHub ↗
(
        &self,
        vm: &VirtualMachine,
        key: &K,
        default: F,
    )

Source from the content-addressed store, hash-verified

548
549 #[allow(dead_code)]
550 pub fn setdefault_entry<K, F>(
551 &self,
552 vm: &VirtualMachine,
553 key: &K,
554 default: F,
555 ) -> PyResult<(PyObjectRef, T)>
556 where
557 K: DictKey + ?Sized,
558 F: FnOnce() -> T,
559 {
560 let hash = key.key_hash(vm)?;
561 let mut default = Some(default);
562 loop {
563 let (index_entry, index_index) = self.lookup(vm, key, hash, None)?;
564 if let Some(index) = index_entry.index() {
565 let inner = self.read();
566 if let Some(entry) = inner.get_entry_checked(index, index_index) {
567 return Ok((entry.key.clone(), entry.value.clone()));
568 }
569 continue;
570 }
571 let mut inner = self.write();
572 if inner.indices.get(index_index) != Some(&index_entry) {
573 continue;
574 }
575 let value = default
576 .take()
577 .expect("default must only be computed on insertion")();
578 let key_obj = key.to_pyobject(vm);
579 let ret = (key_obj.clone(), value.clone());
580 inner.unchecked_push(index_index, hash, key_obj, value, index_entry);
581 self.bump_version();
582 return Ok(ret);
583 }
584 }
585
586 pub fn len(&self) -> usize {
587 self.read().used

Callers

nothing calls this directly

Calls 13

key_hashMethod · 0.80
get_entry_checkedMethod · 0.80
unchecked_pushMethod · 0.80
bump_versionMethod · 0.80
SomeClass · 0.50
lookupMethod · 0.45
indexMethod · 0.45
readMethod · 0.45
cloneMethod · 0.45
writeMethod · 0.45
getMethod · 0.45
takeMethod · 0.45

Tested by

no test coverage detected