X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fmodule.c;h=166596434ae8a4447bcebcf362c8e5d5b85751e8;hp=dba74c595852c7260d9e1b91a76f7b630a812022;hb=633acd548ce5da37812bca7119e57c8f56e974e2;hpb=7e5e4c6d2b654cfd3737c37e9e1894be43642721 diff --git a/src/module.c b/src/module.c index dba74c5..1665964 100644 --- a/src/module.c +++ b/src/module.c @@ -11,11 +11,13 @@ #include "parser.h" #include "libjit.h" +#include "libffi.h" ZEND_DECLARE_MODULE_GLOBALS(psi); PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("psi.directory", "psis", PHP_INI_ALL, OnUpdateString, directory, zend_psi_globals, psi_globals) + STD_PHP_INI_ENTRY("psi.engine", "ffi", PHP_INI_SYSTEM, OnUpdateString, engine, zend_psi_globals, psi_globals) + STD_PHP_INI_ENTRY("psi.directory", "psis", PHP_INI_SYSTEM, OnUpdateString, directory, zend_psi_globals, psi_globals) PHP_INI_END(); void psi_error(int type, const char *msg, ...) @@ -289,6 +291,18 @@ void psi_do_clean(impl *impl) { size_t i; + for (i = 0; i < impl->func->args->count; ++i ) { + impl_arg *iarg = impl->func->args->args[i]; + + switch (iarg->type->type) { + case PSI_T_STRING: + if (iarg->val.str) { + zend_string_release(iarg->val.str); + } + break; + } + } + for (i = 0; i < impl->decl->args->count; ++i) { decl_arg *darg = impl->decl->args->args[i]; @@ -301,9 +315,17 @@ void psi_do_clean(impl *impl) PHP_MINIT_FUNCTION(psi) { + PSI_ContextOps *ops; + REGISTER_INI_ENTRIES(); - PSI_ContextInit(&PSI_G(context), PSI_Libjit(), psi_error); + if (!strcasecmp(PSI_G(engine), "jit")) { + ops = PSI_Libjit(); + } else { + ops = PSI_Libffi(); + } + + PSI_ContextInit(&PSI_G(context), ops, psi_error); PSI_ContextBuild(&PSI_G(context), PSI_G(directory)); return SUCCESS;