1//===-- MSVCUndecoratedNameParser.h -----------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_MSVCUNDECORATEDNAMEPARSER_H 10#define LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_MSVCUNDECORATEDNAMEPARSER_H 11 12#include <vector> 13 14#include "llvm/ADT/ArrayRef.h" 15#include "llvm/ADT/StringRef.h" 16 17class MSVCUndecoratedNameSpecifier { 18public: 19 MSVCUndecoratedNameSpecifier(llvm::StringRef full_name, 20 llvm::StringRef base_name) 21 : m_full_name(full_name), m_base_name(base_name) {} 22 23 llvm::StringRef GetFullName() const { return m_full_name; } 24 llvm::StringRef GetBaseName() const { return m_base_name; } 25 26private: 27 llvm::StringRef m_full_name; 28 llvm::StringRef m_base_name; 29}; 30 31class MSVCUndecoratedNameParser { 32public: 33 explicit MSVCUndecoratedNameParser(llvm::StringRef name); 34 35 llvm::ArrayRef<MSVCUndecoratedNameSpecifier> GetSpecifiers() const { 36 return m_specifiers; 37 } 38 39 static bool IsMSVCUndecoratedName(llvm::StringRef name); 40 static bool ExtractContextAndIdentifier(llvm::StringRef name, 41 llvm::StringRef &context, 42 llvm::StringRef &identifier); 43 44 static llvm::StringRef DropScope(llvm::StringRef name); 45 46private: 47 std::vector<MSVCUndecoratedNameSpecifier> m_specifiers; 48}; 49 50#endif 51