> Before call to replace_range in replace-match: > > |---------------------------|---|------|----| > s1 e1 s2 e2 EOB > > (s1, e1, etc. are the start and end of the corresponding > sub-expressions.) > > After the call to replace_range in replace-match: > > |---------|---|------|----| > s1 e1 s2 e2 EOB
Ah, right, now I see my confusion, thank you. So, the data is within bounds before replace_range but after bounds afterwards and the subsequent adjustments should fix it, but an intervening save-match-data will mess it up. Hmm... indeed, the adjustment isn't working correctly in this case. I don't think we can safely change the way save-match-data works, so I guess the next best thing is: - copy search_regs.start and search_regs.end before calling replace_range. - use that copy when adjusting the match data. Or equivalently, use save-match-data. IOW go back to your original patch. Duh! Stefan