[llvm] r228474 - Support: Add dwarf::getVirtuality()

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Feb 6 16:37:15 PST 2015


Author: dexonsmith
Date: Fri Feb  6 18:37:15 2015
New Revision: 228474

URL: http://llvm.org/viewvc/llvm-project?rev=228474&view=rev
Log:
Support: Add dwarf::getVirtuality()

Modified:
    llvm/trunk/include/llvm/Support/Dwarf.h
    llvm/trunk/lib/Support/Dwarf.cpp
    llvm/trunk/unittests/Support/DwarfTest.cpp

Modified: llvm/trunk/include/llvm/Support/Dwarf.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Dwarf.h?rev=228474&r1=228473&r2=228474&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Dwarf.h (original)
+++ llvm/trunk/include/llvm/Support/Dwarf.h Fri Feb  6 18:37:15 2015
@@ -38,7 +38,8 @@ namespace dwarf {
 
 enum LLVMConstants : uint32_t {
   // LLVM mock tags (see also llvm/Support/Dwarf.def).
-  DW_TAG_invalid = ~0U,    // Tag for invalid results.
+  DW_TAG_invalid = ~0U,        // Tag for invalid results.
+  DW_VIRTUALITY_invalid = ~0U, // Virtuality for invalid results.
 
   // Other constants.
   DWARF_VERSION = 4,       // Default dwarf version we output.
@@ -742,11 +743,14 @@ const char *GDBIndexEntryLinkageString(G
 /// \defgroup DwarfConstantsParsing Dwarf constants parsing functions
 ///
 /// These functions map their strings back to the corresponding enumeration
-/// value or return 0 if there is none.  As an exception, \a getTag() returns
-/// \a DW_TAG_invalid on invalid input.
+/// value or return 0 if there is none, except for these exceptions:
+///
+/// \li \a getTag() returns \a DW_TAG_invalid on invalid input.
+/// \li \a getVirtuality() returns \a DW_VIRTUALITY_invalid on invalid input.
 ///
 /// @{
 unsigned getTag(StringRef TagString);
+unsigned getVirtuality(StringRef VirtualityString);
 unsigned getLanguage(StringRef LanguageString);
 unsigned getAttributeEncoding(StringRef EncodingString);
 /// @}

Modified: llvm/trunk/lib/Support/Dwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Dwarf.cpp?rev=228474&r1=228473&r2=228474&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Dwarf.cpp (original)
+++ llvm/trunk/lib/Support/Dwarf.cpp Fri Feb  6 18:37:15 2015
@@ -473,6 +473,14 @@ const char *llvm::dwarf::VirtualityStrin
   }
 }
 
+unsigned llvm::dwarf::getVirtuality(StringRef VirtualityString) {
+  return StringSwitch<unsigned>(VirtualityString)
+#define HANDLE_DW_VIRTUALITY(ID, NAME)                                         \
+  .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME)
+#include "llvm/Support/Dwarf.def"
+      .Default(DW_VIRTUALITY_invalid);
+}
+
 const char *llvm::dwarf::LanguageString(unsigned Language) {
   switch (Language) {
   default:

Modified: llvm/trunk/unittests/Support/DwarfTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/DwarfTest.cpp?rev=228474&r1=228473&r2=228474&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/DwarfTest.cpp (original)
+++ llvm/trunk/unittests/Support/DwarfTest.cpp Fri Feb  6 18:37:15 2015
@@ -109,4 +109,16 @@ TEST(DwarfTest, VirtualityString) {
   EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 77));
 }
 
+TEST(DwarfTest, getVirtuality) {
+  EXPECT_EQ(DW_VIRTUALITY_none, getVirtuality("DW_VIRTUALITY_none"));
+  EXPECT_EQ(DW_VIRTUALITY_virtual, getVirtuality("DW_VIRTUALITY_virtual"));
+  EXPECT_EQ(DW_VIRTUALITY_pure_virtual,
+            getVirtuality("DW_VIRTUALITY_pure_virtual"));
+
+  // Invalid strings.
+  EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_invalid"));
+  EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_max"));
+  EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("something else"));
+}
+
 } // end namespace





More information about the llvm-commits mailing list