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 | 075eb6eae0506e041e0086ddcab31ba2e55f0472 (patch) | |
tree | 568ba79a00e581026d56f26ada2e1cbd2a5c5d91 | |
parent | 158ecb9767faf87c2a33df3baec1b160dcc0be84 (diff) |
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];
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43347 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Rewrite/Rewriter.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/Rewrite/Rewriter.cpp b/Rewrite/Rewriter.cpp index 9e7d1b3143..d4185648cc 100644 --- a/Rewrite/Rewriter.cpp +++ b/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; } |