This revision was automatically updated to reflect the committed changes.
Closed by commit rG6a4905ae2d65: [lldb] Mark expressions that couldn't be 
parsed or executed as failed… (authored by teemperor).
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76280/new/

https://reviews.llvm.org/D76280

Files:
  lldb/source/Commands/CommandObjectExpression.cpp
  lldb/source/Commands/CommandObjectExpression.h
  lldb/test/API/commands/statistics/basic/TestStats.py


Index: lldb/test/API/commands/statistics/basic/TestStats.py
===================================================================
--- lldb/test/API/commands/statistics/basic/TestStats.py
+++ lldb/test/API/commands/statistics/basic/TestStats.py
@@ -21,6 +21,20 @@
         self.expect("statistics dump", substrs=['expr evaluation successes : 
1\n',
                                                 'expr evaluation failures : 
0\n'])
 
+        self.expect("statistics enable")
+        # Doesn't parse.
+        self.expect("expr doesnt_exist", error=True,
+                    substrs=["undeclared identifier 'doesnt_exist'"])
+        # Doesn't successfully execute.
+        self.expect("expr int *i = nullptr; *i", error=True)
+        # Interpret an integer as an array with 3 elements is also a failure.
+        self.expect("expr -Z 3 -- 1", error=True,
+                    substrs=["expression cannot be used with --element-count"])
+        self.expect("statistics disable")
+        # We should have gotten 3 new failures and the previous success.
+        self.expect("statistics dump", substrs=['expr evaluation successes : 
1\n',
+                                                'expr evaluation failures : 
3\n'])
+
         # 'frame var' with disabled statistics shouldn't change stats.
         self.expect("frame var", substrs=['27'])
 
Index: lldb/source/Commands/CommandObjectExpression.h
===================================================================
--- lldb/source/Commands/CommandObjectExpression.h
+++ lldb/source/Commands/CommandObjectExpression.h
@@ -71,6 +71,16 @@
   /// expression in the given target.
   EvaluateExpressionOptions GetEvalOptions(const Target &target);
 
+  /// Evaluates the given expression.
+  /// \param output_stream The stream to which the evaluation result will be
+  ///                      printed.
+  /// \param error_stream Contains error messages that should be displayed to
+  ///                     the user in case the evaluation fails.
+  /// \param result A CommandReturnObject which status will be set to the
+  ///               appropriate value depending on evaluation success and
+  ///               whether the expression produced any result.
+  /// \return Returns true iff the expression was successfully evaluated,
+  ///         executed and the result could be printed to the output stream.
   bool EvaluateExpression(llvm::StringRef expr, Stream &output_stream,
                           Stream &error_stream, CommandReturnObject &result);
 
Index: lldb/source/Commands/CommandObjectExpression.cpp
===================================================================
--- lldb/source/Commands/CommandObjectExpression.cpp
+++ lldb/source/Commands/CommandObjectExpression.cpp
@@ -486,7 +486,8 @@
     }
   }
 
-  return true;
+  return (success != eExpressionSetupError &&
+          success != eExpressionParseError);
 }
 
 void CommandObjectExpression::IOHandlerInputComplete(IOHandler &io_handler,


Index: lldb/test/API/commands/statistics/basic/TestStats.py
===================================================================
--- lldb/test/API/commands/statistics/basic/TestStats.py
+++ lldb/test/API/commands/statistics/basic/TestStats.py
@@ -21,6 +21,20 @@
         self.expect("statistics dump", substrs=['expr evaluation successes : 1\n',
                                                 'expr evaluation failures : 0\n'])
 
+        self.expect("statistics enable")
+        # Doesn't parse.
+        self.expect("expr doesnt_exist", error=True,
+                    substrs=["undeclared identifier 'doesnt_exist'"])
+        # Doesn't successfully execute.
+        self.expect("expr int *i = nullptr; *i", error=True)
+        # Interpret an integer as an array with 3 elements is also a failure.
+        self.expect("expr -Z 3 -- 1", error=True,
+                    substrs=["expression cannot be used with --element-count"])
+        self.expect("statistics disable")
+        # We should have gotten 3 new failures and the previous success.
+        self.expect("statistics dump", substrs=['expr evaluation successes : 1\n',
+                                                'expr evaluation failures : 3\n'])
+
         # 'frame var' with disabled statistics shouldn't change stats.
         self.expect("frame var", substrs=['27'])
 
Index: lldb/source/Commands/CommandObjectExpression.h
===================================================================
--- lldb/source/Commands/CommandObjectExpression.h
+++ lldb/source/Commands/CommandObjectExpression.h
@@ -71,6 +71,16 @@
   /// expression in the given target.
   EvaluateExpressionOptions GetEvalOptions(const Target &target);
 
+  /// Evaluates the given expression.
+  /// \param output_stream The stream to which the evaluation result will be
+  ///                      printed.
+  /// \param error_stream Contains error messages that should be displayed to
+  ///                     the user in case the evaluation fails.
+  /// \param result A CommandReturnObject which status will be set to the
+  ///               appropriate value depending on evaluation success and
+  ///               whether the expression produced any result.
+  /// \return Returns true iff the expression was successfully evaluated,
+  ///         executed and the result could be printed to the output stream.
   bool EvaluateExpression(llvm::StringRef expr, Stream &output_stream,
                           Stream &error_stream, CommandReturnObject &result);
 
Index: lldb/source/Commands/CommandObjectExpression.cpp
===================================================================
--- lldb/source/Commands/CommandObjectExpression.cpp
+++ lldb/source/Commands/CommandObjectExpression.cpp
@@ -486,7 +486,8 @@
     }
   }
 
-  return true;
+  return (success != eExpressionSetupError &&
+          success != eExpressionParseError);
 }
 
 void CommandObjectExpression::IOHandlerInputComplete(IOHandler &io_handler,
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to