aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrea Corallo2020-10-12 22:11:06 +0200
committerAndrea Corallo2020-10-14 11:04:36 +0200
commit8861ee8b087b4e5d9ac9186a2c2d8e44b07fc186 (patch)
treecdee0aeb80bbbc7454bbe6475a743bfd12ee9ae8 /src
parent4bea0c0b1d907d676cc9abc8d7048103c10b8d79 (diff)
downloademacs-8861ee8b087b4e5d9ac9186a2c2d8e44b07fc186.tar.gz
emacs-8861ee8b087b4e5d9ac9186a2c2d8e44b07fc186.zip
Have `native-elisp-load' return the last registerd function
* lisp/emacs-lisp/comp.el (comp-emit-for-top-level): Synthesize 'top_level_run' so it returns the last value returned by `comp--register-subr'. * src/comp.c (load_comp_unit): Return what 'top_level_run' returns. (Fnative_elisp_load): Return what 'load_comp_unit' returns. * src/comp.h (load_comp_unit): Update signature.
Diffstat (limited to 'src')
-rw-r--r--src/comp.c11
-rw-r--r--src/comp.h4
2 files changed, 7 insertions, 8 deletions
diff --git a/src/comp.c b/src/comp.c
index 0b5a49fd1f1..f80172e89bf 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -4768,10 +4768,11 @@ unset_cu_load_ongoing (Lisp_Object comp_u)
4768 XNATIVE_COMP_UNIT (comp_u)->load_ongoing = false; 4768 XNATIVE_COMP_UNIT (comp_u)->load_ongoing = false;
4769} 4769}
4770 4770
4771void 4771Lisp_Object
4772load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump, 4772load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
4773 bool late_load) 4773 bool late_load)
4774{ 4774{
4775 Lisp_Object res = Qnil;
4775 dynlib_handle_ptr handle = comp_u->handle; 4776 dynlib_handle_ptr handle = comp_u->handle;
4776 Lisp_Object comp_u_lisp_obj; 4777 Lisp_Object comp_u_lisp_obj;
4777 XSETNATIVE_COMP_UNIT (comp_u_lisp_obj, comp_u); 4778 XSETNATIVE_COMP_UNIT (comp_u_lisp_obj, comp_u);
@@ -4897,7 +4898,7 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
4897 } 4898 }
4898 /* Executing this will perform all the expected environment 4899 /* Executing this will perform all the expected environment
4899 modifications. */ 4900 modifications. */
4900 top_level_run (comp_u_lisp_obj); 4901 res = top_level_run (comp_u_lisp_obj);
4901 /* Make sure data_ephemeral_vec still exists after top_level_run has run. 4902 /* Make sure data_ephemeral_vec still exists after top_level_run has run.
4902 Guard against sibling call optimization (or any other). */ 4903 Guard against sibling call optimization (or any other). */
4903 data_ephemeral_vec = data_ephemeral_vec; 4904 data_ephemeral_vec = data_ephemeral_vec;
@@ -4910,7 +4911,7 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
4910 4911
4911 register_native_comp_unit (comp_u_lisp_obj); 4912 register_native_comp_unit (comp_u_lisp_obj);
4912 4913
4913 return; 4914 return res;
4914} 4915}
4915 4916
4916Lisp_Object 4917Lisp_Object
@@ -5090,9 +5091,7 @@ DEFUN ("native-elisp-load", Fnative_elisp_load, Snative_elisp_load, 1, 2, 0,
5090 comp_u->data_vec = Qnil; 5091 comp_u->data_vec = Qnil;
5091 comp_u->lambda_gc_guard_h = CALLN (Fmake_hash_table, QCtest, Qeq); 5092 comp_u->lambda_gc_guard_h = CALLN (Fmake_hash_table, QCtest, Qeq);
5092 comp_u->lambda_c_name_idx_h = CALLN (Fmake_hash_table, QCtest, Qequal); 5093 comp_u->lambda_c_name_idx_h = CALLN (Fmake_hash_table, QCtest, Qequal);
5093 load_comp_unit (comp_u, false, !NILP (late_load)); 5094 return load_comp_unit (comp_u, false, !NILP (late_load));
5094
5095 return Qt;
5096} 5095}
5097 5096
5098#endif /* HAVE_NATIVE_COMP */ 5097#endif /* HAVE_NATIVE_COMP */
diff --git a/src/comp.h b/src/comp.h
index 5c7bed6a304..077250ea869 100644
--- a/src/comp.h
+++ b/src/comp.h
@@ -75,8 +75,8 @@ XNATIVE_COMP_UNIT (Lisp_Object a)
75 75
76extern void hash_native_abi (void); 76extern void hash_native_abi (void);
77 77
78extern void load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, 78extern Lisp_Object load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
79 bool loading_dump, bool late_load); 79 bool loading_dump, bool late_load);
80 80
81extern Lisp_Object native_function_doc (Lisp_Object function); 81extern Lisp_Object native_function_doc (Lisp_Object function);
82 82