]> granicus.if.org Git - clang/commitdiff
Populate metadata with adrress of method code.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 13 Nov 2007 21:02:00 +0000 (21:02 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 13 Nov 2007 21:02:00 +0000 (21:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44066 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/RewriteTest.cpp

index 09d58f2f60e8c737a7217fb5f9948371dc189a5e..a270970c1b170c3193168399e2d4cd3e6dd56d12 100644 (file)
@@ -34,6 +34,7 @@ namespace {
     llvm::SmallVector<ObjcCategoryImplDecl *, 8> CategoryImplementation;
     llvm::SmallPtrSet<ObjcInterfaceDecl*, 8> ObjcSynthesizedStructs;
     llvm::SmallPtrSet<ObjcInterfaceDecl*, 8> ObjcForwardDecls;
+    llvm::DenseMap<ObjcMethodDecl*, std::string> MethodInternalNames;
     
     FunctionDecl *MsgSendFunctionDecl;
     FunctionDecl *GetClassFunctionDecl;
@@ -384,35 +385,40 @@ void RewriteTest::RewriteObjcMethodDecl(ObjcMethodDecl *OMD,
   }
   ResultStr += "\nstatic ";
   ResultStr += OMD->getResultType().getAsString();
-  ResultStr += "\n_";
+  ResultStr += "\n";
   
   // Unique method name
+  std::string NameStr;
+  
   if (OMD->isInstance())
-    ResultStr += "I_";
+    NameStr += "_I_";
   else
-    ResultStr += "C_";
+    NameStr += "_C_";
   
-  ResultStr += OMD->getClassInterface()->getName();
-  ResultStr += "_";
+  NameStr += OMD->getClassInterface()->getName();
+  NameStr += "_";
   
   NamedDecl *MethodContext = OMD->getMethodContext();
   if (ObjcCategoryImplDecl *CID = 
       dyn_cast<ObjcCategoryImplDecl>(MethodContext)) {
-    ResultStr += CID->getName();
-    ResultStr += "_";
+    NameStr += CID->getName();
+    NameStr += "_";
   }
   // Append selector names, replacing ':' with '_'
   const char *selName = OMD->getSelector().getName().c_str();
   if (!strchr(selName, ':'))
-    ResultStr +=  OMD->getSelector().getName();
+    NameStr +=  OMD->getSelector().getName();
   else {
     std::string selString = OMD->getSelector().getName();
     int len = selString.size();
     for (int i = 0; i < len; i++)
       if (selString[i] == ':')
         selString[i] = '_';
-    ResultStr += selString;
+    NameStr += selString;
   }
+  // Remember this name for metadata emission
+  MethodInternalNames[OMD] = NameStr;
+  ResultStr += NameStr;
   
   // Rewrite arguments
   ResultStr += "(";
@@ -1211,7 +1217,9 @@ void RewriteTest::RewriteObjcMethodsMetaData(ObjcMethodDecl *const*Methods,
     Context->getObjcEncodingForMethodDecl(Methods[0], MethodTypeString);
     Result += "\", \"";
     Result += MethodTypeString;
-    Result += "\", 0}\n";
+    Result += "\", ";
+    Result += MethodInternalNames[Methods[0]];
+    Result += "}\n";
     for (int i = 1; i < NumMethods; i++) {
       // TODO: Need method address as 3rd initializer.
       Result += "\t  ,{(SEL)\"";
@@ -1220,7 +1228,9 @@ void RewriteTest::RewriteObjcMethodsMetaData(ObjcMethodDecl *const*Methods,
       Context->getObjcEncodingForMethodDecl(Methods[i], MethodTypeString);
       Result += "\", \"";
       Result += MethodTypeString;
-      Result += "\", 0}\n";
+      Result += "\", ";
+      Result += MethodInternalNames[Methods[i]];
+      Result += "}\n";
     }
     Result += "\t }\n};\n";
   }