emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/jinx ca15c1c460 1/2: Require Emacs 28.1


From: ELPA Syncer
Subject: [elpa] externals/jinx ca15c1c460 1/2: Require Emacs 28.1
Date: Sun, 8 Sep 2024 15:58:14 -0400 (EDT)

branch: externals/jinx
commit ca15c1c460927a49da4477a6ebaabb77d756f8ba
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Require Emacs 28.1
---
 emacs-module.h | 444 ++++++++++++++++++++++++++++++++++++++++-----------------
 jinx.el        |  34 ++---
 2 files changed, 322 insertions(+), 156 deletions(-)

diff --git a/emacs-module.h b/emacs-module.h
index 0eb7ee0d81..1185c06f45 100644
--- a/emacs-module.h
+++ b/emacs-module.h
@@ -1,6 +1,6 @@
 /* emacs-module.h - GNU Emacs module API.
 
-Copyright (C) 2015-2020 Free Software Foundation, Inc.
+Copyright (C) 2015-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -34,7 +34,7 @@ information how to write modules and use this header file.
 #include <stdbool.h>
 #endif
 
-#define EMACS_MAJOR_VERSION 27
+#define EMACS_MAJOR_VERSION 28
 
 #if defined __cplusplus && __cplusplus >= 201103L
 # define EMACS_NOEXCEPT noexcept
@@ -42,10 +42,22 @@ information how to write modules and use this header file.
 # define EMACS_NOEXCEPT
 #endif
 
-#ifdef __has_attribute
-#if __has_attribute(__nonnull__)
-# define EMACS_ATTRIBUTE_NONNULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
+#if defined __cplusplus && __cplusplus >= 201703L
+# define EMACS_NOEXCEPT_TYPEDEF noexcept
+#else
+# define EMACS_NOEXCEPT_TYPEDEF
 #endif
+
+#if 3 < __GNUC__ + (3 <= __GNUC_MINOR__)
+# define EMACS_ATTRIBUTE_NONNULL(...) \
+   __attribute__ ((__nonnull__ (__VA_ARGS__)))
+#elif (defined __has_attribute \
+       && (!defined __clang_minor__ \
+          || 3 < __clang_major__ + (5 <= __clang_minor__)))
+# if __has_attribute (__nonnull__)
+#  define EMACS_ATTRIBUTE_NONNULL(...) \
+    __attribute__ ((__nonnull__ (__VA_ARGS__)))
+# endif
 #endif
 #ifndef EMACS_ATTRIBUTE_NONNULL
 # define EMACS_ATTRIBUTE_NONNULL(...)
@@ -56,7 +68,7 @@ extern "C" {
 #endif
 
 /* Current environment.  */
-typedef struct emacs_env_27 emacs_env;
+typedef struct emacs_env_28 emacs_env;
 
 /* Opaque pointer representing an Emacs Lisp value.
    BEWARE: Do not assume NULL is a valid value!  */
@@ -74,10 +86,25 @@ struct emacs_runtime
   struct emacs_runtime_private *private_members;
 
   /* Return an environment pointer.  */
-  emacs_env *(*get_environment) (struct emacs_runtime *ert)
-    EMACS_ATTRIBUTE_NONNULL(1);
+  emacs_env *(*get_environment) (struct emacs_runtime *runtime)
+    EMACS_ATTRIBUTE_NONNULL (1);
 };
 
+/* Type aliases for function pointer types used in the module API.
+   Note that we don't use these aliases directly in the API to be able
+   to mark the function arguments as 'noexcept' before C++20.
+   However, users can use them if they want.  */
+
+/* Function prototype for the module Lisp functions.  These must not
+   throw C++ exceptions.  */
+typedef emacs_value (*emacs_function) (emacs_env *env, ptrdiff_t nargs,
+                                       emacs_value *args,
+                                       void *data)
+  EMACS_NOEXCEPT_TYPEDEF EMACS_ATTRIBUTE_NONNULL (1);
+
+/* Function prototype for module user-pointer and function finalizers.
+   These must not throw C++ exceptions.  */
+typedef void (*emacs_finalizer) (void *data) EMACS_NOEXCEPT_TYPEDEF;
 
 /* Possible Emacs function call outcomes.  */
 enum emacs_funcall_exit
