| 218 | |
| 219 | unsafe impl crate::object::Traverse for PyType { |
| 220 | fn traverse(&self, tracer_fn: &mut crate::object::TraverseFn<'_>) { |
| 221 | self.base.traverse(tracer_fn); |
| 222 | self.bases.traverse(tracer_fn); |
| 223 | self.mro.traverse(tracer_fn); |
| 224 | self.subclasses.traverse(tracer_fn); |
| 225 | self.attributes |
| 226 | .read_recursive() |
| 227 | .iter() |
| 228 | .map(|(_, v)| v.traverse(tracer_fn)) |
| 229 | .count(); |
| 230 | if let Some(ext) = self.heaptype_ext.as_ref() { |
| 231 | ext.specialization_cache.traverse(tracer_fn); |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | /// type_clear: break reference cycles in type objects |
| 236 | fn clear(&mut self, out: &mut Vec<crate::PyObjectRef>) { |