summaryrefslogtreecommitdiff
path: root/src/comp.c
diff options
context:
space:
mode:
authorAndrea Corallo <akrl@sdf.org>2020-04-25 18:16:17 +0100
committerAndrea Corallo <akrl@sdf.org>2020-04-25 19:55:39 +0100
commita7fac2e91fb424fcf47ea8a23c218c272dd83434 (patch)
tree620e5295a71b246e191a7f61c756d9e0f8ad985d /src/comp.c
parentf691af80f1c2073e610a382029790f7c6f97dd5d (diff)
downloademacs-a7fac2e91fb424fcf47ea8a23c218c272dd83434.tar.gz
emacs-a7fac2e91fb424fcf47ea8a23c218c272dd83434.tar.bz2
emacs-a7fac2e91fb424fcf47ea8a23c218c272dd83434.zip
Lazy load function documentation.
* src/comp.c (native_function_doc): New function. (load_comp_unit): Do not load function doc during load. * src/comp.h: Extern 'native_function_doc'. * src/doc.c (Fdocumentation): Call 'native_function_doc' to retrive function doc. * src/pdumper.c (dump_native_comp_unit): Zero 'data_fdoc_h' before dumping.
Diffstat (limited to 'src/comp.c')
-rw-r--r--src/comp.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/comp.c b/src/comp.c
index 70b0a25a9c0..b33ef92f72b 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -3627,7 +3627,6 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
comp_u->data_vec = load_static_obj (comp_u, TEXT_DATA_RELOC_SYM);
comp_u->data_impure_vec =
load_static_obj (comp_u, TEXT_DATA_RELOC_IMPURE_SYM);
- comp_u->data_fdoc_h = load_static_obj (comp_u, TEXT_FDOC_SYM);
if (!NILP (Vpurify_flag))
/* Non impure can be copied into pure space. */
@@ -3672,6 +3671,22 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
return;
}
+Lisp_Object
+native_function_doc (Lisp_Object function)
+{
+ struct Lisp_Native_Comp_Unit *cu =
+ XNATIVE_COMP_UNIT (Fsubr_native_comp_unit (function));
+
+ if (NILP (cu->data_fdoc_h))
+ cu->data_fdoc_h = load_static_obj (cu, TEXT_FDOC_SYM);
+
+ eassert (!NILP (cu->data_fdoc_h));
+
+ return Fgethash (make_fixnum (XSUBR (function)->doc),
+ cu->data_fdoc_h,
+ Qnil);
+}
+
DEFUN ("comp--register-subr", Fcomp__register_subr, Scomp__register_subr,
7, 7, 0,
doc: /* This gets called by top_level_run during load phase to register