]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fset_match_data): Remove the `evaporate' feature.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 16 Nov 2007 22:16:01 +0000 (22:16 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 16 Nov 2007 22:16:01 +0000 (22:16 +0000)
(unwind_set_match_data): Don't use the `evaporate' feature.

src/ChangeLog
src/search.c

index e620d1e9e9e0f6a5731541f7d5590bcad8cb280d..0fb4f189fb969d5c1bb2841f85ed39a7601ec92e 100644 (file)
@@ -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>
 
index 3a9fabeb3cee4d89f5f4b2582235d25dbef4644a..ad4fbc45469062863dac823b4a55a037dcd34818 100644 (file)
@@ -2892,11 +2892,15 @@ Return value is undefined if the last search failed.  */)
   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 optional arg RESEAT is non-nil, make markers on LIST point nowhere.  */)
 
            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 optional arg RESEAT is non-nil, make markers on LIST point nowhere.  */)
 
            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 @@ static Lisp_Object
 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.  */