[cfe-commits] r43296 - /cfe/trunk/Driver/RewriteTest.cpp
Chris Lattner
sabre at nondot.org
Wed Oct 24 09:57:36 PDT 2007
Author: lattner
Date: Wed Oct 24 11:57:36 2007
New Revision: 43296
URL: http://llvm.org/viewvc/llvm-project?rev=43296&view=rev
Log:
Use Ted's new mutable child iterators to update the tree as we rewrite it.
This will make nested subexprs work.
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=43296&r1=43295&r2=43296&view=diff
==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Wed Oct 24 11:57:36 2007
@@ -49,10 +49,10 @@
void HandleDeclInMainFile(Decl *D);
void RewriteInclude(SourceLocation Loc);
- void RewriteFunctionBody(Stmt *S);
- void RewriteAtEncode(ObjCEncodeExpr *Exp);
+ Stmt *RewriteFunctionBody(Stmt *S);
+ Stmt *RewriteAtEncode(ObjCEncodeExpr *Exp);
+ Stmt *RewriteMessageExpr(ObjCMessageExpr *Exp);
void RewriteForwardClassDecl(ObjcClassDecl *Dcl);
- void RewriteMessageExpr(ObjCMessageExpr *Exp);
void WriteObjcClassMetaData(ObjcImplementationDecl *IDecl);
void WriteObjcMetaData();
@@ -115,7 +115,7 @@
void RewriteTest::HandleDeclInMainFile(Decl *D) {
if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
if (Stmt *Body = FD->getBody())
- RewriteFunctionBody(Body);
+ FD->setBody(RewriteFunctionBody(Body));
if (ObjcImplementationDecl *CI = dyn_cast<ObjcImplementationDecl>(D))
ClassImplementation.push_back(CI);
@@ -127,12 +127,12 @@
}
-void RewriteTest::RewriteFunctionBody(Stmt *S) {
+Stmt *RewriteTest::RewriteFunctionBody(Stmt *S) {
// Otherwise, just rewrite all children.
for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end();
CI != E; ++CI)
if (*CI)
- RewriteFunctionBody(*CI);
+ *CI = RewriteFunctionBody(*CI);
// Handle specific things.
if (ObjCEncodeExpr *AtEncode = dyn_cast<ObjCEncodeExpr>(S))
@@ -141,19 +141,22 @@
if (ObjCMessageExpr *MessExpr = dyn_cast<ObjCMessageExpr>(S))
return RewriteMessageExpr(MessExpr);
+ // Return this stmt unmodified.
+ return S;
}
-void RewriteTest::RewriteAtEncode(ObjCEncodeExpr *Exp) {
+Stmt *RewriteTest::RewriteAtEncode(ObjCEncodeExpr *Exp) {
// Create a new string expression.
QualType StrType = Context->getPointerType(Context->CharTy);
Expr *Replacement = new StringLiteral("foo", 3, false, StrType,
SourceLocation(), SourceLocation());
Rewrite.ReplaceStmt(Exp, Replacement);
- delete Replacement;
+ delete Exp;
+ return Replacement;
}
-void RewriteTest::RewriteMessageExpr(ObjCMessageExpr *Exp) {
+Stmt *RewriteTest::RewriteMessageExpr(ObjCMessageExpr *Exp) {
assert(MsgSendFunctionDecl && "Can't find objc_msgSend() decl");
//Exp->dumpPretty();
//printf("\n");
@@ -177,6 +180,11 @@
Rewrite.ReplaceStmt(Exp, CE);
//Exp->dump();
//CE->dump();
+
+ // FIXME: Walk the operands of Exp, setting them to null before we delete Exp.
+ // This will be needed when "CE" points to the operands of Exp.
+ delete Exp;
+ return CE;
}
void RewriteTest::RewriteForwardClassDecl(ObjcClassDecl *ClassDecl) {
More information about the cfe-commits
mailing list