DebugInfo: Gut DIObjCProperty and DIImportedEntity
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 14 Apr 2015 01:46:44 +0000 (01:46 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 14 Apr 2015 01:46:44 +0000 (01:46 +0000)
Gut a couple more classes in the DIDescriptor hierarchy.  Leave behind
an implicit conversion to `DIDescriptor`, the old base class.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234836 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/IR/DebugInfo.h
include/llvm/IR/DebugInfoMetadata.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/IR/DIBuilder.cpp
lib/IR/DebugInfo.cpp

index 717d0a23e9cef396b0fa9f3b0d9dff6360adcb99..462695b6c501503a62f98c41c279cb0b916f3be7 100644 (file)
@@ -674,50 +674,29 @@ public:
   MDLocation &operator*() const { return *N; }
 };
 
-class DIObjCProperty : public DIDescriptor {
-public:
-  DIObjCProperty() = default;
-  DIObjCProperty(const MDObjCProperty *N) : DIDescriptor(N) {}
-
-  MDObjCProperty *get() const {
-    return cast_or_null<MDObjCProperty>(DIDescriptor::get());
-  }
-  operator MDObjCProperty *() const { return get(); }
-  MDObjCProperty *operator->() const { return get(); }
-  MDObjCProperty &operator*() const { return *get(); }
+class DIObjCProperty {
+  MDObjCProperty *N;
 
-  StringRef getObjCPropertyName() const { return get()->getName(); }
-  DIFile getFile() const { return get()->getFile(); }
-  unsigned getLineNumber() const { return get()->getLine(); }
-
-  StringRef getObjCPropertyGetterName() const { return get()->getGetterName(); }
-  StringRef getObjCPropertySetterName() const { return get()->getSetterName(); }
-  unsigned getAttributes() const { return get()->getAttributes(); }
+public:
+  DIObjCProperty(const MDObjCProperty *N = nullptr)
+      : N(const_cast<MDObjCProperty *>(N)) {}
 
-  /// \brief Get the type.
-  ///
-  /// \note Objective-C doesn't have an ODR, so there is no benefit in storing
-  /// the type as a DITypeRef here.
-  DIType getType() const { return get()->getType(); }
+  operator MDObjCProperty *() const { return N; }
+  MDObjCProperty *operator->() const { return N; }
+  MDObjCProperty &operator*() const { return *N; }
 };
 
-/// \brief An imported module (C++ using directive or similar).
-class DIImportedEntity : public DIDescriptor {
-public:
-  DIImportedEntity() = default;
-  DIImportedEntity(const MDImportedEntity *N) : DIDescriptor(N) {}
+class DIImportedEntity {
+  MDImportedEntity *N;
 
-  MDImportedEntity *get() const {
-    return cast_or_null<MDImportedEntity>(DIDescriptor::get());
-  }
-  operator MDImportedEntity *() const { return get(); }
-  MDImportedEntity *operator->() const { return get(); }
-  MDImportedEntity &operator*() const { return *get(); }
+public:
+  DIImportedEntity(const MDImportedEntity *N = nullptr)
+      : N(const_cast<MDImportedEntity *>(N)) {}
 
-  DIScope getContext() const { return get()->getScope(); }
-  DIDescriptorRef getEntity() const { return get()->getEntity(); }
-  unsigned getLineNumber() const { return get()->getLine(); }
-  StringRef getName() const { return get()->getName(); }
+  operator DIDescriptor() const { return N; }
+  operator MDImportedEntity *() const { return N; }
+  MDImportedEntity *operator->() const { return N; }
+  MDImportedEntity &operator*() const { return *N; }
 };
 
 #define SIMPLIFY_DESCRIPTOR(DESC)                                              \
index 2c2b5807c5c3627cdc8f9952299cd093d7754364..97c85559ea17473e4cb2254eb861ee32a4ecf017 100644 (file)
@@ -2136,6 +2136,11 @@ public:
   MDFile *getFile() const { return cast_or_null<MDFile>(getRawFile()); }
   StringRef getGetterName() const { return getStringOperand(2); }
   StringRef getSetterName() const { return getStringOperand(3); }
+
+  /// \brief Get the type.
+  ///
+  /// \note Objective-C doesn't have an ODR, so there is no benefit in storing
+  /// the type as a DITypeRef here.
   MDType *getType() const { return cast_or_null<MDType>(getRawType()); }
 
   StringRef getFilename() const {
@@ -2160,6 +2165,7 @@ public:
   }
 };
 
+/// \brief An imported module (C++ using directive or similar).
 class MDImportedEntity : public DebugNode {
   friend class LLVMContextImpl;
   friend class MDNode;
index 4f051fbb52e4c4d24a56256e550cdf68aae64241..d31875a6c16362f9fc2dc102a10d79bd71a95332 100644 (file)
@@ -633,10 +633,10 @@ DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
 
 std::unique_ptr<DIE>
 DwarfCompileUnit::constructImportedEntityDIE(const DIImportedEntity &Module) {
-  std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module.getTag());
+  std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module->getTag());
   insertDIE(Module, IMDie.get());
   DIE *EntityDie;
-  DIDescriptor Entity = resolve(Module.getEntity());
+  auto *Entity = resolve(Module->getEntity());
   if (auto *NS = dyn_cast<MDNamespace>(Entity))
     EntityDie = getOrCreateNameSpace(NS);
   else if (auto *SP = dyn_cast<MDSubprogram>(Entity))
@@ -648,11 +648,10 @@ DwarfCompileUnit::constructImportedEntityDIE(const DIImportedEntity &Module) {
   else
     EntityDie = getDIE(Entity);
   assert(EntityDie);
-  addSourceLine(*IMDie, Module.getLineNumber(),
-                Module.getContext().getFilename(),
-                Module.getContext().getDirectory());
+  addSourceLine(*IMDie, Module->getLine(), Module->getScope()->getFilename(),
+                Module->getScope()->getDirectory());
   addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
-  StringRef Name = Module.getName();
+  StringRef Name = Module->getName();
   if (!Name.empty())
     addString(*IMDie, dwarf::DW_AT_name, Name);
 
index 4e349f280c312b9e7138ff373855ef75fbab83cf..a10ceefa4f69b0b1caa68903e8aed14a8e3023fb 100644 (file)
@@ -420,7 +420,7 @@ DwarfCompileUnit &DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) {
 void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
                                                   const MDNode *N) {
   DIImportedEntity Module = cast<MDImportedEntity>(N);
-  if (DIE *D = TheCU.getOrCreateContextDIE(Module.getContext()))
+  if (DIE *D = TheCU.getOrCreateContextDIE(Module->getScope()))
     D->addChild(TheCU.constructImportedEntityDIE(Module));
 }
 
index 26b993094c9d5b5de10c1f7cee8f01e071080173..f25c7d517d395f2d57660c0d344e28d102df9d08 100644 (file)
@@ -432,9 +432,7 @@ void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) {
   assert(Ty);
 
-  DIFile File = Ty.getFile();
-  addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
-                File.getDirectory());
+  addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory());
 }
 
 /// addSourceLine - Add location information to specified debug information
