mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-20 04:50:55 -07:00
New function record_unwind_protect_excursion
This simplifies callers a bit, and will simplify future changes. * src/eval.c (record_unwind_protect_excursion): New function. * src/buffer.c (Fkill_buffer): * src/bytecode.c (exec_byte_code): * src/editfns.c (Fsave_excursion, Freplace_buffer_contents): * src/lread.c (readevalloop, Feval_buffer): * src/window.c (scroll_command): Use it.
This commit is contained in:
parent
a0641286f6
commit
a0aa1d4ecc
7 changed files with 15 additions and 9 deletions
|
|
@ -1696,7 +1696,7 @@ cleaning up all windows currently displaying the buffer to be killed. */)
|
|||
{
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
set_buffer_internal (b);
|
||||
|
||||
/* First run the query functions; if any query is answered no,
|
||||
|
|
|
|||
|
|
@ -739,8 +739,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
|
|||
NEXT;
|
||||
|
||||
CASE (Bsave_excursion):
|
||||
record_unwind_protect (save_excursion_restore,
|
||||
save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
NEXT;
|
||||
|
||||
CASE (Bsave_current_buffer): /* Obsolete since ??. */
|
||||
|
|
|
|||
|
|
@ -1068,7 +1068,7 @@ usage: (save-excursion &rest BODY) */)
|
|||
register Lisp_Object val;
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
|
||||
val = Fprogn (args);
|
||||
return unbind_to (count, val);
|
||||
|
|
@ -3242,7 +3242,7 @@ buffer stay intact. */)
|
|||
|
||||
Fundo_boundary ();
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
|
||||
ptrdiff_t i = size_a;
|
||||
ptrdiff_t j = size_b;
|
||||
|
|
|
|||
|
|
@ -3414,6 +3414,12 @@ record_unwind_protect_int (void (*function) (int), int arg)
|
|||
grow_specpdl ();
|
||||
}
|
||||
|
||||
void
|
||||
record_unwind_protect_excursion (void)
|
||||
{
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
}
|
||||
|
||||
void
|
||||
record_unwind_protect_void (void (*function) (void))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3983,6 +3983,7 @@ extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object);
|
|||
extern void record_unwind_protect_ptr (void (*) (void *), void *);
|
||||
extern void record_unwind_protect_int (void (*) (int), int);
|
||||
extern void record_unwind_protect_void (void (*) (void));
|
||||
extern void record_unwind_protect_excursion (void);
|
||||
extern void record_unwind_protect_nothing (void);
|
||||
extern void clear_unwind_protect (ptrdiff_t);
|
||||
extern void set_unwind_protect (ptrdiff_t, void (*) (Lisp_Object), Lisp_Object);
|
||||
|
|
|
|||
|
|
@ -1976,11 +1976,11 @@ readevalloop (Lisp_Object readcharfun,
|
|||
if (!NILP (start))
|
||||
{
|
||||
/* Switch to the buffer we are reading from. */
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
set_buffer_internal (b);
|
||||
|
||||
/* Save point in it. */
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
/* Save ZV in it. */
|
||||
record_unwind_protect (save_restriction_restore, save_restriction_save ());
|
||||
/* Those get unbound after we read one expression. */
|
||||
|
|
@ -2137,7 +2137,7 @@ This function preserves the position of point. */)
|
|||
|
||||
specbind (Qeval_buffer_list, Fcons (buf, Veval_buffer_list));
|
||||
specbind (Qstandard_output, tem);
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
|
||||
specbind (Qlexical_binding, lisp_file_lexically_bound_p (buf) ? Qt : Qnil);
|
||||
BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
|
||||
|
|
|
|||
|
|
@ -5656,7 +5656,7 @@ scroll_command (Lisp_Object window, Lisp_Object n, int direction)
|
|||
the moment. But don't screw up if window_scroll gets an error. */
|
||||
if (XBUFFER (w->contents) != current_buffer)
|
||||
{
|
||||
record_unwind_protect (save_excursion_restore, save_excursion_save ());
|
||||
record_unwind_protect_excursion ();
|
||||
Fset_buffer (w->contents);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue