changeset 79443:fc388b33b46d

(Fset_match_data): Remove the `evaporate' feature. (unwind_set_match_data): Don't use the `evaporate' feature.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 16 Nov 2007 22:16:01 +0000
parents 19465bdfa2ae
children 2eb513da4da5
files src/ChangeLog src/search.c
diffstat 2 files changed, 20 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Nov 16 18:23:20 2007 +0000
+++ b/src/ChangeLog	Fri Nov 16 22:16:01 2007 +0000
@@ -1,7 +1,12 @@
+2007-11-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* search.c (Fset_match_data): Remove the `evaporate' feature.
+	(unwind_set_match_data): Don't use the `evaporate' feature.
+
 2007-11-15  Andreas Schwab  <schwab@suse.de>
 
-	* editfns.c (Fformat): Correctly format EMACS_INT values.  Also
-	take precision into account when formatting an integer.
+	* editfns.c (Fformat): Correctly format EMACS_INT values.
+	Also take precision into account when formatting an integer.
 
 2007-11-15  Juanma Barranquero  <lekktu@gmail.com>
 
--- a/src/search.c	Fri Nov 16 18:23:20 2007 +0000
+++ b/src/search.c	Fri Nov 16 22:16:01 2007 +0000
@@ -2892,11 +2892,15 @@
   return reuse;
 }
 
-/* Internal usage only:
-   If RESEAT is `evaporate', put the markers back on the free list
-   immediately.  No other references to the markers must exist in this case,
-   so it is used only internally on the unwind stack and save-match-data from
-   Lisp.  */
+/* We used to have an internal use variant of `reseat' described as:
+
+      If RESEAT is `evaporate', put the markers back on the free list
+      immediately.  No other references to the markers must exist in this
+      case, so it is used only internally on the unwind stack and
+      save-match-data from Lisp.
+
+   But it was ill-conceived: those supposedly-internal markers get exposed via
+   the undo-list, so freeing them here is unsafe.  */
 
 DEFUN ("set-match-data", Fset_match_data, Sset_match_data, 1, 2, 0,
        doc: /* Set internal data on last search match from elements of LIST.
@@ -2981,10 +2985,7 @@
 
 	    if (!NILP (reseat) && MARKERP (m))
 	      {
-		if (EQ (reseat, Qevaporate))
-		  free_marker (m);
-		else
-		  unchain_marker (XMARKER (m));
+		unchain_marker (XMARKER (m));
 		XSETCAR (list, Qnil);
 	      }
 
@@ -3002,10 +3003,7 @@
 
 	    if (!NILP (reseat) && MARKERP (m))
 	      {
-		if (EQ (reseat, Qevaporate))
-		  free_marker (m);
-		else
-		  unchain_marker (XMARKER (m));
+		unchain_marker (XMARKER (m));
 		XSETCAR (list, Qnil);
 	      }
 	  }
@@ -3069,8 +3067,8 @@
 unwind_set_match_data (list)
      Lisp_Object list;
 {
-  /* It is safe to free (evaporate) the markers immediately.  */
-  return Fset_match_data (list, Qevaporate);
+  /* It is NOT ALWAYS safe to free (evaporate) the markers immediately.  */
+  return Fset_match_data (list, Qt);
 }
 
 /* Called to unwind protect the match data.  */