]> granicus.if.org Git - clang/commitdiff
Fix bug in SelectorInfo::getName() - method buffer needs to be passed by reference.
authorSteve Naroff <snaroff@apple.com>
Thu, 27 Sep 2007 18:52:21 +0000 (18:52 +0000)
committerSteve Naroff <snaroff@apple.com>
Thu, 27 Sep 2007 18:52:21 +0000 (18:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42411 91177308-0d34-0410-b5e6-96231b3b80d8

Lex/IdentifierTable.cpp
include/clang/Lex/IdentifierTable.h

index 6ab0ef1a69b1ed4e56eb480d3dd0c074591c2a8a..de68435549498525e15a42bd603dd1a5ea142f3f 100644 (file)
@@ -33,23 +33,25 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const {
   return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
 }
 
-char *SelectorInfo::getName(llvm::SmallString<128> methodName) {
+char *SelectorInfo::getName(llvm::SmallVectorImpl<char> &methodName) {
   int len=0;
   methodName[0] = '\0';
   if (NumArgs) {
     keyword_iterator KeyIter = keyword_begin();
     for (unsigned int i = 0; i < NumArgs; i++) {
       if (KeyIter[i]) {
-        methodName += KeyIter[i]->getName();
-        len += strlen(KeyIter[i]->getName());
+        unsigned KeyLen = strlen(KeyIter[i]->getName());
+        methodName.append(KeyIter[i]->getName(), KeyIter[i]->getName()+KeyLen);
+        len += KeyLen;
       }
-      methodName += ":";
+      methodName.push_back(':');
       len++;
     }
   } else {
     IdentifierInfo **UnaryInfo = reinterpret_cast<IdentifierInfo **>(this+1);
-    methodName += UnaryInfo[0]->getName();
-    len += strlen(UnaryInfo[0]->getName());
+    unsigned NameLen = strlen(UnaryInfo[0]->getName());
+    methodName.append(UnaryInfo[0]->getName(), UnaryInfo[0]->getName()+NameLen);
+    len += NameLen;
   }
   methodName[len] = '\0';
   return &methodName[0];
index 9b08202988bd34cc0f1e0d75dd104f5aa4edfcc5..f676cd991eea0ffd4b51b88be137a7110240a398 100644 (file)
@@ -194,7 +194,8 @@ public:
   }
   // Derive the full selector name, placing the result into methodBuffer.
   // As a convenience, a pointer to the first character is returned.
-  char *getName(llvm::SmallString<128> methodBuffer);
+  // Example usage: llvm::SmallString<128> mbuf; Selector->getName(mbuf);
+  char *getName(llvm::SmallVectorImpl<char> &methodBuffer);
 
   unsigned getNumArgs() const { return NumArgs; }