changeset 67839:33258a660650

(perform-replace): Calculate match-again before skipping read-only matches.
author Richard M. Stallman <rms@gnu.org>
date Tue, 27 Dec 2005 04:30:20 +0000
parents 686761c34c71
children 77e654cbed22
files lisp/replace.el
diffstat 1 files changed, 22 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/replace.el	Tue Dec 27 01:11:01 2005 +0000
+++ b/lisp/replace.el	Tue Dec 27 04:30:20 2005 +0000
@@ -1474,32 +1474,33 @@
 				 ;; For speed, use only integers and
 				 ;; reuse the list used last time.
 				 (replace-match-data t real-match-data)))))
+	  
+	  ;; Record whether the match is nonempty, to avoid an infinite loop
+	  ;; repeatedly matching the same empty string.
+	  (setq nonempty-match
+		(/= (nth 0 real-match-data) (nth 1 real-match-data)))
+
+	  ;; If the match is empty, record that the next one can't be
+	  ;; adjacent.
+
+	  ;; Otherwise, if matching a regular expression, do the next
+	  ;; match now, since the replacement for this match may
+	  ;; affect whether the next match is adjacent to this one.
+	  ;; If that match is empty, don't use it.
+	  (setq match-again
+		(and nonempty-match
+		     (or (not regexp-flag)
+			 (and (looking-at search-string)
+			      (let ((match (match-data)))
+				(and (/= (nth 0 match) (nth 1 match))
+				     match))))))
+
 	  ;; Optionally ignore matches that have a read-only property.
 	  (unless (and query-replace-skip-read-only
 		       (text-property-not-all
-			(match-beginning 0) (match-end 0)
+			(nth 0 real-match-data) (nth 1 real-match-data)
 			'read-only nil))
 
-	    ;; Record whether the match is nonempty, to avoid an infinite loop
-	    ;; repeatedly matching the same empty string.
-	    (setq nonempty-match
-		  (/= (nth 0 real-match-data) (nth 1 real-match-data)))
-
-	    ;; If the match is empty, record that the next one can't be
-	    ;; adjacent.
-
-	    ;; Otherwise, if matching a regular expression, do the next
-	    ;; match now, since the replacement for this match may
-	    ;; affect whether the next match is adjacent to this one.
-	    ;; If that match is empty, don't use it.
-	    (setq match-again
-		  (and nonempty-match
-		       (or (not regexp-flag)
-			   (and (looking-at search-string)
-				(let ((match (match-data)))
-				  (and (/= (nth 0 match) (nth 1 match))
-				       match))))))
-
 	    ;; Calculate the replacement string, if necessary.
 	    (when replacements
 	      (set-match-data real-match-data)