| 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/debug/debug.h" | 5 #include "src/debug/debug.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 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 if (has_break_points && !check_result->IsUndefined()) return false; | 725 if (has_break_points && !check_result->IsUndefined()) return false; |
| 726 } | 726 } |
| 727 return has_break_points_at_all; | 727 return has_break_points_at_all; |
| 728 } | 728 } |
| 729 | 729 |
| 730 | 730 |
| 731 MaybeHandle<Object> Debug::CallFunction(const char* name, int argc, | 731 MaybeHandle<Object> Debug::CallFunction(const char* name, int argc, |
| 732 Handle<Object> args[]) { | 732 Handle<Object> args[]) { |
| 733 PostponeInterruptsScope no_interrupts(isolate_); | 733 PostponeInterruptsScope no_interrupts(isolate_); |
| 734 AssertDebugContext(); | 734 AssertDebugContext(); |
| 735 Handle<Object> holder = isolate_->natives_utils_object(); | 735 Handle<JSReceiver> holder = |
| 736 Handle<JSReceiver>::cast(isolate_->natives_utils_object()); |
| 736 Handle<JSFunction> fun = Handle<JSFunction>::cast( | 737 Handle<JSFunction> fun = Handle<JSFunction>::cast( |
| 737 Object::GetProperty(isolate_, holder, name).ToHandleChecked()); | 738 JSReceiver::GetProperty(isolate_, holder, name).ToHandleChecked()); |
| 738 Handle<Object> undefined = isolate_->factory()->undefined_value(); | 739 Handle<Object> undefined = isolate_->factory()->undefined_value(); |
| 739 return Execution::TryCall(isolate_, fun, undefined, argc, args); | 740 return Execution::TryCall(isolate_, fun, undefined, argc, args); |
| 740 } | 741 } |
| 741 | 742 |
| 742 | 743 |
| 743 // Check whether a single break point object is triggered. | 744 // Check whether a single break point object is triggered. |
| 744 bool Debug::CheckBreakPoint(Handle<Object> break_point_object) { | 745 bool Debug::CheckBreakPoint(Handle<Object> break_point_object) { |
| 745 Factory* factory = isolate_->factory(); | 746 Factory* factory = isolate_->factory(); |
| 746 HandleScope scope(isolate_); | 747 HandleScope scope(isolate_); |
| 747 | 748 |
| (...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2091 | 2092 |
| 2092 // If auto continue don't make the event cause a break, but process messages | 2093 // If auto continue don't make the event cause a break, but process messages |
| 2093 // in the queue if any. For script collected events don't even process | 2094 // in the queue if any. For script collected events don't even process |
| 2094 // messages in the queue as the execution state might not be what is expected | 2095 // messages in the queue as the execution state might not be what is expected |
| 2095 // by the client. | 2096 // by the client. |
| 2096 if (auto_continue && !has_commands()) return; | 2097 if (auto_continue && !has_commands()) return; |
| 2097 | 2098 |
| 2098 // DebugCommandProcessor goes here. | 2099 // DebugCommandProcessor goes here. |
| 2099 bool running = auto_continue; | 2100 bool running = auto_continue; |
| 2100 | 2101 |
| 2101 Handle<Object> cmd_processor_ctor = Object::GetProperty( | 2102 Handle<Object> cmd_processor_ctor = |
| 2102 isolate_, exec_state, "debugCommandProcessor").ToHandleChecked(); | 2103 JSReceiver::GetProperty(isolate_, exec_state, "debugCommandProcessor") |
| 2104 .ToHandleChecked(); |
| 2103 Handle<Object> ctor_args[] = { isolate_->factory()->ToBoolean(running) }; | 2105 Handle<Object> ctor_args[] = { isolate_->factory()->ToBoolean(running) }; |
| 2104 Handle<Object> cmd_processor = Execution::Call( | 2106 Handle<JSReceiver> cmd_processor = Handle<JSReceiver>::cast( |
| 2105 isolate_, cmd_processor_ctor, exec_state, 1, ctor_args).ToHandleChecked(); | 2107 Execution::Call(isolate_, cmd_processor_ctor, exec_state, 1, ctor_args) |
| 2108 .ToHandleChecked()); |
| 2106 Handle<JSFunction> process_debug_request = Handle<JSFunction>::cast( | 2109 Handle<JSFunction> process_debug_request = Handle<JSFunction>::cast( |
| 2107 Object::GetProperty( | 2110 JSReceiver::GetProperty(isolate_, cmd_processor, "processDebugRequest") |
| 2108 isolate_, cmd_processor, "processDebugRequest").ToHandleChecked()); | 2111 .ToHandleChecked()); |
| 2109 Handle<Object> is_running = Object::GetProperty( | 2112 Handle<Object> is_running = |
| 2110 isolate_, cmd_processor, "isRunning").ToHandleChecked(); | 2113 JSReceiver::GetProperty(isolate_, cmd_processor, "isRunning") |
| 2114 .ToHandleChecked(); |
| 2111 | 2115 |
| 2112 // Process requests from the debugger. | 2116 // Process requests from the debugger. |
| 2113 do { | 2117 do { |
| 2114 // Wait for new command in the queue. | 2118 // Wait for new command in the queue. |
| 2115 command_received_.Wait(); | 2119 command_received_.Wait(); |
| 2116 | 2120 |
| 2117 // Get the command from the queue. | 2121 // Get the command from the queue. |
| 2118 CommandMessage command = command_queue_.Get(); | 2122 CommandMessage command = command_queue_.Get(); |
| 2119 isolate_->logger()->DebugTag( | 2123 isolate_->logger()->DebugTag( |
| 2120 "Got request from command queue, in interactive loop."); | 2124 "Got request from command queue, in interactive loop."); |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2493 return v8::Utils::ToLocal(event_data_); | 2497 return v8::Utils::ToLocal(event_data_); |
| 2494 } | 2498 } |
| 2495 | 2499 |
| 2496 | 2500 |
| 2497 v8::Local<v8::String> MessageImpl::GetJSON() const { | 2501 v8::Local<v8::String> MessageImpl::GetJSON() const { |
| 2498 Isolate* isolate = event_data_->GetIsolate(); | 2502 Isolate* isolate = event_data_->GetIsolate(); |
| 2499 v8::EscapableHandleScope scope(reinterpret_cast<v8::Isolate*>(isolate)); | 2503 v8::EscapableHandleScope scope(reinterpret_cast<v8::Isolate*>(isolate)); |
| 2500 | 2504 |
| 2501 if (IsEvent()) { | 2505 if (IsEvent()) { |
| 2502 // Call toJSONProtocol on the debug event object. | 2506 // Call toJSONProtocol on the debug event object. |
| 2503 Handle<Object> fun = Object::GetProperty( | 2507 Handle<Object> fun = |
| 2504 isolate, event_data_, "toJSONProtocol").ToHandleChecked(); | 2508 JSReceiver::GetProperty(isolate, event_data_, "toJSONProtocol") |
| 2509 .ToHandleChecked(); |
| 2505 if (!fun->IsJSFunction()) { | 2510 if (!fun->IsJSFunction()) { |
| 2506 return v8::Local<v8::String>(); | 2511 return v8::Local<v8::String>(); |
| 2507 } | 2512 } |
| 2508 | 2513 |
| 2509 MaybeHandle<Object> maybe_json = | 2514 MaybeHandle<Object> maybe_json = |
| 2510 Execution::TryCall(isolate, fun, event_data_, 0, NULL); | 2515 Execution::TryCall(isolate, fun, event_data_, 0, NULL); |
| 2511 Handle<Object> json; | 2516 Handle<Object> json; |
| 2512 if (!maybe_json.ToHandle(&json) || !json->IsString()) { | 2517 if (!maybe_json.ToHandle(&json) || !json->IsString()) { |
| 2513 return v8::Local<v8::String>(); | 2518 return v8::Local<v8::String>(); |
| 2514 } | 2519 } |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2668 } | 2673 } |
| 2669 | 2674 |
| 2670 | 2675 |
| 2671 void LockingCommandMessageQueue::Clear() { | 2676 void LockingCommandMessageQueue::Clear() { |
| 2672 base::LockGuard<base::Mutex> lock_guard(&mutex_); | 2677 base::LockGuard<base::Mutex> lock_guard(&mutex_); |
| 2673 queue_.Clear(); | 2678 queue_.Clear(); |
| 2674 } | 2679 } |
| 2675 | 2680 |
| 2676 } // namespace internal | 2681 } // namespace internal |
| 2677 } // namespace v8 | 2682 } // namespace v8 |
| OLD | NEW |