[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