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 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 debug_global, is_break_point_triggered_string).ToHandleChecked()); | 1044 debug_global, is_break_point_triggered_string).ToHandleChecked()); |
1045 | 1045 |
1046 // Get the break id as an object. | 1046 // Get the break id as an object. |
1047 Handle<Object> break_id = factory->NewNumberFromInt(Debug::break_id()); | 1047 Handle<Object> break_id = factory->NewNumberFromInt(Debug::break_id()); |
1048 | 1048 |
1049 // Call HandleBreakPointx. | 1049 // Call HandleBreakPointx. |
1050 Handle<Object> argv[] = { break_id, break_point_object }; | 1050 Handle<Object> argv[] = { break_id, break_point_object }; |
1051 Handle<Object> result; | 1051 Handle<Object> result; |
1052 if (!Execution::TryCall(check_break_point, | 1052 if (!Execution::TryCall(check_break_point, |
1053 isolate_->js_builtins_object(), | 1053 isolate_->js_builtins_object(), |
1054 ARRAY_SIZE(argv), | 1054 arraysize(argv), |
1055 argv).ToHandle(&result)) { | 1055 argv).ToHandle(&result)) { |
1056 return false; | 1056 return false; |
1057 } | 1057 } |
1058 | 1058 |
1059 // Return whether the break point is triggered. | 1059 // Return whether the break point is triggered. |
1060 return result->IsTrue(); | 1060 return result->IsTrue(); |
1061 } | 1061 } |
1062 | 1062 |
1063 | 1063 |
1064 // Check whether the function has debug information. | 1064 // Check whether the function has debug information. |
(...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2451 return Execution::TryCall(Handle<JSFunction>::cast(constructor), | 2451 return Execution::TryCall(Handle<JSFunction>::cast(constructor), |
2452 handle(debug_context()->global_proxy()), | 2452 handle(debug_context()->global_proxy()), |
2453 argc, | 2453 argc, |
2454 argv); | 2454 argv); |
2455 } | 2455 } |
2456 | 2456 |
2457 | 2457 |
2458 MaybeHandle<Object> Debug::MakeExecutionState() { | 2458 MaybeHandle<Object> Debug::MakeExecutionState() { |
2459 // Create the execution state object. | 2459 // Create the execution state object. |
2460 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()) }; | 2460 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()) }; |
2461 return MakeJSObject("MakeExecutionState", ARRAY_SIZE(argv), argv); | 2461 return MakeJSObject("MakeExecutionState", arraysize(argv), argv); |
2462 } | 2462 } |
2463 | 2463 |
2464 | 2464 |
2465 MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) { | 2465 MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) { |
2466 // Create the new break event object. | 2466 // Create the new break event object. |
2467 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), | 2467 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), |
2468 break_points_hit }; | 2468 break_points_hit }; |
2469 return MakeJSObject("MakeBreakEvent", ARRAY_SIZE(argv), argv); | 2469 return MakeJSObject("MakeBreakEvent", arraysize(argv), argv); |
2470 } | 2470 } |
2471 | 2471 |
2472 | 2472 |
2473 MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception, | 2473 MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception, |
2474 bool uncaught, | 2474 bool uncaught, |
2475 Handle<Object> promise) { | 2475 Handle<Object> promise) { |
2476 // Create the new exception event object. | 2476 // Create the new exception event object. |
2477 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), | 2477 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()), |
2478 exception, | 2478 exception, |
2479 isolate_->factory()->ToBoolean(uncaught), | 2479 isolate_->factory()->ToBoolean(uncaught), |
2480 promise }; | 2480 promise }; |
2481 return MakeJSObject("MakeExceptionEvent", ARRAY_SIZE(argv), argv); | 2481 return MakeJSObject("MakeExceptionEvent", arraysize(argv), argv); |
2482 } | 2482 } |
2483 | 2483 |
2484 | 2484 |
2485 MaybeHandle<Object> Debug::MakeCompileEvent(Handle<Script> script, | 2485 MaybeHandle<Object> Debug::MakeCompileEvent(Handle<Script> script, |
2486 v8::DebugEvent type) { | 2486 v8::DebugEvent type) { |
2487 // Create the compile event object. | 2487 // Create the compile event object. |
2488 Handle<Object> script_wrapper = Script::GetWrapper(script); | 2488 Handle<Object> script_wrapper = Script::GetWrapper(script); |
2489 Handle<Object> argv[] = { script_wrapper, | 2489 Handle<Object> argv[] = { script_wrapper, |
2490 isolate_->factory()->NewNumberFromInt(type) }; | 2490 isolate_->factory()->NewNumberFromInt(type) }; |
2491 return MakeJSObject("MakeCompileEvent", ARRAY_SIZE(argv), argv); | 2491 return MakeJSObject("MakeCompileEvent", arraysize(argv), argv); |
2492 } | 2492 } |
2493 | 2493 |
2494 | 2494 |
2495 MaybeHandle<Object> Debug::MakePromiseEvent(Handle<JSObject> event_data) { | 2495 MaybeHandle<Object> Debug::MakePromiseEvent(Handle<JSObject> event_data) { |
2496 // Create the promise event object. | 2496 // Create the promise event object. |
2497 Handle<Object> argv[] = { event_data }; | 2497 Handle<Object> argv[] = { event_data }; |
2498 return MakeJSObject("MakePromiseEvent", ARRAY_SIZE(argv), argv); | 2498 return MakeJSObject("MakePromiseEvent", arraysize(argv), argv); |
2499 } | 2499 } |
2500 | 2500 |
2501 | 2501 |
2502 MaybeHandle<Object> Debug::MakeAsyncTaskEvent(Handle<JSObject> task_event) { | 2502 MaybeHandle<Object> Debug::MakeAsyncTaskEvent(Handle<JSObject> task_event) { |
2503 // Create the async task event object. | 2503 // Create the async task event object. |
2504 Handle<Object> argv[] = { task_event }; | 2504 Handle<Object> argv[] = { task_event }; |
2505 return MakeJSObject("MakeAsyncTaskEvent", ARRAY_SIZE(argv), argv); | 2505 return MakeJSObject("MakeAsyncTaskEvent", arraysize(argv), argv); |
2506 } | 2506 } |
2507 | 2507 |
2508 | 2508 |
2509 void Debug::OnThrow(Handle<Object> exception, bool uncaught) { | 2509 void Debug::OnThrow(Handle<Object> exception, bool uncaught) { |
2510 if (in_debug_scope() || ignore_events()) return; | 2510 if (in_debug_scope() || ignore_events()) return; |
2511 HandleScope scope(isolate_); | 2511 HandleScope scope(isolate_); |
2512 OnException(exception, uncaught, isolate_->GetPromiseOnStackOnThrow()); | 2512 OnException(exception, uncaught, isolate_->GetPromiseOnStackOnThrow()); |
2513 } | 2513 } |
2514 | 2514 |
2515 | 2515 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2641 DCHECK(update_script_break_points->IsJSFunction()); | 2641 DCHECK(update_script_break_points->IsJSFunction()); |
2642 | 2642 |
2643 // Wrap the script object in a proper JS object before passing it | 2643 // Wrap the script object in a proper JS object before passing it |
2644 // to JavaScript. | 2644 // to JavaScript. |
2645 Handle<Object> wrapper = Script::GetWrapper(script); | 2645 Handle<Object> wrapper = Script::GetWrapper(script); |
2646 | 2646 |
2647 // Call UpdateScriptBreakPoints expect no exceptions. | 2647 // Call UpdateScriptBreakPoints expect no exceptions. |
2648 Handle<Object> argv[] = { wrapper }; | 2648 Handle<Object> argv[] = { wrapper }; |
2649 if (Execution::TryCall(Handle<JSFunction>::cast(update_script_break_points), | 2649 if (Execution::TryCall(Handle<JSFunction>::cast(update_script_break_points), |
2650 isolate_->js_builtins_object(), | 2650 isolate_->js_builtins_object(), |
2651 ARRAY_SIZE(argv), | 2651 arraysize(argv), |
2652 argv).is_null()) { | 2652 argv).is_null()) { |
2653 return; | 2653 return; |
2654 } | 2654 } |
2655 | 2655 |
2656 // Create the compile state object. | 2656 // Create the compile state object. |
2657 Handle<Object> event_data; | 2657 Handle<Object> event_data; |
2658 // Bail out and don't call debugger if exception. | 2658 // Bail out and don't call debugger if exception. |
2659 if (!MakeCompileEvent(script, v8::AfterCompile).ToHandle(&event_data)) return; | 2659 if (!MakeCompileEvent(script, v8::AfterCompile).ToHandle(&event_data)) return; |
2660 | 2660 |
2661 // Process debug event. | 2661 // Process debug event. |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2758 DCHECK(!isolate_->has_scheduled_exception()); | 2758 DCHECK(!isolate_->has_scheduled_exception()); |
2759 } else { | 2759 } else { |
2760 // Invoke the JavaScript debug event listener. | 2760 // Invoke the JavaScript debug event listener. |
2761 DCHECK(event_listener_->IsJSFunction()); | 2761 DCHECK(event_listener_->IsJSFunction()); |
2762 Handle<Object> argv[] = { Handle<Object>(Smi::FromInt(event), isolate_), | 2762 Handle<Object> argv[] = { Handle<Object>(Smi::FromInt(event), isolate_), |
2763 exec_state, | 2763 exec_state, |
2764 event_data, | 2764 event_data, |
2765 event_listener_data_ }; | 2765 event_listener_data_ }; |
2766 Handle<JSReceiver> global(isolate_->global_proxy()); | 2766 Handle<JSReceiver> global(isolate_->global_proxy()); |
2767 Execution::TryCall(Handle<JSFunction>::cast(event_listener_), | 2767 Execution::TryCall(Handle<JSFunction>::cast(event_listener_), |
2768 global, ARRAY_SIZE(argv), argv); | 2768 global, arraysize(argv), argv); |
2769 } | 2769 } |
2770 } | 2770 } |
2771 | 2771 |
2772 | 2772 |
2773 Handle<Context> Debug::GetDebugContext() { | 2773 Handle<Context> Debug::GetDebugContext() { |
2774 DebugScope debug_scope(this); | 2774 DebugScope debug_scope(this); |
2775 // The global handle may be destroyed soon after. Return it reboxed. | 2775 // The global handle may be destroyed soon after. Return it reboxed. |
2776 return handle(*debug_context(), isolate_); | 2776 return handle(*debug_context(), isolate_); |
2777 } | 2777 } |
2778 | 2778 |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2997 Handle<Object> exec_state; | 2997 Handle<Object> exec_state; |
2998 if (!MakeExecutionState().ToHandle(&exec_state)) { | 2998 if (!MakeExecutionState().ToHandle(&exec_state)) { |
2999 return isolate_->factory()->undefined_value(); | 2999 return isolate_->factory()->undefined_value(); |
3000 } | 3000 } |
3001 | 3001 |
3002 Handle<Object> argv[] = { exec_state, data }; | 3002 Handle<Object> argv[] = { exec_state, data }; |
3003 return Execution::Call( | 3003 return Execution::Call( |
3004 isolate_, | 3004 isolate_, |
3005 fun, | 3005 fun, |
3006 Handle<Object>(debug_context()->global_proxy(), isolate_), | 3006 Handle<Object>(debug_context()->global_proxy(), isolate_), |
3007 ARRAY_SIZE(argv), | 3007 arraysize(argv), |
3008 argv); | 3008 argv); |
3009 } | 3009 } |
3010 | 3010 |
3011 | 3011 |
3012 void Debug::HandleDebugBreak() { | 3012 void Debug::HandleDebugBreak() { |
3013 // Ignore debug break during bootstrapping. | 3013 // Ignore debug break during bootstrapping. |
3014 if (isolate_->bootstrapper()->IsActive()) return; | 3014 if (isolate_->bootstrapper()->IsActive()) return; |
3015 // Just continue if breaks are disabled. | 3015 // Just continue if breaks are disabled. |
3016 if (break_disabled_) return; | 3016 if (break_disabled_) return; |
3017 // Ignore debug break if debugger is not active. | 3017 // Ignore debug break if debugger is not active. |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3358 logger_->DebugEvent("Put", message.text()); | 3358 logger_->DebugEvent("Put", message.text()); |
3359 } | 3359 } |
3360 | 3360 |
3361 | 3361 |
3362 void LockingCommandMessageQueue::Clear() { | 3362 void LockingCommandMessageQueue::Clear() { |
3363 base::LockGuard<base::Mutex> lock_guard(&mutex_); | 3363 base::LockGuard<base::Mutex> lock_guard(&mutex_); |
3364 queue_.Clear(); | 3364 queue_.Clear(); |
3365 } | 3365 } |
3366 | 3366 |
3367 } } // namespace v8::internal | 3367 } } // namespace v8::internal |
OLD | NEW |