Mercurial > hg > xemacs-beta
diff src/extents.c @ 5879:77d7b77909c2
Move extents.c to working in byte positions only; fix a bug, extent_detach()
src/ChangeLog addition:
2015-03-27 Aidan Kehoe <kehoea@parhasard.net>
Fix a small bug, extent_detach(); minimise needless char-byte
conversion, extents.c, sticking to byte positions in general in
this file.
* extents.c:
* extents.c (signal_single_extent_changed):
Pass byte endpoints to
gutter_extent_signal_changed_region_maybe(),
buffer_extent_signal_changed_region().
* extents.c (extent_detach):
Call signal_extent_changed() correctly, pass both extent endpoints
rather than just the byte and character variants of the start.
* extents.c (struct report_extent_modification_closure):
Do this in terms of byte positions.
* extents.c (report_extent_modification_mapper):
Use byte positions, only converting to characters when we are
definitely calling Lisp.
* extents.c (report_extent_modification):
Use byte positions in this API, move the byte-char conversion to
our callers, simplifying extents.c (it all now works in byte
positions).
* extents.h:
Update report_extent_modification's prototype.
* gutter.c (gutter_extent_signal_changed_region_maybe):
Use byte positions here, avoids needless byte-char conversion.
* gutter.h:
Update the prototype here.
* insdel.c:
* insdel.c (buffer_extent_signal_changed_region):
Implement this in terms of byte positions.
* insdel.c (signal_before_change):
* insdel.c (signal_after_change):
Call report_extent_modification() with byte positions, doing the
char->byte conversion here rather than leaving it to extents.c.
* insdel.h:
* insdel.h (struct each_buffer_change_data):
The extent unchanged info now describes bytecounts.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Fri, 27 Mar 2015 23:39:49 +0000 |
parents | 56144c8593a8 |
children |
line wrap: on
line diff
--- a/src/extents.c Thu Mar 26 20:47:12 2015 -0400 +++ b/src/extents.c Fri Mar 27 23:39:49 2015 +0000 @@ -1473,8 +1473,8 @@ if (!in_modeline_generation) MARK_EXTENTS_CHANGED; gutter_extent_signal_changed_region_maybe - (object, extent_endpoint_char (extent, 0), - extent_endpoint_char (extent, 1)); + (object, extent_endpoint_byte (extent, 0), + extent_endpoint_byte (extent, 1)); } else if (BUFFERP (object)) { @@ -1486,8 +1486,8 @@ EQ (property, Qinvisible)) MARK_CLIP_CHANGED; buffer_extent_signal_changed_region - (b, extent_endpoint_char (extent, 0), - extent_endpoint_char (extent, 1)); + (b, extent_endpoint_byte (extent, 0), + extent_endpoint_byte (extent, 1)); } } @@ -1696,10 +1696,8 @@ el = extent_extent_list (extent); /* call this before messing with the extent. */ - signal_extent_changed (extent, Qnil, - extent_endpoint_byte (extent, 0), - extent_endpoint_char (extent, 0), - 0); + signal_extent_changed (extent, Qnil, extent_endpoint_byte (extent, 0), + extent_endpoint_byte (extent, 1), 0); extent_list_delete (el, extent); soe_delete (extent_object (extent), extent); set_extent_start (extent, -1); @@ -4632,7 +4630,7 @@ struct report_extent_modification_closure { Lisp_Object buffer; - Charxpos start, end; + Bytexpos start, end; int afterp; int speccount; }; @@ -4658,8 +4656,12 @@ return 0; exobj = wrap_extent (extent); - startobj = make_fixnum (closure->start); - endobj = make_fixnum (closure->end); + startobj + = make_fixnum (buffer_or_string_bytexpos_to_charxpos + (extent_object (extent), closure->start)); + endobj + = make_fixnum (buffer_or_string_bytexpos_to_charxpos + (extent_object (extent), closure->end)); /* Now that we are sure to call elisp, set up an unwind-protect so inside_change_hook gets restored in case we throw. Also record @@ -4704,7 +4706,7 @@ } void -report_extent_modification (Lisp_Object buffer, Charbpos start, Charbpos end, +report_extent_modification (Lisp_Object buffer, Bytexpos start, Bytexpos end, int afterp) { struct report_extent_modification_closure closure; @@ -4715,10 +4717,8 @@ closure.afterp = afterp; closure.speccount = -1; - map_extents (charbpos_to_bytebpos (XBUFFER (buffer), start), - charbpos_to_bytebpos (XBUFFER (buffer), end), - report_extent_modification_mapper, (void *)&closure, - buffer, NULL, ME_MIGHT_CALL_ELISP); + map_extents (start, end, report_extent_modification_mapper, + (void *)&closure, buffer, NULL, ME_MIGHT_CALL_ELISP); }