X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fimpl_func.c;h=d1604482053fede9537f9cfef72141fa5c51d410;hb=c0873cbbe9e5a83305adbc2bbd94aede5437f33d;hp=52a8e2559b2fceb0ae4dcb30d6896843cfbd6a08;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84;p=m6w6%2Fext-psi diff --git a/src/types/impl_func.c b/src/types/impl_func.c index 52a8e25..d160448 100644 --- a/src/types/impl_func.c +++ b/src/types/impl_func.c @@ -26,12 +26,12 @@ #include "php_psi_stdinc.h" #include "data.h" -struct psi_impl_func *psi_impl_func_init(const char *name, +struct psi_impl_func *psi_impl_func_init(zend_string *name, struct psi_plist *args, struct psi_impl_type *type) { struct psi_impl_func *func = calloc(1, sizeof(*func)); - func->name = strdup(name); + func->name = zend_string_copy(name); func->args = args ? : psi_plist_init((psi_plist_dtor) psi_impl_arg_free); func->return_type = type; @@ -45,9 +45,7 @@ void psi_impl_func_free(struct psi_impl_func **f_ptr) struct psi_impl_func *f = *f_ptr; *f_ptr = NULL; - if (f->token) { - free(f->token); - } + psi_token_free(&f->token); psi_impl_type_free(&f->return_type); psi_plist_free(f->args); @@ -56,12 +54,13 @@ void psi_impl_func_free(struct psi_impl_func **f_ptr) psi_impl_arg_free(&f->vararg); } - free(f->name); + zend_string_release(f->name); free(f); } } -bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func) +bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func, + struct psi_validate_scope *scope) { int def = 0; size_t i = 0; @@ -70,7 +69,7 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func) while (psi_plist_get(func->args, i++, &iarg)) { if (iarg->def) { def = 1; - if (!psi_impl_def_val_validate(data, iarg->def, iarg->type)) { + if (!psi_impl_def_val_validate(data, iarg->def, iarg->type, scope)) { return 0; } } else if (def) { @@ -78,7 +77,7 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func) "Non-optional argument %zu '$%s' of implementation '%s'" " follows optional argument", i + 1, - iarg->var->name, func->name); + iarg->var->name->val, func->name->val); return false; } } @@ -88,7 +87,7 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func) void psi_impl_func_dump(int fd, struct psi_impl_func *func) { - dprintf(fd, "function %s(", func->name); + dprintf(fd, "function %s(", func->name->val); if (func->args) { size_t i = 0; struct psi_impl_arg *iarg; @@ -106,5 +105,5 @@ void psi_impl_func_dump(int fd, struct psi_impl_func *func) } } dprintf(fd, ") : %s%s", func->return_reference ? "&" : "", - func->return_type->name); + func->return_type->name->val); }