| 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 1728 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1739 v8::Local<v8::Context> GetDebugEventContext(Isolate* isolate) { |  1739 v8::Local<v8::Context> GetDebugEventContext(Isolate* isolate) { | 
|  1740   Handle<Context> context = isolate->debug()->debugger_entry()->GetContext(); |  1740   Handle<Context> context = isolate->debug()->debugger_entry()->GetContext(); | 
|  1741   // Isolate::context() may have been NULL when "script collected" event |  1741   // Isolate::context() may have been NULL when "script collected" event | 
|  1742   // occured. |  1742   // occured. | 
|  1743   if (context.is_null()) return v8::Local<v8::Context>(); |  1743   if (context.is_null()) return v8::Local<v8::Context>(); | 
|  1744   Handle<Context> native_context(context->native_context()); |  1744   Handle<Context> native_context(context->native_context()); | 
|  1745   return v8::Utils::ToLocal(native_context); |  1745   return v8::Utils::ToLocal(native_context); | 
|  1746 } |  1746 } | 
|  1747 }  // anonymous namespace |  1747 }  // anonymous namespace | 
|  1748  |  1748  | 
 |  1749 bool Debug::IsExceptionBlackboxed(bool uncaught) { | 
 |  1750   JavaScriptFrameIterator it(isolate_); | 
 |  1751   if (it.done()) return false; | 
 |  1752   // Uncaught exception is blackboxed if all current frames are blackboxed, | 
 |  1753   // caught exception if top frame is blackboxed. | 
 |  1754   bool is_top_frame_blackboxed = IsFrameBlackboxed(it.frame()); | 
 |  1755   if (!uncaught || !is_top_frame_blackboxed) return is_top_frame_blackboxed; | 
 |  1756   it.Advance(); | 
 |  1757   while (!it.done()) { | 
 |  1758     if (!IsFrameBlackboxed(it.frame())) return false; | 
 |  1759     it.Advance(); | 
 |  1760   } | 
 |  1761   return true; | 
 |  1762 } | 
 |  1763  | 
 |  1764 bool Debug::IsFrameBlackboxed(JavaScriptFrame* frame) { | 
 |  1765   HandleScope scope(isolate_); | 
 |  1766   if (!frame->HasInlinedFrames()) { | 
 |  1767     return IsBlackboxed(frame->function()->shared()); | 
 |  1768   } | 
 |  1769   List<SharedFunctionInfo*> raw_shareds; | 
 |  1770   frame->GetFunctions(&raw_shareds); | 
 |  1771   List<Handle<SharedFunctionInfo>> shareds; | 
 |  1772   for (int i = 0; i < raw_shareds.length(); ++i) { | 
 |  1773     shareds.Add(handle(raw_shareds[i])); | 
 |  1774   } | 
 |  1775   for (int i = 0; i < shareds.length(); ++i) { | 
 |  1776     if (!IsBlackboxed(shareds[i])) return false; | 
 |  1777   } | 
 |  1778   return true; | 
 |  1779 } | 
 |  1780  | 
|  1749 void Debug::OnException(Handle<Object> exception, Handle<Object> promise) { |  1781 void Debug::OnException(Handle<Object> exception, Handle<Object> promise) { | 
|  1750   // We cannot generate debug events when JS execution is disallowed. |  1782   // We cannot generate debug events when JS execution is disallowed. | 
|  1751   // TODO(5530): Reenable debug events within DisallowJSScopes once relevant |  1783   // TODO(5530): Reenable debug events within DisallowJSScopes once relevant | 
|  1752   // code (MakeExceptionEvent and ProcessDebugEvent) have been moved to C++. |  1784   // code (MakeExceptionEvent and ProcessDebugEvent) have been moved to C++. | 
|  1753   if (!AllowJavascriptExecution::IsAllowed(isolate_)) return; |  1785   if (!AllowJavascriptExecution::IsAllowed(isolate_)) return; | 
|  1754  |  1786  | 
|  1755   Isolate::CatchType catch_type = isolate_->PredictExceptionCatcher(); |  1787   Isolate::CatchType catch_type = isolate_->PredictExceptionCatcher(); | 
|  1756  |  1788  | 
|  1757   // Don't notify listener of exceptions that are internal to a desugaring. |  1789   // Don't notify listener of exceptions that are internal to a desugaring. | 
|  1758   if (catch_type == Isolate::CAUGHT_BY_DESUGARING) return; |  1790   if (catch_type == Isolate::CAUGHT_BY_DESUGARING) return; | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  1771     // Uncaught exceptions are reported by either flags. |  1803     // Uncaught exceptions are reported by either flags. | 
|  1772     if (!(break_on_uncaught_exception_ || break_on_exception_)) return; |  1804     if (!(break_on_uncaught_exception_ || break_on_exception_)) return; | 
|  1773   } else { |  1805   } else { | 
|  1774     // Caught exceptions are reported is activated. |  1806     // Caught exceptions are reported is activated. | 
|  1775     if (!break_on_exception_) return; |  1807     if (!break_on_exception_) return; | 
|  1776   } |  1808   } | 
|  1777  |  1809  | 
|  1778   { |  1810   { | 
|  1779     JavaScriptFrameIterator it(isolate_); |  1811     JavaScriptFrameIterator it(isolate_); | 
|  1780     // Check whether the top frame is blackboxed or the break location is muted. |  1812     // Check whether the top frame is blackboxed or the break location is muted. | 
|  1781     if (!it.done() && (IsBlackboxed(it.frame()->function()->shared()) || |  1813     if (!it.done() && (IsMutedAtCurrentLocation(it.frame()) || | 
|  1782                        IsMutedAtCurrentLocation(it.frame()))) { |  1814                        IsExceptionBlackboxed(uncaught))) { | 
|  1783       return; |  1815       return; | 
|  1784     } |  1816     } | 
|  1785   } |  1817   } | 
|  1786  |  1818  | 
|  1787   DebugScope debug_scope(this); |  1819   DebugScope debug_scope(this); | 
|  1788   if (debug_scope.failed()) return; |  1820   if (debug_scope.failed()) return; | 
|  1789  |  1821  | 
|  1790   if (debug_delegate_) { |  1822   if (debug_delegate_) { | 
|  1791     HandleScope scope(isolate_); |  1823     HandleScope scope(isolate_); | 
|  1792  |  1824  | 
| (...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2397   return v8::Utils::ToLocal(callback_data_); |  2429   return v8::Utils::ToLocal(callback_data_); | 
|  2398 } |  2430 } | 
|  2399  |  2431  | 
|  2400  |  2432  | 
|  2401 v8::Isolate* EventDetailsImpl::GetIsolate() const { |  2433 v8::Isolate* EventDetailsImpl::GetIsolate() const { | 
|  2402   return reinterpret_cast<v8::Isolate*>(exec_state_->GetIsolate()); |  2434   return reinterpret_cast<v8::Isolate*>(exec_state_->GetIsolate()); | 
|  2403 } |  2435 } | 
|  2404  |  2436  | 
|  2405 }  // namespace internal |  2437 }  // namespace internal | 
|  2406 }  // namespace v8 |  2438 }  // namespace v8 | 
| OLD | NEW |