summaryrefslogtreecommitdiff
path: root/src/marker.c
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2013-02-11 14:21:52 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2013-02-11 14:21:52 +0400
commitf74de3451c2cb3033f6d17f9c479150d00e4caa8 (patch)
tree71ae407b470ab3dfa954abd0279d363808618bd0 /src/marker.c
parent5109429f09110cd817d87e1c361ac66aaee28431 (diff)
downloademacs-f74de3451c2cb3033f6d17f9c479150d00e4caa8.tar.gz
* 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/marker.c')
-rw-r--r--src/marker.c28
1 files changed, 23 insertions, 5 deletions
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,
{
register ptrdiff_t charpos, bytepos;
- CHECK_NUMBER_COERCE_MARKER (position);
- charpos = clip_to_bounds (restricted ? BUF_BEGV (b) : BUF_BEG (b),
- XINT (position),
- restricted ? BUF_ZV (b) : BUF_Z (b));
- bytepos = buf_charpos_to_bytepos (b, charpos);
+ /* Do not use CHECK_NUMBER_COERCE_MARKER because we
+ don't want to call buf_charpos_to_bytepos if POSTION
+ is a marker and so we know the bytepos already. */
+ if (INTEGERP (position))
+ charpos = XINT (position), bytepos = -1;
+ else if (MARKERP (position))
+ {
+ charpos = XMARKER (position)->charpos;
+ bytepos = XMARKER (position)->bytepos;
+ }
+ else
+ wrong_type_argument (Qinteger_or_marker_p, position);
+
+ charpos = clip_to_bounds
+ (restricted ? BUF_BEGV (b) : BUF_BEG (b), charpos,
+ restricted ? BUF_ZV (b) : BUF_Z (b));
+ if (bytepos == -1)
+ bytepos = buf_charpos_to_bytepos (b, charpos);
+ else
+ bytepos = clip_to_bounds
+ (restricted ? BUF_BEGV_BYTE (b) : BUF_BEG_BYTE (b),
+ bytepos, restricted ? BUF_ZV_BYTE (b) : BUF_Z_BYTE (b));
+
attach_marker (m, b, charpos, bytepos);
}
return marker;