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.
This commit is contained in:
Andrea Corallo 2021-03-31 14:49:36 +02:00
parent 515378434a
commit 613caa9527
3 changed files with 17 additions and 2 deletions

View file

@ -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)

View file

@ -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 */

View file

@ -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"))