diff options
author | Alex Denisov <1101.debian@gmail.com> | 2015-08-06 04:51:14 +0000 |
---|---|---|
committer | Alex Denisov <1101.debian@gmail.com> | 2015-08-06 04:51:14 +0000 |
commit | 5dfac81c60d7af2ff576f883c9b699168b1349d5 (patch) | |
tree | f1a7533f8ae42aec6ce60baf8fc901078efe1aec /clang/lib/AST/NSAPI.cpp | |
parent | 0f4e2c4d0f46b5edb4159b2d982327475b797efe (diff) | |
download | bcm5719-llvm-5dfac81c60d7af2ff576f883c9b699168b1349d5.tar.gz bcm5719-llvm-5dfac81c60d7af2ff576f883c9b699168b1349d5.zip |
[ObjC] Circular containers: add support of subclasses
llvm-svn: 244193
Diffstat (limited to 'clang/lib/AST/NSAPI.cpp')
-rw-r--r-- | clang/lib/AST/NSAPI.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/clang/lib/AST/NSAPI.cpp b/clang/lib/AST/NSAPI.cpp index a9b10ed451c..c9264d59aae 100644 --- a/clang/lib/AST/NSAPI.cpp +++ b/clang/lib/AST/NSAPI.cpp @@ -9,6 +9,7 @@ #include "clang/AST/NSAPI.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclObjC.h" #include "clang/AST/Expr.h" #include "llvm/ADT/StringSwitch.h" @@ -29,7 +30,6 @@ IdentifierInfo *NSAPI::getNSClassId(NSClassIdKindKind K) const { "NSMutableDictionary", "NSNumber", "NSMutableSet", - "NSCountedSet", "NSMutableOrderedSet", "NSValue" }; @@ -511,6 +511,26 @@ bool NSAPI::isMacroDefined(StringRef Id) const { return Ctx.Idents.get(Id).hasMacroDefinition(); } +bool NSAPI::isSubclassOfNSClass(ObjCInterfaceDecl *InterfaceDecl, + NSClassIdKindKind NSClassKind) const { + if (!InterfaceDecl) { + return false; + } + + IdentifierInfo *NSClassID = getNSClassId(NSClassKind); + + bool IsSubclass = false; + do { + IsSubclass = NSClassID == InterfaceDecl->getIdentifier(); + + if (IsSubclass) { + break; + } + } while ((InterfaceDecl = InterfaceDecl->getSuperClass())); + + return IsSubclass; +} + bool NSAPI::isObjCTypedef(QualType T, StringRef name, IdentifierInfo *&II) const { if (!Ctx.getLangOpts().ObjC1) |