emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/native-comp 613caa9: Do not defer compilation when bytecode is e


From: Andrea Corallo
Subject: feature/native-comp 613caa9: Do not defer compilation when bytecode is explicitly requested (bug#46617)
Date: Wed, 31 Mar 2021 13:56:30 -0400 (EDT)

branch: feature/native-comp
commit 613caa9527ef56fb9b810d2b9478cbe9784baca0
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    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 42f4cdd..68bfbba 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 857f798..b286f60 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 e8c257a..ec6f092 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1656,6 +1656,12 @@ maybe_swap_for_eln (bool no_native, Lisp_Object 
*filename, int *fd,
   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"))
     return;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]