diff --git a/src/c/ffi.d b/src/c/ffi.d index acf6fd459..44e4bd0a0 100644 --- a/src/c/ffi.d +++ b/src/c/ffi.d @@ -13,6 +13,7 @@ #include #define ECL_INCLUDE_FFI_H #include +#include #include static const cl_object ecl_aet_to_ffi_table[ecl_aet_bc+1] = { @@ -1019,3 +1020,32 @@ si_free_ffi_closure(cl_object closure) @(return closure_object); } @) #endif /* HAVE_LIBFFI */ + +/* -- Module definition ------------------------------------------------------ */ +static cl_object +init_env_ffi(cl_env_ptr the_env) +{ +#ifdef HAVE_LIBFFI + the_env->ffi_args_limit = 0; + the_env->ffi_types = 0; + the_env->ffi_values = 0; + the_env->ffi_values_ptrs = 0; +#endif + return ECL_NIL; +} + +ecl_def_ct_base_string(str_ffi, "FFI", 3, static, const); + +static struct ecl_module module_ffi = { + .name = str_ffi, + .create = ecl_module_no_op, + .enable = ecl_module_no_op, + .init_env = init_env_ffi, + .init_cpu = ecl_module_no_op_cpu, + .free_cpu = ecl_module_no_op_cpu, + .free_env = ecl_module_no_op_env, + .disable = ecl_module_no_op, + .destroy = ecl_module_no_op +}; + +cl_object ecl_module_ffi = (cl_object)&module_ffi; diff --git a/src/c/main.d b/src/c/main.d index 1344add0e..67552e8f8 100644 --- a/src/c/main.d +++ b/src/c/main.d @@ -42,17 +42,6 @@ const char *ecl_self; static int ARGC; static char **ARGV; -static void -init_env_ffi(cl_env_ptr env) -{ -#ifdef HAVE_LIBFFI - env->ffi_args_limit = 0; - env->ffi_types = 0; - env->ffi_values = 0; - env->ffi_values_ptrs = 0; -#endif -} - static void init_env_aux(cl_env_ptr env) { @@ -79,7 +68,6 @@ ecl_init_first_env(cl_env_ptr the_env) #endif ecl_cs_init(the_env); init_env_aux(the_env); - init_env_ffi(the_env); init_stacks(the_env); } @@ -88,7 +76,6 @@ ecl_init_env(cl_env_ptr env) { ecl_modules_init_env(env); init_env_aux(env); - init_env_ffi(env); init_stacks(env); } @@ -283,6 +270,7 @@ cl_boot(int argc, char **argv) ecl_add_module(ecl_module_gc); ecl_add_module(ecl_module_unixint); ecl_add_module(ecl_module_bignum); + ecl_add_module(ecl_module_ffi); /* * Initialize the per-thread data. diff --git a/src/h/internal.h b/src/h/internal.h index 5511a644e..c8e21a2a3 100755 --- a/src/h/internal.h +++ b/src/h/internal.h @@ -28,6 +28,7 @@ extern ECL_API cl_object ecl_module_dummy; extern ECL_API cl_object ecl_module_gc; extern ECL_API cl_object ecl_module_unixint; extern ECL_API cl_object ecl_module_bignum; +extern ECL_API cl_object ecl_module_ffi; extern void init_all_symbols(void); extern void init_backq(void);