diff options
| author | Chris Lattner <sabre@nondot.org> | 2007-10-25 17:17:34 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2007-10-25 17:17:34 +0000 |
| commit | 94a41ff6c15938796e54c3b414981e842cfad8b9 (patch) | |
| tree | 7e69b9aafbbc03dff2b203f500f72da63ee9388f /clang/Rewrite/Rewriter.cpp | |
| parent | 211f8b8352c42927fee6a71d8730d1f25d0eb341 (diff) | |
| download | bcm5719-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.cpp | 20 |
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; } |

