summaryrefslogtreecommitdiffstats
path: root/clang/Rewrite/Rewriter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-10-25 17:17:34 +0000
committerChris Lattner <sabre@nondot.org>2007-10-25 17:17:34 +0000
commit94a41ff6c15938796e54c3b414981e842cfad8b9 (patch)
tree7e69b9aafbbc03dff2b203f500f72da63ee9388f /clang/Rewrite/Rewriter.cpp
parent211f8b8352c42927fee6a71d8730d1f25d0eb341 (diff)
downloadbcm5719-llvm-94a41ff6c15938796e54c3b414981e842cfad8b9.tar.gz
bcm5719-llvm-94a41ff6c15938796e54c3b414981e842cfad8b9.zip
Fix a bug steve noticed when handling nested rewrites. We now turn this:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; into: NSAutoreleasePool * pool = objc_msgSend(objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("alloc")), sel_getUid("init")); instead of: NSAutoreleasePool * pool = objc_msgSend(objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("alloc")), sel_getUid("init"))utoreleasePool"), sel_getUid("alloc")) init]; llvm-svn: 43347
Diffstat (limited to 'clang/Rewrite/Rewriter.cpp')
-rw-r--r--clang/Rewrite/Rewriter.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/clang/Rewrite/Rewriter.cpp b/clang/Rewrite/Rewriter.cpp
index 9e7d1b3143a..d4185648cc2 100644
--- a/clang/Rewrite/Rewriter.cpp
+++ b/clang/Rewrite/Rewriter.cpp
@@ -159,11 +159,27 @@ int Rewriter::getRangeSize(SourceRange Range) const {
if (StartFileID != EndFileID)
return -1;
+ unsigned Delta;
+
+ // If no edits have been made to this buffer, the delta between the range
+ // Is just the difference in offsets.
+ std::map<unsigned, RewriteBuffer>::const_iterator I =
+ RewriteBuffers.find(StartFileID);
+ if (I == RewriteBuffers.end()) {
+ Delta = EndOff-StartOff;
+ } else {
+ // Otherwise, subtracted the mapped offsets instead.
+ const RewriteBuffer &RB = I->second;
+ Delta = RB.getMappedOffset(EndOff, true);
+ Delta -= RB.getMappedOffset(StartOff);
+ }
+
+
// Adjust the end offset to the end of the last token, instead of being the
// start of the last token.
- EndOff += Lexer::MeasureTokenLength(Range.getEnd(), *SourceMgr);
+ Delta += Lexer::MeasureTokenLength(Range.getEnd(), *SourceMgr);
- return EndOff-StartOff;
+ return Delta;
}
OpenPOWER on IntegriCloud