void Dispose();
/**
- * Associate embedder-specific data with the isolate. This legacy method
- * puts the data in the 0th slot. It will be deprecated soon.
+ * Associate embedder-specific data with the isolate
*/
V8_INLINE void SetData(void* data);
/**
- * 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.
+ * Retrieve embedder-specific data from the isolate.
* 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);
static const int kExternalAsciiRepresentationTag = 0x06;
static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize;
- static const int kIsolateRootsOffset = 6 * kApiPointerSize;
+ static const int kIsolateRootsOffset = 3 * kApiPointerSize;
static const int kUndefinedValueRootIndex = 5;
static const int kNullValueRootIndex = 7;
static const int kTrueValueRootIndex = 8;
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
*addr = static_cast<uint8_t>((*addr & ~kNodeStateMask) | value);
}
- V8_INLINE static void SetEmbedderData(v8::Isolate *isolate,
- uint32_t slot,
- void *data) {
- uint8_t *addr = reinterpret_cast<uint8_t *>(isolate) +
- kIsolateEmbedderDataOffset + slot * kApiPointerSize;
+ V8_INLINE static void SetEmbedderData(v8::Isolate* isolate, void* data) {
+ uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
+ kIsolateEmbedderDataOffset;
*reinterpret_cast<void**>(addr) = data;
}
- V8_INLINE static void* GetEmbedderData(v8::Isolate* isolate, uint32_t slot) {
+ V8_INLINE static void* GetEmbedderData(v8::Isolate* isolate) {
uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
- kIsolateEmbedderDataOffset + slot * kApiPointerSize;
+ kIsolateEmbedderDataOffset;
return *reinterpret_cast<void**>(addr);
}
void Isolate::SetData(void* data) {
typedef internal::Internals I;
- I::SetEmbedderData(this, 0, data);
+ I::SetEmbedderData(this, data);
}
void* Isolate::GetData() {
typedef internal::Internals I;
- 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;
+ return I::GetEmbedderData(this);
}
thread_local_top_.current_vm_state_ = state;
}
- void SetData(uint32_t slot, void* data) {
- ASSERT(slot < Internals::kNumIsolateDataSlots);
- embedder_data_[slot] = data;
- }
- void* GetData(uint32_t slot) {
- ASSERT(slot < Internals::kNumIsolateDataSlots);
- return embedder_data_[slot];
- }
+ void SetData(void* data) { embedder_data_ = data; }
+ void* GetData() { return embedder_data_; }
LookupResult* top_lookup_result() {
return thread_local_top_.top_lookup_result_;
// with v8::internal::Internals (in include/v8.h) constants. This is also
// verified in Isolate::Init() using runtime checks.
State state_; // Will be padded to kApiPointerSize.
- void* embedder_data_[Internals::kNumIsolateDataSlots];
+ void* embedder_data_;
Heap heap_;
// The per-process lock should be acquired before the ThreadDataTable is
v8::Isolate* isolate = v8::Isolate::New();
isolate->Enter();
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
- for (uint32_t slot = 0; slot < v8::Isolate::GetNumberOfDataSlots(); ++slot) {
- CHECK_EQ(NULL, isolate->GetData(slot));
- CHECK_EQ(NULL, i_isolate->GetData(slot));
- }
- for (uint32_t slot = 0; slot < v8::Isolate::GetNumberOfDataSlots(); ++slot) {
- void* data = reinterpret_cast<void*>(0xacce55ed + slot);
- isolate->SetData(slot, data);
- }
- for (uint32_t slot = 0; slot < v8::Isolate::GetNumberOfDataSlots(); ++slot) {
- void* data = reinterpret_cast<void*>(0xacce55ed + slot);
- CHECK_EQ(data, isolate->GetData(slot));
- CHECK_EQ(data, i_isolate->GetData(slot));
- }
- for (uint32_t slot = 0; slot < v8::Isolate::GetNumberOfDataSlots(); ++slot) {
- void* data = reinterpret_cast<void*>(0xdecea5ed + slot);
- isolate->SetData(slot, data);
- }
- for (uint32_t slot = 0; slot < v8::Isolate::GetNumberOfDataSlots(); ++slot) {
- void* data = reinterpret_cast<void*>(0xdecea5ed + slot);
- CHECK_EQ(data, isolate->GetData(slot));
- CHECK_EQ(data, i_isolate->GetData(slot));
- }
+ CHECK_EQ(NULL, isolate->GetData());
+ CHECK_EQ(NULL, i_isolate->GetData());
+ static void* data1 = reinterpret_cast<void*>(0xacce55ed);
+ isolate->SetData(data1);
+ CHECK_EQ(data1, isolate->GetData());
+ CHECK_EQ(data1, i_isolate->GetData());
+ static void* data2 = reinterpret_cast<void*>(0xdecea5ed);
+ i_isolate->SetData(data2);
+ CHECK_EQ(data2, isolate->GetData());
+ CHECK_EQ(data2, i_isolate->GetData());
isolate->Exit();
isolate->Dispose();
}