emacs-diffs
[Top][All Lists]
Advanced

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

feature/native-comp b53fc68 3/9: Extend low level code for late load


From: Andrea Corallo
Subject: feature/native-comp b53fc68 3/9: Extend low level code for late load
Date: Thu, 19 Mar 2020 14:41:51 -0400 (EDT)

branch: feature/native-comp
commit b53fc68535211a59fde7200713340d911b48ecec
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>

    Extend low level code for late load
---
 src/comp.c    | 36 ++++++++++++++++--------------------
 src/comp.h    |  4 ++--
 src/lread.c   |  2 +-
 src/pdumper.c |  2 +-
 4 files changed, 20 insertions(+), 24 deletions(-)

diff --git a/src/comp.c b/src/comp.c
index 74b74a8..3f2b45c 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -3368,27 +3368,18 @@ void
 maybe_defer_native_compilation (Lisp_Object function_name,
                                Lisp_Object definition)
 {
-  Lisp_Object src = Qnil;
-  Lisp_Object load_list = Vcurrent_load_list;
-
-  FOR_EACH_TAIL (load_list)
-    {
-      src = XCAR (load_list);
-      if (!CONSP (src))
-       break;
-    }
-
   if (!comp_deferred_compilation
       || noninteractive
       || !NILP (Vpurify_flag)
       || !COMPILEDP (definition)
       || !FIXNUMP (AREF (definition, COMPILED_ARGLIST))
-      || !STRINGP (src)
-      || !suffix_p (src, ".elc"))
+      || !STRINGP (Vload_file_name)
+      || !suffix_p (Vload_file_name, ".elc"))
     return;
 
-  src = concat2 (CALL1I (file-name-sans-extension, src),
-                build_pure_c_string (".el"));
+  Lisp_Object src =
+    concat2 (CALL1I (file-name-sans-extension, Vload_file_name),
+            build_pure_c_string (".el"));
   if (!NILP (Ffile_exists_p (src)))
     CALLN (Ffuncall, intern_c_string ("native-compile-async"), src, Qnil);
 }
@@ -3413,7 +3404,8 @@ load_static_obj (struct Lisp_Native_Comp_Unit *comp_u, 
const char *name)
 }
 
 void
-load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump)
+load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
+               bool late_load)
 {
   dynlib_handle_ptr handle = comp_u->handle;
   Lisp_Object comp_u_lisp_obj;
@@ -3447,7 +3439,9 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, 
bool loading_dump)
 
   freloc_check_fill ();
 
-  void (*top_level_run)(Lisp_Object) = dynlib_sym (handle, "top_level_run");
+  void (*top_level_run)(Lisp_Object)
+    = dynlib_sym (handle,
+                 late_load ? "late_top_level_run" : "top_level_run");
 
   if (!reloading_cu)
     {
@@ -3564,9 +3558,11 @@ DEFUN ("comp--register-subr", Fcomp__register_subr, 
Scomp__register_subr,
 }
 
 /* Load related routines.  */
-DEFUN ("native-elisp-load", Fnative_elisp_load, Snative_elisp_load, 1, 1, 0,
-       doc: /* Load native elisp code FILE.  */)
-  (Lisp_Object file)
+DEFUN ("native-elisp-load", Fnative_elisp_load, Snative_elisp_load, 1, 2, 0,
+       doc: /* Load native elisp code FILE.
+            LATE_LOAD has to be non nil when loading for deferred
+            compilation.  */)
+  (Lisp_Object file, Lisp_Object late_load)
 {
   CHECK_STRING (file);
 
@@ -3576,7 +3572,7 @@ DEFUN ("native-elisp-load", Fnative_elisp_load, 
Snative_elisp_load, 1, 1, 0,
     xsignal2 (Qnative_lisp_load_failed, file, build_string (dynlib_error ()));
   comp_u->file = file;
   comp_u->data_vec = Qnil;
-  load_comp_unit (comp_u, false);
+  load_comp_unit (comp_u, false, !NILP (late_load));
 
   return Qt;
 }
diff --git a/src/comp.h b/src/comp.h
index f3bcd4c..f5baa88 100644
--- a/src/comp.h
+++ b/src/comp.h
@@ -64,8 +64,8 @@ XNATIVE_COMP_UNIT (Lisp_Object a)
 
 extern void hash_native_abi (void);
 
-extern void load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
-                           bool loading_dump);
+void load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
+                    bool late_load);
 extern void syms_of_comp (void);
 
 extern void maybe_defer_native_compilation (Lisp_Object function_name,
diff --git a/src/lread.c b/src/lread.c
index 2d90bcc..b2f4371 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1483,7 +1483,7 @@ Return t if the file exists and loads successfully.  */)
        {
          specbind (Qcurrent_load_list, Qnil);
          LOADHIST_ATTACH (found);
-         Fnative_elisp_load (found);
+         Fnative_elisp_load (found, Qnil);
          build_load_history (found, true);
        }
       else
diff --git a/src/pdumper.c b/src/pdumper.c
index 2e2220a..55f95fd 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -5303,7 +5303,7 @@ dump_do_dump_relocation (const uintptr_t dump_base,
        comp_u->handle = dynlib_open (SSDATA (comp_u->file));
        if (!comp_u->handle)
          error ("%s", dynlib_error ());
-       load_comp_unit (comp_u, true);
+       load_comp_unit (comp_u, true, false);
        break;
       }
     case RELOC_NATIVE_SUBR:



reply via email to

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