Skip to main content

Trace

Trait Trace 

Source
pub trait Trace {
    // Required method
    fn trace(&self, m: &mut Marker);

    // Provided method
    fn type_name(&self) -> &'static str { ... }
}
Expand description

Every GC-rooted type implements Trace to expose its Gc<_> fields.

The trace method visits every reachable Gc<_> and calls Marker::mark on it. For container fields (Vec<LuaValue>, etc.) call field.trace(m) to delegate.

§Mechanical pattern

impl Trace for LuaTable {
    fn trace(&self, m: &mut Marker) {
        for v in self.array.iter() { v.trace(m); }
        if let Some(mt) = self.metatable { m.mark(mt); }
    }
}

Required Methods§

Source

fn trace(&self, m: &mut Marker)

Provided Methods§

Source

fn type_name(&self) -> &'static str

Concrete Rust type name for diagnostic/testC telemetry (Heap::type_name_count). Collector behavior must not branch on this. The default covers container blanket impls, which are never GC-boxed directly; concrete runtime types override it with std::any::type_name::<Self>().

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl Trace for String

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for bool

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for char

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for f32

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for f64

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for i8

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for i16

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for i32

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for i64

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for i128

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for isize

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for str

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for u8

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for u16

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for u32

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for u64

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for u128

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl Trace for usize

Source§

fn trace(&self, _m: &mut Marker)

Source§

impl<T: Trace + ?Sized> Trace for Box<T>

Source§

fn trace(&self, m: &mut Marker)

Source§

impl<T: Trace + ?Sized> Trace for Rc<T>

Source§

fn trace(&self, m: &mut Marker)

Source§

impl<T: Trace> Trace for Option<T>

Source§

fn trace(&self, m: &mut Marker)

Source§

impl<T: Trace> Trace for RefCell<T>

Source§

fn trace(&self, m: &mut Marker)

Source§

impl<T: Trace> Trace for Vec<T>

Source§

fn trace(&self, m: &mut Marker)

Source§

impl<T> Trace for PhantomData<T>

Source§

fn trace(&self, _m: &mut Marker)

Implementors§

Source§

impl<T: Trace + 'static> Trace for Gc<T>

Gc<T> is itself traceable: marking it forwards to the contained T.