Expand description
Utilities for tracing JS-managed values.
The lifetime of DOM objects is managed by the SpiderMonkey Garbage
Collector. A rooted DOM object implementing the interface Foo
is traced
as follows:
- The GC calls
_trace
defined inFooBinding
during the marking phase. (This happens throughJSClass.trace
for non-proxy bindings, and throughProxyTraps.trace
otherwise.) _trace
callsFoo::trace()
(an implementation ofJSTraceable
). This is typically derived via a#[dom_struct]
(implies#[derive(JSTraceable)]
) annotation. Non-JS-managed types have an empty inlinetrace()
method, achieved viaunsafe_no_jsmanaged_fields!
or similar.- For all fields,
Foo::trace()
callstrace()
on the field. For example, for fields of typeDom<T>
,Dom<T>::trace()
callstrace_reflector()
. trace_reflector()
callsDom::TraceEdge()
with a pointer to theJSObject
for the reflector. This notifies the GC, which will add the object to the graph, and will trace that object as well.- When the GC finishes tracing, it
finalizes
any reflectors that were not reachable.
The unsafe_no_jsmanaged_fields!()
macro adds an empty implementation of
JSTraceable
to a datatype.
Structs
A vector of items to be rooted with
RootedVec
.
Guaranteed to be empty when not rooted.
Usage: rooted_vec!(let mut v);
or if you have an
iterator of DomRoot
s, rooted_vec!(let v <- iterator);
.Roots any JSTraceable thing
Holds a set of JSTraceables that need to be rooted
A vector of items that are rooted for the lifetime ’a.
Constants
TLV Holds a set of JSTraceables that need to be rooted
Traits
A trait to allow tracing (only) DOM objects.
Functions
Trace a
JSVal
.Trace a
JSObject
.Trace the
JSObject
held by reflector
.Trace a
JSScript
.Trace a
JSString
.SM Callback that traces the rooted traceables