summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/NSAPI.cpp
diff options
context:
space:
mode:
authorAlex Denisov <1101.debian@gmail.com>2015-08-06 04:51:14 +0000
committerAlex Denisov <1101.debian@gmail.com>2015-08-06 04:51:14 +0000
commit5dfac81c60d7af2ff576f883c9b699168b1349d5 (patch)
treef1a7533f8ae42aec6ce60baf8fc901078efe1aec /clang/lib/AST/NSAPI.cpp
parent0f4e2c4d0f46b5edb4159b2d982327475b797efe (diff)
downloadbcm5719-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.cpp22
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)
OpenPOWER on IntegriCloud