[Lldb-commits] [lldb] [lldb-dap] Add feature to remember last non-empty expression. (PR #107485)
Walter Erquinigo via lldb-commits
lldb-commits at lists.llvm.org
Thu Sep 12 11:28:28 PDT 2024
================
@@ -1364,8 +1364,20 @@ void request_evaluate(const llvm::json::Object &request) {
std::string expression = GetString(arguments, "expression").str();
llvm::StringRef context = GetString(arguments, "context");
- if (context == "repl" && g_dap.DetectExpressionContext(frame, expression) ==
- ExpressionContext::Command) {
+ if (context == "repl" &&
+ ((!expression.empty() &&
+ g_dap.DetectExpressionContext(frame, expression) ==
+ ExpressionContext::Command) ||
+ (expression.empty() &&
+ g_dap.last_expression_context == ExpressionContext::Command))) {
+ // If the current expression is empty, and the last expression context was
+ // for a command, pass the empty expression along to the
+ // CommandInterpreter, to repeat the previous command. Also set the
+ // expression context properly for the next (possibly empty) expression.
+ g_dap.last_expression_context = ExpressionContext::Command;
+ // Since the current expression context is not for a variable, clear the
+ // last_nonempty_var_expression field.
+ g_dap.last_nonempty_var_expression.clear();
----------------
walter-erquinigo wrote:
It would be cleaner if this gets stored in a sort of discriminated union:
LastExpressionInfo:
- Case Command (no metadata)
- Case Var (expression)
this way it's easier to maintain these two variables correctly in sync
https://github.com/llvm/llvm-project/pull/107485
More information about the lldb-commits
mailing list