| Index: src/inspector/v8-debugger.cc
|
| diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc
|
| index 780ba8a3dc8ca283d8ef09437ffeacf56e49fd7e..dbaed23448207a33af4ad6a09452533e2bd311a9 100644
|
| --- a/src/inspector/v8-debugger.cc
|
| +++ b/src/inspector/v8-debugger.cc
|
| @@ -56,7 +56,8 @@ V8Debugger::V8Debugger(v8::Isolate* isolate, V8InspectorImpl* inspector)
|
| m_runningNestedMessageLoop(false),
|
| m_ignoreScriptParsedEventsCounter(0),
|
| m_maxAsyncCallStackDepth(0),
|
| - m_pauseOnExceptionsState(v8::DebugInterface::NoBreakOnException) {}
|
| + m_pauseOnExceptionsState(v8::DebugInterface::NoBreakOnException),
|
| + m_wasmTranslation(isolate, this) {}
|
|
|
| V8Debugger::~V8Debugger() {}
|
|
|
| @@ -82,6 +83,7 @@ void V8Debugger::disable() {
|
| m_debuggerScript.Reset();
|
| m_debuggerContext.Reset();
|
| allAsyncTasksCanceled();
|
| + m_wasmTranslation.Clear();
|
| v8::DebugInterface::SetDebugEventListener(m_isolate, nullptr);
|
| }
|
|
|
| @@ -574,12 +576,25 @@ void V8Debugger::handleV8DebugEvent(
|
|
|
| V8DebuggerAgentImpl* agent =
|
| m_inspector->enabledDebuggerAgentForGroup(getGroupId(eventContext));
|
| - if (agent) {
|
| - v8::HandleScope scope(m_isolate);
|
| - if (m_ignoreScriptParsedEventsCounter == 0 &&
|
| - (event == v8::AfterCompile || event == v8::CompileError)) {
|
| - v8::Local<v8::Context> context = debuggerContext();
|
| - v8::Context::Scope contextScope(context);
|
| + if (!agent) return;
|
| +
|
| + v8::HandleScope scope(m_isolate);
|
| + if (event == v8::AfterCompile || event == v8::CompileError) {
|
| + v8::Context::Scope contextScope(debuggerContext());
|
| + // Determine if the script is a wasm script.
|
| + v8::Local<v8::Value> scriptMirror =
|
| + callInternalGetterFunction(eventDetails.GetEventData(), "script");
|
| + DCHECK(scriptMirror->IsObject());
|
| + v8::Local<v8::Value> scriptWrapper =
|
| + callInternalGetterFunction(scriptMirror.As<v8::Object>(), "value");
|
| + DCHECK(scriptWrapper->IsObject());
|
| + v8::Local<v8::DebugInterface::Script> script =
|
| + v8::DebugInterface::Script::Wrap(m_isolate,
|
| + scriptWrapper.As<v8::Object>())
|
| + .ToLocalChecked();
|
| + if (script->IsWasm()) {
|
| + m_wasmTranslation.AddScript(scriptWrapper.As<v8::Object>());
|
| + } else if (m_ignoreScriptParsedEventsCounter == 0) {
|
| v8::Local<v8::Value> argv[] = {eventDetails.GetEventData()};
|
| v8::Local<v8::Value> value =
|
| callDebuggerMethod("getAfterCompileScript", 1, argv).ToLocalChecked();
|
| @@ -593,29 +608,28 @@ void V8Debugger::handleV8DebugEvent(
|
| agent->didParseSource(
|
| wrapUnique(new V8DebuggerScript(m_isolate, script, inLiveEditScope)),
|
| event == v8::AfterCompile);
|
| - } else if (event == v8::Exception) {
|
| - v8::Local<v8::Context> context = debuggerContext();
|
| - v8::Local<v8::Object> eventData = eventDetails.GetEventData();
|
| - v8::Local<v8::Value> exception =
|
| - callInternalGetterFunction(eventData, "exception");
|
| - v8::Local<v8::Value> promise =
|
| - callInternalGetterFunction(eventData, "promise");
|
| - bool isPromiseRejection = !promise.IsEmpty() && promise->IsObject();
|
| - v8::Local<v8::Value> uncaught =
|
| - callInternalGetterFunction(eventData, "uncaught");
|
| - bool isUncaught = uncaught->BooleanValue(context).FromJust();
|
| - handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
|
| - exception, v8::Local<v8::Array>(), isPromiseRejection,
|
| - isUncaught);
|
| - } else if (event == v8::Break) {
|
| - v8::Local<v8::Value> argv[] = {eventDetails.GetEventData()};
|
| - v8::Local<v8::Value> hitBreakpoints =
|
| - callDebuggerMethod("getBreakpointNumbers", 1, argv).ToLocalChecked();
|
| - DCHECK(hitBreakpoints->IsArray());
|
| - handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
|
| - v8::Local<v8::Value>(),
|
| - hitBreakpoints.As<v8::Array>());
|
| }
|
| + } else if (event == v8::Exception) {
|
| + v8::Local<v8::Context> context = debuggerContext();
|
| + v8::Local<v8::Object> eventData = eventDetails.GetEventData();
|
| + v8::Local<v8::Value> exception =
|
| + callInternalGetterFunction(eventData, "exception");
|
| + v8::Local<v8::Value> promise =
|
| + callInternalGetterFunction(eventData, "promise");
|
| + bool isPromiseRejection = !promise.IsEmpty() && promise->IsObject();
|
| + v8::Local<v8::Value> uncaught =
|
| + callInternalGetterFunction(eventData, "uncaught");
|
| + bool isUncaught = uncaught->BooleanValue(context).FromJust();
|
| + handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
|
| + exception, v8::Local<v8::Array>(), isPromiseRejection,
|
| + isUncaught);
|
| + } else if (event == v8::Break) {
|
| + v8::Local<v8::Value> argv[] = {eventDetails.GetEventData()};
|
| + v8::Local<v8::Value> hitBreakpoints =
|
| + callDebuggerMethod("getBreakpointNumbers", 1, argv).ToLocalChecked();
|
| + DCHECK(hitBreakpoints->IsArray());
|
| + handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
|
| + v8::Local<v8::Value>(), hitBreakpoints.As<v8::Array>());
|
| }
|
| }
|
|
|
|
|