From a8b713d83a5544d144c05aa45c465bbe3ebc8789 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Sat, 15 Jan 2022 16:23:09 +0100 Subject: [PATCH] Inline maybe_quit Since `maybe_quit` is called on many critical paths, inline a slightly cheaper condition (that ignores Vinhibit_quit). * src/eval.c (maybe_quit): Rename to `probably_quit`. * src/lisp.h (maybe_quit): New simplified inline function. --- src/ccl.c | 1 + src/eval.c | 15 +-------------- src/lisp.h | 26 ++++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/ccl.c b/src/ccl.c index 377eb3a0ea5..a3121f72782 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -33,6 +33,7 @@ along with GNU Emacs. If not, see . */ #include "charset.h" #include "ccl.h" #include "coding.h" +#include "keyboard.h" /* Table of registered CCL programs. Each element is a vector of NAME, CCL_PROG, RESOLVEDP, and UPDATEDP, where NAME (symbol) is the diff --git a/src/eval.c b/src/eval.c index 744fe82347d..205a0b0db2a 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1737,21 +1737,8 @@ process_quit_flag (void) quit (); } -/* Check quit-flag and quit if it is non-nil. Typing C-g does not - directly cause a quit; it only sets Vquit_flag. So the program - needs to call maybe_quit at times when it is safe to quit. Every - loop that might run for a long time or might not exit ought to call - maybe_quit at least once, at a safe place. Unless that is - impossible, of course. But it is very desirable to avoid creating - loops where maybe_quit is impossible. - - If quit-flag is set to `kill-emacs' the SIGINT handler has received - a request to exit Emacs when it is safe to do. - - When not quitting, process any pending signals. */ - void -maybe_quit (void) +probably_quit (void) { if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) process_quit_flag (); diff --git a/src/lisp.h b/src/lisp.h index 54e8c30ccf1..9f1d093f581 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3422,12 +3422,34 @@ struct handler extern Lisp_Object memory_signal_data; -extern void maybe_quit (void); - /* True if ought to quit now. */ #define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) +extern bool volatile pending_signals; +extern void process_pending_signals (void); +extern void probably_quit (void); + +/* Check quit-flag and quit if it is non-nil. Typing C-g does not + directly cause a quit; it only sets Vquit_flag. So the program + needs to call maybe_quit at times when it is safe to quit. Every + loop that might run for a long time or might not exit ought to call + maybe_quit at least once, at a safe place. Unless that is + impossible, of course. But it is very desirable to avoid creating + loops where maybe_quit is impossible. + + If quit-flag is set to `kill-emacs' the SIGINT handler has received + a request to exit Emacs when it is safe to do. + + When not quitting, process any pending signals. */ + +INLINE void +maybe_quit (void) +{ + if (!NILP (Vquit_flag) || pending_signals) + probably_quit (); +} + /* Process a quit rarely, based on a counter COUNT, for efficiency. "Rarely" means once per USHRT_MAX + 1 times; this is somewhat arbitrary, but efficient. */ -- 2.39.2