Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 89435d113a0cf03ace3b568ec83fbde496f6e051..6a0406a61f53efb02143348d856e5ab785daf24c 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -97,13 +97,11 @@ namespace v8 { |
} \ |
} while (false) |
-// TODO(isolates): Add a parameter to this macro for an isolate. |
-#define API_ENTRY_CHECK(msg) \ |
+#define API_ENTRY_CHECK(isolate, msg) \ |
do { \ |
if (v8::Locker::IsActive()) { \ |
- ApiCheck(i::Isolate::Current()->thread_manager()-> \ |
- IsLockedByCurrentThread(), \ |
+ ApiCheck(isolate->thread_manager()-> IsLockedByCurrentThread(), \ |
msg, \ |
"Entering the V8 API without proper locking in place"); \ |
} \ |
@@ -573,8 +571,8 @@ void V8::DisposeGlobal(i::Object** obj) { |
HandleScope::HandleScope() { |
- API_ENTRY_CHECK("HandleScope::HandleScope"); |
i::Isolate* isolate = i::Isolate::Current(); |
+ API_ENTRY_CHECK(isolate, "HandleScope::HandleScope"); |
v8::ImplementationUtilities::HandleScopeData* current = |
isolate->handle_scope_data(); |
isolate_ = isolate; |
@@ -630,12 +628,11 @@ i::Object** HandleScope::CreateHandle(i::HeapObject* value) { |
void Context::Enter() { |
- // TODO(isolates): Context should have a pointer to isolate. |
- i::Isolate* isolate = i::Isolate::Current(); |
+ i::Handle<i::Context> env = Utils::OpenHandle(this); |
+ i::Isolate* isolate = env->GetIsolate(); |
if (IsDeadCheck(isolate, "v8::Context::Enter()")) return; |
ENTER_V8(isolate); |
- i::Handle<i::Context> env = Utils::OpenHandle(this); |
isolate->handle_scope_implementer()->EnterContext(env); |
isolate->handle_scope_implementer()->SaveContext(isolate->context()); |
@@ -644,8 +641,8 @@ void Context::Enter() { |
void Context::Exit() { |
- // TODO(isolates): Context should have a pointer to isolate. |
- i::Isolate* isolate = i::Isolate::Current(); |
+ i::Handle<i::Context> env = Utils::OpenHandle(this); |
+ i::Isolate* isolate = env->GetIsolate(); |
if (!isolate->IsInitialized()) return; |
if (!ApiCheck(isolate->handle_scope_implementer()->LeaveLastContext(), |
@@ -662,41 +659,31 @@ void Context::Exit() { |
void Context::SetData(v8::Handle<String> data) { |
- // TODO(isolates): Context should have a pointer to isolate. |
- i::Isolate* isolate = i::Isolate::Current(); |
+ i::Handle<i::Context> env = Utils::OpenHandle(this); |
+ i::Isolate* isolate = env->GetIsolate(); |
if (IsDeadCheck(isolate, "v8::Context::SetData()")) return; |
- ENTER_V8(isolate); |
- { |
- i::HandleScope scope(isolate); |
- i::Handle<i::Context> env = Utils::OpenHandle(this); |
- i::Handle<i::Object> raw_data = Utils::OpenHandle(*data); |
- ASSERT(env->IsGlobalContext()); |
- if (env->IsGlobalContext()) { |
- env->set_data(*raw_data); |
- } |
+ i::Handle<i::Object> raw_data = Utils::OpenHandle(*data); |
+ ASSERT(env->IsGlobalContext()); |
+ if (env->IsGlobalContext()) { |
+ env->set_data(*raw_data); |
} |
} |
v8::Local<v8::Value> Context::GetData() { |
- // TODO(isolates): Context should have a pointer to isolate. |
- i::Isolate* isolate = i::Isolate::Current(); |
+ i::Handle<i::Context> env = Utils::OpenHandle(this); |
+ i::Isolate* isolate = env->GetIsolate(); |
if (IsDeadCheck(isolate, "v8::Context::GetData()")) { |
return v8::Local<Value>(); |
} |
- ENTER_V8(isolate); |
i::Object* raw_result = NULL; |
- { |
- i::HandleScope scope(isolate); |
- i::Handle<i::Context> env = Utils::OpenHandle(this); |
- ASSERT(env->IsGlobalContext()); |
- if (env->IsGlobalContext()) { |
- raw_result = env->data(); |
- } else { |
- return Local<Value>(); |
- } |
+ ASSERT(env->IsGlobalContext()); |
+ if (env->IsGlobalContext()) { |
+ raw_result = env->data(); |
+ } else { |
+ return Local<Value>(); |
} |
- i::Handle<i::Object> result(raw_result); |
+ i::Handle<i::Object> result(raw_result, isolate); |
return Utils::ToLocal(result); |
} |
@@ -4814,7 +4801,7 @@ int V8::GetCurrentThreadId() { |
void V8::TerminateExecution(int thread_id) { |
i::Isolate* isolate = i::Isolate::Current(); |
if (!isolate->IsInitialized()) return; |
- API_ENTRY_CHECK("V8::TerminateExecution()"); |
+ API_ENTRY_CHECK(isolate, "V8::TerminateExecution()"); |
// If the thread_id identifies the current thread just terminate |
// execution right away. Otherwise, ask the thread manager to |
// terminate the thread with the given id if any. |