//===-- MSVCUndecoratedNameParser.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 // //===----------------------------------------------------------------------===// #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_MSVCUNDECORATEDNAMEPARSER_H #define LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_MSVCUNDECORATEDNAMEPARSER_H #include #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" class MSVCUndecoratedNameSpecifier { public: MSVCUndecoratedNameSpecifier(llvm::StringRef full_name, llvm::StringRef base_name) : m_full_name(full_name), m_base_name(base_name) {} llvm::StringRef GetFullName() const { return m_full_name; } llvm::StringRef GetBaseName() const { return m_base_name; } private: llvm::StringRef m_full_name; llvm::StringRef m_base_name; }; class MSVCUndecoratedNameParser { public: explicit MSVCUndecoratedNameParser(llvm::StringRef name); llvm::ArrayRef GetSpecifiers() const { return m_specifiers; } static bool IsMSVCUndecoratedName(llvm::StringRef name); static bool ExtractContextAndIdentifier(llvm::StringRef name, llvm::StringRef &context, llvm::StringRef &identifier); static llvm::StringRef DropScope(llvm::StringRef name); private: std::vector m_specifiers; }; #endif