X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Ffree_exp.c;h=7d17756ea4648d35bb0d683bd4b77bff922f5524;hb=35060621f2fd5079502543d17942127c1a602f72;hp=9f5361151dcc412d018b7f2a3c246c8f2ca15523;hpb=c9384515a81cb64d345b299908b2852f51bb8e6e;p=m6w6%2Fext-psi diff --git a/src/types/free_exp.c b/src/types/free_exp.c index 9f53611..7d17756 100644 --- a/src/types/free_exp.c +++ b/src/types/free_exp.c @@ -27,10 +27,10 @@ #include "data.h" #include "call.h" -struct psi_free_exp *psi_free_exp_init(const char *func, struct psi_plist *vars) +struct psi_free_exp *psi_free_exp_init(zend_string *func, struct psi_plist *vars) { - struct psi_free_exp *f = calloc(1, sizeof(*f)); - f->func = strdup(func); + struct psi_free_exp *f = pecalloc(1, sizeof(*f), 1); + f->func = zend_string_copy(func); f->vars = vars; return f; } @@ -41,10 +41,8 @@ void psi_free_exp_free(struct psi_free_exp **f_ptr) struct psi_free_exp *f = *f_ptr; *f_ptr = NULL; - if (f->token) { - free(f->token); - } - free(f->func); + psi_token_free(&f->token); + zend_string_release(f->func); psi_plist_free(f->vars); if (f->let) { free(f->let); @@ -58,7 +56,7 @@ void psi_free_exp_dump(int fd, struct psi_free_exp *call) size_t l = 0, c = psi_plist_count(call->vars); struct psi_decl_var *fvar; - dprintf(fd, "%s(", call->func); + dprintf(fd, "%s(", call->func->val); while (psi_plist_get(call->vars, l++, &fvar)) { psi_decl_var_dump(fd, fvar); if (l < c) { @@ -76,7 +74,7 @@ static inline struct psi_decl *locate_free_decl(struct psi_plist *decls, struct psi_decl *decl; while (psi_plist_get(decls, i++, &decl)) { - if (!strcmp(decl->func->var->name, f->func)) { + if (zend_string_equals(decl->func->var->name, f->func)) { return f->decl = decl; } } @@ -95,18 +93,19 @@ bool psi_free_exp_validate(struct psi_data *data, struct psi_free_exp *exp, if (!locate_free_decl(data->decls, exp)) { data->error(data, exp->token, PSI_WARNING, "Missing declaration '%s' in `free` statement" - " of implementation '%s'", exp->func, scope->impl->func->name); + " of implementation '%s'", exp->func->val, + scope->impl->func->name->val); return false; } /* now check for known vars */ - exp->let = calloc(psi_plist_count(exp->vars), sizeof(*exp->let)); + exp->let = pecalloc(psi_plist_count(exp->vars), sizeof(*exp->let), 1); for (i = 0; psi_plist_get(exp->vars, i, &free_var); ++i) { if (!psi_impl_get_decl_arg(scope->impl, free_var)) { data->error(data, free_var->token, PSI_WARNING, "Unknown variable '%s' of `free` statement" " of implementation '%s'", - free_var->name, scope->impl->func->name); + free_var->name->val, scope->impl->func->name->val); return false; }