From: Paul Eggert Date: Fri, 8 Jun 2018 01:53:27 +0000 (-0700) Subject: New function record_unwind_protect_excursion X-Git-Tag: emacs-27.0.90~4918 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a0aa1d4ecc123d652285ef10ea62ed55c6c118d6;p=emacs.git 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. --- diff --git a/src/buffer.c b/src/buffer.c index 14837372d34..244c1851fab 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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, diff --git a/src/bytecode.c b/src/bytecode.c index 55b193ffb2f..772cc982f9a 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -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 ??. */ diff --git a/src/editfns.c b/src/editfns.c index 608304c09ad..2377ceb18af 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -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; diff --git a/src/eval.c b/src/eval.c index 90d8c335185..86011a234c0 100644 --- a/src/eval.c +++ b/src/eval.c @@ -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)) { diff --git a/src/lisp.h b/src/lisp.h index 5b296cd04cd..10012b29db1 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -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); diff --git a/src/lread.c b/src/lread.c index 239c66ccb85..d2c7eae20f9 100644 --- a/src/lread.c +++ b/src/lread.c @@ -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))); diff --git a/src/window.c b/src/window.c index f654d87e14a..2c6ff01ea43 100644 --- a/src/window.c +++ b/src/window.c @@ -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); }