[Lldb-commits] [lldb] 0f628fd - Revert "[lldb] Support custom LLVM formatting for variables (#81196)"

Dave Lee via lldb-commits lldb-commits at lists.llvm.org
Tue Apr 30 16:16:13 PDT 2024


Author: Dave Lee
Date: 2024-04-30T16:15:19-07:00
New Revision: 0f628fdb1aa8be97a5d86c3259b8caaa997790ec

URL: https://github.com/llvm/llvm-project/commit/0f628fdb1aa8be97a5d86c3259b8caaa997790ec
DIFF: https://github.com/llvm/llvm-project/commit/0f628fdb1aa8be97a5d86c3259b8caaa997790ec.diff

LOG: Revert "[lldb] Support custom LLVM formatting for variables (#81196)"

This reverts commit 7a8d15e919dde70118dbfa34e927be1705ded67d.

Added: 
    

Modified: 
    lldb/docs/use/variable.rst
    lldb/source/Core/FormatEntity.cpp

Removed: 
    lldb/test/API/functionalities/data-formatter/custom-printf-summary/Makefile
    lldb/test/API/functionalities/data-formatter/custom-printf-summary/TestCustomSummaryLLVMFormat.py
    lldb/test/API/functionalities/data-formatter/custom-printf-summary/main.c


################################################################################
diff  --git a/lldb/docs/use/variable.rst b/lldb/docs/use/variable.rst
index e9175b25336ba9..8eaed6405315b4 100644
--- a/lldb/docs/use/variable.rst
+++ b/lldb/docs/use/variable.rst
@@ -460,15 +460,6 @@ summary strings, regardless of the format they have applied to their types. To
 do that, you can use %format inside an expression path, as in ${var.x->x%u},
 which would display the value of x as an unsigned integer.
 
-Additionally, custom output can be achieved by using an LLVM format string,
-commencing with the ``:`` marker. To illustrate, compare ``${var.byte%x}`` and
-``${var.byte:x-}``. The former uses lldb's builtin hex formatting (``x``),
-which unconditionally inserts a ``0x`` prefix, and also zero pads the value to
-match the size of the type. The latter uses ``llvm::formatv`` formatting
-(``:x-``), and will print only the hex value, with no ``0x`` prefix, and no
-padding. This raw control is useful when composing multiple pieces into a
-larger whole.
-
 You can also use some other special format markers, not available for formats
 themselves, but which carry a special meaning when used in this context:
 

diff  --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp
index da5b1cfce74ac8..ba62e26252591f 100644
--- a/lldb/source/Core/FormatEntity.cpp
+++ b/lldb/source/Core/FormatEntity.cpp
@@ -57,7 +57,6 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/Support/Regex.h"
 #include "llvm/TargetParser/Triple.h"
 
 #include <cctype>
@@ -659,38 +658,6 @@ static char ConvertValueObjectStyleToChar(
   return '\0';
 }
 
-static llvm::Regex LLVMFormatPattern{"x[-+]?\\d*|n|d", llvm::Regex::IgnoreCase};
-
-static bool DumpValueWithLLVMFormat(Stream &s, llvm::StringRef options,
-                                    ValueObject &valobj) {
-  std::string formatted;
-  std::string llvm_format = ("{0:" + options + "}").str();
-
-  // Options supported by format_provider<T> for integral arithmetic types.
-  // See table in FormatProviders.h.
-
-  auto type_info = valobj.GetTypeInfo();
-  if (type_info & eTypeIsInteger && LLVMFormatPattern.match(options)) {
-    if (type_info & eTypeIsSigned) {
-      bool success = false;
-      int64_t integer = valobj.GetValueAsSigned(0, &success);
-      if (success)
-        formatted = llvm::formatv(llvm_format.data(), integer);
-    } else {
-      bool success = false;
-      uint64_t integer = valobj.GetValueAsUnsigned(0, &success);
-      if (success)
-        formatted = llvm::formatv(llvm_format.data(), integer);
-    }
-  }
-
-  if (formatted.empty())
-    return false;
-
-  s.Write(formatted.data(), formatted.size());
-  return true;
-}
-
 static bool DumpValue(Stream &s, const SymbolContext *sc,
                       const ExecutionContext *exe_ctx,
                       const FormatEntity::Entry &entry, ValueObject *valobj) {
@@ -761,12 +728,9 @@ static bool DumpValue(Stream &s, const SymbolContext *sc,
     return RunScriptFormatKeyword(s, sc, exe_ctx, valobj, entry.string.c_str());
   }
 
-  auto split = llvm::StringRef(entry.string).split(':');
-  auto subpath = split.first;
-  auto llvm_format = split.second;
-
+  llvm::StringRef subpath(entry.string);
   // simplest case ${var}, just print valobj's value
-  if (subpath.empty()) {
+  if (entry.string.empty()) {
     if (entry.printf_format.empty() && entry.fmt == eFormatDefault &&
         entry.number == ValueObject::eValueObjectRepresentationStyleValue)
       was_plain_var = true;
@@ -775,7 +739,7 @@ static bool DumpValue(Stream &s, const SymbolContext *sc,
     target = valobj;
   } else // this is ${var.something} or multiple .something nested
   {
-    if (subpath[0] == '[')
+    if (entry.string[0] == '[')
       was_var_indexed = true;
     ScanBracketedRange(subpath, close_bracket_index,
                        var_name_final_if_array_range, index_lower,
@@ -783,11 +747,14 @@ static bool DumpValue(Stream &s, const SymbolContext *sc,
 
     Status error;
 
-    LLDB_LOG(log, "[Debugger::FormatPrompt] symbol to expand: {0}", subpath);
+    const std::string &expr_path = entry.string;
+
+    LLDB_LOGF(log, "[Debugger::FormatPrompt] symbol to expand: %s",
+              expr_path.c_str());
 
     target =
         valobj
-            ->GetValueForExpressionPath(subpath, &reason_to_stop,
+            ->GetValueForExpressionPath(expr_path.c_str(), &reason_to_stop,
                                         &final_value_type, options, &what_next)
             .get();
 
@@ -916,18 +883,8 @@ static bool DumpValue(Stream &s, const SymbolContext *sc,
   }
 
   if (!is_array_range) {
-    if (!llvm_format.empty()) {
-      if (DumpValueWithLLVMFormat(s, llvm_format, *target)) {
-        LLDB_LOGF(log, "dumping using llvm format");
-        return true;
-      } else {
-        LLDB_LOG(
-            log,
-            "empty output using llvm format '{0}' - with type info flags {1}",
-            entry.printf_format, target->GetTypeInfo());
-      }
-    }
-    LLDB_LOGF(log, "dumping ordinary printable output");
+    LLDB_LOGF(log,
+              "[Debugger::FormatPrompt] dumping ordinary printable output");
     return target->DumpPrintableRepresentation(s, val_obj_display,
                                                custom_format);
   } else {
@@ -2270,13 +2227,6 @@ static Status ParseInternal(llvm::StringRef &format, Entry &parent_entry,
           if (error.Fail())
             return error;
 
-          auto [_, llvm_format] = llvm::StringRef(entry.string).split(':');
-          if (!LLVMFormatPattern.match(llvm_format)) {
-            error.SetErrorStringWithFormat("invalid llvm format: '%s'",
-                                           llvm_format.data());
-            return error;
-          }
-
           if (verify_is_thread_id) {
             if (entry.type != Entry::Type::ThreadID &&
                 entry.type != Entry::Type::ThreadProtocolID) {

diff  --git a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/Makefile b/lldb/test/API/functionalities/data-formatter/custom-printf-summary/Makefile
deleted file mode 100644
index c9319d6e6888a4..00000000000000
--- a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-C_SOURCES := main.c
-include Makefile.rules

diff  --git a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/TestCustomSummaryLLVMFormat.py b/lldb/test/API/functionalities/data-formatter/custom-printf-summary/TestCustomSummaryLLVMFormat.py
deleted file mode 100644
index d6906a49463bac..00000000000000
--- a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/TestCustomSummaryLLVMFormat.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import lldb
-from lldbsuite.test.lldbtest import *
-import lldbsuite.test.lldbutil as lldbutil
-
-
-class TestCase(TestBase):
-    def test_raw_bytes(self):
-        self.build()
-        lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.c"))
-        self.runCmd("type summary add -s '${var.ubyte:x-2}${var.sbyte:x-2}!' Bytes")
-        self.expect("v bytes", substrs=[" = 3001!"])
-
-    def test_bad_format(self):
-        self.build()
-        lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.c"))
-        self.expect(
-            "type summary add -s '${var.ubyte:y}!' Bytes",
-            error=True,
-            substrs=["invalid llvm format"],
-        )

diff  --git a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/main.c b/lldb/test/API/functionalities/data-formatter/custom-printf-summary/main.c
deleted file mode 100644
index 4164aff7dbf6fa..00000000000000
--- a/lldb/test/API/functionalities/data-formatter/custom-printf-summary/main.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-
-struct Bytes {
-  uint8_t ubyte;
-  int8_t sbyte;
-};
-
-int main() {
-  struct Bytes bytes = {0x30, 0x01};
-  (void)bytes;
-  printf("break here\n");
-}


        


More information about the lldb-commits mailing list