[cfe-commits] r44062 - /cfe/trunk/Driver/RewriteTest.cpp
Fariborz Jahanian
fjahanian at apple.com
Tue Nov 13 12:04:29 PST 2007
Author: fjahanian
Date: Tue Nov 13 14:04:28 2007
New Revision: 44062
URL: http://llvm.org/viewvc/llvm-project?rev=44062&view=rev
Log:
Rewrite of method definitions in categories.
Modified:
cfe/trunk/Driver/RewriteTest.cpp
Modified: cfe/trunk/Driver/RewriteTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/RewriteTest.cpp?rev=44062&r1=44061&r2=44062&view=diff
==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Tue Nov 13 14:04:28 2007
@@ -86,7 +86,7 @@
void RewriteTabs();
void RewriteForwardClassDecl(ObjcClassDecl *Dcl);
void RewriteInterfaceDecl(ObjcInterfaceDecl *Dcl);
- void RewriteImplementationDecl(ObjcImplementationDecl *Dcl);
+ void RewriteImplementationDecl(NamedDecl *Dcl);
void RewriteObjcMethodDecl(ObjcMethodDecl *MDecl, std::string &ResultStr);
void RewriteCategoryDecl(ObjcCategoryDecl *Dcl);
void RewriteProtocolDecl(ObjcProtocolDecl *Dcl);
@@ -382,7 +382,6 @@
ResultStr += "#include <Objc/objc.h>\n";
includeObjc = true;
}
-
ResultStr += "\nstatic ";
ResultStr += OMD->getResultType().getAsString();
ResultStr += "\n_";
@@ -422,7 +421,8 @@
if (OMD->isInstance()) {
QualType selfTy = Context->getObjcInterfaceType(OMD->getClassInterface());
selfTy = Context->getPointerType(selfTy);
- ResultStr += "struct ";
+ if (ObjcSynthesizedStructs.count(OMD->getClassInterface()))
+ ResultStr += "struct ";
ResultStr += selfTy.getAsString();
}
else
@@ -443,13 +443,25 @@
ResultStr += ")";
}
-void RewriteTest::RewriteImplementationDecl(ObjcImplementationDecl *OID) {
+void RewriteTest::RewriteImplementationDecl(NamedDecl *OID) {
+ ObjcImplementationDecl *IMD = dyn_cast<ObjcImplementationDecl>(OID);
+ ObjcCategoryImplDecl *CID = dyn_cast<ObjcCategoryImplDecl>(OID);
+
+ if (IMD)
+ Rewrite.InsertText(IMD->getLocStart(), "// ", 3);
+ else
+ Rewrite.InsertText(CID->getLocStart(), "// ", 3);
- Rewrite.InsertText(OID->getLocStart(), "// ", 3);
+ int numMethods = IMD ? IMD->getNumInstanceMethods()
+ : CID->getNumInstanceMethods();
- for (int i = 0; i < OID->getNumInstanceMethods(); i++) {
+ for (int i = 0; i < numMethods; i++) {
std::string ResultStr;
- ObjcMethodDecl *OMD = OID->getInstanceMethods()[i];
+ ObjcMethodDecl *OMD;
+ if (IMD)
+ OMD = IMD->getInstanceMethods()[i];
+ else
+ OMD = CID->getInstanceMethods()[i];
RewriteObjcMethodDecl(OMD, ResultStr);
SourceLocation LocStart = OMD->getLocStart();
SourceLocation LocEnd = OMD->getBody()->getLocStart();
@@ -460,9 +472,14 @@
ResultStr.c_str(), ResultStr.size());
}
- for (int i = 0; i < OID->getNumClassMethods(); i++) {
+ numMethods = IMD ? IMD->getNumClassMethods() : CID->getNumClassMethods();
+ for (int i = 0; i < numMethods; i++) {
std::string ResultStr;
- ObjcMethodDecl *OMD = OID->getClassMethods()[i];
+ ObjcMethodDecl *OMD;
+ if (IMD)
+ OMD = IMD->getClassMethods()[i];
+ else
+ OMD = CID->getClassMethods()[i];
RewriteObjcMethodDecl(OMD, ResultStr);
SourceLocation LocStart = OMD->getLocStart();
SourceLocation LocEnd = OMD->getBody()->getLocStart();
@@ -472,7 +489,10 @@
Rewrite.ReplaceText(LocStart, endBuf-startBuf,
ResultStr.c_str(), ResultStr.size());
}
- Rewrite.InsertText(OID->getLocEnd(), "// ", 3);
+ if (IMD)
+ Rewrite.InsertText(IMD->getLocEnd(), "// ", 3);
+ else
+ Rewrite.InsertText(CID->getLocEnd(), "// ", 3);
}
void RewriteTest::RewriteInterfaceDecl(ObjcInterfaceDecl *ClassDecl) {
@@ -1723,6 +1743,9 @@
for (int i = 0; i < ClsDefCount; i++)
RewriteImplementationDecl(ClassImplementation[i]);
+ for (int i = 0; i < CatDefCount; i++)
+ RewriteImplementationDecl(CategoryImplementation[i]);
+
// TODO: This is temporary until we decide how to access objc types in a
// c program
Result += "#include <Objc/objc.h>\n";
More information about the cfe-commits
mailing list