]> granicus.if.org Git - clang/commitdiff
-Add missing visitor for ObjCIvarRefExpr.
authorSteve Naroff <snaroff@apple.com>
Wed, 12 Mar 2008 13:19:12 +0000 (13:19 +0000)
committerSteve Naroff <snaroff@apple.com>
Wed, 12 Mar 2008 13:19:12 +0000 (13:19 +0000)
-Wrap objc runtime calls with "extern "C"" (for now).

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

AST/StmtDumper.cpp
Driver/RewriteTest.cpp

index 66411f1730d6d77004e679414fa1d7a3351761f3..d813899b530e6eb9db9d9512008edc63bbf918ec 100644 (file)
@@ -136,6 +136,7 @@ namespace  {
     void VisitObjCMessageExpr(ObjCMessageExpr* Node);
     void VisitObjCSelectorExpr(ObjCSelectorExpr *Node);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *Node);
+    void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node);
   };
 }
 
@@ -293,6 +294,13 @@ void StmtDumper::VisitDeclRefExpr(DeclRefExpr *Node) {
   fprintf(F, "='%s' %p", Node->getDecl()->getName(), (void*)Node->getDecl());
 }
 
+void StmtDumper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
+  DumpExpr(Node->getBase());
+
+  fprintf(F, " ObjCIvarRefExpr");
+  fprintf(F, "='%s' %p", Node->getDecl()->getName(), (void*)Node->getDecl());
+}
+
 void StmtDumper::VisitPreDefinedExpr(PreDefinedExpr *Node) {
   DumpExpr(Node);
   switch (Node->getIdentType()) {
index 6ad362a2a0b75e06c4ba41eb793d4388b4f6afa0..5e6d4262c037a7372099f2e21158aeb293032aba 100644 (file)
@@ -281,7 +281,9 @@ void RewriteTest::Initialize(ASTContext &context) {
   S += "typedef struct objc_object Protocol;\n";
   S += "#define _REWRITER_typedef_Protocol\n";
   S += "#endif\n";
-  S += "extern struct objc_object *objc_msgSend";
+  if (LangOpts.Microsoft) 
+    S += "extern \"C\" {\n";
+  S += "struct objc_object *objc_msgSend";
   S += "(struct objc_object *, struct objc_selector *, ...);\n";
   S += "extern struct objc_object *objc_msgSendSuper";
   S += "(struct objc_super *, struct objc_selector *, ...);\n";
@@ -291,7 +293,7 @@ void RewriteTest::Initialize(ASTContext &context) {
   S += "(struct objc_super *, struct objc_selector *, ...);\n";
   S += "extern struct objc_object *objc_msgSend_fpret";
   S += "(struct objc_object *, struct objc_selector *, ...);\n";
-  S += "extern struct objc_object *objc_getClass";
+  S += "struct objc_object *objc_getClass";
   S += "(const char *);\n";
   S += "extern struct objc_object *objc_getMetaClass";
   S += "(const char *);\n";
@@ -302,6 +304,8 @@ void RewriteTest::Initialize(ASTContext &context) {
   S += "extern int objc_exception_match";
   S += "(struct objc_class *, struct objc_object *, ...);\n";
   S += "extern Protocol *objc_getProtocol(const char *);\n";
+  if (LangOpts.Microsoft) 
+    S += "} // end extern \"C\"\n";
   S += "#include <objc/objc.h>\n";
   S += "#ifndef __FASTENUMERATIONSTATE\n";
   S += "struct __objcFastEnumerationState {\n\t";
@@ -1967,6 +1971,7 @@ Stmt *RewriteTest::SynthMessageExpr(ObjCMessageExpr *Exp) {
                                SourceLocation());
       MsgExprs.push_back(Unop);
     } else {
+      //recExpr->dump();
       // Remove all type-casts because it may contain objc-style types; e.g.
       // Foo<Proto> *.
       while (CastExpr *CE = dyn_cast<CastExpr>(recExpr))