| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 13ec7470dbf29b553a2d99d1e3333cb4bec5bc23..df82352703664bd2019d1fb3727df7d638af9cbc 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -4054,17 +4054,37 @@ class V8_EXPORT Isolate {
|
| void Dispose();
|
|
|
| /**
|
| - * Associate embedder-specific data with the isolate
|
| + * Associate embedder-specific data with the isolate. This legacy method
|
| + * puts the data in the 0th slot. It will be deprecated soon.
|
| */
|
| V8_INLINE void SetData(void* data);
|
|
|
| /**
|
| - * Retrieve embedder-specific data from the isolate.
|
| + * Associate embedder-specific data with the isolate. |slot| has to be
|
| + * between 0 and GetNumberOfDataSlots() - 1.
|
| + */
|
| + V8_INLINE void SetData(uint32_t slot, void* data);
|
| +
|
| + /**
|
| + * Retrieve embedder-specific data from the isolate. This legacy method
|
| + * retrieves the data from slot 0. It will be deprecated soon.
|
| * Returns NULL if SetData has never been called.
|
| */
|
| V8_INLINE void* GetData();
|
|
|
| /**
|
| + * Retrieve embedder-specific data from the isolate.
|
| + * Returns NULL if SetData has never been called for the given |slot|.
|
| + */
|
| + V8_INLINE void* GetData(uint32_t slot);
|
| +
|
| + /**
|
| + * Returns the maximum number of available embedder data slots. Valid slots
|
| + * are in the range of 0 - GetNumberOfDataSlots() - 1.
|
| + */
|
| + V8_INLINE static uint32_t GetNumberOfDataSlots();
|
| +
|
| + /**
|
| * Get statistics about the heap memory usage.
|
| */
|
| void GetHeapStatistics(HeapStatistics* heap_statistics);
|
| @@ -5448,8 +5468,8 @@ class Internals {
|
| static const int kExternalTwoByteRepresentationTag = 0x02;
|
| static const int kExternalAsciiRepresentationTag = 0x06;
|
|
|
| - static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize;
|
| - static const int kIsolateRootsOffset = 3 * kApiPointerSize;
|
| + static const int kIsolateEmbedderDataOffset = 0 * kApiPointerSize;
|
| + static const int kIsolateRootsOffset = 5 * kApiPointerSize;
|
| static const int kUndefinedValueRootIndex = 5;
|
| static const int kNullValueRootIndex = 7;
|
| static const int kTrueValueRootIndex = 8;
|
| @@ -5473,6 +5493,8 @@ class Internals {
|
| static const int kUndefinedOddballKind = 5;
|
| static const int kNullOddballKind = 3;
|
|
|
| + static const uint32_t kNumIsolateDataSlots = 4;
|
| +
|
| V8_EXPORT static void CheckInitializedImpl(v8::Isolate* isolate);
|
| V8_INLINE static void CheckInitialized(v8::Isolate* isolate) {
|
| #ifdef V8_ENABLE_CHECKS
|
| @@ -5536,15 +5558,17 @@ class Internals {
|
| *addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value);
|
| }
|
|
|
| - V8_INLINE static void SetEmbedderData(v8::Isolate* isolate, void* data) {
|
| - uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
|
| - kIsolateEmbedderDataOffset;
|
| + V8_INLINE static void SetEmbedderData(v8::Isolate *isolate,
|
| + uint32_t slot,
|
| + void *data) {
|
| + uint8_t *addr = reinterpret_cast<uint8_t *>(isolate) +
|
| + kIsolateEmbedderDataOffset + slot * kApiPointerSize;
|
| *reinterpret_cast<void**>(addr) = data;
|
| }
|
|
|
| - V8_INLINE static void* GetEmbedderData(v8::Isolate* isolate) {
|
| + V8_INLINE static void* GetEmbedderData(v8::Isolate* isolate, uint32_t slot) {
|
| uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
|
| - kIsolateEmbedderDataOffset;
|
| + kIsolateEmbedderDataOffset + slot * kApiPointerSize;
|
| return *reinterpret_cast<void**>(addr);
|
| }
|
|
|
| @@ -6470,13 +6494,31 @@ Handle<Boolean> False(Isolate* isolate) {
|
|
|
| void Isolate::SetData(void* data) {
|
| typedef internal::Internals I;
|
| - I::SetEmbedderData(this, data);
|
| + I::SetEmbedderData(this, 0, data);
|
| }
|
|
|
|
|
| void* Isolate::GetData() {
|
| typedef internal::Internals I;
|
| - return I::GetEmbedderData(this);
|
| + return I::GetEmbedderData(this, 0);
|
| +}
|
| +
|
| +
|
| +void Isolate::SetData(uint32_t slot, void* data) {
|
| + typedef internal::Internals I;
|
| + I::SetEmbedderData(this, slot, data);
|
| +}
|
| +
|
| +
|
| +void* Isolate::GetData(uint32_t slot) {
|
| + typedef internal::Internals I;
|
| + return I::GetEmbedderData(this, slot);
|
| +}
|
| +
|
| +
|
| +uint32_t Isolate::GetNumberOfDataSlots() {
|
| + typedef internal::Internals I;
|
| + return I::kNumIsolateDataSlots;
|
| }
|
|
|
|
|
|
|