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
_tracedefined inFooBindingduring the marking phase. (This happens throughJSClass.tracefor non-proxy bindings, and throughProxyTraps.traceotherwise.) _tracecallsFoo::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 theJSObjectfor 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
finalizesany reflectors that were not reachable.
The unsafe_no_jsmanaged_fields!() macro adds an empty implementation of
JSTraceable to a datatype.
Structsยง
- Hash
MapTraced ๐Values - HashMap wrapper, that has non-jsmanaged keys
- NoTrace ๐
- Wrapper type for nop traceble
- Rooted
Traceable ๐Box - Roots any JSTraceable thing
Traitsยง
- Custom
Traceable ๐ - A trait to allow tracing only DOM sub-objects.
- JSTraceable ๐
- A trait to allow tracing (only) DOM objects. Types that can be traced.
Functionsยง
- trace_
jsval ๐ - Trace a
JSVal. - trace_
reflector ๐ โ - Trace the
JSObjectheld byreflector. - trace_
script ๐ - Trace a
JSScript. - trace_
string ๐ - Trace a
JSString.