Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 0f164a33550801a8a7b9b6eb86254dee90001388..91e4618841ac8adf176259f3cf2ef89ed9a986c1 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -1607,26 +1607,27 @@ void Script::SetData(v8::Handle<String> data) { |
v8::TryCatch::TryCatch() |
- : next_(i::Isolate::Current()->try_catch_handler_address()), |
- exception_(HEAP->the_hole_value()), |
+ : isolate_(i::Isolate::Current()), |
+ next_(isolate_->try_catch_handler_address()), |
+ exception_(isolate_->heap()->the_hole_value()), |
message_(i::Smi::FromInt(0)), |
is_verbose_(false), |
can_continue_(true), |
capture_message_(true), |
rethrow_(false) { |
- i::Isolate::Current()->RegisterTryCatchHandler(this); |
+ isolate_->RegisterTryCatchHandler(this); |
} |
v8::TryCatch::~TryCatch() { |
- i::Isolate* isolate = i::Isolate::Current(); |
+ ASSERT(isolate_ == i::Isolate::Current()); |
if (rethrow_) { |
v8::HandleScope scope; |
v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(Exception()); |
- isolate->UnregisterTryCatchHandler(this); |
+ isolate_->UnregisterTryCatchHandler(this); |
v8::ThrowException(exc); |
} else { |
- isolate->UnregisterTryCatchHandler(this); |
+ isolate_->UnregisterTryCatchHandler(this); |
} |
} |
@@ -1649,10 +1650,11 @@ v8::Handle<v8::Value> v8::TryCatch::ReThrow() { |
v8::Local<Value> v8::TryCatch::Exception() const { |
+ ASSERT(isolate_ == i::Isolate::Current()); |
if (HasCaught()) { |
// Check for out of memory exception. |
i::Object* exception = reinterpret_cast<i::Object*>(exception_); |
- return v8::Utils::ToLocal(i::Handle<i::Object>(exception)); |
+ return v8::Utils::ToLocal(i::Handle<i::Object>(exception, isolate_)); |
} else { |
return v8::Local<Value>(); |
} |
@@ -1660,15 +1662,15 @@ v8::Local<Value> v8::TryCatch::Exception() const { |
v8::Local<Value> v8::TryCatch::StackTrace() const { |
+ ASSERT(isolate_ == i::Isolate::Current()); |
if (HasCaught()) { |
i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); |
if (!raw_obj->IsJSObject()) return v8::Local<Value>(); |
- v8::HandleScope scope; |
- i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj)); |
- i::Handle<i::String> name = FACTORY->LookupAsciiSymbol("stack"); |
- if (!obj->HasProperty(*name)) |
- return v8::Local<Value>(); |
- return scope.Close(v8::Utils::ToLocal(i::GetProperty(obj, name))); |
+ i::HandleScope scope(isolate_); |
+ i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
+ i::Handle<i::String> name = isolate_->factory()->LookupAsciiSymbol("stack"); |
+ if (!obj->HasProperty(*name)) return v8::Local<Value>(); |
+ return v8::Utils::ToLocal(scope.CloseAndEscape(i::GetProperty(obj, name))); |
} else { |
return v8::Local<Value>(); |
} |
@@ -1676,9 +1678,10 @@ v8::Local<Value> v8::TryCatch::StackTrace() const { |
v8::Local<v8::Message> v8::TryCatch::Message() const { |
+ ASSERT(isolate_ == i::Isolate::Current()); |
if (HasCaught() && message_ != i::Smi::FromInt(0)) { |
i::Object* message = reinterpret_cast<i::Object*>(message_); |
- return v8::Utils::MessageToLocal(i::Handle<i::Object>(message)); |
+ return v8::Utils::MessageToLocal(i::Handle<i::Object>(message, isolate_)); |
} else { |
return v8::Local<v8::Message>(); |
} |
@@ -1686,7 +1689,8 @@ v8::Local<v8::Message> v8::TryCatch::Message() const { |
void v8::TryCatch::Reset() { |
- exception_ = HEAP->the_hole_value(); |
+ ASSERT(isolate_ == i::Isolate::Current()); |
+ exception_ = isolate_->heap()->the_hole_value(); |
message_ = i::Smi::FromInt(0); |
} |