diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-09-27 22:55:54 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-09-27 22:55:54 +0000 |
commit | 5d783df5f7224225fa0f1f0810eaec5d5555acf8 (patch) | |
tree | 02c42aa633d9691bf3ff5c83c899f40e096a3872 /clang/lib | |
parent | e9d2396c88dfb7f6c27f9196e1ddcc4d9b57c4cb (diff) | |
download | bcm5719-llvm-5d783df5f7224225fa0f1f0810eaec5d5555acf8.tar.gz bcm5719-llvm-5d783df5f7224225fa0f1f0810eaec5d5555acf8.zip |
ObjectiveC migrator. Infer property from getters only
if property name is a valid identifier in the underlying
language. // rdar://15044184
llvm-svn: 191584
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/ARCMigrate/ObjCMT.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/ARCMigrate/ObjCMT.cpp b/clang/lib/ARCMigrate/ObjCMT.cpp index ca1d189ca33..71ad48f58bd 100644 --- a/clang/lib/ARCMigrate/ObjCMT.cpp +++ b/clang/lib/ARCMigrate/ObjCMT.cpp @@ -761,6 +761,16 @@ static bool AttributesMatch(const Decl *Decl1, const Decl *Decl2) { return true; } +static bool IsValidIdentifier(ASTContext &Ctx, + const char *Name) { + if (!isIdentifierHead(Name[0])) + return false; + std::string NameString = Name; + NameString[0] = toLowercase(NameString[0]); + IdentifierInfo *II = &Ctx.Idents.get(NameString); + return II->getTokenID() == tok::identifier; +} + bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, ObjCContainerDecl *D, ObjCMethodDecl *Method) { @@ -799,7 +809,7 @@ bool ObjCMigrateASTConsumer::migrateProperty(ASTContext &Ctx, const char *CGetterName = getterNameString.data() + LengthOfPrefix; // Make sure that first character after "is" or "get" prefix can // start an identifier. - if (!isIdentifierHead(CGetterName[0])) + if (!IsValidIdentifier(Ctx, CGetterName)) return false; if (CGetterName[0] && isUppercase(CGetterName[0])) { getterName = &Ctx.Idents.get(CGetterName); |