]> granicus.if.org Git - clang/commitdiff
[libclang] Map 'id'/'Class'/'SEL' to the corresponding CXType kinds.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 8 May 2012 01:22:12 +0000 (01:22 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Tue, 8 May 2012 01:22:12 +0000 (01:22 +0000)
rdar://11357807

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156352 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/print-typekind.m
tools/libclang/CXType.cpp

index 9db192938f44c1a6730d069ffe7f7a968b6e060a..9eafd24fbe2fc5e20e92983ebf4c1d32812b5a29 100644 (file)
@@ -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]
index 850fac129ef1ad125d976008761be9282dd5ab50..fcc13f6139af39740e26cfd9d0fd0a58e943dce5 100644 (file)
@@ -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;
 }