Trait Traverse

Source
pub unsafe trait Traverse {
    // Required method
    fn traverse(&self, traverse_fn: &mut TraverseFn<'_>);
}
Expand description

Type that need traverse it’s children should impl Traverse(Not MaybeTraverse)

§Safety

Please carefully read [traverse()] and follow the guideline

Required Methods§

Source

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

impl traverse() with caution! Following those guideline so traverse doesn’t cause memory error!:

  • Make sure that every owned object(Every PyObjectRef/PyRef) is called with traverse_fn at most once. If some field is not called, the worst results is just memory leak, but if some field is called repeatedly, panic and deadlock can happen.

  • DO NOT clone a PyObjectRef or Pyef<T> in traverse()

Implementations on Foreign Types§

Source§

impl Traverse for ()

Source§

fn traverse(&self, _traverse_fn: &mut TraverseFn<'_>)

Source§

impl Traverse for IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>

Source§

fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)

Source§

impl Traverse for IndexMap<String, PyObjectRef>

Source§

fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse> Traverse for (A,)

Source§

fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse> Traverse for (A, B)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse> Traverse for (A, B, C)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse> Traverse for (A, B, C, D)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse> Traverse for (A, B, C, D, E)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse> Traverse for (A, B, C, D, E, F)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse> Traverse for (A, B, C, D, E, F, G)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse> Traverse for (A, B, C, D, E, F, G, H)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse> Traverse for (A, B, C, D, E, F, G, H, I)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse, L: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T> Traverse for [T]
where T: Traverse,

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T> Traverse for Box<[T]>
where T: Traverse,

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T> Traverse for Vec<T>
where T: Traverse,

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T: Traverse> Traverse for Option<T>

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T: Traverse> Traverse for PyMutex<T>

Safety: We can’t hold lock during traverse it’s child because it may cause deadlock. TODO(discord9): check if this is thread-safe to do (Outside of gc phase, only incref/decref will call trace, and refcnt is atomic, so it should be fine?)

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Source§

impl<T: Traverse> Traverse for PyRwLock<T>

Source§

fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)

Implementors§

Source§

impl Traverse for PyBaseException

Source§

impl Traverse for PyBoundMethod

Source§

impl Traverse for PyCallableIterator

Source§

impl Traverse for PyDict

Source§

impl Traverse for PyEnumerate

Source§

impl Traverse for PyFilter

Source§

impl Traverse for PyFunction

Source§

impl Traverse for PyList

Source§

impl Traverse for PyMap

Source§

impl Traverse for PyMappingProxy

Source§

impl Traverse for PyProperty

Source§

impl Traverse for PySequenceIterator

Source§

impl Traverse for PySet

Source§

impl Traverse for PySlice

Source§

impl Traverse for PyStaticMethod

Source§

impl Traverse for PySuper

Source§

impl Traverse for PyTraceback

Source§

impl Traverse for PyTuple

Source§

impl Traverse for PyType

Source§

impl Traverse for PyUnion

Source§

impl Traverse for PyWeakProxy

Source§

impl Traverse for PyZip

Source§

impl Traverse for ArgBytesLike

Source§

impl Traverse for ArgCallable

Source§

impl Traverse for ArgIndex

Source§

impl Traverse for ArgMapping

Source§

impl Traverse for ArgMemoryBuffer

Source§

impl Traverse for FuncArgs

Source§

impl Traverse for PyBuffer

Source§

impl Traverse for PyMapping<'_>

Source§

impl Traverse for PyNumber<'_>

Source§

impl Traverse for PySequence<'_>

Source§

impl Traverse for PyObject

Source§

impl Traverse for PyObjectRef

Source§

impl<'a, T, O> Traverse for PyIterIter<'a, T, O>
where O: Traverse + Borrow<PyObject>,

Source§

impl<A: Traverse, B: Traverse> Traverse for Either<A, B>

Source§

impl<O: Borrow<PyObject>> Traverse for PyIter<O>

Source§

impl<T> Traverse for OptionalArg<T>
where T: Traverse,

Source§

impl<T> Traverse for KwArgs<T>
where T: Traverse,

Source§

impl<T> Traverse for PosArgs<T>
where T: Traverse,

Source§

impl<T: PyObjectPayload> Traverse for Py<T>

Source§

impl<T: PyObjectPayload> Traverse for PyRef<T>

Source§

impl<T: Traverse> Traverse for IterStatus<T>

Source§

impl<T: Traverse> Traverse for PyIterReturn<T>

Source§

impl<T: Traverse> Traverse for PositionIterInternal<T>

Source§

impl<T: Traverse> Traverse for ArgIterable<T>

Source§

impl<T: Traverse> Traverse for ArgSequence<T>

Morty Proxy This is a proxified and sanitized view of the page, visit original site.