Tweak the interface for analyzing the CF conventions for a name

to take a FunctionDecl* instead of an llvm::StringRef.  Eventually
we might push more logic in there, like using slightly different
conventions for C++ methods.

Also, fix a bug where 'copy' and 'create' were being caught in 
non-camel-cased strings.  We want copyFoo and CopyFoo and XCopy
but not Xcopy or xcopy.

llvm-svn: 140911
This commit is contained in:
John McCall
2011-10-01 00:48:56 +00:00
parent 1ed54f50c5
commit 525f05597f
4 changed files with 31 additions and 12 deletions

View File

@@ -125,7 +125,13 @@ bool cocoa::isCocoaObjectRef(QualType Ty) {
return false;
}
bool coreFoundation::followsCreateRule(StringRef functionName) {
bool coreFoundation::followsCreateRule(const FunctionDecl *fn) {
// For now, *just* base this on the function name, not on anything else.
const IdentifierInfo *ident = fn->getIdentifier();
if (!ident) return false;
StringRef functionName = ident->getName();
StringRef::iterator it = functionName.begin();
StringRef::iterator start = it;
StringRef::iterator endI = functionName.end();
@@ -136,6 +142,10 @@ bool coreFoundation::followsCreateRule(StringRef functionName) {
// Search for the first character. It can either be 'C' or 'c'.
char ch = *it;
if (ch == 'C' || ch == 'c') {
// Make sure this isn't something like 'recreate' or 'Scopy'.
if (ch == 'c' && it != start && isalpha(*(it - 1)))
continue;
++it;
break;
}