Skip to content

cl_process_env() doesn't work as expected!

I am creating cclosure "THUNK" for c++ functions to use them in lisp.

cl_object env0 = CONS(f_obj, ECL_NIL);
env0 = CONS(ecl_make_fixnum(sizeof...(Args)), env0);
cl_object cc_value =
        cl_safe_eval(ecl_make_cclosure_va(reinterpret_cast<cl_objectfn>(
                                              detail::THUNK<R, Args...>::apply),
                                          env0, block),
                     Cnil, OBJNULL);
si_fset(2, cc_sym, cc_value);
// try it
cl_funcall(1, cc_value);

// ... removed unrelevent code

With these values:

cl_print(1, env0);
>>>> (0 #<foreign :POINTER-VOID 0x7ffc3d9edda0>) // for 0 arguments function*/
cl_print(1, cc_value);
>>>> #<compiled-closure 0x56034a4ae210>

and inside the function detail::THUNK<R, Args...>::apply I have:

const cl_env_ptr cl_env_copy = ecl_process_env();
cl_object env0 = cl_env_copy->function->cclosure.env;

with this value:

cl_print(1, cl_env_copy->function)
>>> #<compiled-function COMMON-LISP:CONSP 0x55895a7a3c00>
cl_print(1, env0)
>>> 8984934147752639

Exepected value

cl_print(1, cl_env_copy->function)
>>> #<compiled-closure 0x56034a4ae210>
cl_print(1, env0)
>>> (0 #<foreign :POINTER-VOID 0x7ffc3d9edda0>)

Question:

Why cl_env_copy->function is wrong?

ECL (Embeddable Common-Lisp) 16.1.3 (git:4902b9dee0e7816fef3f113365689341b16fd783)
*features*
(:SLYNK :SERVE-EVENT :QUICKLISP :ASDF-PACKAGE-SYSTEM :ASDF3.1 :ASDF3 :ASDF2
 :ASDF :OS-UNIX :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :WALKER :CDR-1 :CDR-5
 :LINUX :FORMATTER :CDR-7 :ECL-WEAK-HASH :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK
 :CXX-CORE :LONG-LONG :UINT64-T :UINT32-T :UINT16-T :LONG-FLOAT :UNICODE :DFFI
 :CLOS-STREAMS :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS :BOEHM-GC
 :ANSI-CL :COMMON-LISP :IEEE-FLOATING-POINT :PACKAGE-LOCAL-NICKNAMES :CDR-14
 :PREFIXED-API :FFI :X86_64 :COMMON :ECL)

Thanks in advance.