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§
- HashMap wrapper, that has non-jsmanaged keys
- Wrapper type for nop traceble
- 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 ofDomRoot
s,rooted_vec!(let v <- iterator);
. - Roots any JSTraceable thing
- Holds a set of JSTraceables that need to be rooted Holds a set of JSTraceables that need to be rooted
- A vector of items that are rooted for the lifetime ’a.
Traits§
- A trait to allow tracing only DOM sub-objects.
- A trait to allow tracing (only) DOM objects. Types that can be traced.
Functions§
- Trace a
JSVal
. - Trace a
JSObject
. - Trace the
JSObject
held byreflector
. - Trace a
JSScript
. - Trace a
JSString
.