| 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 "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 if (function_info.is_null()) { | 750 if (function_info.is_null()) { |
| 751 DCHECK(isolate->has_pending_exception()); | 751 DCHECK(isolate->has_pending_exception()); |
| 752 isolate->clear_pending_exception(); | 752 isolate->clear_pending_exception(); |
| 753 return false; | 753 return false; |
| 754 } | 754 } |
| 755 | 755 |
| 756 // Execute the shared function in the debugger context. | 756 // Execute the shared function in the debugger context. |
| 757 Handle<JSFunction> function = | 757 Handle<JSFunction> function = |
| 758 factory->NewFunctionFromSharedFunctionInfo(function_info, context); | 758 factory->NewFunctionFromSharedFunctionInfo(function_info, context); |
| 759 | 759 |
| 760 Handle<Object> exception; | 760 MaybeHandle<Object> maybe_exception; |
| 761 MaybeHandle<Object> result = | 761 MaybeHandle<Object> result = Execution::TryCall( |
| 762 Execution::TryCall(function, | 762 function, handle(context->global_proxy()), 0, NULL, &maybe_exception); |
| 763 handle(context->global_proxy()), | |
| 764 0, | |
| 765 NULL, | |
| 766 &exception); | |
| 767 | 763 |
| 768 // Check for caught exceptions. | 764 // Check for caught exceptions. |
| 769 if (result.is_null()) { | 765 if (result.is_null()) { |
| 770 DCHECK(!isolate->has_pending_exception()); | 766 DCHECK(!isolate->has_pending_exception()); |
| 771 MessageLocation computed_location; | 767 MessageLocation computed_location; |
| 772 isolate->ComputeLocation(&computed_location); | 768 isolate->ComputeLocation(&computed_location); |
| 773 Handle<Object> message = MessageHandler::MakeMessageObject( | 769 Handle<Object> message = MessageHandler::MakeMessageObject( |
| 774 isolate, "error_loading_debugger", &computed_location, | 770 isolate, "error_loading_debugger", &computed_location, |
| 775 Vector<Handle<Object> >::empty(), Handle<JSArray>()); | 771 Vector<Handle<Object> >::empty(), Handle<JSArray>()); |
| 776 DCHECK(!isolate->has_pending_exception()); | 772 DCHECK(!isolate->has_pending_exception()); |
| 777 if (!exception.is_null()) { | 773 Handle<Object> exception; |
| 774 if (maybe_exception.ToHandle(&exception)) { |
| 778 isolate->set_pending_exception(*exception); | 775 isolate->set_pending_exception(*exception); |
| 779 MessageHandler::ReportMessage(isolate, NULL, message); | 776 MessageHandler::ReportMessage(isolate, NULL, message); |
| 780 isolate->clear_pending_exception(); | 777 isolate->clear_pending_exception(); |
| 781 } | 778 } |
| 782 return false; | 779 return false; |
| 783 } | 780 } |
| 784 | 781 |
| 785 // Mark this script as native and return successfully. | 782 // Mark this script as native and return successfully. |
| 786 Handle<Script> script(Script::cast(function->shared()->script())); | 783 Handle<Script> script(Script::cast(function->shared()->script())); |
| 787 script->set_type(Smi::FromInt(Script::TYPE_NATIVE)); | 784 script->set_type(Smi::FromInt(Script::TYPE_NATIVE)); |
| (...skipping 2070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2858 command.Dispose(); | 2855 command.Dispose(); |
| 2859 return; | 2856 return; |
| 2860 } | 2857 } |
| 2861 | 2858 |
| 2862 Vector<const uc16> command_text( | 2859 Vector<const uc16> command_text( |
| 2863 const_cast<const uc16*>(command.text().start()), | 2860 const_cast<const uc16*>(command.text().start()), |
| 2864 command.text().length()); | 2861 command.text().length()); |
| 2865 Handle<String> request_text = isolate_->factory()->NewStringFromTwoByte( | 2862 Handle<String> request_text = isolate_->factory()->NewStringFromTwoByte( |
| 2866 command_text).ToHandleChecked(); | 2863 command_text).ToHandleChecked(); |
| 2867 Handle<Object> request_args[] = { request_text }; | 2864 Handle<Object> request_args[] = { request_text }; |
| 2868 Handle<Object> exception; | |
| 2869 Handle<Object> answer_value; | 2865 Handle<Object> answer_value; |
| 2870 Handle<String> answer; | 2866 Handle<String> answer; |
| 2871 MaybeHandle<Object> maybe_result = Execution::TryCall( | 2867 MaybeHandle<Object> maybe_exception; |
| 2872 process_debug_request, cmd_processor, 1, request_args, &exception); | 2868 MaybeHandle<Object> maybe_result = |
| 2869 Execution::TryCall(process_debug_request, cmd_processor, 1, |
| 2870 request_args, &maybe_exception); |
| 2873 | 2871 |
| 2874 if (maybe_result.ToHandle(&answer_value)) { | 2872 if (maybe_result.ToHandle(&answer_value)) { |
| 2875 if (answer_value->IsUndefined()) { | 2873 if (answer_value->IsUndefined()) { |
| 2876 answer = isolate_->factory()->empty_string(); | 2874 answer = isolate_->factory()->empty_string(); |
| 2877 } else { | 2875 } else { |
| 2878 answer = Handle<String>::cast(answer_value); | 2876 answer = Handle<String>::cast(answer_value); |
| 2879 } | 2877 } |
| 2880 | 2878 |
| 2881 // Log the JSON request/response. | 2879 // Log the JSON request/response. |
| 2882 if (FLAG_trace_debug_json) { | 2880 if (FLAG_trace_debug_json) { |
| 2883 PrintF("%s\n", request_text->ToCString().get()); | 2881 PrintF("%s\n", request_text->ToCString().get()); |
| 2884 PrintF("%s\n", answer->ToCString().get()); | 2882 PrintF("%s\n", answer->ToCString().get()); |
| 2885 } | 2883 } |
| 2886 | 2884 |
| 2887 Handle<Object> is_running_args[] = { answer }; | 2885 Handle<Object> is_running_args[] = { answer }; |
| 2888 maybe_result = Execution::Call( | 2886 maybe_result = Execution::Call( |
| 2889 isolate_, is_running, cmd_processor, 1, is_running_args); | 2887 isolate_, is_running, cmd_processor, 1, is_running_args); |
| 2890 running = maybe_result.ToHandleChecked()->IsTrue(); | 2888 Handle<Object> result; |
| 2889 if (!maybe_result.ToHandle(&result)) break; |
| 2890 running = result->IsTrue(); |
| 2891 } else { | 2891 } else { |
| 2892 answer = Handle<String>::cast( | 2892 Handle<Object> exception; |
| 2893 Execution::ToString(isolate_, exception).ToHandleChecked()); | 2893 if (!maybe_exception.ToHandle(&exception)) break; |
| 2894 Handle<Object> result; |
| 2895 if (!Execution::ToString(isolate_, exception).ToHandle(&result)) break; |
| 2896 answer = Handle<String>::cast(result); |
| 2894 } | 2897 } |
| 2895 | 2898 |
| 2896 // Return the result. | 2899 // Return the result. |
| 2897 MessageImpl message = MessageImpl::NewResponse( | 2900 MessageImpl message = MessageImpl::NewResponse( |
| 2898 event, running, exec_state, event_data, answer, command.client_data()); | 2901 event, running, exec_state, event_data, answer, command.client_data()); |
| 2899 InvokeMessageHandler(message); | 2902 InvokeMessageHandler(message); |
| 2900 command.Dispose(); | 2903 command.Dispose(); |
| 2901 | 2904 |
| 2902 // Return from debug event processing if either the VM is put into the | 2905 // Return from debug event processing if either the VM is put into the |
| 2903 // running state (through a continue command) or auto continue is active | 2906 // running state (through a continue command) or auto continue is active |
| 2904 // and there are no more commands queued. | 2907 // and there are no more commands queued. |
| 2905 } while (!running || has_commands()); | 2908 } while (!running || has_commands()); |
| 2909 command_queue_.Clear(); |
| 2906 } | 2910 } |
| 2907 | 2911 |
| 2908 | 2912 |
| 2909 void Debug::SetEventListener(Handle<Object> callback, | 2913 void Debug::SetEventListener(Handle<Object> callback, |
| 2910 Handle<Object> data) { | 2914 Handle<Object> data) { |
| 2911 GlobalHandles* global_handles = isolate_->global_handles(); | 2915 GlobalHandles* global_handles = isolate_->global_handles(); |
| 2912 | 2916 |
| 2913 // Remove existing entry. | 2917 // Remove existing entry. |
| 2914 GlobalHandles::Destroy(event_listener_.location()); | 2918 GlobalHandles::Destroy(event_listener_.location()); |
| 2915 event_listener_ = Handle<Object>(); | 2919 event_listener_ = Handle<Object>(); |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3358 logger_->DebugEvent("Put", message.text()); | 3362 logger_->DebugEvent("Put", message.text()); |
| 3359 } | 3363 } |
| 3360 | 3364 |
| 3361 | 3365 |
| 3362 void LockingCommandMessageQueue::Clear() { | 3366 void LockingCommandMessageQueue::Clear() { |
| 3363 base::LockGuard<base::Mutex> lock_guard(&mutex_); | 3367 base::LockGuard<base::Mutex> lock_guard(&mutex_); |
| 3364 queue_.Clear(); | 3368 queue_.Clear(); |
| 3365 } | 3369 } |
| 3366 | 3370 |
| 3367 } } // namespace v8::internal | 3371 } } // namespace v8::internal |
| OLD | NEW |