@@ -120,12 +147,10 @@ struct emacs_env_25
 
   /* Memory management.  */
 
-  emacs_value (*make_global_ref) (emacs_env *env,
-                                 emacs_value any_reference)
+  emacs_value (*make_global_ref) (emacs_env *env, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*free_global_ref) (emacs_env *env,
-                          emacs_value global_reference)
+  void (*free_global_ref) (emacs_env *env, emacs_value global_value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Non-local exit handling.  */
@@ -137,19 +162,15 @@ struct emacs_env_25
     EMACS_ATTRIBUTE_NONNULL(1);
 
   enum emacs_funcall_exit (*non_local_exit_get)
-    (emacs_env *env,
-     emacs_value *non_local_exit_symbol_out,
-     emacs_value *non_local_exit_data_out)
+    (emacs_env *env, emacs_value *symbol, emacs_value *data)
     EMACS_ATTRIBUTE_NONNULL(1, 2, 3);
 
   void (*non_local_exit_signal) (emacs_env *env,
-                                emacs_value non_local_exit_symbol,
-                                emacs_value non_local_exit_data)
+                                emacs_value symbol, emacs_value data)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*non_local_exit_throw) (emacs_env *env,
-                               emacs_value tag,
-                               emacs_value value)
+                               emacs_value tag, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Function registration.  */
@@ -157,71 +178,69 @@ struct emacs_env_25
   emacs_value (*make_function) (emacs_env *env,
                                ptrdiff_t min_arity,
                                ptrdiff_t max_arity,
-                               emacs_value (*function) (emacs_env *env,
-                                                        ptrdiff_t nargs,
-                                                        emacs_value args[],
-                                                        void *)
+                               emacs_value (*func) (emacs_env *env,
+                                                     ptrdiff_t nargs,
+                                                     emacs_value* args,
+                                                     void *data)
                                  EMACS_NOEXCEPT
                                   EMACS_ATTRIBUTE_NONNULL(1),
-                               const char *documentation,
+                               const char *docstring,
                                void *data)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   emacs_value (*funcall) (emacs_env *env,
-                          emacs_value function,
+                          emacs_value func,
                           ptrdiff_t nargs,
-                          emacs_value args[])
+                          emacs_value* args)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*intern) (emacs_env *env,
-                         const char *symbol_name)
+  emacs_value (*intern) (emacs_env *env, const char *name)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Type conversion.  */
 
-  emacs_value (*type_of) (emacs_env *env,
-                         emacs_value value)
+  emacs_value (*type_of) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  bool (*is_not_nil) (emacs_env *env, emacs_value value)
+  bool (*is_not_nil) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   bool (*eq) (emacs_env *env, emacs_value a, emacs_value b)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  intmax_t (*extract_integer) (emacs_env *env, emacs_value value)
+  intmax_t (*extract_integer) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_integer) (emacs_env *env, intmax_t value)
+  emacs_value (*make_integer) (emacs_env *env, intmax_t n)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  double (*extract_float) (emacs_env *env, emacs_value value)
+  double (*extract_float) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_float) (emacs_env *env, double value)
+  emacs_value (*make_float) (emacs_env *env, double d)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Copy the content of the Lisp string VALUE to BUFFER as an utf8
-     NUL-terminated string.
+     null-terminated string.
 
      SIZE must point to the total size of the buffer.  If BUFFER is
      NULL or if SIZE is not big enough, write the required buffer size
      to SIZE and return true.
 
-     Note that SIZE must include the last NUL byte (e.g. "abc" needs
+     Note that SIZE must include the last null byte (e.g. "abc" needs
      a buffer of size 4).
 
      Return true if the string was successfully copied.  */
 
   bool (*copy_string_contents) (emacs_env *env,
                                 emacs_value value,
-                                char *buffer,
-                                ptrdiff_t *size_inout)
+                                char *buf,
+                                ptrdiff_t *len)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   /* Create a Lisp string from a utf8 encoded string.  */
   emacs_value (*make_string) (emacs_env *env,
-                             const char *contents, ptrdiff_t length)
+                             const char *str, ptrdiff_t len)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Embedded pointer type.  */
@@ -230,27 +249,26 @@ struct emacs_env_25
                                void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void *(*get_user_ptr) (emacs_env *env, emacs_value uptr)
