Author: John Harrison Date: 2024-11-13T11:17:50-08:00 New Revision: a6d299ddb9398e4641b23ce5c549ca5285dd2ef2
URL: https://github.com/llvm/llvm-project/commit/a6d299ddb9398e4641b23ce5c549ca5285dd2ef2 DIFF: https://github.com/llvm/llvm-project/commit/a6d299ddb9398e4641b23ce5c549ca5285dd2ef2.diff LOG: [lldb-dap] Refactor lldb-dap/DAP.{h,cpp} to use its own instance instead of the global instance. (#115948) The refactor will unblock us for creating multiple DAP instances. Added: Modified: lldb/tools/lldb-dap/DAP.cpp lldb/tools/lldb-dap/DAP.h lldb/tools/lldb-dap/lldb-dap.cpp Removed: ################################################################################ diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp index 10d2d5d79a74bf..bdb24fc78cfb64 100644 --- a/lldb/tools/lldb-dap/DAP.cpp +++ b/lldb/tools/lldb-dap/DAP.cpp @@ -477,12 +477,12 @@ lldb::SBFrame DAP::GetLLDBFrame(const llvm::json::Object &arguments) { llvm::json::Value DAP::CreateTopLevelScopes() { llvm::json::Array scopes; - scopes.emplace_back(CreateScope("Locals", VARREF_LOCALS, - g_dap.variables.locals.GetSize(), false)); + scopes.emplace_back( + CreateScope("Locals", VARREF_LOCALS, variables.locals.GetSize(), false)); scopes.emplace_back(CreateScope("Globals", VARREF_GLOBALS, - g_dap.variables.globals.GetSize(), false)); + variables.globals.GetSize(), false)); scopes.emplace_back(CreateScope("Registers", VARREF_REGS, - g_dap.variables.registers.GetSize(), false)); + variables.registers.GetSize(), false)); return llvm::json::Value(std::move(scopes)); } @@ -490,8 +490,8 @@ ReplMode DAP::DetectReplMode(lldb::SBFrame frame, std::string &expression, bool partial_expression) { // Check for the escape hatch prefix. if (!expression.empty() && - llvm::StringRef(expression).starts_with(g_dap.command_escape_prefix)) { - expression = expression.substr(g_dap.command_escape_prefix.size()); + llvm::StringRef(expression).starts_with(command_escape_prefix)) { + expression = expression.substr(command_escape_prefix.size()); return ReplMode::Command; } @@ -531,7 +531,7 @@ ReplMode DAP::DetectReplMode(lldb::SBFrame frame, std::string &expression, << "Warning: Expression '" << term << "' is both an LLDB command and variable. It will be evaluated as " "a variable. To evaluate the expression as an LLDB command, use '" - << g_dap.command_escape_prefix << "' as a prefix.\n"; + << command_escape_prefix << "' as a prefix.\n"; } // Variables take preference to commands in auto, since commands can always @@ -901,7 +901,7 @@ bool StartDebuggingRequestHandler::DoExecute( return false; } - g_dap.SendReverseRequest( + dap.SendReverseRequest( "startDebugging", llvm::json::Object{{"request", request}, {"configuration", std::move(*configuration)}}, @@ -925,7 +925,7 @@ bool ReplModeRequestHandler::DoExecute(lldb::SBDebugger debugger, // If a new mode is not specified report the current mode. if (!command || llvm::StringRef(command[0]).empty()) { std::string mode; - switch (g_dap.repl_mode) { + switch (dap.repl_mode) { case ReplMode::Variable: mode = "variable"; break; @@ -946,11 +946,11 @@ bool ReplModeRequestHandler::DoExecute(lldb::SBDebugger debugger, llvm::StringRef new_mode{command[0]}; if (new_mode == "variable") { - g_dap.repl_mode = ReplMode::Variable; + dap.repl_mode = ReplMode::Variable; } else if (new_mode == "command") { - g_dap.repl_mode = ReplMode::Command; + dap.repl_mode = ReplMode::Command; } else if (new_mode == "auto") { - g_dap.repl_mode = ReplMode::Auto; + dap.repl_mode = ReplMode::Auto; } else { lldb::SBStream error_message; error_message.Printf("Invalid repl-mode '%s'. Expected one of 'variable', " @@ -1022,7 +1022,7 @@ bool SendEventRequestHandler::DoExecute(lldb::SBDebugger debugger, event.try_emplace("body", std::move(*body)); } - g_dap.SendJSON(llvm::json::Value(std::move(event))); + dap.SendJSON(llvm::json::Value(std::move(event))); result.SetStatus(lldb::eReturnStatusSuccessFinishNoResult); return true; } @@ -1031,14 +1031,13 @@ void DAP::SetFrameFormat(llvm::StringRef format) { if (format.empty()) return; lldb::SBError error; - g_dap.frame_format = lldb::SBFormat(format.str().c_str(), error); + frame_format = lldb::SBFormat(format.str().c_str(), error); if (error.Fail()) { - g_dap.SendOutput( - OutputType::Console, - llvm::formatv( - "The provided frame format '{0}' couldn't be parsed: {1}\n", format, - error.GetCString()) - .str()); + SendOutput(OutputType::Console, + llvm::formatv( + "The provided frame format '{0}' couldn't be parsed: {1}\n", + format, error.GetCString()) + .str()); } } @@ -1046,14 +1045,13 @@ void DAP::SetThreadFormat(llvm::StringRef format) { if (format.empty()) return; lldb::SBError error; - g_dap.thread_format = lldb::SBFormat(format.str().c_str(), error); + thread_format = lldb::SBFormat(format.str().c_str(), error); if (error.Fail()) { - g_dap.SendOutput( - OutputType::Console, - llvm::formatv( - "The provided thread format '{0}' couldn't be parsed: {1}\n", - format, error.GetCString()) - .str()); + SendOutput(OutputType::Console, + llvm::formatv( + "The provided thread format '{0}' couldn't be parsed: {1}\n", + format, error.GetCString()) + .str()); } } diff --git a/lldb/tools/lldb-dap/DAP.h b/lldb/tools/lldb-dap/DAP.h index 1641a58c7dbd06..5381b3271ba96f 100644 --- a/lldb/tools/lldb-dap/DAP.h +++ b/lldb/tools/lldb-dap/DAP.h @@ -116,16 +116,22 @@ struct Variables { }; struct StartDebuggingRequestHandler : public lldb::SBCommandPluginInterface { + DAP &dap; + explicit StartDebuggingRequestHandler(DAP &d) : dap(d) {}; bool DoExecute(lldb::SBDebugger debugger, char **command, lldb::SBCommandReturnObject &result) override; }; struct ReplModeRequestHandler : public lldb::SBCommandPluginInterface { + DAP &dap; + explicit ReplModeRequestHandler(DAP &d) : dap(d) {}; bool DoExecute(lldb::SBDebugger debugger, char **command, lldb::SBCommandReturnObject &result) override; }; struct SendEventRequestHandler : public lldb::SBCommandPluginInterface { + DAP &dap; + explicit SendEventRequestHandler(DAP &d) : dap(d) {}; bool DoExecute(lldb::SBDebugger debugger, char **command, lldb::SBCommandReturnObject &result) override; }; diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp index 180923f1f145a2..fc22ec03b672e6 100644 --- a/lldb/tools/lldb-dap/lldb-dap.cpp +++ b/lldb/tools/lldb-dap/lldb-dap.cpp @@ -1889,14 +1889,14 @@ void request_initialize(const llvm::json::Object &request) { "lldb-dap", "Commands for managing lldb-dap."); if (GetBoolean(arguments, "supportsStartDebuggingRequest", false)) { cmd.AddCommand( - "start-debugging", new StartDebuggingRequestHandler(), + "start-debugging", new StartDebuggingRequestHandler(g_dap), "Sends a startDebugging request from the debug adapter to the client " "to start a child debug session of the same type as the caller."); } cmd.AddCommand( - "repl-mode", new ReplModeRequestHandler(), + "repl-mode", new ReplModeRequestHandler(g_dap), "Get or set the repl behavior of lldb-dap evaluation requests."); - cmd.AddCommand("send-event", new SendEventRequestHandler(), + cmd.AddCommand("send-event", new SendEventRequestHandler(g_dap), "Sends an DAP event to the client."); g_dap.progress_event_thread = std::thread(ProgressEventThreadFunction); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits