| 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 "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/ast.h" | 9 #include "src/ast.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 881 Object* script = reinterpret_cast<Object*>(handler->message_script_); | 881 Object* script = reinterpret_cast<Object*>(handler->message_script_); |
| 882 ASSERT(message->IsJSMessageObject() || message->IsTheHole()); | 882 ASSERT(message->IsJSMessageObject() || message->IsTheHole()); |
| 883 ASSERT(script->IsScript() || script->IsTheHole()); | 883 ASSERT(script->IsScript() || script->IsTheHole()); |
| 884 thread_local_top()->pending_message_obj_ = message; | 884 thread_local_top()->pending_message_obj_ = message; |
| 885 thread_local_top()->pending_message_script_ = script; | 885 thread_local_top()->pending_message_script_ = script; |
| 886 thread_local_top()->pending_message_start_pos_ = handler->message_start_pos_; | 886 thread_local_top()->pending_message_start_pos_ = handler->message_start_pos_; |
| 887 thread_local_top()->pending_message_end_pos_ = handler->message_end_pos_; | 887 thread_local_top()->pending_message_end_pos_ = handler->message_end_pos_; |
| 888 } | 888 } |
| 889 | 889 |
| 890 | 890 |
| 891 void Isolate::CancelScheduledExceptionFromTryCatch(v8::TryCatch* handler) { |
| 892 ASSERT(has_scheduled_exception()); |
| 893 if (scheduled_exception() == handler->exception_) { |
| 894 ASSERT(scheduled_exception() != heap()->termination_exception()); |
| 895 clear_scheduled_exception(); |
| 896 } |
| 897 } |
| 898 |
| 899 |
| 891 Object* Isolate::PromoteScheduledException() { | 900 Object* Isolate::PromoteScheduledException() { |
| 892 Object* thrown = scheduled_exception(); | 901 Object* thrown = scheduled_exception(); |
| 893 clear_scheduled_exception(); | 902 clear_scheduled_exception(); |
| 894 // Re-throw the exception to avoid getting repeated error reporting. | 903 // Re-throw the exception to avoid getting repeated error reporting. |
| 895 return ReThrow(thrown); | 904 return ReThrow(thrown); |
| 896 } | 905 } |
| 897 | 906 |
| 898 | 907 |
| 899 void Isolate::PrintCurrentStackTrace(FILE* out) { | 908 void Isolate::PrintCurrentStackTrace(FILE* out) { |
| 900 StackTraceFrameIterator it(this); | 909 StackTraceFrameIterator it(this); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1184 | 1193 |
| 1185 return false; | 1194 return false; |
| 1186 } | 1195 } |
| 1187 | 1196 |
| 1188 | 1197 |
| 1189 void Isolate::ReportPendingMessages() { | 1198 void Isolate::ReportPendingMessages() { |
| 1190 ASSERT(has_pending_exception()); | 1199 ASSERT(has_pending_exception()); |
| 1191 bool can_clear_message = PropagatePendingExceptionToExternalTryCatch(); | 1200 bool can_clear_message = PropagatePendingExceptionToExternalTryCatch(); |
| 1192 | 1201 |
| 1193 HandleScope scope(this); | 1202 HandleScope scope(this); |
| 1194 if (thread_local_top_.pending_exception_ == | 1203 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { |
| 1195 heap()->termination_exception()) { | |
| 1196 // Do nothing: if needed, the exception has been already propagated to | 1204 // Do nothing: if needed, the exception has been already propagated to |
| 1197 // v8::TryCatch. | 1205 // v8::TryCatch. |
| 1198 } else { | 1206 } else { |
| 1199 if (thread_local_top_.has_pending_message_) { | 1207 if (thread_local_top_.has_pending_message_) { |
| 1200 thread_local_top_.has_pending_message_ = false; | 1208 thread_local_top_.has_pending_message_ = false; |
| 1201 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { | 1209 if (!thread_local_top_.pending_message_obj_->IsTheHole()) { |
| 1202 HandleScope scope(this); | 1210 HandleScope scope(this); |
| 1203 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, | 1211 Handle<Object> message_obj(thread_local_top_.pending_message_obj_, |
| 1204 this); | 1212 this); |
| 1205 if (!thread_local_top_.pending_message_script_->IsTheHole()) { | 1213 if (!thread_local_top_.pending_message_script_->IsTheHole()) { |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1732 return true; | 1740 return true; |
| 1733 } | 1741 } |
| 1734 | 1742 |
| 1735 bool catchable_by_js = is_catchable_by_javascript(pending_exception()); | 1743 bool catchable_by_js = is_catchable_by_javascript(pending_exception()); |
| 1736 if (catchable_by_js && IsFinallyOnTop()) { | 1744 if (catchable_by_js && IsFinallyOnTop()) { |
| 1737 thread_local_top_.external_caught_exception_ = false; | 1745 thread_local_top_.external_caught_exception_ = false; |
| 1738 return false; | 1746 return false; |
| 1739 } | 1747 } |
| 1740 | 1748 |
| 1741 thread_local_top_.external_caught_exception_ = true; | 1749 thread_local_top_.external_caught_exception_ = true; |
| 1742 if (thread_local_top_.pending_exception_ == | 1750 if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { |
| 1743 heap()->termination_exception()) { | |
| 1744 try_catch_handler()->can_continue_ = false; | 1751 try_catch_handler()->can_continue_ = false; |
| 1745 try_catch_handler()->has_terminated_ = true; | 1752 try_catch_handler()->has_terminated_ = true; |
| 1746 try_catch_handler()->exception_ = heap()->null_value(); | 1753 try_catch_handler()->exception_ = heap()->null_value(); |
| 1747 } else { | 1754 } else { |
| 1748 v8::TryCatch* handler = try_catch_handler(); | 1755 v8::TryCatch* handler = try_catch_handler(); |
| 1749 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || | 1756 ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() || |
| 1750 thread_local_top_.pending_message_obj_->IsTheHole()); | 1757 thread_local_top_.pending_message_obj_->IsTheHole()); |
| 1751 ASSERT(thread_local_top_.pending_message_script_->IsScript() || | 1758 ASSERT(thread_local_top_.pending_message_script_->IsScript() || |
| 1752 thread_local_top_.pending_message_script_->IsTheHole()); | 1759 thread_local_top_.pending_message_script_->IsTheHole()); |
| 1753 handler->can_continue_ = true; | 1760 handler->can_continue_ = true; |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2351 if (prev_ && prev_->Intercept(flag)) return true; | 2358 if (prev_ && prev_->Intercept(flag)) return true; |
| 2352 // Then check whether this scope intercepts. | 2359 // Then check whether this scope intercepts. |
| 2353 if ((flag & intercept_mask_)) { | 2360 if ((flag & intercept_mask_)) { |
| 2354 intercepted_flags_ |= flag; | 2361 intercepted_flags_ |= flag; |
| 2355 return true; | 2362 return true; |
| 2356 } | 2363 } |
| 2357 return false; | 2364 return false; |
| 2358 } | 2365 } |
| 2359 | 2366 |
| 2360 } } // namespace v8::internal | 2367 } } // namespace v8::internal |
| OLD | NEW |