+  void *(*get_user_ptr) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr)
+  void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
     (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_finalizer) (emacs_env *env,
-                             emacs_value uptr,
+  void (*set_user_finalizer) (emacs_env *env, emacs_value arg,
                              void (*fin) (void *) EMACS_NOEXCEPT)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Vector functions.  */
-  emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i)
+  emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i,
-                  emacs_value val)
+  void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index,
+                  emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec)
+  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector)
     EMACS_ATTRIBUTE_NONNULL(1);
 };
 
@@ -264,12 +282,10 @@ struct emacs_env_26
 
   /* Memory management.  */
 
-  emacs_value (*make_global_ref) (emacs_env *env,
-                                 emacs_value any_reference)
+  emacs_value (*make_global_ref) (emacs_env *env, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*free_global_ref) (emacs_env *env,
-                          emacs_value global_reference)
+  void (*free_global_ref) (emacs_env *env, emacs_value global_value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Non-local exit handling.  */
@@ -281,19 +297,15 @@ struct emacs_env_26
     EMACS_ATTRIBUTE_NONNULL(1);
 
   enum emacs_funcall_exit (*non_local_exit_get)
-    (emacs_env *env,
-     emacs_value *non_local_exit_symbol_out,
-     emacs_value *non_local_exit_data_out)
+    (emacs_env *env, emacs_value *symbol, emacs_value *data)
     EMACS_ATTRIBUTE_NONNULL(1, 2, 3);
 
   void (*non_local_exit_signal) (emacs_env *env,
-                                emacs_value non_local_exit_symbol,
-                                emacs_value non_local_exit_data)
+                                emacs_value symbol, emacs_value data)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*non_local_exit_throw) (emacs_env *env,
-                               emacs_value tag,
-                               emacs_value value)
+                               emacs_value tag, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Function registration.  */
@@ -301,71 +313,69 @@ struct emacs_env_26
   emacs_value (*make_function) (emacs_env *env,
                                ptrdiff_t min_arity,
                                ptrdiff_t max_arity,
-                               emacs_value (*function) (emacs_env *env,
-                                                        ptrdiff_t nargs,
-                                                        emacs_value args[],
-                                                        void *)
+                               emacs_value (*func) (emacs_env *env,
+                                                     ptrdiff_t nargs,
+                                                     emacs_value* args,
+                                                     void *data)
                                  EMACS_NOEXCEPT
                                   EMACS_ATTRIBUTE_NONNULL(1),
-                               const char *documentation,
+                               const char *docstring,
                                void *data)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   emacs_value (*funcall) (emacs_env *env,
-                          emacs_value function,
+                          emacs_value func,
                           ptrdiff_t nargs,
-                          emacs_value args[])
+                          emacs_value* args)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*intern) (emacs_env *env,
-                         const char *symbol_name)
+  emacs_value (*intern) (emacs_env *env, const char *name)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Type conversion.  */
 
-  emacs_value (*type_of) (emacs_env *env,
-                         emacs_value value)
+  emacs_value (*type_of) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  bool (*is_not_nil) (emacs_env *env, emacs_value value)
+  bool (*is_not_nil) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   bool (*eq) (emacs_env *env, emacs_value a, emacs_value b)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  intmax_t (*extract_integer) (emacs_env *env, emacs_value value)
+  intmax_t (*extract_integer) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_integer) (emacs_env *env, intmax_t value)
+  emacs_value (*make_integer) (emacs_env *env, intmax_t n)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  double (*extract_float) (emacs_env *env, emacs_value value)
+  double (*extract_float) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_float) (emacs_env *env, double value)
+  emacs_value (*make_float) (emacs_env *env, double d)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Copy the content of the Lisp string VALUE to BUFFER as an utf8
-     NUL-terminated string.
+     null-terminated string.
 
      SIZE must point to the total size of the buffer.  If BUFFER is
      NULL or if SIZE is not big enough, write the required buffer size
      to SIZE and return true.
 
