[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
This commit is contained in:
Nick Desaulniers 2023-04-20 10:02:28 -07:00
parent 328cfa840d
commit 691c4800be
4 changed files with 70 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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