summaryrefslogtreecommitdiff
path: root/src/emacs-module.c
diff options
context:
space:
mode:
authorPhilipp Stephani <phst@google.com>2019-04-24 23:12:35 +0200
committerPhilipp Stephani <phst@google.com>2019-04-24 23:12:35 +0200
commitd2e1bac47816fa1f48482faeebf7fa562a5b0e40 (patch)
tree85eda43e37e3df0b74a2d82cf313c28bbfefa27c /src/emacs-module.c
parent4c90369d77d3db1cbd37df7857e4706176fd7ba2 (diff)
downloademacs-d2e1bac47816fa1f48482faeebf7fa562a5b0e40.tar.gz
Move definition of Lisp_Module_Function to emacs-module.c.
* src/lisp.h: Remove include of emacs-module.h. Remove definition of Lisp_Module_Function structure. * src/emacs-module.c (module_function_documentation) (module_function_address): New accessor functions for module function fields. (emacs_subr, struct Lisp_Module_Function): Move from lisp.h. * src/print.c (print_vectorlike): * src/doc.c (Fdocumentation): Use the new accessor functions.
Diffstat (limited to 'src/emacs-module.c')
-rw-r--r--src/emacs-module.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/emacs-module.c b/src/emacs-module.c
index 41ce9ef03e4..b6a12386267 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -471,6 +471,30 @@ module_non_local_exit_throw (emacs_env *env, emacs_value tag, emacs_value value)
value_to_lisp (value));
}
+/* Function prototype for the module Lisp functions. */
+typedef emacs_value (*emacs_subr) (emacs_env *, ptrdiff_t,
+ emacs_value [], void *);
+
+/* Module function. */
+
+/* A function environment is an auxiliary structure returned by
+ `module_make_function' to store information about a module
+ function. It is stored in a pseudovector. Its members correspond
+ to the arguments given to `module_make_function'. */
+
+struct Lisp_Module_Function
+{
+ union vectorlike_header header;
+
+ /* Fields traced by GC; these must come first. */
+ Lisp_Object documentation;
+
+ /* Fields ignored by GC. */
+ ptrdiff_t min_arity, max_arity;
+ emacs_subr subr;
+ void *data;
+} GCALIGNED_STRUCT;
+
static struct Lisp_Module_Function *
allocate_module_function (void)
{
@@ -901,6 +925,18 @@ module_function_arity (const struct Lisp_Module_Function *const function)
maxargs == MANY ? Qmany : make_fixnum (maxargs));
}
+Lisp_Object
+module_function_documentation (const struct Lisp_Module_Function *function)
+{
+ return function->documentation;
+}
+
+void *
+module_function_address (const struct Lisp_Module_Function *function)
+{
+ return function->subr;
+}
+
/* Helper functions. */