-     Note that SIZE must include the last NUL byte (e.g. "abc" needs
+     Note that SIZE must include the last null byte (e.g. "abc" needs
      a buffer of size 4).
 
      Return true if the string was successfully copied.  */
 
   bool (*copy_string_contents) (emacs_env *env,
                                 emacs_value value,
-                                char *buffer,
-                                ptrdiff_t *size_inout)
+                                char *buf,
+                                ptrdiff_t *len)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   /* Create a Lisp string from a utf8 encoded string.  */
   emacs_value (*make_string) (emacs_env *env,
-                             const char *contents, ptrdiff_t length)
+                             const char *str, ptrdiff_t len)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Embedded pointer type.  */
@@ -374,27 +384,26 @@ struct emacs_env_26
                                void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void *(*get_user_ptr) (emacs_env *env, emacs_value uptr)
+  void *(*get_user_ptr) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr)
+  void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
     (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_finalizer) (emacs_env *env,
-                             emacs_value uptr,
+  void (*set_user_finalizer) (emacs_env *env, emacs_value arg,
                              void (*fin) (void *) EMACS_NOEXCEPT)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Vector functions.  */
-  emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i)
+  emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i,
-                  emacs_value val)
+  void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index,
+                  emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec)
+  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Returns whether a quit is pending.  */
@@ -412,12 +421,10 @@ struct emacs_env_27
 
   /* Memory management.  */
 
-  emacs_value (*make_global_ref) (emacs_env *env,
-                                 emacs_value any_reference)
+  emacs_value (*make_global_ref) (emacs_env *env, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*free_global_ref) (emacs_env *env,
-                          emacs_value global_reference)
+  void (*free_global_ref) (emacs_env *env, emacs_value global_value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Non-local exit handling.  */
@@ -429,19 +436,15 @@ struct emacs_env_27
     EMACS_ATTRIBUTE_NONNULL(1);
 
   enum emacs_funcall_exit (*non_local_exit_get)
-    (emacs_env *env,
-     emacs_value *non_local_exit_symbol_out,
-     emacs_value *non_local_exit_data_out)
+    (emacs_env *env, emacs_value *symbol, emacs_value *data)
     EMACS_ATTRIBUTE_NONNULL(1, 2, 3);
 
   void (*non_local_exit_signal) (emacs_env *env,
-                                emacs_value non_local_exit_symbol,
-                                emacs_value non_local_exit_data)
+                                emacs_value symbol, emacs_value data)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*non_local_exit_throw) (emacs_env *env,
-                               emacs_value tag,
-                               emacs_value value)
+                               emacs_value tag, emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Function registration.  */
@@ -449,71 +452,69 @@ struct emacs_env_27
   emacs_value (*make_function) (emacs_env *env,
                                ptrdiff_t min_arity,
                                ptrdiff_t max_arity,
-                               emacs_value (*function) (emacs_env *env,
-                                                        ptrdiff_t nargs,
-                                                        emacs_value args[],
-                                                        void *)
+                               emacs_value (*func) (emacs_env *env,
+                                                     ptrdiff_t nargs,
+                                                     emacs_value* args,
+                                                     void *data)
                                  EMACS_NOEXCEPT
                                   EMACS_ATTRIBUTE_NONNULL(1),
-                               const char *documentation,
+                               const char *docstring,
                                void *data)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   emacs_value (*funcall) (emacs_env *env,
-                          emacs_value function,
+                          emacs_value func,
                           ptrdiff_t nargs,
-                          emacs_value args[])
+                          emacs_value* args)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*intern) (emacs_env *env,
-                         const char *symbol_name)
+  emacs_value (*intern) (emacs_env *env, const char *name)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Type conversion.  */
 
