X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fmodule.c;h=6f152e3d750ef3933c56a8b44419752dd314592b;hp=3b4a643e2710986b92039992a167990dee058421;hb=7e4c03791c729bce5ebe6226a72786191bc67f8f;hpb=207ff7bc85e967235f0ad1ffbf47c0f85f375063;ds=sidebyside diff --git a/src/module.c b/src/module.c index 3b4a643..6f152e3 100644 --- a/src/module.c +++ b/src/module.c @@ -332,10 +332,11 @@ void psi_to_array(zval *return_value, token_t t, impl_val *ret_val, decl_var *va ZEND_ASSERT(s); for (i = 0; i < s->args->count; ++i) { decl_arg *darg = s->args->args[i]; - impl_val tmp; + impl_val tmp, tmp_ptr; zval ztmp; char *ptr = (char *) ret_val->ptr + darg->layout->pos; + tmp_ptr.ptr = &tmp; memset(&tmp, 0, sizeof(tmp)); memcpy(&tmp, ptr, darg->layout->len); switch (real_decl_type(darg->type)->type) { @@ -358,6 +359,9 @@ void psi_to_array(zval *return_value, token_t t, impl_val *ret_val, decl_var *va case PSI_T_UINT64: psi_to_int(&ztmp, real_decl_type(darg->type)->type, &tmp, darg->var); break; + case PSI_T_STRUCT: + psi_to_array(&ztmp, real_decl_type(darg->type)->type, &tmp_ptr, darg->var); + break; default: printf("t=%d\n", real_decl_type(darg->type)->type); abort();