[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:
- feature/native-comp updated (e57d5a7 -> 64a6709), Andrea Corallo, 2020/03/19
- feature/native-comp f2c4377 1/9: * comp.el: Have the compiler generates 'late_top_level_run', Andrea Corallo, 2020/03/19
- feature/native-comp b53fc68 3/9: Extend low level code for late load,
Andrea Corallo <=
- feature/native-comp 034d9b3 2/9: * comp.el: late-load support optional as `native-compile' parameter, Andrea Corallo, 2020/03/19
- feature/native-comp 7565a4a 5/9: Command late load when deferring compilation, Andrea Corallo, 2020/03/19
- feature/native-comp 64a6709 9/9: * comp.el (comp-async-jobs-number): Fix customize type., Andrea Corallo, 2020/03/19
- feature/native-comp 0179d95 6/9: * comp.c (native-elisp-load): Guard against misisng file., Andrea Corallo, 2020/03/19
- feature/native-comp c3e640b 4/9: * comp.el: Extend `native-compile-async' for load and late-load, Andrea Corallo, 2020/03/19
- feature/native-comp b070571 7/9: * comp.el (comp-run-async-workers): Load only if compilation succeed, Andrea Corallo, 2020/03/19
- feature/native-comp 981cc15 8/9: Merge remote-tracking branch 'savannah/master' into HEAD, Andrea Corallo, 2020/03/19