-  emacs_value (*type_of) (emacs_env *env,
-                         emacs_value value)
+  emacs_value (*type_of) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  bool (*is_not_nil) (emacs_env *env, emacs_value value)
+  bool (*is_not_nil) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   bool (*eq) (emacs_env *env, emacs_value a, emacs_value b)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  intmax_t (*extract_integer) (emacs_env *env, emacs_value value)
+  intmax_t (*extract_integer) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_integer) (emacs_env *env, intmax_t value)
+  emacs_value (*make_integer) (emacs_env *env, intmax_t n)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  double (*extract_float) (emacs_env *env, emacs_value value)
+  double (*extract_float) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  emacs_value (*make_float) (emacs_env *env, double value)
+  emacs_value (*make_float) (emacs_env *env, double d)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Copy the content of the Lisp string VALUE to BUFFER as an utf8
-     NUL-terminated string.
+     null-terminated string.
 
      SIZE must point to the total size of the buffer.  If BUFFER is
      NULL or if SIZE is not big enough, write the required buffer size
      to SIZE and return true.
 
-     Note that SIZE must include the last NUL byte (e.g. "abc" needs
+     Note that SIZE must include the last null byte (e.g. "abc" needs
      a buffer of size 4).
 
      Return true if the string was successfully copied.  */
 
   bool (*copy_string_contents) (emacs_env *env,
                                 emacs_value value,
-                                char *buffer,
-                                ptrdiff_t *size_inout)
+                                char *buf,
+                                ptrdiff_t *len)
     EMACS_ATTRIBUTE_NONNULL(1, 4);
 
   /* Create a Lisp string from a utf8 encoded string.  */
   emacs_value (*make_string) (emacs_env *env,
-                             const char *contents, ptrdiff_t length)
+                             const char *str, ptrdiff_t len)
     EMACS_ATTRIBUTE_NONNULL(1, 2);
 
   /* Embedded pointer type.  */
@@ -522,27 +523,26 @@ struct emacs_env_27
                                void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void *(*get_user_ptr) (emacs_env *env, emacs_value uptr)
+  void *(*get_user_ptr) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr)
+  void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
     (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1);
-  void (*set_user_finalizer) (emacs_env *env,
-                             emacs_value uptr,
+  void (*set_user_finalizer) (emacs_env *env, emacs_value arg,
                              void (*fin) (void *) EMACS_NOEXCEPT)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Vector functions.  */
-  emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i)
+  emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i,
-                  emacs_value val)
+  void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index,
+                  emacs_value value)
     EMACS_ATTRIBUTE_NONNULL(1);
 
-  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec)
+  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector)
     EMACS_ATTRIBUTE_NONNULL(1);
 
   /* Returns whether a quit is pending.  */
@@ -554,7 +554,7 @@ struct emacs_env_27
   enum emacs_process_input_result (*process_input) (emacs_env *env)
     EMACS_ATTRIBUTE_NONNULL (1);
 
-  struct timespec (*extract_time) (emacs_env *env, emacs_value value)
+  struct timespec (*extract_time) (emacs_env *env, emacs_value arg)
     EMACS_ATTRIBUTE_NONNULL (1);
 
   emacs_value (*make_time) (emacs_env *env, struct timespec time)
@@ -569,10 +569,192 @@ struct emacs_env_27
     EMACS_ATTRIBUTE_NONNULL (1);
 };
 
