[Lldb-commits] [lldb] 9e6a65f - Revert "[lldb] Change dwim-print to default to disabled persistent results"

Dave Lee via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 15 14:00:12 PDT 2023


Author: Dave Lee
Date: 2023-03-15T14:00:00-07:00
New Revision: 9e6a65f52ca6263795d81bde220fb4c80b7b05ec

URL: https://github.com/llvm/llvm-project/commit/9e6a65f52ca6263795d81bde220fb4c80b7b05ec
DIFF: https://github.com/llvm/llvm-project/commit/9e6a65f52ca6263795d81bde220fb4c80b7b05ec.diff

LOG: Revert "[lldb] Change dwim-print to default to disabled persistent results"

This reverts commit 8bad4ae679df6fc7dbd016dccbd3da34206e836b.

Added: 
    

Modified: 
    lldb/source/Commands/CommandObjectDWIMPrint.cpp
    lldb/source/Commands/CommandObjectExpression.cpp
    lldb/source/Commands/CommandObjectExpression.h
    lldb/test/API/commands/dwim-print/TestDWIMPrint.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Commands/CommandObjectDWIMPrint.cpp b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
index 419a27acc818..d8bc7a1e8969 100644
--- a/lldb/source/Commands/CommandObjectDWIMPrint.cpp
+++ b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
@@ -71,10 +71,6 @@ bool CommandObjectDWIMPrint::DoExecute(StringRef command,
     return false;
   }
 
-  // If the user has not specified, default to disabling persistent results.
-  if (m_expr_options.suppress_persistent_result == eLazyBoolCalculate)
-    m_expr_options.suppress_persistent_result = eLazyBoolYes;
-
   auto verbosity = GetDebugger().GetDWIMPrintVerbosity();
 
   Target *target_ptr = m_exe_ctx.GetTargetPtr();

diff  --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp
index 2658677085a2..63b92363369d 100644
--- a/lldb/source/Commands/CommandObjectExpression.cpp
+++ b/lldb/source/Commands/CommandObjectExpression.cpp
@@ -151,7 +151,7 @@ Status CommandObjectExpression::CommandOptions::SetOptionValue(
     bool persist_result =
         OptionArgParser::ToBoolean(option_arg, true, &success);
     if (success)
-      suppress_persistent_result = !persist_result ? eLazyBoolYes : eLazyBoolNo;
+      suppress_persistent_result = !persist_result;
     else
       error.SetErrorStringWithFormat(
           "could not convert \"%s\" to a boolean value.",
@@ -187,7 +187,7 @@ void CommandObjectExpression::CommandOptions::OptionParsingStarting(
   auto_apply_fixits = eLazyBoolCalculate;
   top_level = false;
   allow_jit = true;
-  suppress_persistent_result = eLazyBoolCalculate;
+  suppress_persistent_result = false;
 }
 
 llvm::ArrayRef<OptionDefinition>
@@ -202,9 +202,8 @@ CommandObjectExpression::CommandOptions::GetEvaluateExpressionOptions(
   options.SetCoerceToId(display_opts.use_objc);
   // Explicitly disabling persistent results takes precedence over the
   // m_verbosity/use_objc logic.
-  if (suppress_persistent_result != eLazyBoolCalculate)
-    options.SetSuppressPersistentResult(suppress_persistent_result ==
-                                        eLazyBoolYes);
+  if (suppress_persistent_result)
+    options.SetSuppressPersistentResult(true);
   else if (m_verbosity == eLanguageRuntimeDescriptionDisplayVerbosityCompact)
     options.SetSuppressPersistentResult(display_opts.use_objc);
   options.SetUnwindOnError(unwind_on_error);

diff  --git a/lldb/source/Commands/CommandObjectExpression.h b/lldb/source/Commands/CommandObjectExpression.h
index d6a4bb19fd65..e381a4a5aaf9 100644
--- a/lldb/source/Commands/CommandObjectExpression.h
+++ b/lldb/source/Commands/CommandObjectExpression.h
@@ -53,7 +53,7 @@ class CommandObjectExpression : public CommandObjectRaw,
     lldb::LanguageType language;
     LanguageRuntimeDescriptionDisplayVerbosity m_verbosity;
     LazyBool auto_apply_fixits;
-    LazyBool suppress_persistent_result;
+    bool suppress_persistent_result;
   };
 
   CommandObjectExpression(CommandInterpreter &interpreter);

diff  --git a/lldb/test/API/commands/dwim-print/TestDWIMPrint.py b/lldb/test/API/commands/dwim-print/TestDWIMPrint.py
index 22d18f91d0a5..705e2ef79dde 100644
--- a/lldb/test/API/commands/dwim-print/TestDWIMPrint.py
+++ b/lldb/test/API/commands/dwim-print/TestDWIMPrint.py
@@ -16,16 +16,18 @@ def _run_cmd(self, cmd: str) -> str:
         self.ci.HandleCommand(cmd, result)
         return result.GetOutput().rstrip()
 
-    VAR_IDENT = re.compile(r"(?:\$\d+|\w+) = ")
+    VAR_IDENT_RAW = r"(?:\$\d+|\w+) = "
+    VAR_IDENT = re.compile(VAR_IDENT_RAW)
 
-    def _strip_result_var(self, string: str) -> str:
+    def _mask_persistent_var(self, string: str) -> str:
         """
-        Strip (persistent) result variables (ex '$0 = ', or 'someVar = ', etc).
-
-        This allows for using the output of `expression`/`frame variable`, to
-        compare it to `dwim-print` output, which disables result variables.
+        Replace persistent result variables (ex '$0', '$1', etc) with a regex
+        that matches any persistent result (r'\$\d+'). The returned string can
+        be matched against other `expression` results.
         """
-        return self.VAR_IDENT.subn("", string, 1)[0]
+        before, after = self.VAR_IDENT.split(string, maxsplit=1)
+        # Support either a frame variable (\w+) or a persistent result (\$\d+).
+        return re.escape(before) + self.VAR_IDENT_RAW + re.escape(after)
 
     def _expect_cmd(
         self,
@@ -44,16 +46,19 @@ def _expect_cmd(
         if actual_cmd == "frame variable":
             resolved_cmd = resolved_cmd.replace(" -- ", " ", 1)
 
-        resolved_cmd_output = self._run_cmd(resolved_cmd)
-        dwim_cmd_output = self._strip_result_var(resolved_cmd_output)
+        expected_output = self._run_cmd(resolved_cmd)
 
         # Verify dwim-print chose the expected command.
         self.runCmd("settings set dwim-print-verbosity full")
+        substrs = [f"note: ran `{resolved_cmd}`"]
+        patterns = []
+
+        if self.VAR_IDENT.search(expected_output):
+            patterns.append(self._mask_persistent_var(expected_output))
+        else:
+            substrs.append(expected_output)
 
-        self.expect(dwim_cmd, substrs=[
-            f"note: ran `{resolved_cmd}`",
-            dwim_cmd_output,
-        ])
+        self.expect(dwim_cmd, substrs=substrs, patterns=patterns)
 
     def test_variables(self):
         """Test dwim-print with variables."""


        


More information about the lldb-commits mailing list