[Lldb-commits] [lldb] [lldb] Add support for changing char in Scalar::SetValueFromCString (PR #67784)
Pavel Kosov via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 29 03:20:22 PDT 2023
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 <kpdev42 at 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;
More information about the lldb-commits
mailing list