[cfe-commits] r46619 - in /cfe/trunk: Driver/RewriteTest.cpp Rewrite/Rewriter.cpp clang.xcodeproj/project.pbxproj include/clang/Rewrite/Rewriter.h
Chris Lattner
sabre at nondot.org
Thu Jan 31 11:37:57 PST 2008
Author: lattner
Date: Thu Jan 31 13:37:57 2008
New Revision: 46619
URL: http://llvm.org/viewvc/llvm-project?rev=46619&view=rev
Log:
Make rewriter::inserttext return a bool to indicate if it failed.
Add a RewriteTest::ReplaceStmt method to factor the 'checking for
rewrite failed + emitting diagnostic if so' code.
Modified:
cfe/trunk/Driver/RewriteTest.cpp
cfe/trunk/Rewrite/Rewriter.cpp
cfe/trunk/clang.xcodeproj/project.pbxproj
cfe/trunk/include/clang/Rewrite/Rewriter.h
Modified: cfe/trunk/Driver/RewriteTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/RewriteTest.cpp?rev=46619&r1=46618&r2=46619&view=diff
==============================================================================
--- cfe/trunk/Driver/RewriteTest.cpp (original)
+++ cfe/trunk/Driver/RewriteTest.cpp Thu Jan 31 13:37:57 2008
@@ -170,6 +170,20 @@
"rewriting sub-expression within a macro (may not be correct)");
}
~RewriteTest();
+
+ void ReplaceStmt(Stmt *Old, Stmt *New) {
+ if (!Rewrite.ReplaceStmt(Old, New))
+ return;
+
+ // Replacement failed, report a warning unless disabled.
+ if (SilenceRewriteMacroWarning) return;
+
+ SourceRange Range = Old->getSourceRange();
+ Diags.Report(Context->getFullLoc(Old->getLocStart()), RewriteFailedDiag,
+ 0, 0, &Range, 1);
+ }
+
+
// Syntactic Rewriting.
void RewritePrologue(SourceLocation Loc);
@@ -708,13 +722,7 @@
if (IV->isFreeIvar()) {
Expr *Replacement = new MemberExpr(IV->getBase(), true, D,
IV->getLocation());
- if (Rewrite.ReplaceStmt(IV, Replacement)) {
- // replacement failed.
- SourceRange Range = IV->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(IV->getLocation()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(IV, Replacement);
delete IV;
return Replacement;
} else {
@@ -734,13 +742,7 @@
CastExpr *castExpr = new CastExpr(castT, IV->getBase(), SourceLocation());
// Don't forget the parens to enforce the proper binding.
ParenExpr *PE = new ParenExpr(SourceLocation(), SourceLocation(), castExpr);
- if (Rewrite.ReplaceStmt(IV->getBase(), PE)) {
- // replacement failed.
- SourceRange Range = IV->getBase()->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(IV->getBase()->getLocStart()),
- RewriteFailedDiag, 0, 0, &Range, 1);
- }
+ ReplaceStmt(IV->getBase(), PE);
delete IV->getBase();
return PE;
}
@@ -1267,7 +1269,7 @@
return 0;
}
-// This can't be done with Rewrite.ReplaceStmt(S, ThrowExpr), since
+// This can't be done with ReplaceStmt(S, ThrowExpr), since
// the throw expression is typically a message expression that's already
// been rewritten! (which implies the SourceLocation's are invalid).
Stmt *RewriteTest::RewriteObjCThrowStmt(ObjCAtThrowStmt *S) {
@@ -1301,13 +1303,7 @@
Expr *Replacement = new StringLiteral(StrEncoding.c_str(),
StrEncoding.length(), false, StrType,
SourceLocation(), SourceLocation());
- if (Rewrite.ReplaceStmt(Exp, Replacement)) {
- // replacement failed.
- SourceRange Range = Exp->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(Exp->getAtLoc()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(Exp, Replacement);
// Replace this subexpr in the parent.
delete Exp;
@@ -1325,13 +1321,7 @@
SourceLocation()));
CallExpr *SelExp = SynthesizeCallToFunctionDecl(SelGetUidFunctionDecl,
&SelExprs[0], SelExprs.size());
- if (Rewrite.ReplaceStmt(Exp, SelExp)) {
- // replacement failed.
- SourceRange Range = Exp->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(Exp->getAtLoc()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(Exp, SelExp);
delete Exp;
return SelExp;
}
@@ -1657,13 +1647,7 @@
&StrExpr[0], StrExpr.size());
// cast to NSConstantString *
CastExpr *cast = new CastExpr(Exp->getType(), call, SourceLocation());
- if (Rewrite.ReplaceStmt(Exp, cast)) {
- // replacement failed.
- SourceRange Range = Exp->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(Exp->getAtLoc()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(Exp, cast);
delete Exp;
return cast;
#else
@@ -1701,7 +1685,7 @@
SourceLocation());
// cast to NSConstantString *
cast = new CastExpr(Exp->getType(), Unop, SourceLocation());
- Rewrite.ReplaceStmt(Exp, cast);
+ ReplaceStmt(Exp, cast);
delete Exp;
return cast;
#endif
@@ -2037,13 +2021,7 @@
Stmt *RewriteTest::RewriteMessageExpr(ObjCMessageExpr *Exp) {
Stmt *ReplacingStmt = SynthMessageExpr(Exp);
// Now do the actual rewrite.
- if (Rewrite.ReplaceStmt(Exp, ReplacingStmt)) {
- // replacement failed.
- SourceRange Range = Exp->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(Exp->getLocStart()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(Exp, ReplacingStmt);
delete Exp;
return ReplacingStmt;
@@ -2064,13 +2042,7 @@
CallExpr *ProtoExp = SynthesizeCallToFunctionDecl(GetProtocolFunctionDecl,
&ProtoExprs[0],
ProtoExprs.size());
- if (Rewrite.ReplaceStmt(Exp, ProtoExp)) {
- // replacement failed.
- SourceRange Range = Exp->getSourceRange();
- if (!SilenceRewriteMacroWarning)
- Diags.Report(Context->getFullLoc(Exp->getAtLoc()), RewriteFailedDiag,
- 0, 0, &Range, 1);
- }
+ ReplaceStmt(Exp, ProtoExp);
delete Exp;
return ProtoExp;
Modified: cfe/trunk/Rewrite/Rewriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Rewrite/Rewriter.cpp?rev=46619&r1=46618&r2=46619&view=diff
==============================================================================
--- cfe/trunk/Rewrite/Rewriter.cpp (original)
+++ cfe/trunk/Rewrite/Rewriter.cpp Thu Jan 31 13:37:57 2008
@@ -206,12 +206,13 @@
/// InsertText - Insert the specified string at the specified location in the
/// original buffer. This method is only valid on rewritable source
/// locations.
-void Rewriter::InsertText(SourceLocation Loc,
+bool Rewriter::InsertText(SourceLocation Loc,
const char *StrData, unsigned StrLen) {
- assert(isRewritable(Loc) && "Not a rewritable location!");
+ if (!isRewritable(Loc)) return true;
unsigned FileID;
unsigned StartOffs = getLocationOffsetAndFileID(Loc, FileID);
getEditBuffer(FileID).InsertText(StartOffs, StrData, StrLen);
+ return false;
}
/// RemoveText - Remove the specified text region. This method is only valid
Modified: cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=46619&r1=46618&r2=46619&view=diff
==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Thu Jan 31 13:37:57 2008
@@ -576,9 +576,9 @@
DE928B7C0C0A615100231DA4 /* CodeGenModule.h */,
DE928B7E0C0A615600231DA4 /* CodeGenModule.cpp */,
DEEBC3BB0C2363BC00A9FE82 /* CodeGenTypes.cpp */,
+ DEEBC3B90C2363B800A9FE82 /* CodeGenTypes.h */,
1ABC36930C7A4BDC006DB0AB /* CGBuiltin.cpp */,
DE4264FB0C113592005A861D /* CGDecl.cpp */,
- DEEBC3B90C2363B800A9FE82 /* CodeGenTypes.h */,
DE4772FB0C10EAEC002239E8 /* CGExpr.cpp */,
DEF2EFF20C6CDD74000C4259 /* CGExprAgg.cpp */,
DE224FF70C7AA98800D370A5 /* CGExprComplex.cpp */,
Modified: cfe/trunk/include/clang/Rewrite/Rewriter.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Rewrite/Rewriter.h?rev=46619&r1=46618&r2=46619&view=diff
==============================================================================
--- cfe/trunk/include/clang/Rewrite/Rewriter.h (original)
+++ cfe/trunk/include/clang/Rewrite/Rewriter.h Thu Jan 31 13:37:57 2008
@@ -127,9 +127,9 @@
int getRangeSize(SourceRange Range) const;
/// InsertText - Insert the specified string at the specified location in the
- /// original buffer. This method is only valid on rewritable source
- /// locations.
- void InsertText(SourceLocation Loc, const char *StrData, unsigned StrLen);
+ /// original buffer. This method returns true (and does nothing) if the input
+ /// location was not rewritable, false otherwise.
+ bool InsertText(SourceLocation Loc, const char *StrData, unsigned StrLen);
/// RemoveText - Remove the specified text region. This method is only valid
/// on a rewritable source location.
More information about the cfe-commits
mailing list