1 //===-- MSVCUndecoratedNameParser.h -----------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_MSVCUndecoratedNameParser_h_ 11 #define liblldb_MSVCUndecoratedNameParser_h_ 12 13 #include <vector> 14 15 #include "llvm/ADT/ArrayRef.h" 16 #include "llvm/ADT/StringRef.h" 17 18 class MSVCUndecoratedNameSpecifier { 19 public: MSVCUndecoratedNameSpecifier(llvm::StringRef full_name,llvm::StringRef base_name)20 MSVCUndecoratedNameSpecifier(llvm::StringRef full_name, 21 llvm::StringRef base_name) 22 : m_full_name(full_name), m_base_name(base_name) {} 23 GetFullName()24 llvm::StringRef GetFullName() const { return m_full_name; } GetBaseName()25 llvm::StringRef GetBaseName() const { return m_base_name; } 26 27 private: 28 llvm::StringRef m_full_name; 29 llvm::StringRef m_base_name; 30 }; 31 32 class MSVCUndecoratedNameParser { 33 public: 34 explicit MSVCUndecoratedNameParser(llvm::StringRef name); 35 GetSpecifiers()36 llvm::ArrayRef<MSVCUndecoratedNameSpecifier> GetSpecifiers() const { 37 return m_specifiers; 38 } 39 40 static bool IsMSVCUndecoratedName(llvm::StringRef name); 41 static bool ExtractContextAndIdentifier(llvm::StringRef name, 42 llvm::StringRef &context, 43 llvm::StringRef &identifier); 44 45 static llvm::StringRef DropScope(llvm::StringRef name); 46 47 private: 48 std::vector<MSVCUndecoratedNameSpecifier> m_specifiers; 49 }; 50 51 #endif 52