‘signal’ no longer returns
commit50cc08bf6e6cdc96dcdcbef388cf9cf76a15f81a
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jul 2016 09:10:09 +0000 (24 11:10 +0200)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jul 2016 22:38:34 +0000 (25 00:38 +0200)
tree9cfd5f799262e0ba85d7213113bdb20302196e74
parent2c2b0cd07c143e33af9f7237ef4819c28764a90f
‘signal’ no longer returns

Although for decades ‘signal’ has been documented to not return,
a corner case in the Lisp debugger causes ‘signal’ to return.
Remove the corner case and adjust Emacs internals accordingly.
An alternative would be to document the corner case, but this
would complicate the Lisp API unnecessarily.  (Bug#24047)
* src/eval.c (signal_or_quit): New function, with most of the
old contents of Fsignal.
(quit): New function, which uses signal_or_quit and which
might return.  All keyboard-based callers of Fsignal (Qquit,
Qnil) changed to use this new function instead.
(Fsignal): Use signal_or_quit.  Now _Noreturn.  All callers
changed.
(xsignal): Move to lisp.h.
* src/lisp.h (xsignal): Now an inline function, as it's now
just an alias for Fsignal.
13 files changed:
src/bytecode.c
src/charset.c
src/coding.c
src/eval.c
src/fileio.c
src/keyboard.c
src/lisp.h
src/nsmenu.m
src/term.c
src/w32fns.c
src/w32menu.c
src/xfns.c
src/xmenu.c