+struct emacs_env_28
+{
+  /* Structure size (for version checking).  */
+  ptrdiff_t size;
+
+  /* Private data; users should not touch this.  */
+  struct emacs_env_private *private_members;
+
+  /* Memory management.  */
+
+  emacs_value (*make_global_ref) (emacs_env *env, emacs_value value)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void (*free_global_ref) (emacs_env *env, emacs_value global_value)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Non-local exit handling.  */
+
+  enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void (*non_local_exit_clear) (emacs_env *env)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  enum emacs_funcall_exit (*non_local_exit_get)
+    (emacs_env *env, emacs_value *symbol, emacs_value *data)
+    EMACS_ATTRIBUTE_NONNULL(1, 2, 3);
+
+  void (*non_local_exit_signal) (emacs_env *env,
+                                emacs_value symbol, emacs_value data)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void (*non_local_exit_throw) (emacs_env *env,
+                               emacs_value tag, emacs_value value)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Function registration.  */
+
+  emacs_value (*make_function) (emacs_env *env,
+                               ptrdiff_t min_arity,
+                               ptrdiff_t max_arity,
+                               emacs_value (*func) (emacs_env *env,
+                                                     ptrdiff_t nargs,
+                                                     emacs_value* args,
+                                                     void *data)
+                                 EMACS_NOEXCEPT
+                                  EMACS_ATTRIBUTE_NONNULL(1),
+                               const char *docstring,
+                               void *data)
+    EMACS_ATTRIBUTE_NONNULL(1, 4);
+
+  emacs_value (*funcall) (emacs_env *env,
+                          emacs_value func,
+                          ptrdiff_t nargs,
+                          emacs_value* args)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  emacs_value (*intern) (emacs_env *env, const char *name)
+    EMACS_ATTRIBUTE_NONNULL(1, 2);
+
+  /* Type conversion.  */
+
+  emacs_value (*type_of) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  bool (*is_not_nil) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  bool (*eq) (emacs_env *env, emacs_value a, emacs_value b)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  intmax_t (*extract_integer) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  emacs_value (*make_integer) (emacs_env *env, intmax_t n)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  double (*extract_float) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  emacs_value (*make_float) (emacs_env *env, double d)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Copy the content of the Lisp string VALUE to BUFFER as an utf8
+     null-terminated string.
+
+     SIZE must point to the total size of the buffer.  If BUFFER is
+     NULL or if SIZE is not big enough, write the required buffer size
+     to SIZE and return true.
+
+     Note that SIZE must include the last null byte (e.g. "abc" needs
+     a buffer of size 4).
+
+     Return true if the string was successfully copied.  */
+
+  bool (*copy_string_contents) (emacs_env *env,
+                                emacs_value value,
+                                char *buf,
+                                ptrdiff_t *len)
+    EMACS_ATTRIBUTE_NONNULL(1, 4);
+
+  /* Create a Lisp string from a utf8 encoded string.  */
+  emacs_value (*make_string) (emacs_env *env,
+                             const char *str, ptrdiff_t len)
+    EMACS_ATTRIBUTE_NONNULL(1, 2);
+
+  /* Embedded pointer type.  */
+  emacs_value (*make_user_ptr) (emacs_env *env,
+                               void (*fin) (void *) EMACS_NOEXCEPT,
+                               void *ptr)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void *(*get_user_ptr) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL(1);
+  void (*set_user_ptr) (emacs_env *env, emacs_value arg, void *ptr)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
+    (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1);
+  void (*set_user_finalizer) (emacs_env *env, emacs_value arg,
+                             void (*fin) (void *) EMACS_NOEXCEPT)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Vector functions.  */
+  emacs_value (*vec_get) (emacs_env *env, emacs_value vector, ptrdiff_t index)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  void (*vec_set) (emacs_env *env, emacs_value vector, ptrdiff_t index,
+                  emacs_value value)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vector)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Returns whether a quit is pending.  */
+  bool (*should_quit) (emacs_env *env)
+    EMACS_ATTRIBUTE_NONNULL(1);
+
+  /* Processes pending input events and returns whether the module
+     function should quit.  */
+  enum emacs_process_input_result (*process_input) (emacs_env *env)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  struct timespec (*extract_time) (emacs_env *env, emacs_value arg)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  emacs_value (*make_time) (emacs_env *env, struct timespec time)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  bool (*extract_big_integer) (emacs_env *env, emacs_value arg, int *sign,
+                               ptrdiff_t *count, emacs_limb_t *magnitude)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  emacs_value (*make_big_integer) (emacs_env *env, int sign, ptrdiff_t count,
+                                   const emacs_limb_t *magnitude)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  /* Add module environment functions newly added in Emacs 28 here.
+     Before Emacs 28 is released, remove this comment and start
+     module-env-29.h on the master branch.  */
+
+  void (*(*EMACS_ATTRIBUTE_NONNULL (1)
+            get_function_finalizer) (emacs_env *env,
+                                     emacs_value arg)) (void *) EMACS_NOEXCEPT;
+
+  void (*set_function_finalizer) (emacs_env *env, emacs_value arg,
+                                  void (*fin) (void *) EMACS_NOEXCEPT)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  int (*open_channel) (emacs_env *env, emacs_value pipe_process)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  void (*make_interactive) (emacs_env *env, emacs_value function,
+                            emacs_value spec)
+    EMACS_ATTRIBUTE_NONNULL (1);
+
+  /* Create a unibyte Lisp string from a string.  */
+  emacs_value (*make_unibyte_string) (emacs_env *env,
+                                     const char *str, ptrdiff_t len)
+    EMACS_ATTRIBUTE_NONNULL(1, 2);
+};
+
 /* Every module should define a function as follows.  */
