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_mallocorjs_reallocifownershipis being granted to theSourceBufferHolder. - If
ownershipis 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);