From 613caa9527ef56fb9b810d2b9478cbe9784baca0 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Wed, 31 Mar 2021 14:49:36 +0200 Subject: [PATCH] Do not defer compilation when bytecode is explicitly requested (bug#46617) * src/comp.c (maybe_defer_native_compilation): Check if the file is registered in 'V_comp_no_native_file_h'. (syms_of_comp): 'V_comp_no_native_file_h' new global. * src/lread.c (maybe_swap_for_eln): Register files in 'V_comp_no_native_file_h'. * lisp/faces.el (tty-run-terminal-initialization): Do not explicitly load .elc file to not exclude .eln being loaded in place. --- lisp/faces.el | 3 ++- src/comp.c | 10 +++++++++- src/lread.c | 6 ++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lisp/faces.el b/lisp/faces.el index 42f4cddfb1b..68bfbbae384 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -2244,7 +2244,8 @@ If you set `term-file-prefix' to nil, this function does nothing." (let ((file (locate-library (concat term-file-prefix type)))) (and file (or (assoc file load-history) - (load file t t))))) + (load (file-name-sans-extension file) + t t))))) type) ;; Next, try to find a matching initialization function, and call it. (tty-find-type #'(lambda (type) diff --git a/src/comp.c b/src/comp.c index 857f798a8d8..b286f6077f3 100644 --- a/src/comp.c +++ b/src/comp.c @@ -4689,7 +4689,8 @@ maybe_defer_native_compilation (Lisp_Object function_name, || !NILP (Vpurify_flag) || !COMPILEDP (definition) || !STRINGP (Vload_true_file_name) - || !suffix_p (Vload_true_file_name, ".elc")) + || !suffix_p (Vload_true_file_name, ".elc") + || !NILP (Fgethash (Vload_true_file_name, V_comp_no_native_file_h, Qnil))) return; Lisp_Object src = @@ -5373,6 +5374,13 @@ This is used to prevent double trampoline instantiation but also to protect the trampolines against GC. */); Vcomp_installed_trampolines_h = CALLN (Fmake_hash_table); + DEFVAR_LISP ("comp-no-native-file-h", V_comp_no_native_file_h, + doc: /* Files for which no deferred compilation has to +be performed because the bytecode version was explicitly requested by +the user during load. +For internal use. */); + V_comp_no_native_file_h = CALLN (Fmake_hash_table, QCtest, Qequal); + Fprovide (intern_c_string ("nativecomp"), Qnil); #endif /* #ifdef HAVE_NATIVE_COMP */ diff --git a/src/lread.c b/src/lread.c index e8c257a13cc..ec6f09238ba 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1655,6 +1655,12 @@ maybe_swap_for_eln (bool no_native, Lisp_Object *filename, int *fd, #ifdef HAVE_NATIVE_COMP struct stat eln_st; + if (no_native + || load_no_native) + Fputhash (*filename, Qt, V_comp_no_native_file_h); + else + Fremhash (*filename, V_comp_no_native_file_h); + if (no_native || load_no_native || !suffix_p (*filename, ".elc")) -- 2.39.2