projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
simplify parser through %token_class'es
[m6w6/ext-psi]
/
src
/
module.c
diff --git
a/src/module.c
b/src/module.c
index 508fdea64e5da754e3c2283423a90cef33a0187f..811d4e40429c713b3619b065fd9776f082e00ae5 100644
(file)
--- 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)
{
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);
}
}
}
}