Trait starlark::values::Trace

source ·
pub unsafe trait Trace<'v> {
    // Required method
    fn trace(&mut self, tracer: &Tracer<'v>);
}
Expand description

Called by the garbage collection, and must walk over every contained Value in the type. Marked unsafe because if you miss a nested Value, it will probably segfault.

For the most cases #[derive(Trace)] is enough to implement this trait:


#[derive(Trace)]
struct MySet<'v> {
    keys: Vec<Value<'v>>,
}

Required Methods§

source

fn trace(&mut self, tracer: &Tracer<'v>)

Recursively “trace” the value.

Note during trace, Value objects in Self might be already special forward-objects, trying to unpack these values may crash the process.

Generally this function should not do anything except calling trace on the fields.

Implementations on Foreign Types§

source§

impl<'v> Trace<'v> for bool

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for i32

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for u32

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for u64

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for ()

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for usize

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for String

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicBool

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicI8

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicI16

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicI32

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicI64

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicIsize

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicU8

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicU16

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicU32

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicU64

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for AtomicUsize

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v> Trace<'v> for Instant

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v, A, B, C, R> Trace<'v> for fn(_: A, _: B, _: C) -> R

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v, A, B, R> Trace<'v> for fn(_: A, _: B) -> R

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v, A, R> Trace<'v> for fn(_: A) -> R

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v, T1: Trace<'v>> Trace<'v> for (T1,)

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T1: Trace<'v>, T2: Trace<'v>> Trace<'v> for Either<T1, T2>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T1: Trace<'v>, T2: Trace<'v>> Trace<'v> for (T1, T2)

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T1: Trace<'v>, T2: Trace<'v>, T3: Trace<'v>> Trace<'v> for (T1, T2, T3)

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T1: Trace<'v>, T2: Trace<'v>, T3: Trace<'v>, T4: Trace<'v>> Trace<'v> for (T1, T2, T3, T4)

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T> Trace<'v> for PhantomData<T>

source§

fn trace(&mut self, _tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v> + ?Sized> Trace<'v> for Box<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for Option<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for [T]

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for Arc<Mutex<T>>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for Vec<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for OnceCell<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for Cell<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for RefCell<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for UnsafeCell<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

source§

impl<'v, T: Trace<'v>> Trace<'v> for RawTable<T>

source§

fn trace(&mut self, tracer: &Tracer<'v>)

Implementors§

source§

impl<'v> Trace<'v> for DocString

source§

impl<'v> Trace<'v> for Ty

source§

impl<'v> Trace<'v> for Dict<'v>

source§

impl<'v> Trace<'v> for FrozenExportedName

source§

impl<'v> Trace<'v> for MutableExportedName

source§

impl<'v> Trace<'v> for FrozenValue

source§

impl<'v> Trace<'v> for Value<'v>

source§

impl<'v, 'f, T: 'f + ?Sized> Trace<'v> for FrozenRef<'f, T>

source§

impl<'v, 'f, T: StarlarkValue<'f>> Trace<'v> for FrozenValueTyped<'f, T>

source§

impl<'v, K: Trace<'v>, V: Trace<'v>> Trace<'v> for SmallMap<K, V>

source§

impl<'v, K: UnpackValue<'v> + Trace<'v>, V: UnpackValue<'v> + Trace<'v>> Trace<'v> for DictOf<'v, K, V>

source§

impl<'v, T> Trace<'v> for ValueTypedComplex<'v, T>
where T: ComplexValue<'v>, T::Frozen: StarlarkValue<'static>,

source§

impl<'v, T: StarlarkValue<'v>> Trace<'v> for ValueTyped<'v, T>

source§

impl<'v, T: Trace<'v>> Trace<'v> for Hashed<T>

source§

impl<'v, T: Trace<'v>> Trace<'v> for SmallSet<T>

source§

impl<'v, T: StarlarkTypeRepr> Trace<'v> for ValueOfUnchecked<'v, T>

source§

impl<'v, V: Trace<'v>> Trace<'v> for ParametersSpec<V>

source§

impl<'v, V: Trace<'v>> Trace<'v> for TypeCompiled<V>

source§

impl<'v, V: UnpackValue<'v> + Trace<'v>> Trace<'v> for ListOf<'v, V>