//! Minimal GC tracing helpers (skeleton) //! //! Downcast-based child edge enumeration for builtin containers. //! This is a non-invasive helper to support diagnostics and future collectors. use std::sync::Arc; use crate::box_trait::NyashBox; /// Visit child boxes of a given object and invoke `visit(child)` for each. /// This function recognizes builtin containers (ArrayBox/MapBox) and is a no-op otherwise. pub fn trace_children(obj: &dyn NyashBox, visit: &mut dyn FnMut(Arc)) { // ArrayBox if let Some(arr) = obj.as_any().downcast_ref::() { if let Ok(items) = arr.items.read() { for it in items.iter() { // Convert Box to Arc let arc: Arc = Arc::from(it.clone_box()); visit(arc); } } return; } // MapBox if let Some(map) = obj.as_any().downcast_ref::() { if let Ok(data) = map.get_data().read() { for (_k, v) in data.iter() { let arc: Arc = Arc::from(v.clone_box()); visit(arc); } } return; } }