diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2018-06-07 18:53:27 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2018-06-07 19:11:49 -0700 |
commit | a0aa1d4ecc123d652285ef10ea62ed55c6c118d6 (patch) | |
tree | c56177683a5a552e17eb8ce7ed27256507361b60 | |
parent | a0641286f6e58f4dca4221caa6dd559bfacea699 (diff) | |
download | emacs-a0aa1d4ecc123d652285ef10ea62ed55c6c118d6.tar.gz emacs-a0aa1d4ecc123d652285ef10ea62ed55c6c118d6.tar.bz2 emacs-a0aa1d4ecc123d652285ef10ea62ed55c6c118d6.zip |
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.
-rw-r--r-- | src/buffer.c | 2 | ||||
-rw-r--r-- | src/bytecode.c | 3 | ||||
-rw-r--r-- | src/editfns.c | 4 | ||||
-rw-r--r-- | src/eval.c | 6 | ||||
-rw-r--r-- | src/lisp.h | 1 | ||||
-rw-r--r-- | src/lread.c | 6 | ||||
-rw-r--r-- | src/window.c | 2 |
7 files changed, 15 insertions, 9 deletions
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 @@ -3415,6 +3415,12 @@ record_unwind_protect_int (void (*function) (int), int arg) } void +record_unwind_protect_excursion (void) +{ + record_unwind_protect (save_excursion_restore, save_excursion_save ()); +} + +void record_unwind_protect_void (void (*function) (void)) { specpdl_ptr->unwind_void.kind = SPECPDL_UNWIND_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); } |