| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdlib.h> | 5 #include <stdlib.h> |
| 6 | 6 |
| 7 #include "v8.h" | 7 #include "v8.h" |
| 8 | 8 |
| 9 #include "ast.h" | 9 #include "ast.h" |
| 10 #include "bootstrapper.h" | 10 #include "bootstrapper.h" |
| (...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 Object* script = reinterpret_cast<Object*>(handler->message_script_); | 901 Object* script = reinterpret_cast<Object*>(handler->message_script_); |
| 902 ASSERT(message->IsJSMessageObject() || message->IsTheHole()); | 902 ASSERT(message->IsJSMessageObject() || message->IsTheHole()); |
| 903 ASSERT(script->IsScript() || script->IsTheHole()); | 903 ASSERT(script->IsScript() || script->IsTheHole()); |
| 904 thread_local_top()->pending_message_obj_ = message; | 904 thread_local_top()->pending_message_obj_ = message; |
| 905 thread_local_top()->pending_message_script_ = script; | 905 thread_local_top()->pending_message_script_ = script; |
| 906 thread_local_top()->pending_message_start_pos_ = handler->message_start_pos_; | 906 thread_local_top()->pending_message_start_pos_ = handler->message_start_pos_; |
| 907 thread_local_top()->pending_message_end_pos_ = handler->message_end_pos_; | 907 thread_local_top()->pending_message_end_pos_ = handler->message_end_pos_; |
| 908 } | 908 } |
| 909 | 909 |
| 910 | 910 |
| 911 void Isolate::CancelScheduledExceptionFromTryCatch(v8::TryCatch* handler) { |
| 912 ASSERT(has_scheduled_exception()); |
| 913 if (scheduled_exception() == handler->exception_) { |
| 914 ASSERT(scheduled_exception() != heap()->termination_exception()); |
| 915 clear_scheduled_exception(); |
| 916 } |
| 917 } |
| 918 |
| 919 |
| 911 Object* Isolate::PromoteScheduledException() { | 920 Object* Isolate::PromoteScheduledException() { |
| 912 Object* thrown = scheduled_exception(); | 921 Object* thrown = scheduled_exception(); |
| 913 clear_scheduled_exception(); | 922 clear_scheduled_exception(); |
| 914 // Re-throw the exception to avoid getting repeated error reporting. | 923 // Re-throw the exception to avoid getting repeated error reporting. |
| 915 return ReThrow(thrown); | 924 return ReThrow(thrown); |
| 916 } | 925 } |
| 917 | 926 |
| 918 | 927 |
| 919 void Isolate::PrintCurrentStackTrace(FILE* out) { | 928 void Isolate::PrintCurrentStackTrace(FILE* out) { |
| 920 StackTraceFrameIterator it(this); | 929 StackTraceFrameIterator it(this); |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 | 1197 |
| 1189 return true; | 1198 return true; |
| 1190 } | 1199 } |
| 1191 | 1200 |
| 1192 | 1201 |
| 1193 void Isolate::ReportPendingMessages() { | 1202 void Isolate::ReportPendingMessages() { |
| 1194 ASSERT(has_pending_exception()); | 1203 ASSERT(has_pending_exception()); |
| 1195 PropagatePendingExceptionToExternalTryCatch(); | 1204 PropagatePendingExceptionToExternalTryCatch(); |
| 1196 | 1205 |
| 1197 HandleScope scope(this); | 1206 HandleScope scope(this); |
| 1198 if (thread_local_top_.pending_exception_ == | 1207 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { |
| 1199 heap()->termination_exception()) { | |
| 1200 // Do nothing: if needed, the exception has been already propagated to | 1208 // Do nothing: if needed, the exception has been already propagated to |
| 1201 // v8::TryCatch. | 1209 // v8::TryCatch. |
| 1202 } else { | 1210 } else { |
| 1203 if (thread_local_top_.has_pending_message_) { | 1211 if (thread_local_top_.has_pending_message_) { |
| 1204 thread_local_top_.has_pending_message_ = false; | 1212 thread_local_top_.has_pending_message_ = false; |
| 1205 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { | 1213 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { |
| 1206 HandleScope scope(this); | 1214 HandleScope scope(this); |
| 1207 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, | 1215 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, |
| 1208 this); | 1216 this); |
| 1209 if (!thread_local_top_.pending_message_script_->IsTheHole()) { | 1217 if (!thread_local_top_.pending_message_script_->IsTheHole()) { |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1726 | 1734 |
| 1727 | 1735 |
| 1728 void Isolate::PropagatePendingExceptionToExternalTryCatch() { | 1736 void Isolate::PropagatePendingExceptionToExternalTryCatch() { |
| 1729 ASSERT(has_pending_exception()); | 1737 ASSERT(has_pending_exception()); |
| 1730 | 1738 |
| 1731 bool external_caught = IsExternallyCaught(); | 1739 bool external_caught = IsExternallyCaught(); |
| 1732 thread_local_top_.external_caught_exception_ = external_caught; | 1740 thread_local_top_.external_caught_exception_ = external_caught; |
| 1733 | 1741 |
| 1734 if (!external_caught) return; | 1742 if (!external_caught) return; |
| 1735 | 1743 |
| 1736 if (thread_local_top_.pending_exception_ == | 1744 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { |
| 1737 heap()->termination_exception()) { | |
| 1738 try_catch_handler()->can_continue_ = false; | 1745 try_catch_handler()->can_continue_ = false; |
| 1739 try_catch_handler()->has_terminated_ = true; | 1746 try_catch_handler()->has_terminated_ = true; |
| 1740 try_catch_handler()->exception_ = heap()->null_value(); | 1747 try_catch_handler()->exception_ = heap()->null_value(); |
| 1741 } else { | 1748 } else { |
| 1742 v8::TryCatch* handler = try_catch_handler(); | 1749 v8::TryCatch* handler = try_catch_handler(); |
| 1743 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || | 1750 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || |
| 1744 thread_local_top_.pending_message_obj_->IsTheHole()); | 1751 thread_local_top_.pending_message_obj_->IsTheHole()); |
| 1745 ASSERT(thread_local_top_.pending_message_script_->IsScript() || | 1752 ASSERT(thread_local_top_.pending_message_script_->IsScript() || |
| 1746 thread_local_top_.pending_message_script_->IsTheHole()); | 1753 thread_local_top_.pending_message_script_->IsTheHole()); |
| 1747 handler->can_continue_ = true; | 1754 handler->can_continue_ = true; |
| (...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2288 Execution::Call(this, microtask, factory()->undefined_value(), | 2295 Execution::Call(this, microtask, factory()->undefined_value(), |
| 2289 0, NULL).Check(); | 2296 0, NULL).Check(); |
| 2290 } | 2297 } |
| 2291 } | 2298 } |
| 2292 | 2299 |
| 2293 handle_scope_implementer()->DecrementCallDepth(); | 2300 handle_scope_implementer()->DecrementCallDepth(); |
| 2294 } | 2301 } |
| 2295 | 2302 |
| 2296 | 2303 |
| 2297 } } // namespace v8::internal | 2304 } } // namespace v8::internal |
| OLD | NEW |