void RewriteBuffer::InsertText(unsigned OrigOffset,
const char *StrData, unsigned StrLen) {
+ // Nothing to insert, exit early.
if (StrLen == 0) return;
- // FIXME:
+
+ unsigned RealOffset = getMappedOffset(OrigOffset, true);
+ assert(RealOffset <= Buffer.size() && "Invalid location");
+
+ // Remove the dead characters.
+ Buffer.insert(Buffer.begin()+RealOffset, StrData, StrData+StrLen);
+
+ // Add a delta so that future changes are offset correctly.
+ AddDelta(OrigOffset, StrLen);
}
/// ReplaceText - This method replaces a range of characters in the input
/// operation.
void RewriteBuffer::ReplaceText(unsigned OrigOffset, unsigned OrigLength,
const char *NewStr, unsigned NewLength) {
- RemoveText(OrigOffset, OrigLength);
+ InsertText(OrigOffset, NewStr, NewLength);
return;
unsigned MappedOffs = getMappedOffset(OrigOffset);