| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 Handle<Script> casted_script(Script::cast(script)); | 683 Handle<Script> casted_script(Script::cast(script)); |
| 684 *target = MessageLocation(casted_script, pos, pos + 1); | 684 *target = MessageLocation(casted_script, pos, pos + 1); |
| 685 } | 685 } |
| 686 } | 686 } |
| 687 } | 687 } |
| 688 | 688 |
| 689 | 689 |
| 690 void Top::ReportUncaughtException(Handle<Object> exception, | 690 void Top::ReportUncaughtException(Handle<Object> exception, |
| 691 MessageLocation* location, | 691 MessageLocation* location, |
| 692 Handle<String> stack_trace) { | 692 Handle<String> stack_trace) { |
| 693 Handle<Object> message = | 693 Handle<Object> message; |
| 694 MessageHandler::MakeMessageObject("uncaught_exception", | 694 if (!Bootstrapper::IsActive()) { |
| 695 location, | 695 // It's not safe to try to make message objects while the bootstrapper |
| 696 HandleVector<Object>(&exception, 1), | 696 // is active since the infrastructure may not have been properly |
| 697 stack_trace); | 697 // initialized. |
| 698 | 698 message = |
| 699 MessageHandler::MakeMessageObject("uncaught_exception", |
| 700 location, |
| 701 HandleVector<Object>(&exception, 1), |
| 702 stack_trace); |
| 703 } |
| 699 // Report the uncaught exception. | 704 // Report the uncaught exception. |
| 700 MessageHandler::ReportMessage(location, message); | 705 MessageHandler::ReportMessage(location, message); |
| 701 } | 706 } |
| 702 | 707 |
| 703 | 708 |
| 704 bool Top::ShouldReturnException(bool* is_caught_externally, | 709 bool Top::ShouldReturnException(bool* is_caught_externally, |
| 705 bool catchable_by_javascript) { | 710 bool catchable_by_javascript) { |
| 706 // Find the top-most try-catch handler. | 711 // Find the top-most try-catch handler. |
| 707 StackHandler* handler = | 712 StackHandler* handler = |
| 708 StackHandler::FromAddress(Top::handler(Top::GetCurrentThread())); | 713 StackHandler::FromAddress(Top::handler(Top::GetCurrentThread())); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 MessageLocation potential_computed_location; | 767 MessageLocation potential_computed_location; |
| 763 bool try_catch_needs_message = | 768 bool try_catch_needs_message = |
| 764 is_caught_externally && | 769 is_caught_externally && |
| 765 thread_local_.try_catch_handler_->capture_message_; | 770 thread_local_.try_catch_handler_->capture_message_; |
| 766 if (report_exception || try_catch_needs_message) { | 771 if (report_exception || try_catch_needs_message) { |
| 767 if (location == NULL) { | 772 if (location == NULL) { |
| 768 // If no location was specified we use a computed one instead | 773 // If no location was specified we use a computed one instead |
| 769 ComputeLocation(&potential_computed_location); | 774 ComputeLocation(&potential_computed_location); |
| 770 location = &potential_computed_location; | 775 location = &potential_computed_location; |
| 771 } | 776 } |
| 772 Handle<String> stack_trace; | 777 if (!Bootstrapper::IsActive()) { |
| 773 if (FLAG_trace_exception) stack_trace = StackTrace(); | 778 // It's not safe to try to make message objects or collect stack |
| 774 message_obj = MessageHandler::MakeMessageObject("uncaught_exception", | 779 // traces while the bootstrapper is active since the infrastructure |
| 775 location, HandleVector<Object>(&exception_handle, 1), stack_trace); | 780 // may not have been properly initialized. |
| 781 Handle<String> stack_trace; |
| 782 if (FLAG_trace_exception) stack_trace = StackTrace(); |
| 783 message_obj = MessageHandler::MakeMessageObject("uncaught_exception", |
| 784 location, HandleVector<Object>(&exception_handle, 1), stack_trace); |
| 785 } |
| 776 } | 786 } |
| 777 | 787 |
| 778 // Save the message for reporting if the the exception remains uncaught. | 788 // Save the message for reporting if the the exception remains uncaught. |
| 779 thread_local_.has_pending_message_ = report_exception; | 789 thread_local_.has_pending_message_ = report_exception; |
| 780 thread_local_.pending_message_ = message; | 790 thread_local_.pending_message_ = message; |
| 781 if (!message_obj.is_null()) { | 791 if (!message_obj.is_null()) { |
| 782 thread_local_.pending_message_obj_ = *message_obj; | 792 thread_local_.pending_message_obj_ = *message_obj; |
| 783 if (location != NULL) { | 793 if (location != NULL) { |
| 784 thread_local_.pending_message_script_ = *location->script(); | 794 thread_local_.pending_message_script_ = *location->script(); |
| 785 thread_local_.pending_message_start_pos_ = location->start_pos(); | 795 thread_local_.pending_message_start_pos_ = location->start_pos(); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 Top::break_access_->Lock(); | 973 Top::break_access_->Lock(); |
| 964 } | 974 } |
| 965 | 975 |
| 966 | 976 |
| 967 ExecutionAccess::~ExecutionAccess() { | 977 ExecutionAccess::~ExecutionAccess() { |
| 968 Top::break_access_->Unlock(); | 978 Top::break_access_->Unlock(); |
| 969 } | 979 } |
| 970 | 980 |
| 971 | 981 |
| 972 } } // namespace v8::internal | 982 } } // namespace v8::internal |
| OLD | NEW |