[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r108906: Avoid code repetition in mar
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r108906: Avoid code repetition in marker-related functions. |
Date: |
Fri, 06 Jul 2012 12:53:15 +0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 108906
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Fri 2012-07-06 12:53:15 +0400
message:
Avoid code repetition in marker-related functions.
* marker.c (attach_marker): New function.
(Fset_marker, set_marker_restricted, set_marker_both)
(set_marker_restricted_both): Use it.
(Fset_marker, set_marker_restricted, Fbuffer_has_markers_at):
Consistently rename charno to charpos.
(marker_position): Add eassert.
(marker_byte_position): Convert to eassert.
modified:
src/ChangeLog
src/marker.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-07-06 07:34:37 +0000
+++ b/src/ChangeLog 2012-07-06 08:53:15 +0000
@@ -1,7 +1,19 @@
2012-07-06 Dmitry Antipov <address@hidden>
+ Avoid code repetition in marker-related functions.
+ * marker.c (attach_marker): New function.
+ (Fset_marker, set_marker_restricted, set_marker_both)
+ (set_marker_restricted_both): Use it.
+ (Fset_marker, set_marker_restricted, Fbuffer_has_markers_at):
+ Consistently rename charno to charpos.
+ (marker_position): Add eassert.
+ (marker_byte_position): Convert to eassert.
+
+2012-07-06 Dmitry Antipov <address@hidden>
+
+ Simplify list operations in unchain_overlay and unchain_marker.
* buffer.c (unchain_overlay): Simplify. Add comment.
- * marker.c (unchain_marker): Simplify. Fix comments.
+ * marker.c (unchain_marker): Simplify. Fix comments.
2012-07-06 Dmitry Antipov <address@hidden>
=== modified file 'src/marker.c'
--- a/src/marker.c 2012-07-06 07:34:37 +0000
+++ b/src/marker.c 2012-07-06 08:53:15 +0000
@@ -432,7 +432,28 @@
return Qnil;
}
-
+
+/* Change M so it points to B at CHARPOS and BYTEPOS. */
+
+static inline void
+attach_marker (struct Lisp_Marker *m, struct buffer *b,
+ ptrdiff_t charpos, ptrdiff_t bytepos)
+{
+ /* Every character is at least one byte. */
+ eassert (charpos <= bytepos);
+
+ m->charpos = charpos;
+ m->bytepos = bytepos;
+
+ if (m->buffer != b)
+ {
+ unchain_marker (m);
+ m->buffer = b;
+ m->next = BUF_MARKERS (b);
+ BUF_MARKERS (b) = m;
+ }
+}
+
DEFUN ("set-marker", Fset_marker, Sset_marker, 2, 3, 0,
doc: /* Position MARKER before character number POSITION in BUFFER.
BUFFER defaults to the current buffer.
@@ -441,7 +462,7 @@
Returns MARKER. */)
(Lisp_Object marker, Lisp_Object position, Lisp_Object buffer)
{
- register ptrdiff_t charno;
+ register ptrdiff_t charpos;
register ptrdiff_t bytepos;
register struct buffer *b;
register struct Lisp_Marker *m;
@@ -483,24 +504,10 @@
}
CHECK_NUMBER_COERCE_MARKER (position);
- charno = clip_to_bounds (BUF_BEG (b), XINT (position), BUF_Z (b));
- bytepos = buf_charpos_to_bytepos (b, charno);
-
- /* Every character is at least one byte. */
- if (charno > bytepos)
- abort ();
-
- m->bytepos = bytepos;
- m->charpos = charno;
-
- if (m->buffer != b)
- {
- unchain_marker (m);
- m->buffer = b;
- m->next = BUF_MARKERS (b);
- BUF_MARKERS (b) = m;
- }
-
+ charpos = clip_to_bounds (BUF_BEG (b), XINT (position), BUF_Z (b));
+ bytepos = buf_charpos_to_bytepos (b, charpos);
+
+ attach_marker (m, b, charpos, bytepos);
return marker;
}
@@ -510,7 +517,7 @@
Lisp_Object
set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer)
{
- register ptrdiff_t charno;
+ register ptrdiff_t charpos;
register ptrdiff_t bytepos;
register struct buffer *b;
register struct Lisp_Marker *m;
@@ -552,24 +559,10 @@
}
CHECK_NUMBER_COERCE_MARKER (pos);
- charno = clip_to_bounds (BUF_BEGV (b), XINT (pos), BUF_ZV (b));
- bytepos = buf_charpos_to_bytepos (b, charno);
-
- /* Every character is at least one byte. */
- if (charno > bytepos)
- abort ();
-
- m->bytepos = bytepos;
- m->charpos = charno;
-
- if (m->buffer != b)
- {
- unchain_marker (m);
- m->buffer = b;
- m->next = BUF_MARKERS (b);
- BUF_MARKERS (b) = m;
- }
-
+ charpos = clip_to_bounds (BUF_BEGV (b), XINT (pos), BUF_ZV (b));
+ bytepos = buf_charpos_to_bytepos (b, charpos);
+
+ attach_marker (m, b, charpos, bytepos);
return marker;
}
@@ -603,21 +596,8 @@
if (BUF_Z (b) == BUF_Z_BYTE (b)
&& charpos != bytepos)
abort ();
- /* Every character is at least one byte. */
- if (charpos > bytepos)
- abort ();
-
- m->bytepos = bytepos;
- m->charpos = charpos;
-
- if (m->buffer != b)
- {
- unchain_marker (m);
- m->buffer = b;
- m->next = BUF_MARKERS (b);
- BUF_MARKERS (b) = m;
- }
-
+
+ attach_marker (m, b, charpos, bytepos);
return marker;
}
@@ -654,21 +634,8 @@
if (BUF_Z (b) == BUF_Z_BYTE (b)
&& charpos != bytepos)
abort ();
- /* Every character is at least one byte. */
- if (charpos > bytepos)
- abort ();
-
- m->bytepos = bytepos;
- m->charpos = charpos;
-
- if (m->buffer != b)
- {
- unchain_marker (m);
- m->buffer = b;
- m->next = BUF_MARKERS (b);
- BUF_MARKERS (b) = m;
- }
-
+
+ attach_marker (m, b, charpos, bytepos);
return marker;
}
@@ -726,6 +693,8 @@
if (!buf)
error ("Marker does not point anywhere");
+ eassert (BUF_BEG (buf) <= m->charpos && m->charpos <= BUF_Z (buf));
+
return m->charpos;
}
@@ -736,15 +705,13 @@
{
register struct Lisp_Marker *m = XMARKER (marker);
register struct buffer *buf = m->buffer;
- register ptrdiff_t i = m->bytepos;
if (!buf)
error ("Marker does not point anywhere");
- if (i < BUF_BEG_BYTE (buf) || i > BUF_Z_BYTE (buf))
- abort ();
+ eassert (BUF_BEG_BYTE (buf) <= m->bytepos && m->bytepos <= BUF_Z_BYTE (buf));
- return i;
+ return m->bytepos;
}
DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 0, 2, 0,
@@ -797,12 +764,12 @@
(Lisp_Object position)
{
register struct Lisp_Marker *tail;
- register ptrdiff_t charno;
+ register ptrdiff_t charpos;
- charno = clip_to_bounds (BEG, XINT (position), Z);
+ charpos = clip_to_bounds (BEG, XINT (position), Z);
for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
- if (tail->charpos == charno)
+ if (tail->charpos == charpos)
return Qt;
return Qnil;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r108906: Avoid code repetition in marker-related functions.,
Dmitry Antipov <=