From xemacs-m  Sat Jun 21 02:05:18 1997
Received: from jagor.srce.hr (hniksic@jagor.srce.hr [161.53.2.130])
	by xemacs.org (8.8.5/8.8.5) with ESMTP id CAA17683
	for <xemacs-beta@xemacs.org>; Sat, 21 Jun 1997 02:05:17 -0500 (CDT)
Received: (from hniksic@localhost)
          by jagor.srce.hr (8.8.5/8.8.4)
	  id JAA20616; Sat, 21 Jun 1997 09:05:16 +0200 (MET DST)
To: XEmacs Developers <xemacs-beta@xemacs.org>
Subject: Re: Serious bugs in overlay.el
References: <kigoh905ul7.fsf@jagor.srce.hr>
X-Attribution: Hrv
X-Face: Mie8:rOV<\c/~z{s.X4A{!?vY7{drJ([U]0O=W/<W*SMo/Mv:58:*_y~ki>xDi&N7XG
        KV^$k0m3Oe/)'e%3=$PCR&3ITUXH,cK>]bci&<qQ>Ff%x_>1`T(+M2Gg/fgndU%k*ft
        [(7._6e0n-V%|%'[c|q:;}td$#INd+;?!-V=c8Pqf}3J
From: Hrvoje Niksic <hniksic@srce.hr>
Date: 21 Jun 1997 09:05:16 +0200
In-Reply-To: Hrvoje Niksic's message of "21 Jun 1997 08:38:28 +0200"
Message-ID: <kigiuz85tcj.fsf@jagor.srce.hr>
Lines: 67
X-Mailer: Gnus v5.4.59/XEmacs 20.3(beta7) - "Oslo"

Hrvoje Niksic <hniksic@srce.hr> writes:

> Instead of using `map-extents', the functions often cons up
[...]

In {previous,next}-overlay-change I ignored my own advice.  The
following patch avoids unnecessary consing.

Now using overlays should be about as efficient as using extents.

One question to overlay/extent experts (Kyle, that means you:-)
What should be the FLAG argument to `map-extents'?  I toyed with the
thoughts of giving `all-extents-closed' -- would that produce correct
behaviour?  What does FSF do in that case?


--- lisp/prim/overlay.el.orig	Sat Jun 21 09:01:45 1997
+++ lisp/prim/overlay.el	Sat Jun 21 09:01:29 1997
@@ -127,13 +127,15 @@
 If there are no more overlay boundaries after POS, return (point-max)."
   (let ((next (point-max))
 	tmp)
-    (mapc (lambda (overlay)
+    (map-extents
+     (lambda (overlay ignore)
 	    (when (or (and (< (setq tmp (extent-start-position overlay)) next)
 			   (> tmp pos))
 		      (and (< (setq tmp (extent-end-position overlay)) next)
 			   (> tmp pos)))
-	      (setq next tmp)))
-	  (overlays-in pos next))
+	      (setq next tmp))
+       nil)
+     nil pos nil nil nil 'overlay)
     next))
 
 (defun previous-overlay-change (pos)
@@ -141,13 +143,15 @@
 If there are no more overlay boundaries before POS, return (point-min)."
   (let ((prev (point-min))
 	tmp)
-    (mapc (lambda (overlay)
-	    (when (or (and (> (setq tmp (extent-end-position overlay)) prev)
-			   (< tmp pos))
-		      (and (> (setq tmp (extent-start-position overlay)) prev)
-			   (< tmp pos)))
-	      (setq prev tmp)))
-	  (overlays-in prev pos))
+    (map-extents
+     (lambda (overlay ignore)
+       (when (or (and (> (setq tmp (extent-end-position overlay)) prev)
+		      (< tmp pos))
+		 (and (> (setq tmp (extent-start-position overlay)) prev)
+		      (< tmp pos)))
+	 (setq prev tmp))
+       nil)
+     nil nil pos nil nil 'overlay)
     prev))
 
 (defun overlay-lists ()


-- 
Hrvoje Niksic <hniksic@srce.hr> | Student at FER Zagreb, Croatia
--------------------------------+--------------------------------
"Beware of bugs in the above code; I have only proved it correct,
not tried it."                                    -- Donald Knuth

