(Fset_match_data): Remove the `evaporate' feature.

(unwind_set_match_data): Don't use the `evaporate' feature.
This commit is contained in:
Stefan Monnier 2007-11-16 22:16:01 +00:00
parent 59938af333
commit b51d6c92fd
2 changed files with 20 additions and 17 deletions

View 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>

View 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. */