diff options
author | Steve Naroff <snaroff@apple.com> | 2007-09-27 18:52:21 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2007-09-27 18:52:21 +0000 |
commit | 4cbcb897fe7c4ff1ed5322ee4dfd490c581e33d5 (patch) | |
tree | 307de0909dc8c535fe3ad5fa601948bb87560849 | |
parent | aead1539e7481fde73725d8eadeea82087982bf3 (diff) |
Fix bug in SelectorInfo::getName() - method buffer needs to be passed by reference.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42411 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Lex/IdentifierTable.cpp | 14 | ||||
-rw-r--r-- | include/clang/Lex/IdentifierTable.h | 3 |
2 files changed, 10 insertions, 7 deletions
diff --git a/Lex/IdentifierTable.cpp b/Lex/IdentifierTable.cpp index 6ab0ef1a69..de68435549 100644 --- a/Lex/IdentifierTable.cpp +++ b/Lex/IdentifierTable.cpp @@ -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]; diff --git a/include/clang/Lex/IdentifierTable.h b/include/clang/Lex/IdentifierTable.h index 9b08202988..f676cd991e 100644 --- a/include/clang/Lex/IdentifierTable.h +++ b/include/clang/Lex/IdentifierTable.h @@ -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; } |