[llvm] 936dcc8 - [Demangle] convert is*Encoding to use std::string_view
Nick Desaulniers via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 5 09:39:03 PDT 2023
Author: Nick Desaulniers
Date: 2023-06-05T09:33:49-07:00
New Revision: 936dcc89da4f6263ab17e18a85791cd45d86d7cc
URL: https://github.com/llvm/llvm-project/commit/936dcc89da4f6263ab17e18a85791cd45d86d7cc
DIFF: https://github.com/llvm/llvm-project/commit/936dcc89da4f6263ab17e18a85791cd45d86d7cc.diff
LOG: [Demangle] convert is*Encoding to use std::string_view
This was originally a part of D149104 which was backed out. This change
is uncontroversial though, so split it out and reland it.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D152042
Added:
Modified:
llvm/lib/Demangle/Demangle.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Demangle/Demangle.cpp b/llvm/lib/Demangle/Demangle.cpp
index 3dd4f31268f4a..f575cd61e4bf1 100644
--- a/llvm/lib/Demangle/Demangle.cpp
+++ b/llvm/lib/Demangle/Demangle.cpp
@@ -11,20 +11,11 @@
//===----------------------------------------------------------------------===//
#include "llvm/Demangle/Demangle.h"
+#include "llvm/Demangle/StringViewExtras.h"
#include <cstdlib>
#include <cstring>
-static bool isItaniumEncoding(const char *S) {
- // Itanium encoding requires 1 or 3 leading underscores, followed by 'Z'.
- return std::strncmp(S, "_Z", 2) == 0 || std::strncmp(S, "___Z", 4) == 0;
-}
-
-static bool isRustEncoding(const char *S) { return S[0] == '_' && S[1] == 'R'; }
-
-static bool isDLangEncoding(const std::string &MangledName) {
- return MangledName.size() >= 2 && MangledName[0] == '_' &&
- MangledName[1] == 'D';
-}
+using llvm::itanium_demangle::starts_with;
std::string llvm::demangle(const std::string &MangledName) {
std::string Result;
@@ -45,14 +36,23 @@ std::string llvm::demangle(const std::string &MangledName) {
return MangledName;
}
+static bool isItaniumEncoding(std::string_view S) {
+ // Itanium encoding requires 1 or 3 leading underscores, followed by 'Z'.
+ return starts_with(S, "_Z") || starts_with(S, "___Z");
+}
+
+static bool isRustEncoding(std::string_view S) { return starts_with(S, "_R"); }
+
+static bool isDLangEncoding(std::string_view S) { return starts_with(S, "_D"); }
+
bool llvm::nonMicrosoftDemangle(std::string_view MangledName,
std::string &Result) {
char *Demangled = nullptr;
- if (isItaniumEncoding(MangledName.data()))
+ if (isItaniumEncoding(MangledName))
Demangled = itaniumDemangle(MangledName);
- else if (isRustEncoding(MangledName.data()))
+ else if (isRustEncoding(MangledName))
Demangled = rustDemangle(MangledName);
- else if (isDLangEncoding(MangledName.data()))
+ else if (isDLangEncoding(MangledName))
Demangled = dlangDemangle(MangledName);
if (!Demangled)
More information about the llvm-commits
mailing list