emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r109196: Simplify copy_overlay.


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109196: Simplify copy_overlay.
Date: Tue, 24 Jul 2012 10:45:44 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109196
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Tue 2012-07-24 10:45:44 +0400
message:
  Simplify copy_overlay.
  * buffer.c (copy_overlay): Simplify, use build_marker.
  * lisp.h (struct Lisp_Overlay): Restore comment with minor tweaks.
modified:
  src/ChangeLog
  src/buffer.c
  src/lisp.h
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-07-23 16:57:20 +0000
+++ b/src/ChangeLog     2012-07-24 06:45:44 +0000
@@ -1,3 +1,9 @@
+2012-07-24  Dmitry Antipov  <address@hidden>
+
+       Simplify copy_overlay.
+       * buffer.c (copy_overlay): Simplify, use build_marker.
+       * lisp.h (struct Lisp_Overlay): Restore comment with minor tweaks.
+
 2012-07-23  Eli Zaretskii  <address@hidden>
 
        * print.c (print_object): Don't crash when a frame's name is nil

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2012-07-23 11:15:43 +0000
+++ b/src/buffer.c      2012-07-24 06:45:44 +0000
@@ -410,32 +410,24 @@
 static struct Lisp_Overlay *
 copy_overlays (struct buffer *b, struct Lisp_Overlay *list)
 {
-  Lisp_Object buffer;
   struct Lisp_Overlay *result = NULL, *tail = NULL;
 
-  XSETBUFFER (buffer, b);
-
   for (; list; list = list->next)
     {
-      Lisp_Object overlay, start, end, old_overlay;
-      ptrdiff_t charpos;
-
-      XSETMISC (old_overlay, list);
-      charpos = marker_position (OVERLAY_START (old_overlay));
-      start = Fmake_marker ();
-      Fset_marker (start, make_number (charpos), buffer);
-      XMARKER (start)->insertion_type
-       = XMARKER (OVERLAY_START (old_overlay))->insertion_type;
-
-      charpos = marker_position (OVERLAY_END (old_overlay));
-      end = Fmake_marker ();
-      Fset_marker (end, make_number (charpos), buffer);
-      XMARKER (end)->insertion_type
-       = XMARKER (OVERLAY_END (old_overlay))->insertion_type;
-
-      overlay = build_overlay
-       (start, end, Fcopy_sequence (OVERLAY_PLIST (old_overlay)));
-
+      Lisp_Object overlay, start, end;
+      struct Lisp_Marker *m;
+
+      eassert (MARKERP (list->start));
+      m = XMARKER (list->start);
+      start = build_marker (b, m->charpos, m->bytepos);
+      XMARKER (start)->insertion_type = m->insertion_type;
+
+      eassert (MARKERP (list->end));
+      m = XMARKER (list->end);
+      end = build_marker (b, m->charpos, m->bytepos);
+      XMARKER (end)->insertion_type = m->insertion_type;
+
+      overlay = build_overlay (start, end, Fcopy_sequence (list->plist));
       if (tail)
        tail = tail->next = XOVERLAY (overlay);
       else

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2012-07-23 11:15:43 +0000
+++ b/src/lisp.h        2012-07-24 06:45:44 +0000
@@ -1286,6 +1286,17 @@
 /* START and END are markers in the overlay's buffer, and
    PLIST is the overlay's property list.  */
 struct Lisp_Overlay
+/* An overlay's real data content is:
+   - plist
+   - buffer (really there are two buffer pointers, one per marker,
+     and both points to the same buffer)
+   - insertion type of both ends (per-marker fields)
+   - start & start byte (of start marker)
+   - end & end byte (of end marker)
+   - next (singly linked list of overlays)
+   - next fields of start and end markers (singly linked list of markers).
+   I.e. 9words plus 2 bits, 3words of which are for external linked lists.
+*/
   {
     ENUM_BF (Lisp_Misc_Type) type : 16;        /* = Lisp_Misc_Overlay */
     unsigned gcmarkbit : 1;


reply via email to

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