https://github.com/cmtice updated https://github.com/llvm/llvm-project/pull/107485
>From 15541f354decf80586d590db9f9cb353be04b122 Mon Sep 17 00:00:00 2001 From: Caroline Tice <cmt...@google.com> Date: Thu, 5 Sep 2024 15:51:35 -0700 Subject: [PATCH 1/2] [lldb-dap] Add feature to remember last non-empty expression. Update lldb-dap so if the user just presses return, which sends an empty expression, it re-evaluates the most recent non-empty expression/command. Also udpated test to test this case. --- lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py | 3 +++ lldb/tools/lldb-dap/lldb-dap.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py index 29548a835c6919..9ed0fc564268a7 100644 --- a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py +++ b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py @@ -60,7 +60,10 @@ def run_test_evaluate_expressions( # Expressions at breakpoint 1, which is in main self.assertEvaluate("var1", "20") + # Empty expression should equate to the previous expression. + self.assertEvaluate("", "20") self.assertEvaluate("var2", "21") + self.assertEvaluate("", "21") self.assertEvaluate("static_int", "42") self.assertEvaluate("non_static_int", "43") self.assertEvaluate("struct1.foo", "15") diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp index c5c4b09f15622b..a6a701dc2219fa 100644 --- a/lldb/tools/lldb-dap/lldb-dap.cpp +++ b/lldb/tools/lldb-dap/lldb-dap.cpp @@ -1363,6 +1363,14 @@ void request_evaluate(const llvm::json::Object &request) { lldb::SBFrame frame = g_dap.GetLLDBFrame(*arguments); std::string expression = GetString(arguments, "expression").str(); llvm::StringRef context = GetString(arguments, "context"); + static std::string last_nonempty_expression; + + // Remember the last non-empty expression from the user, and use that if + // the current expression is empty (i.e. the user hit plain 'return'). + if (!expression.empty()) + last_nonempty_expression = expression; + else + expression = last_nonempty_expression; if (context == "repl" && g_dap.DetectExpressionContext(frame, expression) == ExpressionContext::Command) { >From e35928e08f792163dd4886e797bc6de3d16ea6e6 Mon Sep 17 00:00:00 2001 From: Caroline Tice <cmt...@google.com> Date: Fri, 6 Sep 2024 10:02:18 -0700 Subject: [PATCH 2/2] [lldb] Add feature to remember last non-empty expression Make last_nonempty_spression part of DAP struct rather than a static variable. --- lldb/tools/lldb-dap/DAP.h | 1 + lldb/tools/lldb-dap/lldb-dap.cpp | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lldb/tools/lldb-dap/DAP.h b/lldb/tools/lldb-dap/DAP.h index f4fdec6e895ad1..4220c15d3ae70d 100644 --- a/lldb/tools/lldb-dap/DAP.h +++ b/lldb/tools/lldb-dap/DAP.h @@ -205,6 +205,7 @@ struct DAP { std::string command_escape_prefix = "`"; lldb::SBFormat frame_format; lldb::SBFormat thread_format; + std::string last_nonempty_expression; DAP(); ~DAP(); diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp index a6a701dc2219fa..d3728df9183aa1 100644 --- a/lldb/tools/lldb-dap/lldb-dap.cpp +++ b/lldb/tools/lldb-dap/lldb-dap.cpp @@ -1363,14 +1363,13 @@ void request_evaluate(const llvm::json::Object &request) { lldb::SBFrame frame = g_dap.GetLLDBFrame(*arguments); std::string expression = GetString(arguments, "expression").str(); llvm::StringRef context = GetString(arguments, "context"); - static std::string last_nonempty_expression; // Remember the last non-empty expression from the user, and use that if // the current expression is empty (i.e. the user hit plain 'return'). if (!expression.empty()) - last_nonempty_expression = expression; + g_dap.last_nonempty_expression = expression; else - expression = last_nonempty_expression; + expression = g_dap.last_nonempty_expression; if (context == "repl" && g_dap.DetectExpressionContext(frame, expression) == ExpressionContext::Command) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits