]> granicus.if.org Git - clang/commitdiff
Move clients to use IdentifierInfo::getNameStart() instead of getName()
authorDaniel Dunbar <daniel@zuster.org>
Sun, 18 Oct 2009 20:26:12 +0000 (20:26 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sun, 18 Oct 2009 20:26:12 +0000 (20:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84436 91177308-0d34-0410-b5e6-96231b3b80d8

22 files changed:
lib/AST/Decl.cpp
lib/AST/Stmt.cpp
lib/AST/StmtDumper.cpp
lib/AST/Type.cpp
lib/Analysis/BasicObjCFoundationChecks.cpp
lib/Analysis/CFRefCount.cpp
lib/Analysis/GRExprEngine.cpp
lib/CodeGen/CodeGenModule.cpp
lib/Frontend/CacheTokens.cpp
lib/Frontend/PCHReader.cpp
lib/Frontend/PCHWriter.cpp
lib/Frontend/RewriteObjC.cpp
lib/Index/Entity.cpp
lib/Index/GlobalSelector.cpp
lib/Lex/PPDirectives.cpp
lib/Lex/PTHLexer.cpp
lib/Lex/Preprocessor.cpp
lib/Lex/TokenConcatenation.cpp
lib/Parse/ParseObjc.cpp
lib/Sema/SemaCodeComplete.cpp
lib/Sema/SemaExpr.cpp
tools/CIndex/CIndex.cpp

index 0c413f6742355c5555a52a7f2e4584ba6ab1ddd4..d270a958f0aefabd4c8f3386d7141acb1d1fe368 100644 (file)
@@ -231,6 +231,8 @@ std::string NamedDecl::getQualifiedNameAsString() const {
 }
 
 std::string NamedDecl::getQualifiedNameAsString(const PrintingPolicy &P) const {
+  // FIXME: Collect contexts, then accumulate names to avoid unnecessary
+  // std::string thrashing.
   std::vector<std::string> Names;
   std::string QualName;
   const DeclContext *Ctx = getDeclContext();
@@ -252,7 +254,7 @@ std::string NamedDecl::getQualifiedNameAsString(const PrintingPolicy &P) const {
                                            TemplateArgs.getFlatArgumentList(),
                                            TemplateArgs.flat_size(),
                                            P);
-      Names.push_back(Spec->getIdentifier()->getName() + TemplateArgsStr);
+      Names.push_back(Spec->getIdentifier()->getNameStart() + TemplateArgsStr);
     } else if (const NamedDecl *ND = dyn_cast<NamedDecl>(Ctx))
       Names.push_back(ND->getNameAsString());
     else
index 3a838fadafa415bb6880c5b824e3d624ba28b10c..6e0da47149128989e7360af234a9b9d0a87e04f6 100644 (file)
@@ -117,7 +117,7 @@ void CompoundStmt::setStmts(ASTContext &C, Stmt **Stmts, unsigned NumStmts) {
 }
 
 const char *LabelStmt::getName() const {
-  return getID()->getName();
+  return getID()->getNameStart();
 }
 
 // This is defined here to avoid polluting Stmt.h with importing Expr.h
index 0465999a94cc47a2d13055807340f16d4999c887..cf71d6b986a2b8ed70a6e9d544dc2482692f39b5 100644 (file)
@@ -244,7 +244,7 @@ void StmtDumper::DumpDeclarator(Decl *D) {
     // print a free standing tag decl (e.g. "struct x;").
     const char *tagname;
     if (const IdentifierInfo *II = TD->getIdentifier())
-      tagname = II->getName();
+      tagname = II->getNameStart();
     else
       tagname = "<anonymous>";
     fprintf(F, "\"%s %s;\"", TD->getKindName(), tagname);
@@ -253,7 +253,7 @@ void StmtDumper::DumpDeclarator(Decl *D) {
     // print using-directive decl (e.g. "using namespace x;")
     const char *ns;
     if (const IdentifierInfo *II = UD->getNominatedNamespace()->getIdentifier())
-      ns = II->getName();
+      ns = II->getNameStart();
     else
       ns = "<anonymous>";
     fprintf(F, "\"%s %s;\"",UD->getDeclKindName(), ns);
@@ -403,7 +403,7 @@ void StmtDumper::VisitMemberExpr(MemberExpr *Node) {
 }
 void StmtDumper::VisitExtVectorElementExpr(ExtVectorElementExpr *Node) {
   DumpExpr(Node);
-  fprintf(F, " %s", Node->getAccessor().getName());
+  fprintf(F, " %s", Node->getAccessor().getNameStart());
 }
 void StmtDumper::VisitBinaryOperator(BinaryOperator *Node) {
   DumpExpr(Node);
@@ -495,7 +495,7 @@ void StmtDumper::VisitObjCMessageExpr(ObjCMessageExpr* Node) {
   DumpExpr(Node);
   fprintf(F, " selector=%s", Node->getSelector().getAsString().c_str());
   IdentifierInfo* clsName = Node->getClassName();
-  if (clsName) fprintf(F, " class=%s", clsName->getName());
+  if (clsName) fprintf(F, " class=%s", clsName->getNameStart());
 }
 
 void StmtDumper::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) {
index 0922538f5e1bd73dde33b2efa836295548deffca..cbd0691aad8c5991ec3e0f21b846998c25385db5 100644 (file)
@@ -1502,11 +1502,11 @@ void TagType::getAsStringInternal(std::string &InnerString, const PrintingPolicy
   const char *Kind = Policy.SuppressTagKind? 0 : getDecl()->getKindName();
   const char *ID;
   if (const IdentifierInfo *II = getDecl()->getIdentifier())
-    ID = II->getName();
+    ID = II->getNameStart();
   else if (TypedefDecl *Typedef = getDecl()->getTypedefForAnonDecl()) {
     Kind = 0;
     assert(Typedef->getIdentifier() && "Typedef without identifier?");
-    ID = Typedef->getIdentifier()->getName();
+    ID = Typedef->getIdentifier()->getNameStart();
   } else
     ID = "<anonymous>";
 
index c4d73ab9555eb92c6161606c1dfa16e6d425827d..ea7f82f3955c0cbd5f38e99694aa730e4f47c21d 100644 (file)
@@ -45,9 +45,9 @@ static const ObjCInterfaceType* GetReceiverType(const ObjCMessageExpr* ME) {
 }
 
 static const char* GetReceiverNameType(const ObjCMessageExpr* ME) {
-  const ObjCInterfaceType *ReceiverType = GetReceiverType(ME);
-  return ReceiverType ? ReceiverType->getDecl()->getIdentifier()->getName()
-                      : NULL;
+  if (const ObjCInterfaceType *ReceiverType = GetReceiverType(ME))
+    return ReceiverType->getDecl()->getIdentifier()->getNameStart();
+  return NULL;
 }
 
 namespace {
index 7379b67d59cb3a300ee3f3eac7a040b4b60ef2a7..1affad0da3728fbac57d4b7030052e02c28fdc53 100644 (file)
@@ -931,7 +931,7 @@ RetainSummary* RetainSummaryManager::getSummary(FunctionDecl* FD) {
     // [PR 3337] Use 'getAs<FunctionType>' to strip away any typedefs on the
     // function's type.
     const FunctionType* FT = FD->getType()->getAs<FunctionType>();
-    const char* FName = FD->getIdentifier()->getName();
+    const char* FName = FD->getIdentifier()->getNameStart();
 
     // Strip away preceding '_'.  Doing this here will effect all the checks
     // down below.
index 5079acef54b45daf5a6002a28c58d329957bf4fb..46c5749189a15cd9ea773ee38e3340b4d8fde5f3 100644 (file)
@@ -1445,10 +1445,9 @@ static void MarkNoReturnFunction(const FunctionDecl *FD, CallExpr *CE,
     // HACK: Some functions are not marked noreturn, and don't return.
     //  Here are a few hardwired ones.  If this takes too long, we can
     //  potentially cache these results.
-    const char* s = FD->getIdentifier()->getName();
-    unsigned n = strlen(s);
+    const char* s = FD->getIdentifier()->getNameStart();
 
-    switch (n) {
+    switch (FD->getIdentifier()->getLength()) {
     default:
       break;
 
index 4763b7fc1ee23ad6f8a403559f157a12359f2966..ea84829b78a51048b7b481d6b6e688b113ec46d8 100644 (file)
@@ -825,7 +825,7 @@ llvm::Constant *
 CodeGenModule::CreateRuntimeFunction(const llvm::FunctionType *FTy,
                                      const char *Name) {
   // Convert Name to be a uniqued string from the IdentifierInfo table.
-  Name = getContext().Idents.get(Name).getName();
+  Name = getContext().Idents.get(Name).getNameStart();
   return GetOrCreateLLVMFunction(Name, FTy, GlobalDecl());
 }
 
@@ -911,7 +911,7 @@ llvm::Constant *
 CodeGenModule::CreateRuntimeVariable(const llvm::Type *Ty,
                                      const char *Name) {
   // Convert Name to be a uniqued string from the IdentifierInfo table.
-  Name = getContext().Idents.get(Name).getName();
+  Name = getContext().Idents.get(Name).getNameStart();
   return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), 0);
 }
 
@@ -1254,7 +1254,7 @@ void CodeGenModule::EmitAliasDefinition(const ValueDecl *D) {
 
   // Unique the name through the identifier table.
   const char *AliaseeName = AA->getAliasee().c_str();
-  AliaseeName = getContext().Idents.get(AliaseeName).getName();
+  AliaseeName = getContext().Idents.get(AliaseeName).getNameStart();
 
   // Create a reference to the named value.  This ensures that it is emitted
   // if a deferred decl.
@@ -1341,7 +1341,7 @@ llvm::Value *CodeGenModule::getBuiltinLibFunction(const FunctionDecl *FD,
     cast<llvm::FunctionType>(getTypes().ConvertType(Type));
 
   // Unique the name through the identifier table.
-  Name = getContext().Idents.get(Name).getName();
+  Name = getContext().Idents.get(Name).getNameStart();
   return GetOrCreateLLVMFunction(Name, Ty, GlobalDecl(FD));
 }
 
index afab2c2a9133fa7cdc2615ba11776353e950b652..2761c6f38c4d45e2c32d8b751245ec2ac7efaa03 100644 (file)
@@ -591,7 +591,7 @@ public:
 
   static std::pair<unsigned,unsigned>
   EmitKeyDataLength(llvm::raw_ostream& Out, const PTHIdKey* key, uint32_t) {
-    unsigned n = strlen(key->II->getName()) + 1;
+    unsigned n = key->II->getLength() + 1;
     ::Emit16(Out, n);
     return std::make_pair(n, sizeof(uint32_t));
   }
@@ -600,7 +600,7 @@ public:
     // Record the location of the key data.  This is used when generating
     // the mapping from persistent IDs to strings.
     key->FileOffset = Out.tell();
-    Out.write(key->II->getName(), n);
+    Out.write(key->II->getNameStart(), n);
   }
 
   static void EmitData(llvm::raw_ostream& Out, PTHIdKey*, uint32_t pID,
index bd5bbbe1e87a4aba5d75eb77c70c61f46eef56b4..ef73da7c344a9ccdb7df5dab97b585a307877b7f 100644 (file)
@@ -1505,7 +1505,7 @@ PCHReader::PCHReadResult PCHReader::ReadPCH(const std::string &FileName) {
       IdentifierInfo *II = Identifiers[I];
       // Look in the on-disk hash table for an entry for
       PCHIdentifierLookupTrait Info(*this, II);
-      std::pair<const char*, unsigned> Key(II->getName(), II->getLength());
+      std::pair<const char*, unsigned> Key(II->getNameStart(), II->getLength());
       PCHIdentifierLookupTable::iterator Pos = IdTable->find(Key, &Info);
       if (Pos == IdTable->end())
         continue;
index 602f9c9efba35e785bb70e335fc6a900755a4181..dbe1e9933e88bb67ef14c5359d940bb9703a220f 100644 (file)
@@ -1594,7 +1594,7 @@ public:
   std::pair<unsigned,unsigned>
     EmitKeyDataLength(llvm::raw_ostream& Out, const IdentifierInfo* II,
                       pch::IdentID ID) {
-    unsigned KeyLen = strlen(II->getName()) + 1;
+    unsigned KeyLen = II->getLength() + 1;
     unsigned DataLen = 4; // 4 bytes for the persistent ID << 1
     if (isInterestingIdentifier(II)) {
       DataLen += 2; // 2 bytes for builtin ID, flags
@@ -1619,7 +1619,7 @@ public:
     // Record the location of the key data.  This is used when generating
     // the mapping from persistent IDs to strings.
     Writer.SetIdentifierOffset(II, Out.tell());
-    Out.write(II->getName(), KeyLen);
+    Out.write(II->getNameStart(), KeyLen);
   }
 
   void EmitData(llvm::raw_ostream& Out, const IdentifierInfo* II,
index 55ab78e638bb58880626f1779689fa5892358ab1..bd3031aabe0dc4a97a5e8a70a546861df7a57071 100644 (file)
@@ -2289,9 +2289,9 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjCMessageExpr *Exp) {
       llvm::SmallVector<Expr*, 8> ClsExprs;
       QualType argType = Context->getPointerType(Context->CharTy);
       ClsExprs.push_back(StringLiteral::Create(*Context,
-                                        SuperDecl->getIdentifier()->getName(),
-                                        SuperDecl->getIdentifier()->getLength(),
-                                        false, argType, SourceLocation()));
+                                     SuperDecl->getIdentifier()->getNameStart(),
+                                     SuperDecl->getIdentifier()->getLength(),
+                                     false, argType, SourceLocation()));
       CallExpr *Cls = SynthesizeCallToFunctionDecl(GetMetaClassFunctionDecl,
                                                    &ClsExprs[0],
                                                    ClsExprs.size());
@@ -2343,7 +2343,7 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjCMessageExpr *Exp) {
       llvm::SmallVector<Expr*, 8> ClsExprs;
       QualType argType = Context->getPointerType(Context->CharTy);
       ClsExprs.push_back(StringLiteral::Create(*Context,
-                                               clsName->getName(),
+                                               clsName->getNameStart(),
                                                clsName->getLength(),
                                                false, argType,
                                                SourceLocation()));
@@ -2375,9 +2375,9 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjCMessageExpr *Exp) {
       llvm::SmallVector<Expr*, 8> ClsExprs;
       QualType argType = Context->getPointerType(Context->CharTy);
       ClsExprs.push_back(StringLiteral::Create(*Context,
-                                        SuperDecl->getIdentifier()->getName(),
-                                        SuperDecl->getIdentifier()->getLength(),
-                                        false, argType, SourceLocation()));
+                                     SuperDecl->getIdentifier()->getNameStart(),
+                                     SuperDecl->getIdentifier()->getLength(),
+                                     false, argType, SourceLocation()));
       CallExpr *Cls = SynthesizeCallToFunctionDecl(GetClassFunctionDecl,
                                                    &ClsExprs[0],
                                                    ClsExprs.size());
index 77d7a84da4db71a863dd20f3f64e84bb75ed89fd..03fe9f73af402369941e2e1c6e7a7c1b1080ab37 100644 (file)
@@ -72,7 +72,8 @@ Entity EntityGetter::VisitNamedDecl(NamedDecl *D) {
 
   if (IdentifierInfo *II = LocalName.getAsIdentifierInfo()) {
     IdentifierInfo *GlobII =
-        &ProgImpl.getIdents().get(II->getName(), II->getName() + II->getLength());
+      &ProgImpl.getIdents().get(II->getNameStart(),
+                                II->getNameStart() + II->getLength());
     GlobName = DeclarationName(GlobII);
   } else {
     Selector LocalSel = LocalName.getObjCSelector();
@@ -139,8 +140,9 @@ Decl *EntityImpl::getDecl(ASTContext &AST) {
   DeclarationName LocalName;
 
   if (IdentifierInfo *GlobII = Name.getAsIdentifierInfo()) {
-    IdentifierInfo &II = AST.Idents.get(GlobII->getName(),
-                                       GlobII->getName() + GlobII->getLength());
+    IdentifierInfo &II =
+      AST.Idents.get(GlobII->getNameStart(),
+                     GlobII->getNameStart() + GlobII->getLength());
     LocalName = DeclarationName(&II);
   } else {
     Selector GlobSel = Name.getObjCSelector();
index f3ec41d44ffeb8b395fbf30aa32bd34309e4140e..2b2ca6d3b1cce2ada8acad0ecd4c41e34201baf2 100644 (file)
@@ -29,8 +29,9 @@ Selector GlobalSelector::getSelector(ASTContext &AST) const {
   for (unsigned i = 0, e = GlobSel.isUnarySelector() ? 1 : GlobSel.getNumArgs();
          i != e; ++i) {
     IdentifierInfo *GlobII = GlobSel.getIdentifierInfoForSlot(i);
-    IdentifierInfo *II = &AST.Idents.get(GlobII->getName(),
-                                       GlobII->getName() + GlobII->getLength());
+    IdentifierInfo *II =
+      &AST.Idents.get(GlobII->getNameStart(),
+                      GlobII->getNameStart() + GlobII->getLength());
     Ids.push_back(II);
   }
 
@@ -57,8 +58,9 @@ GlobalSelector GlobalSelector::get(Selector Sel, Program &Prog) {
   for (unsigned i = 0, e = Sel.isUnarySelector() ? 1 : Sel.getNumArgs();
          i != e; ++i) {
     IdentifierInfo *II = Sel.getIdentifierInfoForSlot(i);
-    IdentifierInfo *GlobII = &ProgImpl.getIdents().get(II->getName(),
-                                               II->getName() + II->getLength());
+    IdentifierInfo *GlobII =
+      &ProgImpl.getIdents().get(II->getNameStart(),
+                                II->getNameStart() + II->getLength());
     Ids.push_back(GlobII);
   }
 
index 196a77f6426ad9a50ab8df860772516e7e653dad..e264efab9d7b86ff6142894d2fbbfded3d2b66eb 100644 (file)
@@ -1071,7 +1071,7 @@ void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
   // we allow macros that expand to nothing after the filename, because this
   // falls into the category of "#include pp-tokens new-line" specified in
   // C99 6.10.2p4.
-  CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getName(), true);
+  CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true);
 
   // Check that we don't have infinite #include recursion.
   if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) {
index 8ca1ec016fe3fb5cde29bcb563db3e4794f18650..f17a5d93a91ab9f6d04a58e61e08c004d2e68d73 100644 (file)
@@ -96,14 +96,6 @@ LexNextToken:
   //===--------------------------------------==//
   // Process the token.
   //===--------------------------------------==//
-#if 0
-  SourceManager& SM = PP->getSourceManager();
-  llvm::errs() << SM.getFileEntryForID(FileID)->getName()
-    << ':' << SM.getLogicalLineNumber(Tok.getLocation())
-    << ':' << SM.getLogicalColumnNumber(Tok.getLocation())
-    << '\n';
-#endif
-
   if (TKind == tok::eof) {
     // Save the end-of-file token.
     EofToken = Tok;
@@ -563,7 +555,7 @@ IdentifierInfo* PTHManager::LazilyCreateIdentifierInfo(unsigned PersistentID) {
 
   // Store the new IdentifierInfo in the cache.
   PerIDCache[PersistentID] = II;
-  assert(II->getName() && II->getName()[0] != '\0');
+  assert(II->getNameStart() && II->getNameStart()[0] != '\0');
   return II;
 }
 
index e41bc5cab1fde084c6231c2be1994e7e72376001..7f3afc60764c205a84ab70cbe45e1a4343182b77 100644 (file)
@@ -234,7 +234,7 @@ unsigned Preprocessor::getSpelling(const Token &Tok,
   // If this token is an identifier, just return the string from the identifier
   // table, which is very quick.
   if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
-    Buffer = II->getName();
+    Buffer = II->getNameStart();
     return II->getLength();
   }
 
index ade7f8516ea7b5baa158a65778fe9ef3182fcec5..07951646ffe1a801c37283527cc2328f79c0153c 100644 (file)
@@ -95,7 +95,7 @@ TokenConcatenation::TokenConcatenation(Preprocessor &pp) : PP(pp) {
 static char GetFirstChar(Preprocessor &PP, const Token &Tok) {
   if (IdentifierInfo *II = Tok.getIdentifierInfo()) {
     // Avoid spelling identifiers, the most common form of token.
-    return II->getName()[0];
+    return II->getNameStart()[0];
   } else if (!Tok.needsCleaning()) {
     if (Tok.isLiteral() && Tok.getLiteralData()) {
       return *Tok.getLiteralData();
index 1d29f319c58465f4b516a12c33620d401f75dac1..158cf1b49b4f7fc4330572c3fd457a965ee9d895 100644 (file)
@@ -428,7 +428,7 @@ void Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {
         return;
       }
 
-      if (II->getName()[0] == 's') {
+      if (II->getNameStart()[0] == 's') {
         DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_setter);
         DS.setSetterName(Tok.getIdentifierInfo());
         ConsumeToken();  // consume method name
index 3981b8d22fa35f7bf83ee20dcaa2ea3db8905536..381151325a03a320488c8134b70edf3e54c48fbd 100644 (file)
@@ -235,8 +235,10 @@ void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
     
     // Filter out names reserved for the implementation (C99 7.1.3, 
     // C++ [lib.global.names]). Users don't need to see those.
+    //
+    // FIXME: Add predicate for this.
     if (Id->getLength() >= 2) {
-      const char *Name = Id->getName();
+      const char *Name = Id->getNameStart();
       if (Name[0] == '_' &&
           (Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')))
         return;
index ad62ae7d84b5e31b0d9b212ced2dbaadf0f9da2d..8504701a9251d1b03cc6440bf12a2644b7741b07 100644 (file)
@@ -1885,7 +1885,7 @@ CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc,
   const ExtVectorType *vecType = baseType->getAs<ExtVectorType>();
 
   // The vector accessor can't exceed the number of elements.
-  const char *compStr = CompName->getName();
+  const char *compStr = CompName->getNameStart();
 
   // This flag determines whether or not the component is one of the four
   // special names that indicate a subset of exactly half the elements are
@@ -1922,7 +1922,7 @@ CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc,
   // Ensure no component accessor exceeds the width of the vector type it
   // operates on.
   if (!HalvingSwizzle) {
-    compStr = CompName->getName();
+    compStr = CompName->getNameStart();
 
     if (HexSwizzle)
       compStr++;
index bb50d1810498d3106ceb48a4e1d3aa28dc2b21f0..8f6529e00d7f5dd2e0f70fbbbd0153514a5834e9 100644 (file)
@@ -473,7 +473,7 @@ const char *clang_getDeclSpelling(CXDecl AnonDecl)
     return OMD->getSelector().getAsString().c_str();
   }    
   if (ND->getIdentifier())
-    return ND->getIdentifier()->getName();
+    return ND->getIdentifier()->getNameStart();
   else 
     return "";
 }
@@ -513,22 +513,22 @@ const char *clang_getCursorSpelling(CXCursor C)
         {
         ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND);
         assert(OID && "clang_getCursorLine(): Missing interface decl");
-        return OID->getSuperClass()->getIdentifier()->getName();
+        return OID->getSuperClass()->getIdentifier()->getNameStart();
         }
       case CXCursor_ObjCClassRef: 
         {
         if (ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND)) {
-          return OID->getIdentifier()->getName();
+          return OID->getIdentifier()->getNameStart();
         }
         ObjCCategoryDecl *OID = dyn_cast<ObjCCategoryDecl>(ND);
         assert(OID && "clang_getCursorLine(): Missing category decl");
-        return OID->getClassInterface()->getIdentifier()->getName();
+        return OID->getClassInterface()->getIdentifier()->getNameStart();
         }
       case CXCursor_ObjCProtocolRef: 
         {
         ObjCProtocolDecl *OID = dyn_cast<ObjCProtocolDecl>(ND);
         assert(OID && "clang_getCursorLine(): Missing protocol decl");
-        return OID->getIdentifier()->getName();
+        return OID->getIdentifier()->getNameStart();
         }
       case CXCursor_ObjCSelectorRef:
         {
@@ -544,7 +544,7 @@ const char *clang_getCursorSpelling(CXCursor C)
         DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(
                                  static_cast<Stmt *>(C.stmt));
         assert(DRE && "clang_getCursorLine(): Missing decl ref expr");
-        return DRE->getDecl()->getIdentifier()->getName();
+        return DRE->getDecl()->getIdentifier()->getNameStart();
         }
       default:
         return "<not implemented>";