This article covers features introduced in SpiderMonkey 31
Container class for passing in script source buffers to the JS engine.
Constructor
enum Ownership { NoOwnership, GiveOwnership }; JS::SourceBufferHolder(const char16_t *data, size_t dataLength, Ownership ownership);
Name | Type | Description |
---|---|---|
data |
const char16_t * |
Source buffer containing the script to compile. |
dataLength |
size_t |
The length of data , in characters. |
ownership |
Ownership |
See description. |
Description
JS::SourceBufferHolder
is the container class for passing in script source buffers to the JS engine. This not only groups the buffer and length values, it also provides a way to optionally pass ownership of the buffer to the JS engine without copying. Rules for use:
- The data array must be allocated with
js_malloc
orjs_realloc
ifownership
is being granted to theSourceBufferHolder
. - If
ownership
is not given to theSourceBufferHolder
, then the memory must be kept alive until the JS compilation is complete. - Any code calling
SourceBufferHolder::take()
must guarantee to keep the memory alive until JS compilation completes. Normally only the JS engine should be callingtake()
.
Example
size_t length = 512; char16_t* chars = static_cast<char16_t*>(js_malloc(sizeof(char16_t) * length)); JS::SourceBufferHolder srcBuf(chars, length, JS::SourceBufferHolder::GiveOwnership); JS::Compile(cx, obj, options, srcBuf);