diff options
| author | Dmitry Antipov | 2013-02-11 14:21:52 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2013-02-11 14:21:52 +0400 |
| commit | f74de3451c2cb3033f6d17f9c479150d00e4caa8 (patch) | |
| tree | 71ae407b470ab3dfa954abd0279d363808618bd0 /src | |
| parent | 5109429f09110cd817d87e1c361ac66aaee28431 (diff) | |
| download | emacs-f74de3451c2cb3033f6d17f9c479150d00e4caa8.tar.gz emacs-f74de3451c2cb3033f6d17f9c479150d00e4caa8.zip | |
* marker.c (set_marker_internal): If desired position is passed
as a marker, avoid call to buf_charpos_to_bytepos.
* window.c (Fset_window_point): Omit redundant type checking.
(Fset_window_start): Likewise. Format comment.
(window_scroll_pixel_based): Use set_marker_restricted_both
with character and byte positions obtained from an iterator.
(Fset_window_configuration): Use set_marker_restricted_both.
* xdisp.c (message_dolog): Likewise.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 11 | ||||
| -rw-r--r-- | src/marker.c | 28 | ||||
| -rw-r--r-- | src/window.c | 20 | ||||
| -rw-r--r-- | src/xdisp.c | 6 |
4 files changed, 46 insertions, 19 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 9d8540075de..163f2e164f4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,14 @@ | |||
| 1 | 2013-02-11 Dmitry Antipov <dmantipov@yandex.ru> | ||
| 2 | |||
| 3 | * marker.c (set_marker_internal): If desired position is passed | ||
| 4 | as a marker, avoid call to buf_charpos_to_bytepos. | ||
| 5 | * window.c (Fset_window_point): Omit redundant type checking. | ||
| 6 | (Fset_window_start): Likewise. Format comment. | ||
| 7 | (window_scroll_pixel_based): Use set_marker_restricted_both | ||
| 8 | with character and byte positions obtained from an iterator. | ||
| 9 | (Fset_window_configuration): Use set_marker_restricted_both. | ||
| 10 | * xdisp.c (message_dolog): Likewise. | ||
| 11 | |||
| 1 | 2013-02-10 Eli Zaretskii <eliz@gnu.org> | 12 | 2013-02-10 Eli Zaretskii <eliz@gnu.org> |
| 2 | 13 | ||
| 3 | * xdisp.c (move_it_vertically_backward, move_it_by_lines): When | 14 | * xdisp.c (move_it_vertically_backward, move_it_by_lines): When |
diff --git a/src/marker.c b/src/marker.c index a03a0b104ca..0d992c0abfa 100644 --- a/src/marker.c +++ b/src/marker.c | |||
| @@ -499,11 +499,29 @@ set_marker_internal (Lisp_Object marker, Lisp_Object position, | |||
| 499 | { | 499 | { |
| 500 | register ptrdiff_t charpos, bytepos; | 500 | register ptrdiff_t charpos, bytepos; |
| 501 | 501 | ||
| 502 | CHECK_NUMBER_COERCE_MARKER (position); | 502 | /* Do not use CHECK_NUMBER_COERCE_MARKER because we |
| 503 | charpos = clip_to_bounds (restricted ? BUF_BEGV (b) : BUF_BEG (b), | 503 | don't want to call buf_charpos_to_bytepos if POSTION |
| 504 | XINT (position), | 504 | is a marker and so we know the bytepos already. */ |
| 505 | restricted ? BUF_ZV (b) : BUF_Z (b)); | 505 | if (INTEGERP (position)) |
| 506 | bytepos = buf_charpos_to_bytepos (b, charpos); | 506 | charpos = XINT (position), bytepos = -1; |
| 507 | else if (MARKERP (position)) | ||
| 508 | { | ||
| 509 | charpos = XMARKER (position)->charpos; | ||
| 510 | bytepos = XMARKER (position)->bytepos; | ||
| 511 | } | ||
| 512 | else | ||
| 513 | wrong_type_argument (Qinteger_or_marker_p, position); | ||
| 514 | |||
| 515 | charpos = clip_to_bounds | ||
| 516 | (restricted ? BUF_BEGV (b) : BUF_BEG (b), charpos, | ||
| 517 | restricted ? BUF_ZV (b) : BUF_Z (b)); | ||
| 518 | if (bytepos == -1) | ||
| 519 | bytepos = buf_charpos_to_bytepos (b, charpos); | ||
| 520 | else | ||
| 521 | bytepos = clip_to_bounds | ||
| 522 | (restricted ? BUF_BEGV_BYTE (b) : BUF_BEG_BYTE (b), | ||
| 523 | bytepos, restricted ? BUF_ZV_BYTE (b) : BUF_Z_BYTE (b)); | ||
| 524 | |||
| 507 | attach_marker (m, b, charpos, bytepos); | 525 | attach_marker (m, b, charpos, bytepos); |
| 508 | } | 526 | } |
| 509 | return marker; | 527 | return marker; |
diff --git a/src/window.c b/src/window.c index cc115c094f0..ea1dd93711c 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -1544,7 +1544,7 @@ Return POS. */) | |||
| 1544 | { | 1544 | { |
| 1545 | register struct window *w = decode_live_window (window); | 1545 | register struct window *w = decode_live_window (window); |
| 1546 | 1546 | ||
| 1547 | CHECK_NUMBER_COERCE_MARKER (pos); | 1547 | /* Type of POS is checked by Fgoto_char or set_marker_restricted ... */ |
| 1548 | 1548 | ||
| 1549 | if (w == XWINDOW (selected_window)) | 1549 | if (w == XWINDOW (selected_window)) |
| 1550 | { | 1550 | { |
| @@ -1554,6 +1554,8 @@ Return POS. */) | |||
| 1554 | { | 1554 | { |
| 1555 | struct buffer *old_buffer = current_buffer; | 1555 | struct buffer *old_buffer = current_buffer; |
| 1556 | 1556 | ||
| 1557 | /* ... but here we want to catch type error before buffer change. */ | ||
| 1558 | CHECK_NUMBER_COERCE_MARKER (pos); | ||
| 1557 | set_buffer_internal (XBUFFER (w->buffer)); | 1559 | set_buffer_internal (XBUFFER (w->buffer)); |
| 1558 | Fgoto_char (pos); | 1560 | Fgoto_char (pos); |
| 1559 | set_buffer_internal (old_buffer); | 1561 | set_buffer_internal (old_buffer); |
| @@ -1579,9 +1581,8 @@ overriding motion of point in order to display at this exact start. */) | |||
| 1579 | { | 1581 | { |
| 1580 | register struct window *w = decode_live_window (window); | 1582 | register struct window *w = decode_live_window (window); |
| 1581 | 1583 | ||
| 1582 | CHECK_NUMBER_COERCE_MARKER (pos); | ||
| 1583 | set_marker_restricted (w->start, pos, w->buffer); | 1584 | set_marker_restricted (w->start, pos, w->buffer); |
| 1584 | /* this is not right, but much easier than doing what is right. */ | 1585 | /* This is not right, but much easier than doing what is right. */ |
| 1585 | w->start_at_line_beg = 0; | 1586 | w->start_at_line_beg = 0; |
| 1586 | if (NILP (noforce)) | 1587 | if (NILP (noforce)) |
| 1587 | w->force_start = 1; | 1588 | w->force_start = 1; |
| @@ -4615,8 +4616,8 @@ window_scroll_pixel_based (Lisp_Object window, int n, int whole, int noerror) | |||
| 4615 | } | 4616 | } |
| 4616 | 4617 | ||
| 4617 | /* Set the window start, and set up the window for redisplay. */ | 4618 | /* Set the window start, and set up the window for redisplay. */ |
| 4618 | set_marker_restricted (w->start, make_number (pos), | 4619 | set_marker_restricted_both (w->start, w->buffer, IT_CHARPOS (it), |
| 4619 | w->buffer); | 4620 | IT_BYTEPOS (it)); |
| 4620 | bytepos = marker_byte_position (w->start); | 4621 | bytepos = marker_byte_position (w->start); |
| 4621 | w->start_at_line_beg = (pos == BEGV || FETCH_BYTE (bytepos - 1) == '\n'); | 4622 | w->start_at_line_beg = (pos == BEGV || FETCH_BYTE (bytepos - 1) == '\n'); |
| 4622 | w->update_mode_line = 1; | 4623 | w->update_mode_line = 1; |
| @@ -5795,8 +5796,7 @@ the return value is nil. Otherwise the value is t. */) | |||
| 5795 | { | 5796 | { |
| 5796 | /* Set window markers at start of visible range. */ | 5797 | /* Set window markers at start of visible range. */ |
| 5797 | if (XMARKER (w->start)->buffer == 0) | 5798 | if (XMARKER (w->start)->buffer == 0) |
| 5798 | set_marker_restricted (w->start, make_number (0), | 5799 | set_marker_restricted_both (w->start, w->buffer, 0, 0); |
| 5799 | w->buffer); | ||
| 5800 | if (XMARKER (w->pointm)->buffer == 0) | 5800 | if (XMARKER (w->pointm)->buffer == 0) |
| 5801 | set_marker_restricted_both | 5801 | set_marker_restricted_both |
| 5802 | (w->pointm, w->buffer, | 5802 | (w->pointm, w->buffer, |
| @@ -5814,10 +5814,8 @@ the return value is nil. Otherwise the value is t. */) | |||
| 5814 | wset_buffer (w, other_buffer_safely (Fcurrent_buffer ())); | 5814 | wset_buffer (w, other_buffer_safely (Fcurrent_buffer ())); |
| 5815 | /* This will set the markers to beginning of visible | 5815 | /* This will set the markers to beginning of visible |
| 5816 | range. */ | 5816 | range. */ |
| 5817 | set_marker_restricted (w->start, | 5817 | set_marker_restricted_both (w->start, w->buffer, 0, 0); |
| 5818 | make_number (0), w->buffer); | 5818 | set_marker_restricted_both (w->pointm, w->buffer, 0, 0); |
| 5819 | set_marker_restricted (w->pointm, | ||
| 5820 | make_number (0), w->buffer); | ||
| 5821 | w->start_at_line_beg = 1; | 5819 | w->start_at_line_beg = 1; |
| 5822 | if (!NILP (w->dedicated)) | 5820 | if (!NILP (w->dedicated)) |
| 5823 | /* Record this window as dead. */ | 5821 | /* Record this window as dead. */ |
diff --git a/src/xdisp.c b/src/xdisp.c index 8314e91ad7f..25c09fe40bd 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -9396,11 +9396,11 @@ message_dolog (const char *m, ptrdiff_t nbytes, int nlflag, int multibyte) | |||
| 9396 | bset_undo_list (current_buffer, Qt); | 9396 | bset_undo_list (current_buffer, Qt); |
| 9397 | 9397 | ||
| 9398 | oldpoint = message_dolog_marker1; | 9398 | oldpoint = message_dolog_marker1; |
| 9399 | set_marker_restricted (oldpoint, make_number (PT), Qnil); | 9399 | set_marker_restricted_both (oldpoint, Qnil, PT, PT_BYTE); |
| 9400 | oldbegv = message_dolog_marker2; | 9400 | oldbegv = message_dolog_marker2; |
| 9401 | set_marker_restricted (oldbegv, make_number (BEGV), Qnil); | 9401 | set_marker_restricted_both (oldbegv, Qnil, BEGV, BEGV_BYTE); |
| 9402 | oldzv = message_dolog_marker3; | 9402 | oldzv = message_dolog_marker3; |
| 9403 | set_marker_restricted (oldzv, make_number (ZV), Qnil); | 9403 | set_marker_restricted_both (oldzv, Qnil, ZV, ZV_BYTE); |
| 9404 | GCPRO1 (old_deactivate_mark); | 9404 | GCPRO1 (old_deactivate_mark); |
| 9405 | 9405 | ||
| 9406 | if (PT == Z) | 9406 | if (PT == Z) |