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 <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/api.h" | 9 #include "src/api.h" |
10 #include "src/arguments.h" | 10 #include "src/arguments.h" |
(...skipping 2026 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2037 if (!IsFrameBlackboxed(it.javascript_frame())) return false; | 2037 if (!IsFrameBlackboxed(it.javascript_frame())) return false; |
2038 } | 2038 } |
2039 return true; | 2039 return true; |
2040 } | 2040 } |
2041 | 2041 |
2042 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id, | 2042 void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id, |
2043 int parent_id) { | 2043 int parent_id) { |
2044 if (in_debug_scope() || ignore_events()) return; | 2044 if (in_debug_scope() || ignore_events()) return; |
2045 if (!debug_delegate_) return; | 2045 if (!debug_delegate_) return; |
2046 SuppressDebug while_processing(this); | 2046 SuppressDebug while_processing(this); |
2047 DebugScope debug_scope(isolate_->debug()); | |
2048 if (debug_scope.failed()) return; | |
2049 HandleScope scope(isolate_); | |
2050 PostponeInterruptsScope no_interrupts(isolate_); | 2047 PostponeInterruptsScope no_interrupts(isolate_); |
2051 DisableBreak no_recursive_break(this); | 2048 DisableBreak no_recursive_break(this); |
2052 bool created_by_user = false; | 2049 bool created_by_user = false; |
2053 if (type == debug::kDebugPromiseCreated) { | 2050 if (type == debug::kDebugPromiseCreated) { |
2054 JavaScriptFrameIterator it(isolate_); | 2051 JavaScriptFrameIterator it(isolate_); |
2055 // We need to skip top frame which contains instrumentation. | 2052 // We need to skip top frame which contains instrumentation. |
2056 it.Advance(); | 2053 it.Advance(); |
2057 created_by_user = | 2054 created_by_user = |
2058 !it.done() && | 2055 !it.done() && |
2059 !IsFrameBlackboxed(it.frame()); | 2056 !IsFrameBlackboxed(it.frame()); |
2060 } | 2057 } |
2061 debug_delegate_->PromiseEventOccurred( | 2058 debug_delegate_->PromiseEventOccurred(type, id, parent_id, created_by_user); |
2062 Utils::ToLocal(debug_scope.GetContext()), type, id, parent_id, | |
2063 created_by_user); | |
2064 } | 2059 } |
2065 | 2060 |
2066 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) { | 2061 void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) { |
2067 // Attach the correct debug id to the script. The debug id is used by the | 2062 // Attach the correct debug id to the script. The debug id is used by the |
2068 // inspector to filter scripts by native context. | 2063 // inspector to filter scripts by native context. |
2069 script->set_context_data(isolate_->native_context()->debug_context_id()); | 2064 script->set_context_data(isolate_->native_context()->debug_context_id()); |
2070 if (ignore_events()) return; | 2065 if (ignore_events()) return; |
2071 if (!script->IsUserJavaScript() && script->type() != i::Script::TYPE_WASM) { | 2066 if (!script->IsUserJavaScript() && script->type() != i::Script::TYPE_WASM) { |
2072 return; | 2067 return; |
2073 } | 2068 } |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2339 DCHECK(isolate_->needs_side_effect_check()); | 2334 DCHECK(isolate_->needs_side_effect_check()); |
2340 if (DebugEvaluate::CallbackHasNoSideEffect(function)) return true; | 2335 if (DebugEvaluate::CallbackHasNoSideEffect(function)) return true; |
2341 side_effect_check_failed_ = true; | 2336 side_effect_check_failed_ = true; |
2342 // Throw an uncatchable termination exception. | 2337 // Throw an uncatchable termination exception. |
2343 isolate_->TerminateExecution(); | 2338 isolate_->TerminateExecution(); |
2344 isolate_->OptionalRescheduleException(false); | 2339 isolate_->OptionalRescheduleException(false); |
2345 return false; | 2340 return false; |
2346 } | 2341 } |
2347 | 2342 |
2348 void LegacyDebugDelegate::PromiseEventOccurred( | 2343 void LegacyDebugDelegate::PromiseEventOccurred( |
2349 v8::Local<v8::Context> context, v8::debug::PromiseDebugActionType type, | 2344 v8::debug::PromiseDebugActionType type, int id, int parent_id, |
2350 int id, int parent_id, bool created_by_user) { | 2345 bool created_by_user) { |
| 2346 DebugScope debug_scope(isolate_->debug()); |
| 2347 if (debug_scope.failed()) return; |
| 2348 HandleScope scope(isolate_); |
2351 Handle<Object> event_data; | 2349 Handle<Object> event_data; |
2352 if (isolate_->debug()->MakeAsyncTaskEvent(type, id).ToHandle(&event_data)) { | 2350 if (isolate_->debug()->MakeAsyncTaskEvent(type, id).ToHandle(&event_data)) { |
2353 ProcessDebugEvent(v8::AsyncTaskEvent, Handle<JSObject>::cast(event_data)); | 2351 ProcessDebugEvent(v8::AsyncTaskEvent, Handle<JSObject>::cast(event_data)); |
2354 } | 2352 } |
2355 } | 2353 } |
2356 | 2354 |
2357 void LegacyDebugDelegate::ScriptCompiled(v8::Local<v8::debug::Script> script, | 2355 void LegacyDebugDelegate::ScriptCompiled(v8::Local<v8::debug::Script> script, |
2358 bool is_compile_error) { | 2356 bool is_compile_error) { |
2359 Handle<Object> event_data; | 2357 Handle<Object> event_data; |
2360 v8::DebugEvent event = is_compile_error ? v8::CompileError : v8::AfterCompile; | 2358 v8::DebugEvent event = is_compile_error ? v8::CompileError : v8::AfterCompile; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2494 isolate_->Throw(*isolate_->factory()->NewEvalError( | 2492 isolate_->Throw(*isolate_->factory()->NewEvalError( |
2495 MessageTemplate::kNoSideEffectDebugEvaluate)); | 2493 MessageTemplate::kNoSideEffectDebugEvaluate)); |
2496 } | 2494 } |
2497 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_); | 2495 isolate_->set_needs_side_effect_check(old_needs_side_effect_check_); |
2498 isolate_->debug()->UpdateHookOnFunctionCall(); | 2496 isolate_->debug()->UpdateHookOnFunctionCall(); |
2499 isolate_->debug()->side_effect_check_failed_ = false; | 2497 isolate_->debug()->side_effect_check_failed_ = false; |
2500 } | 2498 } |
2501 | 2499 |
2502 } // namespace internal | 2500 } // namespace internal |
2503 } // namespace v8 | 2501 } // namespace v8 |
OLD | NEW |