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

Method update_subclasses

crates/vm/src/types/slot.rs:667–690  ·  view source on GitHub ↗

Recursively update subclasses' slots recurse_down_subclasses

(&self, name: &'static PyStrInterned, ctx: &Context)

Source from the content-addressed store, hash-verified

665 /// Recursively update subclasses' slots
666 /// recurse_down_subclasses
667 fn update_subclasses<const ADD: bool>(&self, name: &'static PyStrInterned, ctx: &Context) {
668 let subclasses = self.subclasses.read();
669 for weak_ref in subclasses.iter() {
670 let Some(subclass) = weak_ref.upgrade() else {
671 continue;
672 };
673 let Some(subclass) = subclass.downcast_ref::<PyType>() else {
674 continue;
675 };
676
677 // Skip if subclass has its own definition for this attribute
678 if subclass.attributes.read().contains_key(name) {
679 continue;
680 }
681
682 // Update subclass's slots
683 for def in find_slot_defs_by_name(name.as_str()) {
684 subclass.update_one_slot::<ADD>(&def.accessor, name, ctx);
685 }
686
687 // Recurse into subclass's subclasses
688 subclass.update_subclasses::<ADD>(name, ctx);
689 }
690 }
691
692 /// Update a single slot
693 fn update_one_slot<const ADD: bool>(

Callers

nothing calls this directly

Calls 6

find_slot_defs_by_nameFunction · 0.85
contains_keyMethod · 0.80
readMethod · 0.45
iterMethod · 0.45
upgradeMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected