aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Antipov2013-02-11 14:21:52 +0400
committerDmitry Antipov2013-02-11 14:21:52 +0400
commitf74de3451c2cb3033f6d17f9c479150d00e4caa8 (patch)
tree71ae407b470ab3dfa954abd0279d363808618bd0 /src
parent5109429f09110cd817d87e1c361ac66aaee28431 (diff)
downloademacs-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/ChangeLog11
-rw-r--r--src/marker.c28
-rw-r--r--src/window.c20
-rw-r--r--src/xdisp.c6
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 @@
12013-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
12013-02-10 Eli Zaretskii <eliz@gnu.org> 122013-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)