Fix bug in SelectorInfo::getName() - method buffer needs to be passed by reference.

llvm-svn: 42411
This commit is contained in:
Steve Naroff 2007-09-27 18:52:21 +00:00
parent e6f92253f5
commit 65ca537b55
2 changed files with 10 additions and 7 deletions

View File

@ -33,23 +33,25 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const {
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword; 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; int len=0;
methodName[0] = '\0'; methodName[0] = '\0';
if (NumArgs) { if (NumArgs) {
keyword_iterator KeyIter = keyword_begin(); keyword_iterator KeyIter = keyword_begin();
for (unsigned int i = 0; i < NumArgs; i++) { for (unsigned int i = 0; i < NumArgs; i++) {
if (KeyIter[i]) { if (KeyIter[i]) {
methodName += KeyIter[i]->getName(); unsigned KeyLen = strlen(KeyIter[i]->getName());
len += strlen(KeyIter[i]->getName()); methodName.append(KeyIter[i]->getName(), KeyIter[i]->getName()+KeyLen);
len += KeyLen;
} }
methodName += ":"; methodName.push_back(':');
len++; len++;
} }
} else { } else {
IdentifierInfo **UnaryInfo = reinterpret_cast<IdentifierInfo **>(this+1); IdentifierInfo **UnaryInfo = reinterpret_cast<IdentifierInfo **>(this+1);
methodName += UnaryInfo[0]->getName(); unsigned NameLen = strlen(UnaryInfo[0]->getName());
len += strlen(UnaryInfo[0]->getName()); methodName.append(UnaryInfo[0]->getName(), UnaryInfo[0]->getName()+NameLen);
len += NameLen;
} }
methodName[len] = '\0'; methodName[len] = '\0';
return &methodName[0]; return &methodName[0];

View File

@ -194,7 +194,8 @@ public:
} }
// Derive the full selector name, placing the result into methodBuffer. // Derive the full selector name, placing the result into methodBuffer.
// As a convenience, a pointer to the first character is returned. // 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; } unsigned getNumArgs() const { return NumArgs; }