| Index: src/inspector/v8-debugger-agent-impl.cc
|
| diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc
|
| index 3e1174e8a1ed394730e35c822f26b12ea5b6c301..9bc3df999cbe23a34f5561b089bd127628a55a3e 100644
|
| --- a/src/inspector/v8-debugger-agent-impl.cc
|
| +++ b/src/inspector/v8-debugger-agent-impl.cc
|
| @@ -60,8 +60,29 @@ static const char kDebuggerNotEnabled[] = "Debugger agent is not enabled";
|
| static const char kDebuggerNotPaused[] =
|
| "Can only perform operation while paused.";
|
|
|
| -static String16 breakpointIdSuffix(
|
| - V8DebuggerAgentImpl::BreakpointSource source) {
|
| +namespace {
|
| +
|
| +void TranslateWasmStackTraceLocations(Array<CallFrame>* stackTrace,
|
| + WasmTranslation* wasmTranslation,
|
| + int context_group_id) {
|
| + for (size_t i = 0, e = stackTrace->length(); i != e; ++i) {
|
| + protocol::Debugger::Location* location = stackTrace->get(i)->getLocation();
|
| + String16 scriptId = location->getScriptId();
|
| + int lineNumber = location->getLineNumber();
|
| + int columnNumber = location->getColumnNumber(-1);
|
| +
|
| + if (!wasmTranslation->TranslateWasmScriptLocationToProtocolLocation(
|
| + &scriptId, &lineNumber, &columnNumber, context_group_id)) {
|
| + continue;
|
| + }
|
| +
|
| + location->setScriptId(std::move(scriptId));
|
| + location->setLineNumber(lineNumber);
|
| + location->setColumnNumber(columnNumber);
|
| + }
|
| +}
|
| +
|
| +String16 breakpointIdSuffix(V8DebuggerAgentImpl::BreakpointSource source) {
|
| switch (source) {
|
| case V8DebuggerAgentImpl::UserBreakpointSource:
|
| break;
|
| @@ -73,9 +94,8 @@ static String16 breakpointIdSuffix(
|
| return String16();
|
| }
|
|
|
| -static String16 generateBreakpointId(
|
| - const ScriptBreakpoint& breakpoint,
|
| - V8DebuggerAgentImpl::BreakpointSource source) {
|
| +String16 generateBreakpointId(const ScriptBreakpoint& breakpoint,
|
| + V8DebuggerAgentImpl::BreakpointSource source) {
|
| String16Builder builder;
|
| builder.append(breakpoint.script_id);
|
| builder.append(':');
|
| @@ -86,13 +106,13 @@ static String16 generateBreakpointId(
|
| return builder.toString();
|
| }
|
|
|
| -static bool positionComparator(const std::pair<int, int>& a,
|
| - const std::pair<int, int>& b) {
|
| +bool positionComparator(const std::pair<int, int>& a,
|
| + const std::pair<int, int>& b) {
|
| if (a.first != b.first) return a.first < b.first;
|
| return a.second < b.second;
|
| }
|
|
|
| -static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(
|
| +std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(
|
| const String16& scriptId, int lineNumber, int columnNumber) {
|
| return protocol::Debugger::Location::create()
|
| .setScriptId(scriptId)
|
| @@ -101,6 +121,8 @@ static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(
|
| .build();
|
| }
|
|
|
| +} // namespace
|
| +
|
| V8DebuggerAgentImpl::V8DebuggerAgentImpl(
|
| V8InspectorSessionImpl* session, protocol::FrontendChannel* frontendChannel,
|
| protocol::DictionaryValue* state)
|
| @@ -503,10 +525,18 @@ V8DebuggerAgentImpl::resolveBreakpoint(const String16& breakpointId,
|
| scriptIterator->second->endLine() < breakpoint.line_number)
|
| return nullptr;
|
|
|
| + ScriptBreakpoint translatedBreakpoint = breakpoint;
|
| + if (m_scripts.count(breakpoint.script_id) == 0) {
|
| + m_debugger->wasmTranslation()
|
| + ->TranslateProtocolLocationToWasmScriptLocation(
|
| + &translatedBreakpoint.script_id, &translatedBreakpoint.line_number,
|
| + &translatedBreakpoint.column_number);
|
| + }
|
| +
|
| int actualLineNumber;
|
| int actualColumnNumber;
|
| String16 debuggerBreakpointId = m_debugger->setBreakpoint(
|
| - breakpoint, &actualLineNumber, &actualColumnNumber);
|
| + translatedBreakpoint, &actualLineNumber, &actualColumnNumber);
|
| if (debuggerBreakpointId.isEmpty()) return nullptr;
|
|
|
| m_serverBreakpoints[debuggerBreakpointId] =
|
| @@ -515,7 +545,7 @@ V8DebuggerAgentImpl::resolveBreakpoint(const String16& breakpointId,
|
|
|
| m_breakpointIdToDebuggerBreakpointIds[breakpointId].push_back(
|
| debuggerBreakpointId);
|
| - return buildProtocolLocation(breakpoint.script_id, actualLineNumber,
|
| + return buildProtocolLocation(translatedBreakpoint.script_id, actualLineNumber,
|
| actualColumnNumber);
|
| }
|
|
|
| @@ -529,9 +559,8 @@ Response V8DebuggerAgentImpl::searchInContent(
|
| return Response::Error("No script for id: " + scriptId);
|
|
|
| std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> matches =
|
| - searchInTextByLinesImpl(m_session,
|
| - toProtocolString(it->second->source(m_isolate)),
|
| - query, optionalCaseSensitive.fromMaybe(false),
|
| + searchInTextByLinesImpl(m_session, it->second->source(m_isolate), query,
|
| + optionalCaseSensitive.fromMaybe(false),
|
| optionalIsRegex.fromMaybe(false));
|
| *results = protocol::Array<protocol::Debugger::SearchMatch>::create();
|
| for (size_t i = 0; i < matches.size(); ++i)
|
| @@ -602,7 +631,7 @@ Response V8DebuggerAgentImpl::getScriptSource(const String16& scriptId,
|
| if (it == m_scripts.end())
|
| return Response::Error("No script for id: " + scriptId);
|
| v8::HandleScope handles(m_isolate);
|
| - *scriptSource = toProtocolString(it->second->source(m_isolate));
|
| + *scriptSource = it->second->source(m_isolate);
|
| return Response::OK();
|
| }
|
|
|
| @@ -1004,6 +1033,8 @@ Response V8DebuggerAgentImpl::currentCallFrames(
|
| protocol::ErrorSupport errorSupport;
|
| *result = Array<CallFrame>::parse(protocolValue.get(), &errorSupport);
|
| if (!*result) return Response::Error(errorSupport.errors());
|
| + TranslateWasmStackTraceLocations(result->get(), m_debugger->wasmTranslation(),
|
| + m_session->contextGroupId());
|
| return Response::OK();
|
| }
|
|
|
| @@ -1017,7 +1048,7 @@ std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace() {
|
| void V8DebuggerAgentImpl::didParseSource(
|
| std::unique_ptr<V8DebuggerScript> script, bool success) {
|
| v8::HandleScope handles(m_isolate);
|
| - String16 scriptSource = toProtocolString(script->source(m_isolate));
|
| + String16 scriptSource = script->source(m_isolate);
|
| if (!success) script->setSourceURL(findSourceURL(scriptSource, false));
|
| if (!success)
|
| script->setSourceMappingURL(findSourceMapURL(scriptSource, false));
|
| @@ -1046,14 +1077,14 @@ void V8DebuggerAgentImpl::didParseSource(
|
| m_frontend.scriptParsed(
|
| scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(),
|
| scriptRef->endLine(), scriptRef->endColumn(),
|
| - scriptRef->executionContextId(), scriptRef->hash(),
|
| + scriptRef->executionContextId(), scriptRef->hash(m_isolate),
|
| std::move(executionContextAuxDataParam), isLiveEditParam,
|
| std::move(sourceMapURLParam), hasSourceURLParam);
|
| else
|
| m_frontend.scriptFailedToParse(
|
| scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(),
|
| scriptRef->endLine(), scriptRef->endColumn(),
|
| - scriptRef->executionContextId(), scriptRef->hash(),
|
| + scriptRef->executionContextId(), scriptRef->hash(m_isolate),
|
| std::move(executionContextAuxDataParam), std::move(sourceMapURLParam),
|
| hasSourceURLParam);
|
|
|
|
|