Mercurial > emacs
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. */