aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/ASTContext.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-07-24 23:58:27 +0000
committerTed Kremenek <kremenek@apple.com>2008-07-24 23:58:27 +0000
commitb6ccaac65ca72f72954eb3893bbd940bedd23f00 (patch)
treeb864371d60722f6ca98fa6640505af357ae89878 /lib/AST/ASTContext.cpp
parentffceb4ce42d3621025950dc5762cc213fab275d2 (diff)
Move isObjCObjectPointerType() from Sema to ASTContext.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53998 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ASTContext.cpp')
-rw-r--r--lib/AST/ASTContext.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index fa12364c52..54cc8e0068 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -1500,6 +1500,32 @@ void ASTContext::setObjCConstantStringInterface(ObjCInterfaceDecl *Decl) {
ObjCConstantStringType = getObjCInterfaceType(Decl);
}
+
+//===----------------------------------------------------------------------===//
+// Type Predicates.
+//===----------------------------------------------------------------------===//
+
+/// isObjCObjectPointerType - Returns true if type is an Objective-C pointer
+/// to an object type. This includes "id" and "Class" (two 'special' pointers
+/// to struct), Interface* (pointer to ObjCInterfaceType) and id<P> (qualified
+/// ID type).
+bool ASTContext::isObjCObjectPointerType(QualType Ty) const {
+ if (Ty->isObjCQualifiedIdType())
+ return true;
+
+ if (!Ty->isPointerType())
+ return false;
+
+ // Check to see if this is 'id' or 'Class', both of which are typedefs for
+ // pointer types. This looks for the typedef specifically, not for the
+ // underlying type.
+ if (Ty == getObjCIdType() || Ty == getObjCClassType())
+ return true;
+
+ // If this a pointer to an interface (e.g. NSString*), it is ok.
+ return Ty->getAsPointerType()->getPointeeType()->isObjCInterfaceType();
+}
+
//===----------------------------------------------------------------------===//
// Type Compatibility Testing
//===----------------------------------------------------------------------===//