emacs-diffs
[Top][All Lists]
Advanced

[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;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]