This article covers features introduced in SpiderMonkey 17
Local variable of type T whose value is always rooted.
Syntax
JS::Rooted<T> var(cx); JS::Rooted<T> var(cx, initial); JS::Rooted<T> var(rt); JS::Rooted<T> var(rt, initial);
| Name | Type | Description | 
|---|---|---|
| cx | JSContext * | The context in which to add the root. Requires request. In a JS_THREADSAFEbuild, the caller must be in a request on thisJSContext. | 
| rt | JSRuntime * | The runtime in which to add the root. | 
| initial | T | An initial value for the rooted variable. | 
Methods
Here, ptr represents the private member of JS::Rooted<T>, typed with T.
| Method | Description | 
|---|---|
| T &get() | Returns ptr. | 
| const T &get() const | |
| operator const T&() const | |
| T operator->() const | |
| T *address() | Returns a pointer to ptr. | 
| const T *address() const | |
| T &operator=(T value) | Sets the value of ptrtovalue. | 
| T &operator=(const Rooted &value) | |
| void set(T value) | |
| bool operator!=(const T &other) const | Compares ptrandother. | 
| bool operator==(const T &other) const | 
Description
JS::Rooted<T> declares a local variable of type T whose value is always rooted. This is typically used for local variables, or for non-rooted values being passed to a function that requires a handle, e.g. Foo(JS::Rooted<T>(cx, x)).
JS::Rooted<T> may be automatically coerced to a JS::Handle<T>.  JS::Rooted<T> should be used whenever a local variable's value may be held live across a call which can trigger a GC.
If you want to add additional methods to Rooted for a specific specialization, define a js::RootedBase<T> specialization containing them.
There are typedefs available for the main types:
namespace JS {
typedef Rooted<JSObject*>       RootedObject;
typedef Rooted<JSFunction*>     RootedFunction;
typedef Rooted<JSScript*>       RootedScript;
typedef Rooted<JSString*>       RootedString;
typedef Rooted<JS::Symbol*>     RootedSymbol; // Added in SpiderMonkey 38
typedef Rooted<jsid>            RootedId;
typedef Rooted<JS::Value>       RootedValue;
}
See Also
- MXR ID Search for JS::Rooted
- MXR ID Search for JS::RootedObject
- MXR ID Search for JS::RootedFunction
- MXR ID Search for JS::RootedScript
- MXR ID Search for JS::RootedString
- MXR ID Search for JS::RootedSymbol
- MXR ID Search for JS::RootedId
- MXR ID Search for JS::RootedValue
- JS::Handle
- JS::MutableHandle
- GC Rooting Guide
- bug 756823
- bug 761391 - added JS::RootedScript
- bug 645416 - added JS::RootedSymbol