Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 4ec3936be557e3d9df1d7ace82417e99316b2453..530658a6acb8b2f6e1073a31c100bfb45db9e742 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -666,11 +666,21 @@ void V8::DisposeGlobal(i::Isolate* isolate, i::Object** obj) { |
HandleScope::HandleScope() { |
- i::Isolate* isolate = i::Isolate::Current(); |
- API_ENTRY_CHECK(isolate, "HandleScope::HandleScope"); |
+ Initialize(reinterpret_cast<Isolate*>(i::Isolate::Current())); |
+} |
+ |
+ |
+HandleScope::HandleScope(Isolate* isolate) { |
+ Initialize(isolate); |
+} |
+ |
+ |
+void HandleScope::Initialize(Isolate* isolate) { |
+ i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ API_ENTRY_CHECK(internal_isolate, "HandleScope::HandleScope"); |
v8::ImplementationUtilities::HandleScopeData* current = |
- isolate->handle_scope_data(); |
- isolate_ = isolate; |
+ internal_isolate->handle_scope_data(); |
+ isolate_ = internal_isolate; |
prev_next_ = current->next; |
prev_limit_ = current->limit; |
is_closed_ = false; |
@@ -686,7 +696,6 @@ HandleScope::~HandleScope() { |
void HandleScope::Leave() { |
- ASSERT(isolate_ == i::Isolate::Current()); |
v8::ImplementationUtilities::HandleScopeData* current = |
isolate_->handle_scope_data(); |
current->level--; |
@@ -1884,7 +1893,7 @@ v8::TryCatch::TryCatch() |
v8::TryCatch::~TryCatch() { |
ASSERT(isolate_ == i::Isolate::Current()); |
if (rethrow_) { |
- v8::HandleScope scope; |
+ v8::HandleScope scope(reinterpret_cast<Isolate*>(isolate_)); |
v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(Exception()); |
isolate_->UnregisterTryCatchHandler(this); |
v8::ThrowException(exc); |
@@ -1976,7 +1985,7 @@ Local<String> Message::Get() const { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Message::Get()", return Local<String>()); |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::Object> obj = Utils::OpenHandle(this); |
i::Handle<i::String> raw_result = i::MessageHandler::GetMessage(isolate, obj); |
Local<String> result = Utils::ToLocal(raw_result); |
@@ -1990,7 +1999,7 @@ v8::Handle<Value> Message::GetScriptResourceName() const { |
return Local<String>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSMessageObject> message = |
i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
// Return this.script.name. |
@@ -2009,7 +2018,7 @@ v8::Handle<Value> Message::GetScriptData() const { |
return Local<Value>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSMessageObject> message = |
i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
// Return this.script.data. |
@@ -2027,7 +2036,7 @@ v8::Handle<v8::StackTrace> Message::GetStackTrace() const { |
return Local<v8::StackTrace>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSMessageObject> message = |
i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); |
@@ -2147,7 +2156,7 @@ Local<String> Message::GetSourceLine() const { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
ON_BAILOUT(isolate, "v8::Message::GetSourceLine()", return Local<String>()); |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
EXCEPTION_PREAMBLE(isolate); |
i::Handle<i::Object> result = CallV8HeapFunction("GetSourceLine", |
Utils::OpenHandle(this), |
@@ -2177,7 +2186,7 @@ Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
return Local<StackFrame>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSArray> self = Utils::OpenHandle(this); |
i::Object* raw_object = self->GetElementNoExceptionThrown(index); |
i::Handle<i::JSObject> obj(i::JSObject::cast(raw_object)); |
@@ -2254,7 +2263,7 @@ Local<String> StackFrame::GetScriptName() const { |
return Local<String>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> name = GetProperty(self, "scriptName"); |
if (!name->IsString()) { |
@@ -2270,7 +2279,7 @@ Local<String> StackFrame::GetScriptNameOrSourceURL() const { |
return Local<String>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> name = GetProperty(self, "scriptNameOrSourceURL"); |
if (!name->IsString()) { |
@@ -2286,7 +2295,7 @@ Local<String> StackFrame::GetFunctionName() const { |
return Local<String>(); |
} |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
i::Handle<i::Object> name = GetProperty(self, "functionName"); |
if (!name->IsString()) { |
@@ -3280,7 +3289,7 @@ bool v8::Object::Delete(uint32_t index) { |
ON_BAILOUT(isolate, "v8::Object::DeleteProperty()", |
return false); |
ENTER_V8(isolate); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
return i::JSObject::DeleteElement(self, index)->IsTrue(); |
} |
@@ -3858,7 +3867,7 @@ Local<v8::Object> Function::NewInstance(int argc, |
ENTER_V8(isolate); |
i::Logger::TimerEventScope timer_scope( |
isolate, i::Logger::TimerEventScope::v8_execute); |
- HandleScope scope; |
+ HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Handle<i::JSFunction> function = Utils::OpenHandle(this); |
STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
@@ -6314,7 +6323,7 @@ Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) { |
if (!isolate->IsInitialized()) return Local<Value>(); |
ON_BAILOUT(isolate, "v8::Debug::GetMirror()", return Local<Value>()); |
ENTER_V8(isolate); |
- v8::HandleScope scope; |
+ v8::HandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
i::Debug* isolate_debug = isolate->debug(); |
isolate_debug->Load(); |
i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); |