]> granicus.if.org Git - clang/commitdiff
Reduce string thrashing.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 12 Nov 2010 18:45:23 +0000 (18:45 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 12 Nov 2010 18:45:23 +0000 (18:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118915 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenTypes.cpp

index 87cab311d4e92eb654b0f0e1c717aafd52385b50..84c1ceb1ffe30d13ddac2e960af6a72c3570e54c 100644 (file)
@@ -371,26 +371,31 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
     const TagDecl *TD = cast<TagType>(Ty).getDecl();
     const llvm::Type *Res = ConvertTagDeclType(TD);
 
-    std::string TypeName(TD->getKindName());
-    TypeName += '.';
+    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())
+    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.
-      TypeName += TD->getDeclContext() ? TD->getQualifiedNameAsString() :
-        TD->getNameAsString();
-    else if (const TypedefType *TdT = dyn_cast<TypedefType>(T))
+      if (TD->getDeclContext())
+        OS << TD->getQualifiedNameAsString();
+      else
+        TD->printName(OS);
+    } else if (const TypedefType *TdT = dyn_cast<TypedefType>(T)) {
       // 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.
-      TypeName += TdT->getDecl()->getDeclContext() ? 
-        TdT->getDecl()->getQualifiedNameAsString() :
-        TdT->getDecl()->getNameAsString();
-    else
-      TypeName += "anon";
+      if (TdT->getDecl()->getDeclContext())
+        OS << TdT->getDecl()->getQualifiedNameAsString();
+      else
+        TdT->getDecl()->printName(OS);
+    } else {
+      OS << "anon";
+    }
 
-    TheModule.addTypeName(TypeName, Res);
+    TheModule.addTypeName(OS.str(), Res);
     return Res;
   }