> 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