X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fmodule.c;h=811d4e40429c713b3619b065fd9776f082e00ae5;hp=508fdea64e5da754e3c2283423a90cef33a0187f;hb=596f215b67dd267284df4fe0e11f0ca4d197bfc1;hpb=a6ffb2bfbf83ef3511cc356bd931d460feabe7a2 diff --git a/src/module.c b/src/module.c index 508fdea..811d4e4 100644 --- a/src/module.c +++ b/src/module.c @@ -616,15 +616,20 @@ void psi_do_return(zval *return_value, return_stmt *ret, impl_val *ret_val) void psi_do_free(free_stmt *fre) { - size_t i; + size_t i, j; + impl_val dummy, *argps[0x20]; + + for (i = 0; i < fre->calls->count; ++i) { + free_call *f = fre->calls->list[i]; - for (i = 0; i < fre->vars->count; ++i) { - decl_var *dvar = fre->vars->vars[i]; + for (j = 0; j < f->vars->count; ++j) { + decl_var *dvar = f->vars->vars[j]; + decl_arg *darg = dvar->arg; - if (dvar->arg && dvar->arg->let->out.ptr) { - free(dvar->arg->let->out.ptr); - dvar->arg->let->out.ptr = NULL; + argps[j] = &darg->let->out; } + + PSI_ContextCall(&PSI_G(context), &dummy, f->decl, argps); } }