Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index 2f8af27263e8f9cf46cddb1992611211b35d3517..fc94f86dc8a4001e93ed708712a60ea3459c5737 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -4059,17 +4059,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); |
@@ -5454,7 +5474,7 @@ class Internals { |
static const int kExternalAsciiRepresentationTag = 0x06; |
static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize; |
- static const int kIsolateRootsOffset = 3 * kApiPointerSize; |
+ static const int kIsolateRootsOffset = 6 * kApiPointerSize; |
static const int kUndefinedValueRootIndex = 5; |
static const int kNullValueRootIndex = 7; |
static const int kTrueValueRootIndex = 8; |
@@ -5478,6 +5498,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 |
@@ -5541,15 +5563,17 @@ class Internals { |
*addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value); |
} |
- V8_INLINE static void SetEmbedderData(v8::Isolate* isolate, void* data) { |
Paweł Hajdan Jr.
2013/12/18 12:49:55
Shouldn't there be V8_DEPRECATED SetEmbedderData(v
|
- 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); |
} |
@@ -6475,13 +6499,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; |
} |