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

Method setdefault

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

Source from the content-addressed store, hash-verified

512 }
513
514 pub fn setdefault<K, F>(&self, vm: &VirtualMachine, key: &K, default: F) -> PyResult<T>
515 where
516 K: DictKey + ?Sized,
517 F: FnOnce() -> T,
518 {
519 let hash = key.key_hash(vm)?;
520 let mut default = Some(default);
521 loop {
522 let (index_entry, index_index) = self.lookup(vm, key, hash, None)?;
523 if let Some(index) = index_entry.index() {
524 let inner = self.read();
525 if let Some(entry) = inner.get_entry_checked(index, index_index) {
526 return Ok(entry.value.clone());
527 }
528 continue;
529 }
530 let mut inner = self.write();
531 if inner.indices.get(index_index) != Some(&index_entry) {
532 continue;
533 }
534 let value = default
535 .take()
536 .expect("default must only be computed on insertion")();
537 inner.unchecked_push(
538 index_index,
539 hash,
540 key.to_pyobject(vm),
541 value.clone(),
542 index_entry,
543 );
544 self.bump_version();
545 return Ok(value);
546 }
547 }
548
549 #[allow(dead_code)]
550 pub fn setdefault_entry<K, F>(

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