[clang] 691c480 - [libcxxabi][demangle] create helper for std::string_view::starts_with

Nick Desaulniers via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 20 10:19:04 PDT 2023


Author: Nick Desaulniers
Date: 2023-04-20T10:02:32-07:00
New Revision: 691c4800be8018d8ad03f0e25be3672acbdfe403

URL: https://github.com/llvm/llvm-project/commit/691c4800be8018d8ad03f0e25be3672acbdfe403
DIFF: https://github.com/llvm/llvm-project/commit/691c4800be8018d8ad03f0e25be3672acbdfe403.diff

LOG: [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

Added: 
    libcxxabi/src/demangle/StringViewExtras.h
    llvm/include/llvm/Demangle/StringViewExtras.h

Modified: 
    clang/docs/tools/clang-formatted-files.txt
    libcxxabi/src/demangle/cp-to-llvm.sh

Removed: 
    


################################################################################
diff  --git a/clang/docs/tools/clang-formatted-files.txt b/clang/docs/tools/clang-formatted-files.txt
index 004722d998f7b..a156e20fbb1e3 100644
--- a/clang/docs/tools/clang-formatted-files.txt
+++ b/clang/docs/tools/clang-formatted-files.txt
@@ -5251,6 +5251,7 @@ llvm/include/llvm/Debuginfod/DIFetcher.h
 llvm/include/llvm/Debuginfod/HTTPClient.h
 llvm/include/llvm/Demangle/Demangle.h
 llvm/include/llvm/Demangle/StringView.h
+llvm/include/llvm/Demangle/StringViewExtras.h
 llvm/include/llvm/Demangle/Utility.h
 llvm/include/llvm/DWARFLinker/DWARFLinker.h
 llvm/include/llvm/DWARFLinker/DWARFLinkerCompileUnit.h

diff  --git a/libcxxabi/src/demangle/StringViewExtras.h b/libcxxabi/src/demangle/StringViewExtras.h
new file mode 100644
index 0000000000000..d430e67ea3cb4
--- /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 d1474655b1c34..870b6dad9ac83 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

diff  --git a/llvm/include/llvm/Demangle/StringViewExtras.h b/llvm/include/llvm/Demangle/StringViewExtras.h
new file mode 100644
index 0000000000000..e4c2861ee5b67
--- /dev/null
+++ b/llvm/include/llvm/Demangle/StringViewExtras.h
@@ -0,0 +1,34 @@
+//===--- StringViewExtras.h ----------*- mode:c++;eval:(read-only-mode) -*-===//
+//       Do not edit! See README.txt.
+// 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


        


More information about the cfe-commits mailing list