summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-08 01:22:12 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-08 01:22:12 +0000
commitd6560a6384b9dc3c3e7189a60c117b2f0b5c0985 (patch)
treea5bbf788c5c5e5e016fb116bed8424c15666b71e
parent6943e7c569bde3804b870f0c0fbc20cc8eb0f162 (diff)
downloadbcm5719-llvm-d6560a6384b9dc3c3e7189a60c117b2f0b5c0985.tar.gz
bcm5719-llvm-d6560a6384b9dc3c3e7189a60c117b2f0b5c0985.zip
[libclang] Map 'id'/'Class'/'SEL' to the corresponding CXType kinds.
rdar://11357807 llvm-svn: 156352
-rw-r--r--clang/test/Index/print-typekind.m6
-rw-r--r--clang/tools/libclang/CXType.cpp17
2 files changed, 19 insertions, 4 deletions
diff --git a/clang/test/Index/print-typekind.m b/clang/test/Index/print-typekind.m
index 9db192938f4..9eafd24fbe2 100644
--- a/clang/test/Index/print-typekind.m
+++ b/clang/test/Index/print-typekind.m
@@ -1,10 +1,10 @@
@interface Foo
@property (readonly) id x;
-(int) mymethod;
--(int) mymethod2:(int)x blah:(float)y;
+-(int) mymethod2:(id)x blah:(Class)y boo:(SEL)z;
@end
// RUN: c-index-test -test-print-typekind %s | FileCheck %s
-// CHECK: ObjCPropertyDecl=x:2:25 typekind=Typedef [canonical=ObjCObjectPointer]
+// CHECK: ObjCPropertyDecl=x:2:25 typekind=ObjCId [canonical=ObjCObjectPointer]
// CHECK: ObjCInstanceMethodDecl=mymethod:3:8 typekind=Invalid [result=Int]
-// CHECK: ObjCInstanceMethodDecl=mymethod2:blah::4:8 typekind=Invalid [result=Int] [args= Int Float]
+// CHECK: ObjCInstanceMethodDecl=mymethod2:blah:boo::4:8 typekind=Invalid [result=Int] [args= ObjCId ObjCClass ObjCSel]
diff --git a/clang/tools/libclang/CXType.cpp b/clang/tools/libclang/CXType.cpp
index 850fac129ef..fcc13f6139a 100644
--- a/clang/tools/libclang/CXType.cpp
+++ b/clang/tools/libclang/CXType.cpp
@@ -94,7 +94,22 @@ static CXTypeKind GetTypeKind(QualType T) {
CXType cxtype::MakeCXType(QualType T, CXTranslationUnit TU) {
- CXTypeKind TK = GetTypeKind(T);
+ CXTypeKind TK = CXType_Invalid;
+
+ if (TU) {
+ ASTContext &Ctx = static_cast<ASTUnit *>(TU->TUData)->getASTContext();
+ if (Ctx.getLangOpts().ObjC1) {
+ if (Ctx.isObjCIdType(T))
+ TK = CXType_ObjCId;
+ else if (Ctx.isObjCClassType(T))
+ TK = CXType_ObjCClass;
+ else if (Ctx.isObjCSelType(T))
+ TK = CXType_ObjCSel;
+ }
+ }
+ if (TK == CXType_Invalid)
+ TK = GetTypeKind(T);
+
CXType CT = { TK, { TK == CXType_Invalid ? 0 : T.getAsOpaquePtr(), TU }};
return CT;
}
OpenPOWER on IntegriCloud