summaryrefslogtreecommitdiff
path: root/libcxxabi
diff options
context:
space:
mode:
authorNick Desaulniers <ndesaulniers@google.com>2023-04-20 10:02:28 -0700
committerNick Desaulniers <ndesaulniers@google.com>2023-04-20 10:02:32 -0700
commit691c4800be8018d8ad03f0e25be3672acbdfe403 (patch)
tree30265c8249de68e6db65fd5967eefc3ef1f8a722 /libcxxabi
parent328cfa840d791deeed84aa4e2fda93d591bfb8d7 (diff)
downloadllvm-691c4800be8018d8ad03f0e25be3672acbdfe403.tar.gz
[libcxxabi][demangle] create helper for std::string_view::starts_with
Add C++ 20 style starts_with to replace StringView::startsWith in LLVMDemangle. Due to library layering (LLVMSupport depends on LLVMDemangle), we add the utility header under llvm/Demangle, instead of llvm/ADT or llvm/Support. Modify this in libcxxabi, then copy this over to llvm. Reviewed By: MaskRay, #libc_abi, phosek Differential Revision: https://reviews.llvm.org/D148556
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/demangle/StringViewExtras.h34
-rwxr-xr-xlibcxxabi/src/demangle/cp-to-llvm.sh2
2 files changed, 35 insertions, 1 deletions
diff --git a/libcxxabi/src/demangle/StringViewExtras.h b/libcxxabi/src/demangle/StringViewExtras.h
new file mode 100644
index 000000000000..d430e67ea3cb
--- /dev/null
+++ b/libcxxabi/src/demangle/StringViewExtras.h
@@ -0,0 +1,34 @@
+//===--- StringViewExtras.h -------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// There are two copies of this file in the source tree. The one under
+// libcxxabi is the original and the one under llvm is the copy. Use
+// cp-to-llvm.sh to update the copy. See README.txt for more details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef DEMANGLE_STRINGVIEW_H
+#define DEMANGLE_STRINGVIEW_H
+
+#include "DemangleConfig.h"
+
+#include <string_view>
+
+DEMANGLE_NAMESPACE_BEGIN
+
+inline bool starts_with(std::string_view self, char C) {
+ return !self.empty() && self.front() == C;
+}
+
+inline bool starts_with(std::string_view haystack, std::string_view needle) {
+ return haystack.substr(0, needle.size()) == needle;
+}
+
+DEMANGLE_NAMESPACE_END
+
+#endif
diff --git a/libcxxabi/src/demangle/cp-to-llvm.sh b/libcxxabi/src/demangle/cp-to-llvm.sh
index d1474655b1c3..870b6dad9ac8 100755
--- a/libcxxabi/src/demangle/cp-to-llvm.sh
+++ b/libcxxabi/src/demangle/cp-to-llvm.sh
@@ -6,7 +6,7 @@
set -e
cd $(dirname $0)
-HDRS="ItaniumDemangle.h ItaniumNodes.def StringView.h Utility.h"
+HDRS="ItaniumDemangle.h ItaniumNodes.def StringView.h StringViewExtras.h Utility.h"
LLVM_DEMANGLE_DIR=$1
if [[ -z "$LLVM_DEMANGLE_DIR" ]]; then