Sometimes it is necessary to pass arbitrary Lisp object to C code and then receive it back. Stable pointer serve to this purpose. Stable pointer is an integer (that is passed to C code as a void*
pointer) that is created on Lisp side by call to allocate-stable-pointer
and can be dereferenced by Lisp side at any time by calling stable-pointer-value
. Stable pointer exists and does not change its value until explicitly freed by calling free-stable-poitner
. Convenience macro with-stable-pointer
binds the stable pointer for the duration of its body.