X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Flet_func.c;h=4a61632238f4bf54e5ab84244455d6d19eee6c53;hb=fb8f7887c289ae74d6e8dd85d55ae09e6796e890;hp=468d215ae3cdf8559488e78a780fe5b32762ce6e;hpb=2fa436074ca9a5e87f39b696de832fa2188fcfc6;p=m6w6%2Fext-psi diff --git a/src/types/let_func.c b/src/types/let_func.c index 468d215..4a61632 100644 --- a/src/types/let_func.c +++ b/src/types/let_func.c @@ -35,7 +35,7 @@ struct psi_let_func *psi_let_func_init(token_t type, zend_string *name, struct psi_impl_var *var) { - struct psi_let_func *func = calloc(1, sizeof(*func)); + struct psi_let_func *func = pecalloc(1, sizeof(*func), 1); func->type = type; func->name = zend_string_copy(name); func->var = var; @@ -58,26 +58,26 @@ void psi_let_func_free(struct psi_let_func **func_ptr) } } -void psi_let_func_dump(int fd, struct psi_let_func *func, unsigned level) +void psi_let_func_dump(struct psi_dump *dump, struct psi_let_func *func, unsigned level) { - dprintf(fd, "%s(%s\t/* fqn=%s */", func->name->val, func->var->name->val, + PSI_DUMP(dump, "%s(%s\t/* fqn=%s */", func->name->val, func->var->name->val, func->var->fqn->val); if (func->inner) { size_t i = 0, count = psi_plist_count(func->inner); struct psi_let_exp *inner; - dprintf(fd, ","); + PSI_DUMP(dump, ","); ++level; while (psi_plist_get(func->inner, i++, &inner)) { - dprintf(fd, "\n"); - psi_let_exp_dump(fd, inner, level, i == count); + PSI_DUMP(dump, "\n"); + psi_let_exp_dump(dump, inner, level, i == count); } --level; - dprintf(fd, "\n"); - dprintf(fd, "%s", psi_t_indent(level)); + PSI_DUMP(dump, "\n"); + PSI_DUMP(dump, "%s", psi_t_indent(level)); } - dprintf(fd, ")"); + PSI_DUMP(dump, ")"); } static inline int validate_let_func_type(struct psi_data *data, @@ -139,6 +139,7 @@ static inline bool validate_let_func_inner(struct psi_data *data, if (name) { sub_arg = psi_decl_arg_get_by_name(sub_args, name); + zend_string_release(name); } if (!name || !sub_arg) { /* remove expr for portability with different struct members */ @@ -349,11 +350,12 @@ static void *exec_let_func_arrval(struct psi_let_exp *val, if (frame_arg->zval_ptr) { while (psi_plist_get(func->inner, i++, &inner)) { - darg_member = psi_decl_arg_get_by_name(darg_members, - psi_let_exp_get_decl_var_name(inner)); + zend_string *var_name = psi_let_exp_get_decl_var_name(inner); + darg_member = psi_decl_arg_get_by_name(darg_members, var_name); exec_let_func_arrval_inner(func, darg, darg_member, frame_arg, inner, container, frame); + zend_string_release(var_name); } } } else if (func->inner) {