[llvm] caf469d - [Support] Take ArrayRef in convertWideToUTF8 (#200687)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 1 04:19:31 PDT 2026
Author: Nerixyz
Date: 2026-06-01T13:19:26+02:00
New Revision: caf469dc802464a3554f52b10c818d4e0c840062
URL: https://github.com/llvm/llvm-project/commit/caf469dc802464a3554f52b10c818d4e0c840062
DIFF: https://github.com/llvm/llvm-project/commit/caf469dc802464a3554f52b10c818d4e0c840062.diff
LOG: [Support] Take ArrayRef in convertWideToUTF8 (#200687)
`convertWideToUTF8` took a `std::wstring`, but it never modified its
data. An `ArrayRef` or `std::wstring_view` are sufficient here. I chose
`ArrayRef<wchar_t>` over `std::wstring_view`, because it can be
implicitly constructed from any range that provides `data()` and
`size()`. A second overload taking a `const wchar_t *` is provided to
convert null terminated wide C-strings.
Added:
Modified:
llvm/include/llvm/Support/ConvertUTF.h
llvm/lib/Support/ConvertUTFWrapper.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Support/ConvertUTF.h b/llvm/include/llvm/Support/ConvertUTF.h
index ddf7057bff59d..140395f7abd17 100644
--- a/llvm/include/llvm/Support/ConvertUTF.h
+++ b/llvm/include/llvm/Support/ConvertUTF.h
@@ -246,11 +246,16 @@ LLVM_ABI bool ConvertUTF8toWide(llvm::StringRef Source, std::wstring &Result);
LLVM_ABI bool ConvertUTF8toWide(const char *Source, std::wstring &Result);
/**
-* Converts a std::wstring to a UTF-8 encoded std::string.
-* \return true on success.
-*/
-LLVM_ABI bool convertWideToUTF8(const std::wstring &Source,
- std::string &Result);
+ * Converts an ArrayRef<wchar_t> to a UTF-8 encoded std::string.
+ * \return true on success.
+ */
+LLVM_ABI bool convertWideToUTF8(ArrayRef<wchar_t> Source, std::string &Result);
+
+/**
+ * Converts a wide C-string to a UTF-8 encoded std::string.
+ * \return true on success.
+ */
+LLVM_ABI bool convertWideToUTF8(const wchar_t *Source, std::string &Result);
/**
* Convert an Unicode code point to UTF8 sequence.
diff --git a/llvm/lib/Support/ConvertUTFWrapper.cpp b/llvm/lib/Support/ConvertUTFWrapper.cpp
index 21dcf779338f7..d1a854a577933 100644
--- a/llvm/lib/Support/ConvertUTFWrapper.cpp
+++ b/llvm/lib/Support/ConvertUTFWrapper.cpp
@@ -268,7 +268,7 @@ bool ConvertUTF8toWide(const char *Source, std::wstring &Result) {
return ConvertUTF8toWide(llvm::StringRef(Source), Result);
}
-bool convertWideToUTF8(const std::wstring &Source, std::string &Result) {
+bool convertWideToUTF8(ArrayRef<wchar_t> Source, std::string &Result) {
if (sizeof(wchar_t) == 1) {
const UTF8 *Start = reinterpret_cast<const UTF8 *>(Source.data());
const UTF8 *End =
@@ -304,6 +304,10 @@ bool convertWideToUTF8(const std::wstring &Source, std::string &Result) {
}
}
+bool convertWideToUTF8(const wchar_t *Source, std::string &Result) {
+ return convertWideToUTF8(std::wstring_view(Source), Result);
+}
+
bool IsSingleCodeUnitUTF8Codepoint(unsigned V) { return V <= 0x7F; }
bool IsSingleCodeUnitUTF16Codepoint(unsigned V) {
More information about the llvm-commits
mailing list