X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcompiler.c;h=5e5ebde9e7e2b1073126ec321dc728b47603e19b;hp=660c968c3d138ae534bfcd9153c29942628edf66;hb=3bca631112f4865510ea91c85e8c820c4465fc14;hpb=3013555bce1419702ada905aa6829fac285cf118 diff --git a/src/compiler.c b/src/compiler.c index 660c968..5e5ebde 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -3,7 +3,7 @@ #include #include -#include +#include #include "compiler.h" @@ -60,10 +60,10 @@ static inline size_t impl_num_min_args(impl *impl) { return n; } -void jit_closure_handler(jit_type_t signature, void *result, void **args, void *user_data) +static void psi_jit_closure_handler(jit_type_t signature, void *result, void **args, void *user_data) { - zend_execute_data *execute_data = args[0]; - zval *return_value = args[1]; + zend_execute_data *execute_data = *(zend_execute_data **)args[0]; + zval *return_value = *(zval **)args[1]; PSI_ClosureData *data = user_data; impl_arg *iarg; @@ -119,17 +119,19 @@ zend_function_entry *PSI_CompilerCompile(PSI_Compiler *C) for (i = 0; i < C->impls->count; ++i) { zend_function_entry *zf; - PSI_ClosureData *data; + volatile PSI_ClosureData *data; if (!C->impls->list[i]->decl) { continue; } - signature = jit_type_create_signature(jit_abi_cdecl, jit_type_void, params, 2, 1); + signature = jit_type_create_signature(jit_abi_vararg, jit_type_void, params, 2, 1); - zf = &zfe[++j]; + zf = &zfe[j++]; data = PSI_ClosureDataAlloc(C->context, C->impls->list[i]); zf->fname = C->impls->list[i]->func->name; - zf->handler = jit_closure_create(C->context, signature, jit_closure_handler, data); + zf->handler = jit_closure_create(C->context, signature, &psi_jit_closure_handler, data); + fprintf(stderr, "Compiled closure for %s\n", zf->fname); + printf("Closuredata: %p of closure %p\n", data, zf->handler); } return zfe;