]> granicus.if.org Git - clang/commitdiff
Move code to add a type name to a TagDecl type out into a helper function. No functio...
authorAnders Carlsson <andersca@mac.com>
Sun, 17 Apr 2011 21:36:59 +0000 (21:36 +0000)
committerAnders Carlsson <andersca@mac.com>
Sun, 17 Apr 2011 21:36:59 +0000 (21:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129669 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenTypes.cpp
lib/CodeGen/CodeGenTypes.h

index 731114bcca9b1411048471a90191abaa3d604a75..3ec43f2fd99d95a7801b2dbd10f6041a10b919b7 100644 (file)
@@ -65,6 +65,36 @@ void CodeGenTypes::HandleLateResolvedPointers() {
   }
 }
 
+void CodeGenTypes::addTagTypeName(const TagDecl *TD, const llvm::Type *Ty,
+                                  llvm::StringRef suffix) {
+  llvm::SmallString<256> TypeName;
+  llvm::raw_svector_ostream OS(TypeName);
+  OS << TD->getKindName() << '.';
+  
+  // Name the codegen type after the typedef name
+  // if there is no tag type name available
+  if (TD->getIdentifier()) {
+    // FIXME: We should not have to check for a null decl context here.
+    // Right now we do it because the implicit Obj-C decls don't have one.
+    if (TD->getDeclContext())
+      OS << TD->getQualifiedNameAsString();
+    else
+      TD->printName(OS);
+  } else if (const TypedefNameDecl *TDD = TD->getTypedefNameForAnonDecl()) {
+    // FIXME: We should not have to check for a null decl context here.
+    // Right now we do it because the implicit Obj-C decls don't have one.
+    if (TDD->getDeclContext())
+      OS << TDD->getQualifiedNameAsString();
+    else
+      TDD->printName(OS);
+  } else
+    OS << "anon";
+
+  if (!suffix.empty())
+    OS << suffix;
+
+  TheModule.addTypeName(OS.str(), Ty);
+}
 
 /// ConvertType - Convert the specified type to its LLVM form.
 const llvm::Type *CodeGenTypes::ConvertType(QualType T, bool IsRecursive) {
@@ -373,31 +403,8 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
   case Type::Enum: {
     const TagDecl *TD = cast<TagType>(Ty).getDecl();
     const llvm::Type *Res = ConvertTagDeclType(TD);
-
-    llvm::SmallString<256> TypeName;
-    llvm::raw_svector_ostream OS(TypeName);
-    OS << TD->getKindName() << '.';
-
-    // Name the codegen type after the typedef name
-    // if there is no tag type name available
-    if (TD->getIdentifier()) {
-      // FIXME: We should not have to check for a null decl context here.
-      // Right now we do it because the implicit Obj-C decls don't have one.
-      if (TD->getDeclContext())
-        OS << TD->getQualifiedNameAsString();
-      else
-        TD->printName(OS);
-    } else if (const TypedefNameDecl *TDD = TD->getTypedefNameForAnonDecl()) {
-      // FIXME: We should not have to check for a null decl context here.
-      // Right now we do it because the implicit Obj-C decls don't have one.
-      if (TDD->getDeclContext())
-        OS << TDD->getQualifiedNameAsString();
-      else
-        TDD->printName(OS);
-    } else
-      OS << "anon";
-
-    TheModule.addTypeName(OS.str(), Res);
+    
+    addTagTypeName(TD, Res, llvm::StringRef());
     return Res;
   }
 
index 23b47ca6ae721766cb7247a4f1d81f2086d57d9d..6dd4d7bada6f99cecaf99c3aba3bf1a0558da136 100644 (file)
@@ -101,6 +101,11 @@ private:
   /// used to handle cyclic structures properly.
   void HandleLateResolvedPointers();
 
+  /// addTagTypeName - Compute a name from the given tag decl with an optional
+  /// suffix and name the given LLVM type using it.
+  void addTagTypeName(const TagDecl *TD, const llvm::Type *Ty,
+                      llvm::StringRef suffix);
+
 public:
   CodeGenTypes(ASTContext &Ctx, llvm::Module &M, const llvm::TargetData &TD,
                const ABIInfo &Info, CGCXXABI &CXXABI);