https://github.com/kpdev created https://github.com/llvm/llvm-project/pull/67784
When we trying to change not the whole string, but single character in it - lldb's ValueObject fits in Scalar and therefore lldb trying to update it as a Scalar value which is currently only support numbers, so characters support added. ~~ Huawei RRI, OS Lab >From 55dbf63ab7a052859fc7b297f699f0957484d3bf Mon Sep 17 00:00:00 2001 From: Pavel Kosov <kpde...@gmail.com> Date: Fri, 29 Sep 2023 12:04:16 +0300 Subject: [PATCH] [lldb] Add support for changing char in Scalar::SetValueFromCString When we trying to change not the whole string, but single character in it - lldb's ValueObject fits in Scalar and therefore lldb trying to update it as a Scalar value which is currently only support numbers, so characters support added. ~~ Huawei RRI, OS Lab --- lldb/source/Utility/Scalar.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lldb/source/Utility/Scalar.cpp b/lldb/source/Utility/Scalar.cpp index 791c0fb74352913..33d0b832bfd9be6 100644 --- a/lldb/source/Utility/Scalar.cpp +++ b/lldb/source/Utility/Scalar.cpp @@ -18,6 +18,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" +#include <cctype> // for std::isalpha #include <cinttypes> #include <cstdio> @@ -646,7 +647,15 @@ Status Scalar::SetValueFromCString(const char *value_str, Encoding encoding, bool is_signed = encoding == eEncodingSint; bool is_negative = is_signed && str.consume_front("-"); APInt integer; - if (str.getAsInteger(0, integer)) { + if (str.size() == 1 && std::isalpha(static_cast<unsigned char>(str[0]))) { + // We can represent single character as Scalar - + // this is useful when working with symbols in string + // NOTE: it is okay to consider char size as 8-bit since we only have + // `SetValueFrom C String` api, not the `C Wstring` or something like + // that. If we can ever get wide characters here - we have to modify this + // behaviour somehow. + integer = APInt(8, static_cast<uint64_t>(str[0])); + } else if (str.getAsInteger(0, integer)) { error.SetErrorStringWithFormatv( "'{0}' is not a valid integer string value", value_str); break; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits