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 | |
920 Object* Isolate::PromoteScheduledException() { | 911 Object* Isolate::PromoteScheduledException() { |
921 Object* thrown = scheduled_exception(); | 912 Object* thrown = scheduled_exception(); |
922 clear_scheduled_exception(); | 913 clear_scheduled_exception(); |
923 // Re-throw the exception to avoid getting repeated error reporting. | 914 // Re-throw the exception to avoid getting repeated error reporting. |
924 return ReThrow(thrown); | 915 return ReThrow(thrown); |
925 } | 916 } |
926 | 917 |
927 | 918 |
928 void Isolate::PrintCurrentStackTrace(FILE* out) { | 919 void Isolate::PrintCurrentStackTrace(FILE* out) { |
929 StackTraceFrameIterator it(this); | 920 StackTraceFrameIterator it(this); |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1215 | 1206 |
1216 return true; | 1207 return true; |
1217 } | 1208 } |
1218 | 1209 |
1219 | 1210 |
1220 void Isolate::ReportPendingMessages() { | 1211 void Isolate::ReportPendingMessages() { |
1221 ASSERT(has_pending_exception()); | 1212 ASSERT(has_pending_exception()); |
1222 PropagatePendingExceptionToExternalTryCatch(); | 1213 PropagatePendingExceptionToExternalTryCatch(); |
1223 | 1214 |
1224 HandleScope scope(this); | 1215 HandleScope scope(this); |
1225 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { | 1216 if (thread_local_top_.pending_exception_ == |
| 1217 heap()->termination_exception()) { |
1226 // Do nothing: if needed, the exception has been already propagated to | 1218 // Do nothing: if needed, the exception has been already propagated to |
1227 // v8::TryCatch. | 1219 // v8::TryCatch. |
1228 } else { | 1220 } else { |
1229 if (thread_local_top_.has_pending_message_) { | 1221 if (thread_local_top_.has_pending_message_) { |
1230 thread_local_top_.has_pending_message_ = false; | 1222 thread_local_top_.has_pending_message_ = false; |
1231 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { | 1223 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { |
1232 HandleScope scope(this); | 1224 HandleScope scope(this); |
1233 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, | 1225 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, |
1234 this); | 1226 this); |
1235 if (!thread_local_top_.pending_message_script_->IsTheHole()) { | 1227 if (!thread_local_top_.pending_message_script_->IsTheHole()) { |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1752 | 1744 |
1753 | 1745 |
1754 void Isolate::PropagatePendingExceptionToExternalTryCatch() { | 1746 void Isolate::PropagatePendingExceptionToExternalTryCatch() { |
1755 ASSERT(has_pending_exception()); | 1747 ASSERT(has_pending_exception()); |
1756 | 1748 |
1757 bool external_caught = IsExternallyCaught(); | 1749 bool external_caught = IsExternallyCaught(); |
1758 thread_local_top_.external_caught_exception_ = external_caught; | 1750 thread_local_top_.external_caught_exception_ = external_caught; |
1759 | 1751 |
1760 if (!external_caught) return; | 1752 if (!external_caught) return; |
1761 | 1753 |
1762 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { | 1754 if (thread_local_top_.pending_exception_ == |
| 1755 heap()->termination_exception()) { |
1763 try_catch_handler()->can_continue_ = false; | 1756 try_catch_handler()->can_continue_ = false; |
1764 try_catch_handler()->has_terminated_ = true; | 1757 try_catch_handler()->has_terminated_ = true; |
1765 try_catch_handler()->exception_ = heap()->null_value(); | 1758 try_catch_handler()->exception_ = heap()->null_value(); |
1766 } else { | 1759 } else { |
1767 v8::TryCatch* handler = try_catch_handler(); | 1760 v8::TryCatch* handler = try_catch_handler(); |
1768 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || | 1761 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || |
1769 thread_local_top_.pending_message_obj_->IsTheHole()); | 1762 thread_local_top_.pending_message_obj_->IsTheHole()); |
1770 ASSERT(thread_local_top_.pending_message_script_->IsScript() || | 1763 ASSERT(thread_local_top_.pending_message_script_->IsScript() || |
1771 thread_local_top_.pending_message_script_->IsTheHole()); | 1764 thread_local_top_.pending_message_script_->IsTheHole()); |
1772 handler->can_continue_ = true; | 1765 handler->can_continue_ = true; |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2313 Execution::Call(this, microtask, factory()->undefined_value(), | 2306 Execution::Call(this, microtask, factory()->undefined_value(), |
2314 0, NULL).Check(); | 2307 0, NULL).Check(); |
2315 } | 2308 } |
2316 } | 2309 } |
2317 | 2310 |
2318 handle_scope_implementer()->DecrementCallDepth(); | 2311 handle_scope_implementer()->DecrementCallDepth(); |
2319 } | 2312 } |
2320 | 2313 |
2321 | 2314 |
2322 } } // namespace v8::internal | 2315 } } // namespace v8::internal |
OLD | NEW |