-extern int emacs_module_init (struct emacs_runtime *ert)
+extern int emacs_module_init (struct emacs_runtime *runtime)
   EMACS_NOEXCEPT
-  EMACS_ATTRIBUTE_NONNULL(1);
+  EMACS_ATTRIBUTE_NONNULL (1);
 
 #ifdef __cplusplus
 }
diff --git a/jinx.el b/jinx.el
index c260a70e60..18d7345397 100644
--- a/jinx.el
+++ b/jinx.el
@@ -6,7 +6,7 @@
 ;; Maintainer: Daniel Mendler <mail@daniel-mendler.de>
 ;; Created: 2023
 ;; Version: 1.10
-;; Package-Requires: ((emacs "27.1") (compat "30"))
+;; Package-Requires: ((emacs "28.1") (compat "30"))
 ;; Homepage: https://github.com/minad/jinx
 ;; Keywords: convenience, text
 
@@ -1043,6 +1043,7 @@ This command dispatches to the following commands:
 
 (defun jinx-correct-select ()
   "Quick selection key for corrections."
+  (declare (completion ignore))
   (interactive)
   (let* ((keys (this-command-keys-vector))
          (word (nth (if (eq (aref keys 0) ?0)
@@ -1057,7 +1058,7 @@ This command dispatches to the following commands:
 
 (defun jinx-next (n)
   "Go to to Nth next misspelled word."
-  (interactive "p")
+  (interactive "p" jinx-mode)
   (unless (= n 0)
     (if (minibufferp)
         (throw 'jinx--goto n)
@@ -1069,7 +1070,7 @@ This command dispatches to the following commands:
 
 (defun jinx-previous (n)
   "Go to to Nth previous misspelled word."
-  (interactive "p")
+  (interactive "p" jinx-mode)
   (jinx-next (- n)))
 
 ;;;###autoload
@@ -1113,36 +1114,19 @@ This command dispatches to the following commands:
     (jit-lock-unregister #'jinx--mark-pending)
     (jinx--cleanup))))
 
-(defcustom global-jinx-modes '(text-mode prog-mode conf-mode)
-  "List of modes where Jinx should be enabled.
-The variable can either be t, nil or a list of t, nil, mode
-symbols or elements of the form (not modes)."
-  :type '(repeat sexp))
-
 ;;;###autoload
 (define-globalized-minor-mode global-jinx-mode
   jinx-mode jinx--on
+  :predicate '(text-mode prog-mode conf-mode)
   :group 'jinx)
 
 (defun jinx--on ()
   "Turn `jinx-mode' on."
-  (when (and (not (or noninteractive
-                      buffer-read-only
-                      (buffer-base-buffer) ;; Do not enable in indirect buffers
-                      (eq (aref (buffer-name) 0) ?\s)))
-             ;; TODO backport `easy-mmode--globalized-predicate-p'
-             (or (eq t global-jinx-modes)
-                 (eq t (cl-loop for p in global-jinx-modes thereis
-                                (pcase-exhaustive p
-                                  ('t t)
-                                  ('nil 0)
-                                  ((pred symbolp) (and (derived-mode-p p) t))
-                                  (`(not . ,m) (and (seq-some #'derived-mode-p 
m) 0)))))))
+  (unless (or noninteractive
+              buffer-read-only
+              (buffer-base-buffer) ;; Do not enable in indirect buffers
+              (eq (aref (buffer-name) 0) ?\s))
     (jinx-mode 1)))
 
-(put #'jinx-correct-select 'completion-predicate #'ignore)
-(put #'jinx-next 'command-modes '(jinx-mode))
-(put #'jinx-previous 'command-modes '(jinx-mode))
-
 (provide 'jinx)
 ;;; jinx.el ends here



reply via email to

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