@@ -1060,19 +1058,19 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
           constructMemberDIE(Buffer, DDTy);
         }
       } else if (DIObjCProperty Property = dyn_cast<MDObjCProperty>(Element)) {
-        DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer);
-        StringRef PropertyName = Property.getObjCPropertyName();
+        DIE &ElemDie = createAndAddDIE(Property->getTag(), Buffer);
+        StringRef PropertyName = Property->getName();
         addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
-        if (Property.getType())
-          addType(ElemDie, Property.getType());
+        if (Property->getType())
+          addType(ElemDie, Property->getType());
         addSourceLine(ElemDie, Property);
-        StringRef GetterName = Property.getObjCPropertyGetterName();
+        StringRef GetterName = Property->getGetterName();
         if (!GetterName.empty())
           addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
-        StringRef SetterName = Property.getObjCPropertySetterName();
+        StringRef SetterName = Property->getSetterName();
         if (!SetterName.empty())
           addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
-        if (unsigned PropertyAttributes = Property.getAttributes())
+        if (unsigned PropertyAttributes = Property->getAttributes())
           addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
                   PropertyAttributes);
 
index 464dac5a25d5562c1401fed46052a9937dff9fc6..4fbe388799a0ed4c90e58dd65d6d008b0d107464 100644 (file)
@@ -177,7 +177,7 @@ createImportedModule(LLVMContext &C, dwarf::Tag Tag, DIScope Context,
                      SmallVectorImpl<TrackingMDNodeRef> &AllImportedModules) {
   DIImportedEntity M =
       MDImportedEntity::get(C, Tag, Context, DebugNodeRef(NS), Line, Name);
-  AllImportedModules.emplace_back(M.get());
+  AllImportedModules.emplace_back(M);
   return M;
 }
 
index 2c3d00b2597a41acf6d1c07ad906ce314652f5d4..fe74ec51a0dfd297be2d429108c4bc3937a37806 100644 (file)
@@ -163,7 +163,7 @@ void DebugInfoFinder::processModule(const Module &M) {
       for (auto *RT : CU->getRetainedTypes())
         processType(RT);
       for (DIImportedEntity Import : CU->getImportedEntities()) {
-        DIDescriptor Entity = Import.getEntity().resolve(TypeIdentifierMap);
+        auto *Entity = Import->getEntity().resolve(TypeIdentifierMap);
         if (auto *T = dyn_cast<MDType>(Entity))
           processType(T);
         else if (auto *SP = dyn_cast<MDSubprogram>(Entity))