| Index: src/isolate.h
|
| diff --git a/src/isolate.h b/src/isolate.h
|
| index 67edad3fa7df7dae3ec2072338116566b83d3d9a..7035b06f84f0bf6c4c9d61d8001ac2d96994335b 100644
|
| --- a/src/isolate.h
|
| +++ b/src/isolate.h
|
| @@ -292,7 +292,7 @@ class ThreadLocalTop BASE_EMBEDDED {
|
| // lookups.
|
| Context* context_;
|
| ThreadId thread_id_;
|
| - MaybeObject* pending_exception_;
|
| + Object* pending_exception_;
|
| bool has_pending_message_;
|
| bool rethrowing_message_;
|
| Object* pending_message_obj_;
|
| @@ -302,7 +302,7 @@ class ThreadLocalTop BASE_EMBEDDED {
|
| // Use a separate value for scheduled exceptions to preserve the
|
| // invariants that hold about pending_exception. We may want to
|
| // unify them later.
|
| - MaybeObject* scheduled_exception_;
|
| + Object* scheduled_exception_;
|
| bool external_caught_exception_;
|
| SaveContext* save_context_;
|
| v8::TryCatch* catcher_;
|
| @@ -608,24 +608,28 @@ class Isolate {
|
| THREAD_LOCAL_TOP_ACCESSOR(ThreadId, thread_id)
|
|
|
| // Interface to pending exception.
|
| - MaybeObject* pending_exception() {
|
| + Object* pending_exception() {
|
| ASSERT(has_pending_exception());
|
| + ASSERT(!thread_local_top_.pending_exception_->IsFailure());
|
| return thread_local_top_.pending_exception_;
|
| }
|
|
|
| - void set_pending_exception(MaybeObject* exception) {
|
| + void set_pending_exception(Object* exception) {
|
| + ASSERT(!exception->IsFailure());
|
| thread_local_top_.pending_exception_ = exception;
|
| }
|
|
|
| void clear_pending_exception() {
|
| + ASSERT(!thread_local_top_.pending_exception_->IsFailure());
|
| thread_local_top_.pending_exception_ = heap_.the_hole_value();
|
| }
|
|
|
| - MaybeObject** pending_exception_address() {
|
| + Object** pending_exception_address() {
|
| return &thread_local_top_.pending_exception_;
|
| }
|
|
|
| bool has_pending_exception() {
|
| + ASSERT(!thread_local_top_.pending_exception_->IsFailure());
|
| return !thread_local_top_.pending_exception_->IsTheHole();
|
| }
|
|
|
| @@ -648,7 +652,7 @@ class Isolate {
|
|
|
| THREAD_LOCAL_TOP_ACCESSOR(v8::TryCatch*, catcher)
|
|
|
| - MaybeObject** scheduled_exception_address() {
|
| + Object** scheduled_exception_address() {
|
| return &thread_local_top_.scheduled_exception_;
|
| }
|
|
|
| @@ -665,20 +669,23 @@ class Isolate {
|
| &thread_local_top_.pending_message_script_);
|
| }
|
|
|
| - MaybeObject* scheduled_exception() {
|
| + Object* scheduled_exception() {
|
| ASSERT(has_scheduled_exception());
|
| + ASSERT(!thread_local_top_.scheduled_exception_->IsFailure());
|
| return thread_local_top_.scheduled_exception_;
|
| }
|
| bool has_scheduled_exception() {
|
| + ASSERT(!thread_local_top_.scheduled_exception_->IsFailure());
|
| return thread_local_top_.scheduled_exception_ != heap_.the_hole_value();
|
| }
|
| void clear_scheduled_exception() {
|
| + ASSERT(!thread_local_top_.scheduled_exception_->IsFailure());
|
| thread_local_top_.scheduled_exception_ = heap_.the_hole_value();
|
| }
|
|
|
| bool IsExternallyCaught();
|
|
|
| - bool is_catchable_by_javascript(MaybeObject* exception) {
|
| + bool is_catchable_by_javascript(Object* exception) {
|
| return exception != heap()->termination_exception();
|
| }
|
|
|
| @@ -737,8 +744,7 @@ class Isolate {
|
| // Scope currently can only be used for regular exceptions, not
|
| // failures like OOM or termination exception.
|
| isolate_(isolate),
|
| - pending_exception_(isolate_->pending_exception()->ToObjectUnchecked(),
|
| - isolate_),
|
| + pending_exception_(isolate_->pending_exception(), isolate_),
|
| catcher_(isolate_->catcher())
|
| { }
|
|
|
| @@ -819,7 +825,7 @@ class Isolate {
|
| // Re-throw an exception. This involves no error reporting since
|
| // error reporting was handled when the exception was thrown
|
| // originally.
|
| - Failure* ReThrow(MaybeObject* exception);
|
| + Failure* ReThrow(Object* exception);
|
| void ScheduleThrow(Object* exception);
|
| // Re-set pending message, script and positions reported to the TryCatch
|
| // back to the TLS for re-use when rethrowing.
|
|
|