- data = PSI_LibffiDataAlloc(ctx, D->impls->list[i]);
- zf->fname = D->impls->list[i]->func->name + (D->impls->list[i]->func->name[0] == '\\');
- zf->num_args = D->impls->list[i]->func->args->count;
- zf->handler = data->code;
- zf->arg_info = data->arginfo;
- ++j;
+ rc = ffi_prep_cif_var(&signature, call->signature.abi,
+ nfixedargs, ntotalargs,
+ call->signature.rtype, (ffi_type **) params);
+ ZEND_ASSERT(FFI_OK == rc);
+ ffi_call(&signature, FFI_FN(decl_call->sym), decl_call->rval, ¶ms[ntotalargs + 1]);
+ free(params);
+ } else {
+ ffi_call(&call->signature, FFI_FN(decl_call->sym), decl_call->rval, decl_call->args);