]> granicus.if.org Git - clang/commitdiff
more modern objective-c meta-data stuff.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 20 Mar 2012 21:09:58 +0000 (21:09 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 20 Mar 2012 21:09:58 +0000 (21:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153127 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Rewrite/RewriteModernObjC.cpp

index ead1ce6a5d1cf2b01f74a317e57d8adc3f28e2fa..3c9c5ddbe4e6b5caf1e061bf9d89c066927fa45a 100644 (file)
@@ -5625,6 +5625,15 @@ static void Write_class_t(ASTContext *Context, std::string &Result,
     Result += VarName;
     Result += CDecl->getSuperClass()->getNameAsString();
     Result += ";\n";
+    
+    if (metaclass) {
+      if (RootClass->getImplementation())
+        Result += "__declspec(dllexport) ";
+      Result += "extern struct _class_t "; 
+      Result += VarName;
+      Result += RootClass->getNameAsString();
+      Result += ";\n";
+    }
   }
   
   Result += "\n__declspec(dllexport) struct _class_t "; Result += VarName; Result += CDecl->getNameAsString();
@@ -5640,7 +5649,7 @@ static void Write_class_t(ASTContext *Context, std::string &Result,
       Result += ",\n\t";
     }
     else {
-      Result += "0, // "; Result += VarName; 
+      Result += "0, // &"; Result += VarName; 
       Result += CDecl->getNameAsString();
       Result += ",\n\t";
       Result += "0, // &OBJC_CLASS_$_"; Result += CDecl->getNameAsString();
@@ -5681,10 +5690,15 @@ static void Write_class_t(ASTContext *Context, std::string &Result,
   Result += "(void ) {\n";
   Result += "\tOBJC_METACLASS_$_"; Result += CDecl->getNameAsString();
   Result += ".isa = "; Result += "&OBJC_METACLASS_$_";
-  Result += CDecl->getNameAsString(); Result += ";\n";
+  Result += RootClass->getNameAsString(); Result += ";\n";
   
   Result += "\tOBJC_METACLASS_$_"; Result += CDecl->getNameAsString();
-  Result += ".superclass = "; Result += "&OBJC_METACLASS_$_";
+  Result += ".superclass = ";
+  if (rootClass)
+    Result += "&OBJC_CLASS_$_";
+  else
+     Result += "&OBJC_METACLASS_$_";
+
   Result += SuperClass->getNameAsString(); Result += ";\n";
   
   Result += "\tOBJC_METACLASS_$_"; Result += CDecl->getNameAsString();