bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#30373: Support finalizers for functions created in dynamic modules


From: Samir Jindel
Subject: bug#30373: Support finalizers for functions created in dynamic modules
Date: Tue, 6 Feb 2018 22:17:11 +0100

Hi,

I'm very excited by the possibilities opened through the new dynamic module interface, "emacs-module.h".

However, I have a concern about the API for creating Lisp functions bound to native functions:

```c
  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_NOEXCEPT,                                                                                                                                                        
        const char *documentation,                                                                                                                                               
        void *data); 
``` 

I presume the "data" pointer here is provided to enable native functions to work like closures,
carrying additional, possibly dynamically allocated data. However, this functionality is limited by 
the absence of a finalization function pointer, like the "user_ptr" values have:

```c
  emacs_value (*make_user_ptr) (emacs_env *env,                                                                                                                                  
        void (*fin) (void *) EMACS_NOEXCEPT,                                                                                                                                     
        void *ptr);                                                                                                                                                              
```

Without the ability to provide a finalizer, a module can only safely make the "data" pointer to
"make_function" point to static memory.

Thanks,
Samir Jindel

reply via email to

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