Reviewers: Sven Panne,
Description:
Make Isolate::GetData and Isolate::SetData inlineable.
[email protected]
TEST=cctest/test-api/IsolateEmbedderData
Please review this at https://chromiumcodereview.appspot.com/10196013/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M include/v8.h
M src/api.cc
M test/cctest/test-api.cc
Index: include/v8.h
diff --git a/include/v8.h b/include/v8.h
index
e4fffadc81b6c29e44d7801eaefc14535bdce35f..dc2e6fef7592dfce6adc4f6dd7f2cf06bab73234
100644
--- a/include/v8.h
+++ b/include/v8.h
@@ -2816,13 +2816,13 @@ class V8EXPORT Isolate {
/**
* Associate embedder-specific data with the isolate
*/
- void SetData(void* data);
+ inline void SetData(void* data);
/**
* Retrive embedder-specific data from the isolate.
* Returns NULL if SetData has never been called.
*/
- void* GetData();
+ inline void* GetData();
private:
Isolate();
@@ -3961,6 +3961,18 @@ class Internals {
return *reinterpret_cast<int*>(addr) == 1;
}
+ static inline void SetEmbedderData(v8::Isolate* isolate, void* data) {
+ uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
+ kIsolateEmbedderDataOffset;
+ *reinterpret_cast<void**>(addr) = data;
+ }
+
+ static inline void* GetEmbedderData(v8::Isolate* isolate) {
+ uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
+ kIsolateEmbedderDataOffset;
+ return *reinterpret_cast<void**>(addr);
+ }
+
static inline internal::Object** GetRoot(v8::Isolate* isolate, int
index) {
uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) +
kIsolateRootsOffset;
return reinterpret_cast<internal::Object**>(addr + index *
kApiPointerSize);
@@ -4424,6 +4436,18 @@ Handle<Boolean> False(Isolate* isolate) {
}
+void Isolate::SetData(void* data) {
+ typedef internal::Internals I;
+ I::SetEmbedderData(this, data);
+}
+
+
+void* Isolate::GetData() {
+ typedef internal::Internals I;
+ return I::GetEmbedderData(this);
+}
+
+
/**
* \example shell.cc
* A simple shell that takes a list of expressions on the
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index
124875a769be391e5ce38f4f3ee9fa9497ffa16b..8cdd3912390e302807f78e4901efc46be9794582
100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -5396,17 +5396,6 @@ void Isolate::Exit() {
}
-void Isolate::SetData(void* data) {
- i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
- isolate->SetData(data);
-}
-
-void* Isolate::GetData() {
- i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
- return isolate->GetData();
-}
-
-
String::Utf8Value::Utf8Value(v8::Handle<v8::Value> obj)
: str_(NULL), length_(0) {
i::Isolate* isolate = i::Isolate::Current();
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index
ba836479109eb55918292074e84692286d05deda..520bd8ad326b79f585da8b2c99dd5de9ad93748c
100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -16504,3 +16504,21 @@ TEST(StaticGettersAfterDeath) {
CHECK(v8::False(isolate).IsEmpty());
CHECK_EQ(9, fatal_error_callback_counter);
}
+
+
+TEST(IsolateEmbedderData) {
+ v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ CHECK_EQ(NULL, isolate->GetData());
+ CHECK_EQ(NULL, ISOLATE->GetData());
+ static void* data1 = (void*)0xacce55ed;
+ isolate->SetData(data1);
+ CHECK_EQ(data1, isolate->GetData());
+ CHECK_EQ(data1, ISOLATE->GetData());
+ static void* data2 = (void*)0xdecea5ed;
+ ISOLATE->SetData(data2);
+ CHECK_EQ(data2, isolate->GetData());
+ CHECK_EQ(data2, ISOLATE->GetData());
+ ISOLATE->TearDown();
+ CHECK_EQ(data2, isolate->GetData());
+ CHECK_EQ(data2, ISOLATE->GetData());
+}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev